Ctrl K
ComunidadGuías…

docker-compose.yml

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
version: '3.8'

services:
  # Shared base image (OS packages + PHP + compiled Swoole/UV + Composer). It is
  # slow to build because it compiles the PHP extensions from source, so build
  # it ONCE and reuse it. The phlix service FROMs the tag produced here, so a
  # locally-built base is picked up automatically:
  #
  #   docker compose build phlix-base   # slow, but only when extensions change
  #   docker compose build phlix        # fast — reuses the base, no recompile
  #
  # Alternatively pull the published base instead of building it:
  #   docker pull ghcr.io/detain/phlix-base:latest
  phlix-base:
    build:
      context: .
      dockerfile: docker/Dockerfile.base
    image: ghcr.io/detain/phlix-base:latest
    profiles: ["build"]

  phlix:
    build:
      context: .
      dockerfile: docker/Dockerfile
    container_name: phlix-server
    # The container runs the Workerman daemon directly (no nginx, no php-fpm),
    # so the ports to publish are the ones start.php binds — 8096 (HTTP:
    # REST + SPA + static; it has ZERO WebSocket-upgrade logic) and 8097
    # (SyncPlay WebSocket — a SEPARATE plaintext listener, not a path on
    # 8096). Nothing has ever listened on 80 or 443 inside the image.
    # This file is the DEVELOPMENT stack: both mappings bind 127.0.0.1 only,
    # and the DB credentials below are fixed dev values that must never be
    # reused in a real deployment (see docker/examples/ for the hardened,
    # ${VAR:?}-gated production examples).
    ports:
      - "127.0.0.1:8096:8096"
      - "127.0.0.1:8097:8097"
    environment:
      - PHLIX_DATABASE_HOST=mysql
      - PHLIX_DATABASE_PORT=3306
      - PHLIX_DATABASE_NAME=phlix
      - PHLIX_DATABASE_USER=phlix
      - PHLIX_DATABASE_PASSWORD=phlix_secret
      # Dev stack: strict migrations OFF so a schema hiccup still boots the
      # app with the loud PHLIX-MIGRATION-FAILURE banner (images default to
      # strict; the hardened examples set =1 explicitly).
      - PHLIX_MIGRATIONS_STRICT=0
    volumes:
      - phlix_config:/var/phlix/config
      - phlix_data:/var/phlix/data
      - phlix_backups:/var/phlix/backups
      - media_library:/media
    depends_on:
      mysql:
        condition: service_healthy
    # The Phlix container's PID 1 exits 70 when a supervised program enters
    # FATAL (a total application outage), and 0 on a clean stop — see
    # docker/README.md "What the container's exit code means".
    # `unless-stopped` restarts on ANY exit, so a persistent fault becomes a
    # restart loop that re-runs the migration chain each cycle. Swap to
    # `on-failure:5` if you would rather it stay `Exited (70)` for monitoring.
    restart: unless-stopped

  mysql:
    image: mysql:8.0
    container_name: phlix-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: phlix
      MYSQL_USER: phlix
      MYSQL_PASSWORD: phlix_secret
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

volumes:
  phlix_config:
  phlix_data:
  phlix_backups:
  media_library:
  mysql_data: