services:storaged:build: .command:- nugitea-storaged- serve- --http- 0.0.0.0:9080- --tcp- 0.0.0.0:9081- --repo-root- /datavolumes:- nugitea-data:/dataports:- "9080:9080"- "9081:9081"# Published on request. This API is unauthenticated and trusts its# caller (see storage_server.rs) — anyone who can reach these ports can# read/write any repo directly, bypassing the app tier's Authorizer# checks entirely. Fine for local/trusted-network use; remove this# `ports:` block (bind to a firewalled interface, or put it back behind# only the compose-internal network) before exposing this on anything# you don't fully trust.app:build: .command:- nugitea- serve- --http- 0.0.0.0:3080- --ssh- 0.0.0.0:2222- --storage- http://storaged:9080- --storage-tcp- storaged:9081- --state-dir- /state- --ssh-host-key- /state/ssh_host_ed25519environment:# For admin commands run via `docker compose exec app nugitea ...`# (user/org/repo create), so they write the same accounts.json and# reach the same storage tier as `serve` without extra flags.NUGITEA_STATE_DIR: /stateNUGITEA_STORAGE: http://storaged:9080volumes:- nugitea-state:/stateports:- "3080:3080"- "2222:2222"depends_on:- storagedweb:build: ./webenvironment:# Server-side (SSR) fetches happen container-to-container, over the# compose-internal network.NUXT_GRAPHQL_URL: http://app:3080/graphql# Browser-side (post-hydration) fetches happen from the user's own# machine, so this must be an address the host can reach — the app# tier's published port, not the internal service name.NUXT_PUBLIC_GRAPHQL_URL: http://localhost:3080/graphqlports:- "3000:3000"depends_on:- appvolumes:nugitea-data:nugitea-state: