Files
wordpress_docker/compose.yml
2026-02-12 18:11:52 +01:00

110 lines
2.9 KiB
YAML

services:
db:
image: mariadb:12-noble
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- ./db:/var/lib/mysql
- ./db_import:/docker-entrypoint-initdb.d
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
networks:
- backend
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru
volumes:
- ./redis:/data
networks:
- backend
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 5s
retries: 3
wordpress:
image: wordpress:latest
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- ./wp:/var/www/html
- ./config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./config/opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
- ./config/remoteip.conf:/etc/apache2/conf-enabled/remoteip.conf:ro
- ./static:/export
ports:
- ${WP_PORT:-8080}:80
restart: unless-stopped
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_PASSWORD}
- WORDPRESS_DB_NAME=${MYSQL_DATABASE}
- WORDPRESS_CONFIG_EXTRA=
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('DISALLOW_FILE_EDIT', true);
define('WP_AUTO_UPDATE_CORE', 'minor');
define('AUTOMATIC_UPDATER_DISABLED', false);
networks:
- frontend
- backend
static:
image: caddy:latest
restart: unless-stopped
volumes:
- ./static:/usr/share/caddy
ports:
- ${STATIC_PORT:-8081}:80
networks:
- frontend
backup:
build:
context: .
dockerfile: config/backup.Dockerfile
restart: unless-stopped
depends_on:
db:
condition: service_healthy
entrypoint: /bin/sh
command:
- -c
- |
echo "${BACKUP_SCHEDULE:-0 2 * * *} /usr/local/bin/backup.sh" | crontab -
echo "Backup container ready. Schedule: ${BACKUP_SCHEDULE:-0 2 * * *}"
crond -f -l 2
volumes:
- ./scripts/backup.sh:/usr/local/bin/backup.sh:ro
- ./wp:/source/wp:ro
- ./backups:/backups
environment:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- BACKUP_RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7}
networks:
- backend
networks:
frontend:
backend:
internal: true