This playbook deploys Frappe Bench using Docker Compose for containerized deployments.
- name: Deploy Frappe Bench with Docker
hosts: bench
become: true
vars:
bench_version: "latest"
bench_root: /opt/frappe-bench
docker_compose_file: "{{ bench_root }}/docker-compose.yml"
tasks:
- name: Install Docker dependencies
ansible.builtin.package:
name:
- docker.io
- docker-compose
state: present
- name: Ensure Bench directory exists
ansible.builtin.file:
path: "{{ bench_root }}"
state: directory
mode: "0755"
- name: Deploy Docker Compose configuration
ansible.builtin.copy:
dest: "{{ docker_compose_file }}"
mode: "0644"
content: |
version: '3.8'
services:
bench:
image: frappe/bench:{{ bench_version }}
container_name: frappe-bench
volumes:
- {{ bench_root }}/sites:/home/frappe/frappe-bench/sites
- {{ bench_root }}/logs:/home/frappe/frappe-bench/logs
ports:
- "8000:8000"
- "9000:9000"
environment:
- DB_HOST=db
- REDIS_CACHE=redis-cache:6379
- REDIS_QUEUE=redis-queue:6379
depends_on:
- db
- redis-cache
- redis-queue
db:
image: mariadb:10.6
container_name: frappe-db
volumes:
- {{ bench_root }}/db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=changeme
restart: unless-stopped
redis-cache:
image: redis:alpine
container_name: frappe-redis-cache
restart: unless-stopped
redis-queue:
image: redis:alpine
container_name: frappe-redis-queue
restart: unless-stopped
- name: Start Frappe Bench containers
community.docker.docker_compose:
project_src: "{{ bench_root }}"
state: present
restarted: true
- name: Verify Bench is running
ansible.builtin.command: docker ps --filter name=frappe-bench --format "{{ '{{' }} .Status {{ '}}' }}"
register: bench_status
changed_when: false
- name: Show Bench status
ansible.builtin.debug:
var: bench_status.stdout
changeme with secure database credentials using secrets management.community.docker collection is required for Docker Compose module support.