An anonymous person may keep 100 MB of images and sounds, an identified one 500 MB, and one person more by a file_allowance row the operator adds; all of them together 15 GB, since every file is in the database and in each dump the server keeps (decided 2026-10-02). Each comes from the environment (FILE_LIMIT_*_MB), with these defaults, documented in deploy/.env.example. The server checks when an upload starts, counting unfinished uploads so they can't fill the disk unnoticed, and again when it finishes, counting what is kept, so uploads started side by side can't overshoot; a refusal is a FileLimitExceededException, and an upload refused as it finishes is deleted. deletePerson deletes the allowance with the person. Migration: the new table file_allowance, only added. The app keeps a refused file waiting on the device and stops that round of uploads; the Anki import warns when a deck's files may not fit in the room left (asset.usage()). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
43 lines
2.4 KiB
Shell
43 lines
2.4 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 sahaquiel 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 sahaquiel.
|
|
DOMAIN=http://localhost
|
|
|
|
# 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=
|
|
|
|
# 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=
|
|
|
|
# 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=
|