# Copy this file to .env. Compose intentionally refuses to start without the # required values. Replace every credential before any public deployment. # Deployment selection is consumed by scripts/deploy-up.sh and # scripts/compose.sh; the application does not try to start an orchestrator. DEPLOYMENT_TARGET=compose DEPLOYMENT_ENV=development COMPOSE_PROJECT_NAME=who_need_help # split runs independently scalable web and worker replicas behind Traefik. # compact runs one combined Phoenix + Oban VM directly on HTTP_PORT. APP_TOPOLOGY=split # container starts the project-owned PostGIS service. external excludes that # service completely and connects every application role through DATABASE_URL. DATABASE_MODE=container # Only used when DEPLOYMENT_TARGET=kubernetes. KUBERNETES_MODE=kind KUBE_CONTEXT= KUBE_NAMESPACE=who-need-help KUBE_RELEASE=who-need-help KUBE_VALUES_FILE= HTTP_PORT=4010 # Bind the public Compose proxy to loopback when a reverse proxy runs on the # same host. The current VPN staging path needs an address reachable by its # verified tunnel topology, so choose this per deployment. HTTP_BIND_ADDRESS=0.0.0.0 # Attach the selected app service to the separately managed public Caddy # network. Keep disabled for ordinary local development. PUBLIC_EDGE_ENABLED=false PUBLIC_EDGE_NETWORK=who_need_help_public_edge PUBLIC_UPSTREAM_NAME=who-need-help-local MAILPIT_PORT=8027 MAILPIT_BIND_ADDRESS=127.0.0.1 DOCKER_SOCKET_GID=REPLACE_WITH_DOCKER_SOCKET_NUMERIC_GID # Comma-separated proxy IP/CIDR values whose X-Forwarded-* headers Traefik # accepts. Keep loopback locally; set the exact VPN proxy address for staging. TRAEFIK_TRUSTED_IPS=127.0.0.1/32 TRAEFIK_RETRY_ATTEMPTS=3 # Docker-provider isolation and names. A second Compose project must use its # own project constraint, router/service name, Docker network, and Host rule. TRAEFIK_PROJECT_CONSTRAINT=who_need_help TRAEFIK_APP_NAME=who-need-help TRAEFIK_DOCKER_NETWORK=who_need_help_ingress TRAEFIK_ROUTER_RULE='PathPrefix(`/`)' PHX_HOST=localhost PHX_SCHEME=http PHX_URL_PORT=4010 # Android debug builds compile this origin into BuildConfig. The Docker # emulator uses adb reverse to expose the local Compose proxy on loopback. WNH_DEBUG_BASE_URL=http://localhost:4010 # Staging/release builds require a public HTTPS origin. Keep the value # environment-specific; scripts/ensure-local-public-origin.sh can derive it # from the three PHX_* values in the ignored .env. WNH_BASE_URL= # These local values preserve the existing five-second client freshness window # and fifteen-second request timeout. They are build inputs, not measured # production capacity recommendations. WNH_TRACKING_MIN_TIME_MS=5000 WNH_TRACKING_HTTP_TIMEOUT_MS=15000 WNH_ANDROID_VERSION_CODE=1 WNH_ANDROID_VERSION_NAME=0.1.0 # Public identifier of the locally held Google Play upload key. The private # keystore and its randomized password live outside the repository under # ~/.config/who_need_help/android-release/. WNH_ANDROID_SIGNING_KEY_ALIAS=who-need-help-upload WNH_ANDROID_TEST_API_MATRIX="24 30 34 37.0" WNH_ANDROID_TEST_DATA_PARTITION_SIZE=1G # Public raster tile template used by MapLibre. Use a provider whose policy and # capacity match the deployment before a public launch. MAP_TILE_URL=https://tile.openstreetmap.org/{z}/{x}/{y}.png # Optional verified GitHub linking. Leave both empty until a GitHub OAuth App # exists. Its callback URL must be: # https://YOUR_PHX_HOST/auth/social/github/callback GITHUB_OAUTH_CLIENT_ID= GITHUB_OAUTH_CLIENT_SECRET= # Optional endpoint and timeout overrides exist for the isolated boundary drill. # Leave them empty for GitHub's official endpoints and Req's library timeouts. GITHUB_OAUTH_BASE_URL= GITHUB_OAUTH_AUTHORIZE_URL= GITHUB_OAUTH_TOKEN_URL= GITHUB_OAUTH_USER_URL= GITHUB_OAUTH_HTTP_CONNECT_TIMEOUT_MS= GITHUB_OAUTH_HTTP_RECEIVE_TIMEOUT_MS= # Optional Google OpenID Connect registration and sign-in. Leave both empty # until a Google OAuth Web client exists. Its callback URL must be: # https://YOUR_PHX_HOST/auth/google/callback GOOGLE_OAUTH_CLIENT_ID= GOOGLE_OAUTH_CLIENT_SECRET= # Leave endpoint and timeout overrides empty for Google's discovery endpoint # and Req defaults. The base URL override exists for isolated protocol tests. GOOGLE_OAUTH_BASE_URL= GOOGLE_OAUTH_HTTP_CONNECT_TIMEOUT_MS= GOOGLE_OAUTH_HTTP_RECEIVE_TIMEOUT_MS= # Optional provider-neutral HTTP push boundary. Leave both endpoint and token # empty to disable product push jobs. When enabled, all four numeric values are # required deployment inputs; the project does not claim universal production # values for them. PUSH_HTTP_ENDPOINT= PUSH_HTTP_BEARER_TOKEN= PUSH_HTTP_MAX_ATTEMPTS= PUSH_HTTP_RECEIVE_TIMEOUT_MS= PUSH_HTTP_CONNECT_TIMEOUT_MS= PUSH_HTTP_RETRY_DELAY_MS= POSTGRES_DB=who_need_help POSTGRES_USER=postgres POSTGRES_PASSWORD=replace-with-a-local-or-deployment-secret DATABASE_URL=ecto://postgres:replace-with-url-encoded-password@db/who_need_help # Optional absolute host directory containing PostgreSQL Unix sockets. When it # is set in external mode, Compose mounts it read-only and Ecto uses it instead # of the hostname in DATABASE_URL. Leave empty for container or remote TCP DBs. DATABASE_SOCKET_DIR= WEB_POOL_SIZE=4 WORKER_POOL_SIZE=2 MIGRATE_POOL_SIZE=2 COMBINED_POOL_SIZE=4 OBAN_MAINTENANCE_CONCURRENCY=2 OBAN_PUSH_CONCURRENCY=1 WEB_REPLICAS=2 WORKER_REPLICAS=2 # Maximum simultaneously existing Erlang ports (files, sockets and drivers). # Keeping this explicit prevents a host's very large nofile ulimit from making # every BEAM instance preallocate a multi-gigabyte port table. ERLANG_PORT_LIMIT=65536 SECRET_KEY_BASE=generate-with-mix-phx-gen-secret HANDOVER_SECRET=generate-an-independent-random-secret RELEASE_COOKIE=generate-an-independent-beam-cluster-cookie METRICS_TOKEN=generate-an-independent-random-bearer-token # Select `smtp` for Mailpit or a regular transactional SMTP relay. Select # `unisender_go` to use UniSender Go's HTTPS transactional Web API instead. EMAIL_DELIVERY_PROVIDER=smtp SMTP_RELAY=mailpit SMTP_PORT=1025 SMTP_USERNAME= SMTP_PASSWORD= SMTP_AUTH=never SMTP_TLS=never SMTP_SSL=false UNISENDER_GO_API_KEY= UNISENDER_GO_BASE_URL=https://goapi.unisender.ru/ru/transactional/api/v1 # Optional. When empty, the Req/Finch library defaults are used. EMAIL_HTTP_CONNECT_TIMEOUT_MS= EMAIL_HTTP_RECEIVE_TIMEOUT_MS= EMAIL_FROM_NAME="Who Need Help" EMAIL_FROM_ADDRESS=contact@example.com # Optional monitored inbox. It receives new-case alerts and is used as Reply-To. SUPPORT_INBOX_ADDRESS= CODEX_SESSION_ID=copy-the-main-local-codex-session-id # Optional shared PostgreSQL-backed policies. Keep {} until product thresholds are approved. # Shape: {"action_name":{"limit":POSITIVE_INTEGER,"window_seconds":POSITIVE_INTEGER}} RATE_LIMIT_POLICIES_JSON={}