This guide provides a full Ansible playbook to deploy Mailtrain with Docker Compose on Debian 10+, Ubuntu LTS, and RHEL 9+ compatible hosts.
mailtrain.example.com)- name: Deploy Mailtrain
hosts: mailtrain
become: true
vars:
app_root: /opt/mailtrain
app_port: 8080
db_password: "ChangeMe123!"
db_root_password: "RootChangeMe123!"
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:
mailtrain:
image: mailtrain/mailtrain:latest
container_name: mailtrain
restart: unless-stopped
ports:
- "{{ app_port }}:8080"
environment:
- NODE_ENV=production
- MYSQL_HOST=db
- MYSQL_USER=mailtrain
- MYSQL_PASSWORD={{ db_password }}
- MYSQL_DATABASE=mailtrain
- REDIS_HOST=redis
- MONGODB_HOST=mongodb
volumes:
- mailtrain_data:/opt/mailtrain/files
depends_on:
- db
- redis
- mongodb
db:
image: mariadb:10.11
container_name: mailtrain-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD={{ db_root_password }}
- MYSQL_DATABASE=mailtrain
- MYSQL_USER=mailtrain
- MYSQL_PASSWORD={{ db_password }}
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:7-alpine
container_name: mailtrain-redis
restart: unless-stopped
volumes:
- redis_data:/data
mongodb:
image: mongo:6
container_name: mailtrain-mongodb
restart: unless-stopped
volumes:
- mongodb_data:/data/db
volumes:
mailtrain_data:
db_data:
redis_data:
mongodb_data:
- name: Start application stack
command: docker compose up -d
args:
chdir: "{{ app_root }}"
mailtrain/mailtrain on Docker Hubadmin / test (change immediately after first login!)http://your-server:8080admin / testAny questions?
Feel free to contact us. Find all contact information on our contact page.