services: postgres: image: postgres:17-bookworm container_name: xymedia-postgres 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} container_name: xymedia-app 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: ${XYMEDIA_XIAOYA_CONTAINER:-xymedia-xiaoya} ports: ["5678:80", "2345:2345", "2346:2346"] volumes: - "${XYMEDIA_XIAOYA_DATA_DIR:-${XYMEDIA_INSTALL_DIR}/xiaoya}:/data" - "${XYMEDIA_XIAOYA_DATA_DIR:-${XYMEDIA_INSTALL_DIR}/xiaoya}/data:/www/data" restart: unless-stopped xiaoya-control: image: debian:bookworm-slim profiles: [xiaoya-control] container_name: xymedia-controller entrypoint: [/controller/xymedia-edge] command: [controller] environment: XYMEDIA_CONTROLLER_TOKEN_FILE: /run/secrets/xiaoya-controller-token XYMEDIA_XIAOYA_CONTAINER: ${XYMEDIA_XIAOYA_CONTAINER:-xymedia-xiaoya} XYMEDIA_XIAOYA_DATA_DIR: /xiaoya XYMEDIA_ALIYUN_OPEN_TOKEN_URL: http://xymedia-aliyuntvtoken:34256 XYMEDIA_CONTROLLER_ADDR: "${XYMEDIA_CONTROLLER_BIND_ADDRESS:-0.0.0.0}:${XYMEDIA_CONTROLLER_PORT:-19090}" XYMEDIA_HOST_ADDRESSES_FILE: /etc/xymedia/config/XYMEDIA_HOST_ADDRESSES XYMEDIA_HOST_ADDRESSES: ${XYMEDIA_HOST_ADDRESSES:-} ports: ["${XYMEDIA_CONTROLLER_BIND_ADDRESS:-0.0.0.0}:${XYMEDIA_CONTROLLER_PORT:-19090}:${XYMEDIA_CONTROLLER_PORT:-19090}"] volumes: - "${XYMEDIA_XIAOYA_DATA_DIR:-${XYMEDIA_INSTALL_DIR}/xiaoya}:/xiaoya" - "${XYMEDIA_INSTALL_DIR}/config:/etc/xymedia/config:ro" - "${XYMEDIA_INSTALL_DIR}/controller:/controller:ro" - /var/run/docker.sock:/var/run/docker.sock secrets: [xiaoya-controller-token] restart: unless-stopped aliyuntvtoken: image: ddsderek/xiaoya-glue:python container_name: xymedia-aliyuntvtoken profiles: [xiaoya] command: [python, /aliyuntvtoken/alitoken2.py, --qrcode_mode, web] restart: unless-stopped app-migrate: # Ephemeral migration runs receive a unique xymedia-app-migrate-* name from install.sh. 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