services: postgres: image: postgres:17-bookworm profiles: [local-db] environment: POSTGRES_DB: ${XYMEDIA_POSTGRES_DATABASE} POSTGRES_USER: ${XYMEDIA_POSTGRES_USER} POSTGRES_PASSWORD_FILE: /run/secrets/xymedia-postgres-password secrets: [xymedia-postgres-password] volumes: ["${XYMEDIA_INSTALL_DIR}/data/postgres:/var/lib/postgresql/data"] healthcheck: test: [CMD-SHELL, "pg_isready -U ${XYMEDIA_POSTGRES_USER} -d ${XYMEDIA_POSTGRES_DATABASE}"] interval: 5s timeout: 5s retries: 24 app: image: ${XYMEDIA_BOOTSTRAP_IMAGE:-git.keeper.work/admin/xymediavault-bootstrap:1} entrypoint: [/usr/bin/tini, --] command: [/releases/current/bin/xymedia-supervisor, --releases-dir, /releases, --config, /app/config.yaml] environment: XYMEDIA_POSTGRES_MODE: external XYMEDIA_COMPONENT_RUNTIME: local XYMEDIA_WEB_DIR: /releases/current/web/dist XYMEDIA_XIAOYA_CONTROLLER_KEY_FILE: /run/secrets/xiaoya-controller-token ports: - "${XYMEDIA_API_PORT:-18080}:8080" - "${XYMEDIA_WEBDAV_PORT:-18081}:8081" - "${XYMEDIA_TVBOX_PORT:-18082}:8082" volumes: - "${XYMEDIA_INSTALL_DIR}/data:/app/data" - "${XYMEDIA_INSTALL_DIR}/components:/app/components" - "${XYMEDIA_INSTALL_DIR}/releases:/releases" - "${XYMEDIA_INSTALL_DIR}/config.yaml:/app/config.yaml:ro" secrets: [xymedia-postgres-password, xiaoya-controller-token] restart: unless-stopped healthcheck: test: [CMD, /releases/current/bin/xymediavault, healthcheck, --url, http://127.0.0.1:8080/api/health] xiaoya-alist: image: xiaoyaliu/alist:latest profiles: [xiaoya] container_name: xiaoya-alist ports: ["5678:80", "2345:2345", "2346:2346"] volumes: - "${XYMEDIA_INSTALL_DIR}/xiaoya:/data" - "${XYMEDIA_INSTALL_DIR}/xiaoya/data:/www/data" restart: unless-stopped xiaoya-control: image: ${XYMEDIA_BOOTSTRAP_IMAGE:-git.keeper.work/admin/xymediavault-bootstrap:1} profiles: [xiaoya-control] container_name: xymedia-edge-controller command: [/releases/current/bin/xymedia-edge, controller] environment: XYMEDIA_CONTROLLER_TOKEN_FILE: /run/secrets/xiaoya-controller-token XYMEDIA_XIAOYA_CONTAINER: xiaoya-alist XYMEDIA_XIAOYA_DATA_DIR: /xiaoya XYMEDIA_ALIYUN_TOKEN_URL: http://aliyuntvtoken:34256 XYMEDIA_CONTROLLER_ADDR: :19090 ports: ["127.0.0.1:19090:19090"] volumes: - "${XYMEDIA_INSTALL_DIR}/xiaoya:/xiaoya" - "${XYMEDIA_INSTALL_DIR}/releases:/releases:ro" - /var/run/docker.sock:/var/run/docker.sock secrets: [xiaoya-controller-token] restart: unless-stopped aliyuntvtoken: image: ddsderek/xiaoya-glue:python profiles: [xiaoya] command: [python, /app/alitoken2.py, --qrcode_mode, web] restart: unless-stopped app-migrate: image: ${XYMEDIA_BOOTSTRAP_IMAGE:-git.keeper.work/admin/xymediavault-bootstrap:1} entrypoint: [/releases/current/bin/xymediavault] command: [migrate, --new, --config, /app/config.yaml] environment: XYMEDIA_POSTGRES_MODE: external XYMEDIA_EXTERNAL_MIGRATION_CONFIRM: ${XYMEDIA_EXTERNAL_MIGRATION_CONFIRM:-YES} volumes: - "${XYMEDIA_INSTALL_DIR}/data:/app/data" - "${XYMEDIA_INSTALL_DIR}/releases:/releases:ro" - "${XYMEDIA_INSTALL_DIR}/config.yaml:/app/config.yaml:ro" secrets: [xymedia-postgres-password] profiles: [migration] restart: "no" secrets: xymedia-postgres-password: file: ${XYMEDIA_INSTALL_DIR}/secrets/xymedia-postgres-password xiaoya-controller-token: file: ${XYMEDIA_INSTALL_DIR}/secrets/xiaoya-controller-token