services: apkx-web: build: context: . image: apkx-web:latest container_name: apkx-web ports: - "${PORT:-9090}:${PORT:-9090}" environment: - APKX_ROOT=/app - APKX_UPLOAD_DIR=${APKX_UPLOAD_DIR:-/app/web-data/uploads} - APKX_REPORTS_DIR=${APKX_REPORTS_DIR:-/app/web-data/reports} - APKX_DOWNLOAD_DIR=${APKX_DOWNLOAD_DIR:-/app/web-data/downloads} - APKX_PATTERNS_PATH=${APKX_PATTERNS_PATH:-/app/config/regexes.yaml} - PORT=${PORT:-9090} # Optional storage via Cloudflare R2 - USE_R2_STORAGE=${USE_R2_STORAGE:-false} - R2_BUCKET_NAME=${R2_BUCKET_NAME} - R2_ACCOUNT_ID=${R2_ACCOUNT_ID} - R2_ACCESS_KEY_ID=${R2_ACCESS_KEY_ID} - R2_SECRET_KEY=${R2_SECRET_KEY} - R2_PUBLIC_URL=${R2_PUBLIC_URL} # iOS keychain passphrase - IPATOOL_KEYCHAIN_PASSPHRASE=${IPATOOL_KEYCHAIN_PASSPHRASE} # iOS authentication (for automatic authentication) - IPATOOL_EMAIL=${IPATOOL_EMAIL} - IPATOOL_PASSWORD=${IPATOOL_PASSWORD} # Authentication settings - APKX_AUTH_ENABLED=${APKX_AUTH_ENABLED:-false} - APKX_AUTH_USERNAME=${APKX_AUTH_USERNAME:-admin} - APKX_AUTH_PASSWORD=${APKX_AUTH_PASSWORD:-admin123} - APKX_SESSION_SECRET=${APKX_SESSION_SECRET} # Discord webhook - DISCORD_WEBHOOK=${DISCORD_WEBHOOK} volumes: - apkx_uploads:/app/web-data/uploads - apkx_reports:/app/web-data/reports - apkx_downloads:/app/web-data/downloads # Provide your `config/regexes.yaml` from the repo or a Dokploy Config - ./config:/app/config:ro # Persist ipatool authentication data - ipatool_config:/root/.ipatool restart: unless-stopped # Only add this if you want to use Traefik labels: - traefik.enable=true - traefik.http.routers.apkx.rule=Host(`{APKX_DOMAIN}`) - traefik.http.routers.apkx.entrypoints=web,websecure - traefik.http.routers.apkx.tls=true - traefik.http.routers.apkx.tls.certresolver=letsencrypt - traefik.http.services.apkx.loadbalancer.server.port=9090 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9090/"] interval: 30s timeout: 10s retries: 3 start_period: 40s volumes: apkx_uploads: apkx_reports: apkx_downloads: ipatool_config: