commit 2d3ff69c6e619b473bf23cbb077c3642a78e8b15 Author: Mark Rapson Date: Sun Jul 12 16:25:08 2026 +0100 Initial diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..12ce8f1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,82 @@ +version: "3.9" + +services: + app: + build: + context: . + dockerfile: Dockerfile + container_name: signage-app + restart: unless-stopped + ports: + - "3000:3000" + environment: + NODE_ENV: production + PORT: 3000 + + DB_HOST: mysql + DB_PORT: 3306 + DB_NAME: signage + DB_USER: signage_user + DB_PASSWORD: signage_password + + REDIS_URL: redis://redis:6379 + UPLOAD_DIR: /app/uploads + volumes: + - uploads:/app/uploads + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_healthy + networks: + - signage-net + + mysql: + image: mysql:8.4 + container_name: signage-mysql + restart: unless-stopped + ports: + - "3306:3306" + environment: + MYSQL_DATABASE: signage + MYSQL_USER: signage_user + MYSQL_PASSWORD: signage_password + MYSQL_ROOT_PASSWORD: root_password + command: + - --default-authentication-plugin=mysql_native_password + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + volumes: + - mysql_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot_password"] + interval: 10s + timeout: 5s + retries: 10 + networks: + - signage-net + + redis: + image: redis:7-alpine + container_name: signage-redis + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 10 + networks: + - signage-net + +volumes: + mysql_data: + redis_data: + uploads: + +networks: + signage-net: + driver: bridge