services: app: build: context: . dockerfile: Dockerfile ports: - "${PORT}:${PORT}" environment: - ENV=${ENV} - HOST=${HOST} - PORT=${PORT} - JWT_SECRET=${JWT_SECRET} - CLIENT_URL=${CLIENT_URL} - REDIS_URL=${REDIS_URL} - DB_HOST=${DB_HOST} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - DB_PORT=${DB_PORT} - DB_NAME=${DB_NAME} - ALLOW_DIAGONAL_MOVEMENT=${ALLOW_DIAGONAL_MOVEMENT} - DEFAULT_CHARACTER_ZONE=${DEFAULT_CHARACTER_ZONE} - DEFAULT_CHARACTER_POS_X=${DEFAULT_CHARACTER_POS_X} - DEFAULT_CHARACTER_POS_Y=${DEFAULT_CHARACTER_POS_Y} - SMTP_HOST=${SMTP_HOST} - SMTP_PORT=${SMTP_PORT} - SMTP_USER=${SMTP_USER} - SMTP_PASSWORD=${SMTP_PASSWORD} volumes: - app-public:/user/src/app/public - app-logs:/user/src/app/logs depends_on: - mariadb - redis restart: unless-stopped networks: - app-network labels: - "traefik.enable=true" - "traefik.http.routers.app.rule=Host(`${HOST}`)" - "traefik.http.routers.app.entrypoints=websecure" - "traefik.http.routers.app.tls.certresolver=le" - "traefik.http.services.app.loadbalancer.server.port=${PORT}" - "traefik.http.routers.app.middlewares=websocket" traefik: image: traefik:v2.10 ports: - "80:80" - "443:443" - "8080:8080" volumes: - traefik_data:/data - ./traefik.toml:/etc/traefik/traefik.toml restart: unless-stopped networks: - app-network mariadb: image: mariadb:lts environment: - MARIADB_USER=${DB_USER} - MARIADB_PASSWORD=${DB_PASS} - MARIADB_DATABASE=${DB_NAME} - MARIADB_RANDOM_ROOT_PASSWORD=yes volumes: - mariadb-data:/var/lib/mysql ports: - "${DB_PORT}:3306" restart: unless-stopped networks: - app-network command: [ 'mariadbd', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ] redis: image: redis:7.4.2-alpine command: redis-server --appendonly yes volumes: - redis-data:/data ports: - "6379:6379" restart: unless-stopped networks: - app-network networks: app-network: driver: bridge volumes: app-public: app-logs: mariadb-data: redis-data: traefik_data: