# Working env-file for the Cyberia ecosystem compose stack (custom workflow). # Used as-is by the CLI (not generated). Set real credentials here, then run: # underpost docker-compose --up --deploy-id dd-cyberia --docker-compose-id cyberia # # Loaded explicitly via --env-file so container service-discovery values (the # Docker network hostnames below) are not overridden by any host-local .env. # --- Ecosystem images (dev variants, published by docker-image.*.dev.ci.yml) -- # This stack is development-only, so it uses the `-dev` images built from the # Dockerfile.dev variants (debug builds + live-inspection tooling). MONGO_IMAGE=mongo:latest VALKEY_IMAGE=valkey/valkey:latest ENGINE_CYBERIA_IMAGE=underpost/engine-cyberia-dev ENGINE_CYBERIA_TAG=latest CYBERIA_SERVER_IMAGE=underpost/cyberia-server-dev CYBERIA_SERVER_TAG=latest CYBERIA_CLIENT_IMAGE=underpost/cyberia-client-dev CYBERIA_CLIENT_TAG=latest PROXY_IMAGE=nginx:stable-alpine IPFS_IMAGE=ipfs/kubo:latest IPFS_CLUSTER_IMAGE=ipfs/ipfs-cluster:latest # --- Private-repo bootstrap (engine-cyberia clones the private dd-cyberia conf) - # The engine-cyberia image ships only the underpost CLI; at start it runs the # `underpost start --build` bootstrap, which clones ${GITHUB_USERNAME}/engine-cyberia. GITHUB_USERNAME=underpostnet GITHUB_TOKEN=change_me_private_repo_token # --- MongoDB (translation of Secret mongodb-secret) -------------------------- MONGO_INITDB_ROOT_USERNAME=admin MONGO_INITDB_ROOT_PASSWORD=change_me_dev_password # --- Application DB / cache connection (Docker service discovery, not localhost) NODE_ENV=development DB_PROVIDER=mongoose DB_HOST=mongodb://mongodb:27017 DB_REPLICA_SET=rs0 DB_AUTH_SOURCE=admin VALKEY_HOST=valkey-service VALKEY_PORT=6379 # --- Cyberia instance wiring (compose service DNS) --------------------------- # cyberia-server-* -> stable engine gateway for HTTP and the raw engine runtime # for gRPC. The public engine-cyberia name belongs to nginx, avoiding ambiguous # Docker DNS while keeping one stable HTTP endpoint for every module. ENGINE_API_BASE_URL=http://engine-cyberia ENGINE_GRPC_ADDRESS=engine-cyberia-runtime:50051 # Client-visible Content Authority origin, forwarded to browser/Raylib clients # for every engine-cyberia content/asset/metadata request. Host-reachable # (Docker publishes the raw engine runtime on host :4005). Unlike the internal # ENGINE_API_BASE_URL, this value is consumed outside the Compose network: # the two responsibilities must never overwrite each other. ENGINE_PUBLIC_URL=http://localhost:4005 ENGINE_GRPC_RELOAD_INTERVAL_SEC=300 # --- Browser-facing client runtime config (injected by docker-driver.py) ----- # The single WASM bundle resolves its instance from the URL sub-path and builds # its endpoints from these origins. HTTP client/API traffic uses nginx on :80; # WebSocket traffic uses the dedicated multi-path server gateway on :8081. # http://localhost/ -> default, ws://localhost:8081/ws # http://localhost/FOREST -> FOREST, ws://localhost:8081/FOREST/ws CYBERIA_WS_ORIGIN=ws://localhost:8081 CYBERIA_ENGINE_API_ORIGIN=http://localhost CYBERIA_DEFAULT_INSTANCE=amethyst-strata-expansion # cyberia-server logging. This is the dev stack, so default to DEBUG. Set # CYBERIA_SERVER_LOG_LEVEL (debug|info|warn|error) to override the APP_ENV # fallback without touching APP_ENV. CYBERIA_SERVER_APP_ENV=development CYBERIA_SERVER_LOG_LEVEL= # --- cyberia-server WebSocket admission and rate limits ---------------------- # Unset keeps the built-in default. An explicit 0 turns that one limit off. # The startup log prints the effective profile ("ws limits: ..."). # # Set CYBERIA_DISABLE_CONNECTION_LIMITS=1 to turn every limit off. The load test # (test/cyberia-load.test.js) drives every simulated client from one address, so # it needs this. NEVER enable it on a public deploy. CYBERIA_DISABLE_CONNECTION_LIMITS= CYBERIA_MAX_CONNECTIONS= CYBERIA_MAX_CONNECTIONS_PER_IP= CYBERIA_CONNECT_RATE_PER_IP= CYBERIA_CONNECT_BURST_PER_IP= CYBERIA_MESSAGE_RATE= CYBERIA_MESSAGE_BURST= CYBERIA_MAX_STRIKES= # --- engine-cyberia runtime env (loaded into the container via env_file) ----- # The dd-cyberia engine (engine-private/conf/dd-cyberia/conf.server.json) needs # these to boot: DB auth + per-site DB names, the base PORT (the cyberia host is # assigned PORT+1 = 4005, which the healthcheck/nginx target), JWT, and mailer. # Secrets are DEV PLACEHOLDERS — no real credentials ship in the public image. PORT=4004 NODE_OPTIONS=--max-old-space-size=8192 BASE_API=api DEFAULT_DEPLOY_ID=dd-cyberia DEPLOY_ID=dd-cyberia # Configuration/DB selector from conf.server.json; this is not a Docker DNS alias. DEFAULT_DEPLOY_HOST=www.cyberiaonline.com DEFAULT_DEPLOY_PATH=/ DISABLE_API_RATE_LIMIT=true DOTENV_CONFIG_QUIET=true ACCESS_EXPIRE_MINUTES=1440 REFRESH_EXPIRE_MINUTES=5 DEV_PROXY_PORT_OFFSET=0 JWT_SECRET=change_me_dev_jwt_secret # DB auth (must match the MONGO_INITDB_ROOT_* creds above) + per-site DB names. DB_USER=admin DB_PASSWORD=change_me_dev_password DB_NAME_CYBERIA=cyberia # Mailer / SMTP (dev placeholders — mailer stays inert without real creds). MAILER_SENDER_NAME=CYBERIA MAILER_SENDER_EMAIL=noreply@example.com SMTP_HOST=smtp.example.com SMTP_PORT=465 SMTP_AUTH_USER=change_me SMTP_AUTH_PASS=change_me MAILER_SENDER_NAME_CYBERIA=CYBERIA MAILER_SENDER_EMAIL_CYBERIA=noreply@example.com SMTP_HOST_CYBERIA=smtp.example.com SMTP_PORT_CYBERIA=465 SMTP_AUTH_USER_CYBERIA=change_me SMTP_AUTH_PASS_CYBERIA=change_me # Third-party integrations (dev placeholders). CLOUDINARY_CLOUD_NAME=change_me CLOUDINARY_API_KEY=change_me CLOUDINARY_API_SECRET=change_me GEMINI_API_KEY=change_me HUGGINGFACE_API_KEY=change_me DEFAULT_ADMIN_EMAIL=admin@example.com DEFAULT_ADMIN_PASSWORD=change_me # --- IPFS endpoints ---------------------------------------------------------- # Kubo (content plane) is the `ipfs` service; the Cluster REST API (:9094, pin # replication) is the `ipfs-cluster` service. Override only to target a # different node. IPFS_API_URL=http://ipfs:5001 IPFS_GATEWAY_URL=http://ipfs:8080 IPFS_CLUSTER_API_URL=http://ipfs-cluster:9094 # 32-byte hex shared secret for the ipfs-cluster consensus (dev default is set # in docker-compose.yml). Override for a real/shared cluster. # CLUSTER_SECRET= # --- Local access ------------------------------------------------------------ # Client gateway: http://localhost/{,FOREST,TEST} # Client port alias: http://localhost:8082/{,FOREST,TEST} # Server gateway: http://localhost:8081/{,FOREST,TEST} # Engine authority: http://localhost:4005 # Docker-network gateways: # http://cyberia-client/{,FOREST,TEST} # http://cyberia-server/{,FOREST,TEST} # http://engine-cyberia/ # # The *.localhost aliases normally resolve to loopback without configuration: # http://client.cyberia.localhost/{,FOREST,TEST} # http://server.cyberia.localhost/{,FOREST,TEST} # http://engine.cyberia.localhost/ # `node bin/cyberia run-workflow docker:up` maintains this host entry (the # aliases already work between containers): # 127.0.0.1 cyberia-client cyberia-server engine-cyberia # # Host-published ports: PROXY_HTTP_PORT=80 IPFS_API_PORT=5001 IPFS_GATEWAY_PORT=8080 IPFS_CLUSTER_API_PORT=9094 MONGO_HOST_PORT=27017 VALKEY_NODEPORT=32079 ENGINE_CYBERIA_REST_PORT=4005 ENGINE_CYBERIA_GRPC_PORT=50051 # Multi-path nginx server gateway, not a single server container publication. CYBERIA_SERVER_PORT=8081 # Multi-path nginx client gateway; raw client containers remain internal. CYBERIA_CLIENT_PORT=8082