chore: initialize dockerized wordpress stack

This commit is contained in:
2025-11-16 10:42:14 +08:00
commit 654956a154
6 changed files with 246 additions and 0 deletions

99
docker-compose.yaml Normal file
View File

@@ -0,0 +1,99 @@
services:
# MySQL Service
db:
image: mysql:latest
container_name: digitechflow_db
volumes:
- ./db_data:/var/lib/mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- wordpress_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 10
# WordPress PHP-FPM Service
wordpress:
depends_on:
db:
condition: service_healthy
image: wordpress:php8.3-fpm
container_name: digitechflow_wordpress
restart: unless-stopped
volumes:
- ./wordpress_data:/var/www/html
- ./wordpress.ini:/usr/local/etc/php/conf.d/wordpress.ini
expose:
- "9000"
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
WORDPRESS_REDIS_HOST: ${WORDPRESS_REDIS_HOST}
networks:
- wordpress_network
extra_hosts:
- "host.docker.internal:host-gateway" # For crowdsec plugin to connect to host crowdsec api
# Nginx front-end for WordPress (Traefik faces this container)
wordpress_nginx:
depends_on:
wordpress:
condition: service_started
image: nginx:latest
container_name: digitechflow_nginx
restart: unless-stopped
volumes:
- ./wordpress_data:/var/www/html:ro
- ./config/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- wordpress_network
- traefik_default
labels:
- "traefik.enable=true"
- "traefik.http.routers.digitechflow.rule=Host(`digitechflow.com`)"
- "traefik.http.routers.digitechflow.entrypoints=websecure"
- "traefik.http.routers.digitechflow.middlewares=crowdsec@file,retry-fast@file"
- "traefik.http.routers.digitechflow.tls.certresolver=letsencrypt"
- "traefik.http.services.digitechflow.loadbalancer.server.port=80"
- "traefik.http.services.digitechflow.loadbalancer.serversTransport=fast-upstreams@file"
- "traefik.docker.network=traefik_default"
redis:
image: valkey/valkey:latest
container_name: digitechflow_valkey
restart: unless-stopped
volumes:
- ./redis_data:/data
- ./config/redis.conf:/usr/local/etc/redis/redis.conf:ro
command: ["valkey-server", "/usr/local/etc/redis/redis.conf"]
networks:
- wordpress_network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# Volumes for persistent data
volumes:
db_data:
wordpress_data:
redis_data:
# Network for communication between services
networks:
wordpress_network:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/16
gateway: 172.21.0.1
traefik_default:
external: true # Assumes Traefik uses an existing network