services: webui: image: ${PULSE_SIGNAGE_IMAGE:-git.lzstealth.com/lzstealth/pulse-signage:latest} container_name: signage-webui restart: unless-stopped ports: - "3000:3000" environment: NODE_ENV: ${NODE_ENV:-production} WEB_PORT: ${WEB_PORT:-3000} DB_HOST: ${DB_HOST:-mysql} DB_PORT: ${DB_PORT:-3306} DB_NAME: ${DB_NAME:-signage} DB_USER: ${DB_USER:-signage_user} DB_PASSWORD: ${DB_PASSWORD:-signage_password} PLAYER_INTERNAL_BASE_URL: ${PLAYER_INTERNAL_BASE_URL:-http://player:3001} PLAYER_PUBLIC_BASE_URL: ${PLAYER_PUBLIC_BASE_URL:-http://localhost:3001} UPLOAD_DIR: ${UPLOAD_DIR:-/app/uploads} SESSION_MAX_AGE_DAYS: ${SESSION_MAX_AGE_DAYS:-14} DASHBOARD_REFRESH_INTERVAL_MS: ${DASHBOARD_REFRESH_INTERVAL_MS:-2000} DEFAULT_ADMIN_USERNAME: ${DEFAULT_ADMIN_USERNAME:-admin} DEFAULT_ADMIN_NAME: ${DEFAULT_ADMIN_NAME:-Admin} DEFAULT_ADMIN_PASSWORD: ${DEFAULT_ADMIN_PASSWORD:-admin} PASSWORD_HASH_ITERATIONS: ${PASSWORD_HASH_ITERATIONS:-310000} volumes: - uploads:/app/uploads command: ["npm", "run", "start:webui"] depends_on: mysql: condition: service_healthy networks: - pulse_signage player: image: ${PULSE_SIGNAGE_IMAGE:-git.lzstealth.com/lzstealth/pulse-signage:latest} container_name: signage-player restart: unless-stopped ports: - "3001:3001" environment: NODE_ENV: ${NODE_ENV:-production} PLAYER_PORT: ${PLAYER_PORT:-3001} DB_HOST: ${DB_HOST:-mysql} DB_PORT: ${DB_PORT:-3306} DB_NAME: ${DB_NAME:-signage} DB_USER: ${DB_USER:-signage_user} DB_PASSWORD: ${DB_PASSWORD:-signage_password} UPLOAD_DIR: ${UPLOAD_DIR:-/app/uploads} volumes: - uploads:/app/uploads command: ["npm", "run", "start:player"] depends_on: mysql: condition: service_healthy networks: - pulse_signage mysql: image: mysql:8.4 container_name: signage-mysql restart: unless-stopped ports: - "3306:3306" environment: MYSQL_DATABASE: ${DB_NAME:-signage} MYSQL_USER: ${DB_USER:-signage_user} MYSQL_PASSWORD: ${DB_PASSWORD:-signage_password} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_password} command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost -uroot -p$$MYSQL_ROOT_PASSWORD"] interval: 10s timeout: 5s retries: 10 networks: - pulse_signage volumes: mysql_data: uploads: networks: pulse_signage: name: pulse_signage external: false