This guide provides a full Ansible playbook to deploy Librebooking with Docker Compose on Debian 10+, Ubuntu LTS, and RHEL 9+ compatible hosts.
- name: Deploy Librebooking
hosts: librebooking
become: true
vars:
app_root: /opt/librebooking
app_port: 8080
db_root_password: "change-me-to-secure-password"
db_password: "change-me-to-secure-password"
tasks:
- name: Install Docker on Debian/Ubuntu
apt:
name:
- docker.io
- docker-compose-plugin
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install Docker on RHEL family
dnf:
name:
- docker
- docker-compose-plugin
state: present
when: ansible_os_family == "RedHat"
- name: Enable and start Docker
service:
name: docker
state: started
enabled: true
- name: Create application directory
file:
path: "{{ app_root }}"
state: directory
mode: "0755"
- name: Write Docker Compose file
copy:
dest: "{{ app_root }}/docker-compose.yml"
mode: "0644"
content: |
services:
app:
image: librebooking/librebooking:latest
restart: unless-stopped
ports:
- "{{ app_port }}:80"
env_file:
- .env
depends_on:
- db
db:
image: mariadb:10.11
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD={{ db_root_password }}
- MYSQL_DATABASE=librebooking
- MYSQL_USER=librebooking
- MYSQL_PASSWORD={{ db_password }}
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
- name: Create environment file
copy:
dest: "{{ app_root }}/.env"
mode: "0644"
content: |
LB_DB_HOST=db
LB_DB_NAME=librebooking
LB_DB_USER=librebooking
LB_DB_PASSWORD={{ db_password }}
LB_APP_URL=http://localhost:{{ app_port }}
- name: Start application stack
command: docker compose up -d
args:
chdir: "{{ app_root }}"
## Notes
- Debian baseline: Debian 10 works, but Debian 11/12 is preferred for package freshness.
- Ubuntu hint: Ubuntu 22.04+ is recommended for long-term maintenance.
- RHEL baseline: use RHEL 9+ compatible systems and enabled repositories.
- Replace the container image with the upstream project-recommended image and tag for production.
---
**Any questions?**
Feel free to contact us. Find all contact information on our [contact page](/contact).