halkyon/apps/learn/halkyon_learn_server/config/production.yaml
Tizian 「ティツィアーン」 649499be23
chore: Halkyon Learn moves into apps/learn
Its server, client, app and curator, and the tools that write its
assets (maps, Anki fixtures, icons), as they are; paths are fixed in
the commits that follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-22 18:11:02 +02:00

77 lines
3.1 KiB
YAML

# Configuration for the production instance learn.halkyon.eu.
# Caddy terminates TLS on 443 and forwards to the API server on 8080, and the
# assistant connector's paths to the web server on 8082; Insights doesn't run.
# Configuration for the main API server.
apiServer:
port: 8080
publicHost: learn.halkyon.eu
publicPort: 443
publicScheme: https
# No insightsServer: without this block Serverpod doesn't start Insights at all (it
# would otherwise listen on every interface). To use Insights later, add the block
# back (port 8081), set `serviceSecret` in the production passwords, and reach the
# port through an SSH tunnel, never through Caddy.
# The web server serves only the assistant connector (ADR 0006): the MCP endpoint
# and its OAuth pages and metadata. Caddy forwards those paths alone to it
# (deploy/Caddyfile); everything else stays on the API server.
webServer:
port: 8082
publicHost: learn.halkyon.eu
publicPort: 443
publicScheme: https
# The database: the `postgres` service of deploy/compose.yaml, reachable only inside
# the Compose network (it publishes no port), so no TLS between server and database.
# The password comes from the environment (SERVERPOD_DATABASE_PASSWORD, set in
# deploy/.env); there is no production passwords.yaml.
database:
host: postgres
port: 5432
name: halkyon_learn
user: halkyon_learn
requireSsl: false
#isUnixSocket: true # defaults to false
#maxConnectionCount: 10 # Defaults to 10, a negative or null value removes the limit
# This is the setup for Redis. The default for the Google Cloud Engine Terraform
# configuration is to connect on a private IP address.
# If you are connecting on a public IP (e.g. on AWS or Google Cloud Run), you
# connect on the public IP of the database e.g. redis.examplepod.com.
redis:
enabled: false
host: redis.private-production.examplepod.com
port: 6379
#user: # defaults to empty
#requireSsl: true # defaults to false
maxRequestSize: 524288 # The maximum size of requests allowed in bytes
sessionLogs:
consoleEnabled: true
persistentEnabled: false
# consoleLogFormat: json # Defaults to "json", options are "text" or "json"
# futureCallExecutionEnabled: true # Defaults to true
#futureCall:
# concurrencyLimit: 1 # Defaults to 1, a negative or null value removes the limit
# scanInterval: 5000 # Unit in milliseconds, defaults to 5000
# Recommended when serving web clients: keeps auth tokens in httpOnly
# cookies. Without this, web tokens live in JavaScript-readable storage,
# where any XSS can steal them. Web clients opt in with
# `client.cookieAuth = true`. Requires `allowedOrigins`; browsers from
# origins not in the list lose cross-origin access, including to public
# endpoints.
#authCookie:
# sameSite: lax # Defaults to "lax", options are "strict" or "none"
# #name: serverpod_auth # Defaults to "serverpod_auth"
# #refreshName: serverpod_auth_refresh # Defaults to "<name>_refresh"
# #domain: examplepod.com # Defaults to host-only; set to share across subdomains
# #path: / # Defaults to "/"
# #secure: true # Defaults to true; the cookie is only sent over https
#allowedOrigins:
# - https://app.examplepod.com # The origin serving your Flutter web app