Installation & Setup
Docker Deployment Guide for AcelleMail
Overview
Running AcelleMail in Docker isolates dependencies, simplifies updates, and makes scaling individual components easier.
docker-compose.yml
version: "3.9"
services:
app:
build: .
volumes:
- .:/var/www/html
depends_on: [mysql, redis]
env_file: .env
worker:
build: .
command: php artisan queue:work redis --sleep=3 --tries=3
depends_on: [mysql, redis]
env_file: .env
deploy:
replicas: 4
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- .:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
- certbot-etc:/etc/letsencrypt
depends_on: [app]
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: acellemail
MYSQL_USER: acelle
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: rootsecret
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
- redis-data:/data
volumes:
mysql-data:
redis-data:
certbot-etc:
Dockerfile (simplified)
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
libzip-dev libpng-dev libxml2-dev \
&& docker-php-ext-install pdo_mysql zip gd bcmath intl
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY . .
RUN composer install --no-dev --optimize-autoloader
First Run
docker-compose up -d
docker-compose exec app php artisan migrate --seed
docker-compose exec app php artisan storage:link
docker-compose exec app php artisan config:cache