# 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_ORG_NAME=underpost 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. It resolves # to www.cyberiaonline.com, the host that owns the Cyberia APIs. CYBERIA_DATA_SERVER_URL=http://engine-cyberia CYBERIA_DATA_SERVER_GRPC=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 every engine port, and 4008 is the Cyberia host. Unlike the internal # CYBERIA_DATA_SERVER_URL, this value is consumed outside the Compose network: # the two responsibilities must never overwrite each other. ENGINE_PUBLIC_URL=http://localhost:4008 ENGINE_GRPC_RELOAD_INTERVAL_SEC=300 # Shared secret between the engine and every game server. It guards the server # registry report (server -> engine) and the hot-reload trigger (engine -> # server). Unset disables both: a server then stays out of the public list. CYBERIA_SERVER_API_KEY=change_me_dev_server_api_key # Public origin of the server gateway. Each server reports this origin plus its # own sub-path, which is the URL a client dials. CYBERIA_SERVER_PUBLIC_ORIGIN=http://localhost:8081 # --- Browser-facing client runtime config (injected by wasm-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/test -> test, ws://localhost:8081/test/ws CYBERIA_WS_ORIGIN=ws://localhost:8081 # The browser's own route to the Data Server, through nginx on :80. Distinct from the internal # CYBERIA_DATA_SERVER_URL above: both name a Data Server origin, but from opposite sides of the # Compose network, and one file cannot hold two values under one name. CYBERIA_CLIENT_DATA_SERVER_URL=http://localhost # 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 (each host of the # conf takes one port from PORT+1 upward, in declaration order), JWT, and mailer. # Secrets are DEV PLACEHOLDERS — no real credentials ship in the public image. PORT=4004 NODE_OPTIONS=--max-old-space-size=8192 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 DB_NAME_CYBERIA_CONTENT=cyberia-content DB_NAME_NEXODEV=nexodev DB_NAME_CRYPTOKOYN=cryptokoyn DB_NAME_ITEMLEDGER=itemledger DB_NAME_OBJECTLAYER=objectlayer # Shared key of the cross-domain writes between the hosts of this deploy (dev placeholder). DOMAIN_API_SERVICE_KEY=dev-domain-api-service-key-change-me # 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/{,test} # Client port alias: http://localhost:8082/{,test} # Server gateway: http://localhost:8081/{,test} # Engine domains, through the proxy and on their own published port, in the # order conf.server.json declares them: # http://underpost.net/ http://localhost:4005 # http://www.underpost.net/ http://localhost:4007 # http://www.cyberiaonline.com/ http://localhost:4008 # http://cyberiaonline.com/ http://localhost:4010 # http://cryptokoyn.net/ http://localhost:4011 # http://www.cryptokoyn.net/ http://localhost:4013 # http://itemledger.com/ http://localhost:4014 # http://www.itemledger.com/ http://localhost:4016 # http://objectlayer.org/ http://localhost:4017 # http://www.objectlayer.org/ http://localhost:4019 # Docker-network gateways: # http://cyberia-client/{,test} # http://cyberia-server/{,test} # http://engine-cyberia/ (the Cyberia host: www.cyberiaonline.com) # # The *.localhost aliases normally resolve to loopback without configuration: # http://client.cyberia.localhost/{,test} # http://server.cyberia.localhost/{,test} # http://engine.cyberia.localhost/ # `node bin/cyberia run-workflow docker:up` maintains the host entry that points # the service aliases and every engine domain at loopback. # # 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_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