Its operator sets DATA_LOCATION and BACKUP_LOCATION in deploy/.env (a
country's code or EU, the backups also none), and instance.info() hands
them on. The first start's tile and Switch account show the flag of
where the data is and the words, as labels ("Data: European Union",
"Backups: Switzerland"), the countries by the world map's CLDR names:
where the disks are, never which law governs. The flags come from the
flag package, which draws flag-icons; its MIT notice joins the licence
list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
102 lines
5.6 KiB
Shell
102 lines
5.6 KiB
Shell
# Copy to deploy/.env, restrict it (chmod 600), and fill in. deploy/.env is git-ignored
|
|
# and never goes into an image. How it reaches the server is decided when the server is
|
|
# set up (e.g. rendered from Proton Pass on the deploying machine and copied over SSH,
|
|
# so the server itself never holds Proton credentials).
|
|
|
|
# `http://localhost` for the local rehearsal; `learn.halkyon.eu` on its server.
|
|
DOMAIN=http://localhost
|
|
|
|
# The domain people's handles are on (`raisondetredev@halkyon.eu`) and their profile
|
|
# pages (`https://halkyon.eu/@raisondetredev`, ADR 0011), when it isn't DOMAIN's host:
|
|
# point its DNS (A and AAAA) at this server, and Caddy serves the profile pages there,
|
|
# nothing else. Unset: DOMAIN's host. Decide before anyone follows a handle: it can
|
|
# never change once the fediverse knows it.
|
|
#ACCOUNT_DOMAIN=halkyon.eu
|
|
|
|
# Sidecars switched on beside the instance (sidecars/README.md), each by its compose file
|
|
# after the instance's own: compose.jellyfin.yaml, a Jellyfin people watch and listen to
|
|
# learn from. Unset: the instance alone.
|
|
#COMPOSE_FILE=compose.yaml:compose.jellyfin.yaml
|
|
|
|
# With the Jellyfin sidecar: the domain it answers at, which the instance then suggests
|
|
# to its people (the app's Jellyfin sign-in fills it in).
|
|
#JELLYFIN_DOMAIN=jellyfin.example.org
|
|
|
|
# Postgres password, shared by the postgres and server services.
|
|
# Generate: openssl rand -base64 32
|
|
POSTGRES_PASSWORD=
|
|
|
|
# Pepper for hashing session keys (server-side sessions). NEVER change it once
|
|
# sessions exist: everyone would be signed out, and anonymous accounts can't sign
|
|
# back in. Rotation only via fallbackSessionKeyHashPeppers.
|
|
# Generate: openssl rand -base64 32
|
|
SESSION_KEY_HASH_PEPPER=
|
|
|
|
# GitHub sign-in (optional): the client ID and secret of this instance's own GitHub
|
|
# OAuth app (GitHub → Settings → Developer settings → OAuth Apps), registered with the
|
|
# callback URLs app.halkyon.learn://github-callback and http://127.0.0.1/github-callback.
|
|
# Empty: GitHub sign-in is off, and the app doesn't offer it.
|
|
GITHUB_CLIENT_ID=
|
|
GITHUB_CLIENT_SECRET=
|
|
|
|
# Email sign-in (optional, ADR 0010): people sign in with a code mailed to their address,
|
|
# of which the instance keeps only a keyed hash. Off unless the pepper and all of the SMTP
|
|
# service's settings are set; the app then doesn't offer it.
|
|
# The pepper: NEVER change it once anybody signs in with an address, as every address's
|
|
# hash would be lost, and with it those people's way in.
|
|
# Generate: openssl rand -hex 32
|
|
EMAIL_SIGN_IN_PEPPER=
|
|
# The SMTP service codes go through, over TLS only (STARTTLS, or TLS directly on 465).
|
|
# Proton (a paid plan with an address on your own domain): smtp.protonmail.ch, 587, the
|
|
# address as the user, an SMTP token made for it in Proton Mail's settings (IMAP/SMTP) as
|
|
# the password, and the same address as EMAIL_FROM. Some hosts block outgoing 25 and 465;
|
|
# 587 gets through.
|
|
EMAIL_SMTP_HOST=
|
|
EMAIL_SMTP_PORT=587
|
|
EMAIL_SMTP_USER=
|
|
EMAIL_SMTP_PASSWORD=
|
|
# The address codes come from (shown as "Halkyon Learn"); its domain needs SPF, DKIM and
|
|
# DMARC records for the service, or mail lands in spam.
|
|
EMAIL_FROM=
|
|
|
|
# Where the source of what this instance runs is, shown in the app's About dialog: both
|
|
# licences (AGPL for the app, SSPL for the server) require offering it to the people who
|
|
# use the instance. Empty: the project's repository, which is right for unmodified code.
|
|
# Running modified code, set it to where your modified source is published.
|
|
SOURCE_URL=
|
|
|
|
# The languages besides Japanese whose dictionaries this instance keeps (the dictionaries
|
|
# service): Chinese from CC-CEDICT, weekly (some 4 MB), in simplified and traditional
|
|
# characters; Korean from KRDict, about monthly (some 84 MB); their characters from
|
|
# Unihan, weekly (some 8 MB); the rest from Wiktionary (German and Greek with English
|
|
# meanings, English with German ones; for Korean the forms of its words and the
|
|
# readings of its Hanja), whose whole dump (some 3 GB) it downloads whenever kaikki.org
|
|
# makes a new one, about monthly, and converts in ten minutes. Unset: de,el,en,ko,zh.
|
|
# Empty: none. Files of a language taken out are removed, and the server unloads them.
|
|
#DICTIONARY_LANGUAGES=de,el,en,ko,zh
|
|
|
|
# The Jellyfin server the app suggests to this instance's people, who watch and listen
|
|
# to learn from it (Halkyon Learn's Watch screen). Empty: `https://jellyfin.` on the
|
|
# domain registered for this instance (learn.example.org → jellyfin.example.org), if a
|
|
# Jellyfin server answers there; `none`: no suggestion.
|
|
JELLYFIN_URL=
|
|
|
|
# Where this instance keeps people's data, and its backups, which the app shows as a flag
|
|
# and in words when someone chooses an instance: a country's code (ISO 3166-1 alpha-2,
|
|
# `CH`) or `EU`; for the backups also `none`. Where the disks are, not which law governs
|
|
# you as the operator: claim only that. Empty: the app says nothing.
|
|
DATA_LOCATION=
|
|
BACKUP_LOCATION=
|
|
|
|
# How much room people's images and sounds may take on this instance, in MiB. Empty: the
|
|
# defaults, 100 for an anonymous person (anonymous accounts are meant to become identified
|
|
# ones), 500 for one signed in with GitHub, and 15000 for everyone together (0: no limit
|
|
# for everyone together). Every file is in the database, so also in each of the 3 dumps
|
|
# this server keeps (and a fourth while a deploy writes its own): files take five times
|
|
# their size on the disk. One person may get more than the default; as the operator,
|
|
# in deploy/ (their id is their account's, "authUserId"):
|
|
# docker compose exec postgres psql -U halkyon_learn -d halkyon_learn -c "INSERT INTO
|
|
# file_allowance (\"authUserId\", \"maxBytes\", note) VALUES ('<id>', 2147483648, 'asked by mail')"
|
|
FILE_LIMIT_ANONYMOUS_MB=
|
|
FILE_LIMIT_IDENTIFIED_MB=
|
|
FILE_LIMIT_INSTANCE_MB=
|