# Copy to .env next to docker-compose.yml and edit. Compose reads it automatically; # git ignores .env. Every value here is optional — the defaults in docker-compose.yml # are what you get without it. # --- Ports on your machine ----------------------------------------------------------- # Container-side ports are fixed (API 5000, nginx 80); only these move. #LADOSE_WEB_PORT=8080 #LADOSE_API_PORT=5000 # --- Database ------------------------------------------------------------------------ # Overrides ConnectionStrings:DbContext from LaDOSE.Api/appsettings.json. The stack has # no Postgres of its own, so this has to point at a reachable server. # # Postgres on the machine running the containers: #LADOSE_DB_CONNECTION=Host=host.docker.internal;Username=tom;Password=tom;Database=ladoseapi # # Postgres elsewhere on the LAN — check the name resolves *inside* the container # (`docker compose run --rm api getent hosts kafka.local`) and use the IP if it does not: #LADOSE_DB_CONNECTION=Host=kafka.local;Username=tom;Password=tom;Database=ladoseapi # # Sql/dump_20240316.sql then Sql/2026-08-05_roles.sql populate an empty database. # --- Secrets ------------------------------------------------------------------------- # appsettings.json carries placeholders for these. Any value works for JWT locally, but # it must be at least 32 characters: Startup.cs feeds it to HMAC-SHA256 as raw ASCII. #LADOSE_JWT_SECRET=dev-only-secret-not-for-any-deployed-environment #LADOSE_SMASH_API_KEY= #LADOSE_CHALLONGE_API_KEY= # --- Google Sheets export ------------------------------------------------------------ # Powers "Push to Google Sheets" next to Export CSV on /tournaments: writes the generated # ranking table into one tab, named after the latest event in the selection. # # Writer: Disabled | Logging | ServiceAccount. # Disabled the button says "not configured" and refuses (the default) # Logging writes the payload to the API log instead of Google — use this to check # a selection without touching a spreadsheet # ServiceAccount writes for real #LADOSE_SHEETS_WRITER=Disabled # # The target spreadsheet. THIS is the value to change each year when you start a new # sheet — then share the new sheet with the service-account address below as Editor. # It is the id from the sheet URL, not the whole URL: # https://docs.google.com/spreadsheets/d//edit #LADOSE_SHEETS_SPREADSHEET_ID= # # Path *inside the container* to the service-account JSON key. docker-compose.yml mounts # ./secrets (git-ignored) at /run/secrets, so drop the key there and leave this as is. # # One-time Google setup: create a project, enable the Google Sheets API, create a service # account, create a JSON key, save it as secrets/ladose-sheets-sa.json, then share the # spreadsheet with the account's ...iam.gserviceaccount.com address as Editor. Only that # last sharing step repeats when you switch to a new sheet. #LADOSE_SHEETS_SA_CREDENTIALS_PATH=/run/secrets/ladose-sheets-sa.json # --- Discord bot ----------------------------------------------------------------------- # LaDOSE.DiscordBot only runs when you ask for it: `docker compose --profile bot up`. # These values are rendered into the container's settings.json at start — the bot reads # that file and never the environment. # # From https://discord.com/developers/applications -> your application -> Bot -> Reset # Token. Setting this is what enables the rendering; leave it commented out and the bot # falls back to the placeholder settings.json baked into the image (which cannot connect). # The bot also needs the MESSAGE CONTENT intent enabled on that same page: Program.cs asks # for DiscordIntents.MessageContents and Discord refuses the connection otherwise. #LADOSE_DISCORD_TOKEN= # # Where the bot finds LaDOSE.Api. Resolved inside the container, so this is the compose # service name, not localhost, and LADOSE_API_PORT does not apply. #LADOSE_BOT_REST_URL=http://api:5000 # # A LaDOSE.Api login for the bot — the commands that read events and rankings authenticate # with it. Without it those commands log "Unable to contact services" and the rest of the # bot still works. #LADOSE_BOT_REST_USER= #LADOSE_BOT_REST_PASSWORD= # # Challonge is shared with the api service: LADOSE_CHALLONGE_API_KEY above feeds both. # --- Frontend ------------------------------------------------------------------------ # Only needed if the API is not on http://localhost:${LADOSE_API_PORT}. Resolved by the # browser, so container names like http://api:5000 will not work. #LADOSE_API_BASE_URL=http://localhost:5000