# ============================================================================= # ©AngelaMos | 2026 # compose.yml # ============================================================================= # Production compose: nginx serves the built React app and proxies /api to the # tlsfp backend. The backend lives under the `backend` profile and is not # started by default until the serve command is implemented. # docker compose --env-file .env up # docker compose --env-file .env --profile backend up # docker compose -f compose.yml -f cloudflared.compose.yml up # ============================================================================= name: ${APP_NAME:-tlsfp} services: nginx: build: context: . dockerfile: infra/docker/vite.prod args: - VITE_API_URL=${VITE_API_URL:-/api} - VITE_APP_TITLE=${VITE_APP_TITLE:-JA3/JA4 TLS Fingerprinting} container_name: ${APP_NAME:-tlsfp}-nginx ports: - "${NGINX_HOST_PORT:-11790}:80" networks: - app deploy: resources: limits: cpus: '1.0' memory: 256M reservations: cpus: '0.25' memory: 64M restart: unless-stopped tlsfp: build: context: . dockerfile: infra/docker/tlsfp.prod container_name: ${APP_NAME:-tlsfp}-backend command: ["serve", "0.0.0.0:8080"] profiles: - backend environment: - RUST_LOG=${RUST_LOG:-tlsfp=info} volumes: - tlsfp_data:/data networks: - app deploy: resources: limits: cpus: '1.0' memory: 256M reservations: cpus: '0.25' memory: 64M restart: unless-stopped networks: app: driver: bridge volumes: tlsfp_data: