services: backend: build: context: ./backend dockerfile: Dockerfile container_name: oci-agent-backend restart: unless-stopped environment: - APP_SECRET=${APP_SECRET:?Set APP_SECRET in .env (openssl rand -hex 64)} - JWT_EXPIRY_HOURS=${JWT_EXPIRY_HOURS:-12} - DATA_DIR=/data - CORS_ORIGINS=${CORS_ORIGINS:-} - TZ=${TZ:-America/Sao_Paulo} - OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=True volumes: - agent-data:/data networks: - agent-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"] interval: 30s timeout: 10s retries: 3 logging: driver: "json-file" options: max-size: "10m" max-file: "3" deploy: resources: limits: memory: 4G frontend: image: nginx:alpine container_name: oci-agent-frontend restart: unless-stopped environment: - TZ=${TZ:-America/Sao_Paulo} volumes: - ./frontend-react/dist:/usr/share/nginx/html/app:ro - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro ports: - "${PORT:-8080}:80" depends_on: - backend networks: - agent-net logging: driver: "json-file" options: max-size: "5m" max-file: "3" deploy: resources: limits: memory: 512M volumes: agent-data: driver: local networks: agent-net: driver: bridge