Capistrano is typically executed from a control/deployment node, not directly on app servers.
This guide installs Capistrano on a deploy node and prepares target hosts.
- name: Install Capistrano on Debian deploy node
hosts: capistrano_debian
become: true
tasks:
- name: Install Ruby and dependencies
ansible.builtin.apt:
update_cache: true
name:
- ruby-full
- ruby-dev
- build-essential
- git
state: present
- name: Install Capistrano gem
community.general.gem:
name: capistrano
state: present
- name: Verify Capistrano installation
ansible.builtin.command: cap --version
changed_when: false
- name: Install Capistrano on RHEL deploy node
hosts: capistrano_rhel
become: true
tasks:
- name: Install Ruby and dependencies
ansible.builtin.dnf:
name:
- ruby
- ruby-devel
- gcc
- make
- git
- redhat-rpm-config
state: present
- name: Install Capistrano gem
community.general.gem:
name: capistrano
state: present
- name: Verify Capistrano installation
ansible.builtin.command: cap --version
changed_when: false
- name: Prepare application servers for Capistrano deployments
hosts: app_servers
become: true
vars:
deploy_user: deploy
deploy_group: deploy
deploy_path: /var/www/myapp
tasks:
- name: Ensure deploy group exists
ansible.builtin.group:
name: "{{ deploy_group }}"
state: present
- name: Ensure deploy user exists
ansible.builtin.user:
name: "{{ deploy_user }}"
group: "{{ deploy_group }}"
shell: /bin/bash
create_home: true
- name: Ensure deploy path exists
ansible.builtin.file:
path: "{{ deploy_path }}"
state: directory
owner: "{{ deploy_user }}"
group: "{{ deploy_group }}"
mode: "0755"
- name: Ensure shared and releases directories exist
ansible.builtin.file:
path: "{{ deploy_path }}/{{ item }}"
state: directory
owner: "{{ deploy_user }}"
group: "{{ deploy_group }}"
mode: "0755"
loop:
- shared
- releases
- name: Ensure deploy user can run symlink update commands
ansible.builtin.command: test -w {{ deploy_path }}
changed_when: false
become_user: "{{ deploy_user }}"
ansible-playbook -i inventory.ini capistrano-install.yml
capistrano_debian inventory group for Ubuntu deploy nodes.bundle install.