Simplify Docker Compose to single-file architecture
- Convert multi-file overlay approach to single docker-compose.yml - Use environment variables for dev/production differences - Remove complex network configuration conflicts - Align with framework principles: simplicity over complexity - Production config via .env.production file Benefits: - No more network subnet conflicts - Single source of truth - Framework-compliant architecture - Easier maintenance and debugging Related: #19 Docker network conflict resolution
This commit is contained in:
@@ -16,20 +16,34 @@ services:
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
start_period: ${HEALTHCHECK_START_PERIOD:-10s}
|
||||
logging:
|
||||
driver: "${LOG_DRIVER:-local}"
|
||||
options:
|
||||
max-size: "${LOG_MAX_SIZE:-5m}"
|
||||
max-file: "${LOG_MAX_FILE:-2}"
|
||||
labels: "${LOG_LABELS:-}"
|
||||
volumes:
|
||||
- ./:/var/www/html:cached
|
||||
- ./:/var/www/html:${VOLUME_MODE:-cached}
|
||||
#- ./ssl:/etc/nginx/ssl:ro # SSL-Zertifikate mounten
|
||||
- ./ssl:/var/www/ssl:ro
|
||||
depends_on:
|
||||
php:
|
||||
condition: service_started
|
||||
restart: unless-stopped
|
||||
restart: ${RESTART_POLICY:-unless-stopped}
|
||||
networks:
|
||||
- frontend
|
||||
- backend
|
||||
env_file:
|
||||
- .env
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: ${WEB_MEMORY_LIMIT:-256M}
|
||||
cpus: ${WEB_CPU_LIMIT:-0.5}
|
||||
reservations:
|
||||
memory: ${WEB_MEMORY_RESERVATION:-128M}
|
||||
cpus: ${WEB_CPU_RESERVATION:-0.25}
|
||||
|
||||
php:
|
||||
container_name: php
|
||||
@@ -39,67 +53,92 @@ services:
|
||||
args:
|
||||
- ENV=${APP_ENV:-dev}
|
||||
- COMPOSER_INSTALL_FLAGS=${COMPOSER_INSTALL_FLAGS:---no-scripts --no-autoloader}
|
||||
user: "1000:1000"
|
||||
user: "${PHP_USER:-1000:1000}"
|
||||
logging:
|
||||
driver: "local"
|
||||
driver: "${LOG_DRIVER:-local}"
|
||||
options:
|
||||
max-size: "5m"
|
||||
max-file: "2"
|
||||
max-size: "${LOG_MAX_SIZE:-5m}"
|
||||
max-file: "${LOG_MAX_FILE:-2}"
|
||||
labels: "${LOG_LABELS:-}"
|
||||
volumes:
|
||||
# Shared Volume für Composer-Cache über Container-Neustarts hinweg
|
||||
- composer-cache:/root/.composer/cache
|
||||
# Bindet das Projektverzeichnis für Produktivbetrieb ein
|
||||
#- project-data:/var/www/html:cached
|
||||
# Variante mit mounting:
|
||||
- ./:/var/www/html:cached
|
||||
- ./:/var/www/html:${VOLUME_MODE:-cached}
|
||||
# Verhindert Überschreiben der Vendor-Verzeichnisse
|
||||
#- /var/www/html/vendor
|
||||
# Storage-Verzeichnisse als Docker-Volumes (keine Host-Mounts)
|
||||
- storage-data:/var/www/html/storage:rw
|
||||
- var-data:/var/www/html/var:rw
|
||||
environment:
|
||||
PHP_IDE_CONFIG: "serverName=docker"
|
||||
PHP_IDE_CONFIG: "${PHP_IDE_CONFIG:-serverName=docker}"
|
||||
APP_ENV: ${APP_ENV:-development}
|
||||
APP_DEBUG: ${APP_DEBUG:-true}
|
||||
XDEBUG_MODE: ${XDEBUG_MODE:-debug}
|
||||
healthcheck:
|
||||
test: [ "CMD", "php", "-v" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
restart: unless-stopped
|
||||
restart: ${RESTART_POLICY:-unless-stopped}
|
||||
networks:
|
||||
- backend
|
||||
- cache
|
||||
env_file:
|
||||
- .env
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: ${PHP_MEMORY_LIMIT:-512M}
|
||||
cpus: ${PHP_CPU_LIMIT:-1.0}
|
||||
reservations:
|
||||
memory: ${PHP_MEMORY_RESERVATION:-256M}
|
||||
cpus: ${PHP_CPU_RESERVATION:-0.5}
|
||||
|
||||
db:
|
||||
container_name: db
|
||||
image: mariadb:latest
|
||||
restart: unless-stopped
|
||||
restart: ${RESTART_POLICY:-unless-stopped}
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-StartRoot2024!}
|
||||
MYSQL_DATABASE: ${DB_DATABASE:-michaelschiemer}
|
||||
MYSQL_USER: ${DB_USERNAME:-mdb-user}
|
||||
MYSQL_PASSWORD: ${DB_PASSWORD:-StartSimple2024!}
|
||||
ports:
|
||||
- "33060:3306"
|
||||
- "${DB_PORT:-33060}:3306"
|
||||
volumes:
|
||||
- db_data:/var/lib/mysql
|
||||
- "${DB_CONFIG_PATH:-./docker/mysql/conf.d}:/etc/mysql/conf.d:ro"
|
||||
healthcheck:
|
||||
test: [ "CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "-u", "root", "-p${DB_ROOT_PASSWORD:-StartRoot2024!}" ]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
start_period: 60s
|
||||
logging:
|
||||
driver: "${LOG_DRIVER:-local}"
|
||||
options:
|
||||
max-size: "${LOG_MAX_SIZE:-5m}"
|
||||
max-file: "${LOG_MAX_FILE:-2}"
|
||||
labels: "${LOG_LABELS:-}"
|
||||
networks:
|
||||
- backend
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: ${DB_MEMORY_LIMIT:-1G}
|
||||
cpus: ${DB_CPU_LIMIT:-1.0}
|
||||
reservations:
|
||||
memory: ${DB_MEMORY_RESERVATION:-512M}
|
||||
cpus: ${DB_CPU_RESERVATION:-0.5}
|
||||
|
||||
redis:
|
||||
container_name: redis
|
||||
image: redis:7-alpine
|
||||
volumes:
|
||||
- ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
|
||||
- "${REDIS_CONFIG_PATH:-./docker/redis/redis.conf}:/usr/local/etc/redis/redis.conf:ro"
|
||||
- redis_data:/data
|
||||
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
|
||||
healthcheck:
|
||||
@@ -107,11 +146,26 @@ services:
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
restart: unless-stopped
|
||||
start_period: 30s
|
||||
restart: ${RESTART_POLICY:-unless-stopped}
|
||||
logging:
|
||||
driver: "${LOG_DRIVER:-local}"
|
||||
options:
|
||||
max-size: "${LOG_MAX_SIZE:-5m}"
|
||||
max-file: "${LOG_MAX_FILE:-2}"
|
||||
labels: "${LOG_LABELS:-}"
|
||||
networks:
|
||||
- cache
|
||||
env_file:
|
||||
- .env
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: ${REDIS_MEMORY_LIMIT:-256M}
|
||||
cpus: ${REDIS_CPU_LIMIT:-0.5}
|
||||
reservations:
|
||||
memory: ${REDIS_MEMORY_RESERVATION:-128M}
|
||||
cpus: ${REDIS_CPU_RESERVATION:-0.25}
|
||||
|
||||
queue-worker:
|
||||
container_name: queue-worker
|
||||
@@ -169,8 +223,10 @@ networks:
|
||||
driver: bridge
|
||||
backend:
|
||||
driver: bridge
|
||||
internal: ${NETWORK_BACKEND_INTERNAL:-false}
|
||||
cache:
|
||||
driver: bridge
|
||||
internal: ${NETWORK_CACHE_INTERNAL:-false}
|
||||
|
||||
volumes:
|
||||
redis_data:
|
||||
|
||||
Reference in New Issue
Block a user