# The frontend on the dev server. `make dev-server-frontend`. # # docker compose --env-file backend/.env -f docker-compose-dev.frontend.yml pull # docker compose --env-file backend/.env -f docker-compose-dev.frontend.yml up -d # # Start `docker-compose-dev.yml` first: this joins the network it creates, and # refuses to start otherwise (`external: true`) rather than coming up healthy # with nothing behind it. # # `PUBLIC_*` are what the console tells the *browser* to call, so they have to # be the public hostnames rather than container names. They are read when the # container starts (#1544), so the image is the published one and a change is a # restart. services: frontend: image: ghcr.io/vstorm-co/agenticos-frontend:${AGENTICOS_VERSION:-edge} environment: # Server-side rendering and the route handlers proxy over the compose # network, so these are container names rather than public URLs. - NODE_ENV=production - BACKEND_URL=http://app:8000 - PUBLIC_API_URL=${PUBLIC_API_URL:?PUBLIC_API_URL is required, e.g. https://dev-api.example.com} - PUBLIC_WS_URL=${PUBLIC_WS_URL:?PUBLIC_WS_URL is required, e.g. wss://dev-api.example.com} - PUBLIC_SITE_URL=${PUBLIC_SITE_URL:?PUBLIC_SITE_URL is required, e.g. https://dev.example.com} # Where artifact pages are framed from, when not the API origin above. - ARTIFACT_ORIGIN=${ARTIFACT_ORIGIN:-} - CHAT_MAX_UPLOAD_SIZE_MB=${CHAT_MAX_UPLOAD_SIZE_MB:-10} - DIAGNOSTICS_ENABLED=${DIAGNOSTICS_ENABLED:-true} - DIAGNOSTICS_PUBLIC_URL=${DIAGNOSTICS_PUBLIC_URL:-https://analytics-agenticos.testapp.ovh} - OAUTH_PROVIDERS=${OAUTH_PROVIDERS:-google} - OIDC_DISPLAY_NAME=${OIDC_DISPLAY_NAME:-} - OIDC_ICON=${OIDC_ICON:-} - LDAP_DISPLAY_NAME=${LDAP_DISPLAY_NAME:-} - KERBEROS_DISPLAY_NAME=${KERBEROS_DISPLAY_NAME:-} ports: - "3000:3000" networks: backend: # `nginx/nginx.conf` proxies to `frontend:3000`. aliases: - frontend restart: unless-stopped healthcheck: # The oven/bun image has no curl/wget, so probe with bun's built-in fetch. test: ["CMD", "bun", "-e", "fetch('http://localhost:3000/api/health').then((r) => process.exit(r.ok ? 0 : 1), () => process.exit(1))"] interval: 30s timeout: 10s start_period: 40s retries: 3 networks: backend: name: ${AGENTICOS_NETWORK:-agenticos_backend} external: true