chore: the servers are named by the domain they serve
Files called the servers by their own host names, which are the operator's and say nothing a reader needs. They now say which domain a server serves: learn.halkyon.eu's server (the instance and its CI runner), the halkyon.app server (Forgejo and the F-Droid repository). Two names are settings rather than words. CI's runner label becomes `instance` (`runs-on: instance`, `labels: ["instance:host"]`): the runner reads its installed copy of deploy/runner/config.yml, so jobs wait in the queue until that copy is updated and the runner restarted. The SSH aliases the scripts and docs use become `learn-deploy` and `fdroid-upload`. AGENTS.md says to keep it so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
63c2f86b12
commit
93b0c0a6b0
11 changed files with 32 additions and 31 deletions
|
|
@ -1,9 +1,9 @@
|
|||
# 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
|
||||
# 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 sahaquiel.
|
||||
# `http://localhost` for the local rehearsal; `learn.halkyon.eu` on its server.
|
||||
DOMAIN=http://localhost
|
||||
|
||||
# Postgres password, shared by the postgres and server services.
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
# production; if it is ever re-enabled, reach it through an SSH tunnel, never through
|
||||
# this file.
|
||||
#
|
||||
# {$DOMAIN} is `learn.halkyon.eu` on sahaquiel, where Caddy obtains and renews a
|
||||
# {$DOMAIN} is `learn.halkyon.eu` on its server, where Caddy obtains and renews a
|
||||
# Let's Encrypt certificate by itself, and `http://localhost` for the local rehearsal.
|
||||
{$DOMAIN} {
|
||||
encode zstd gzip
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# The keys whose signatures deploy/redeploy.sh accepts on main: OpenPGP primary key
|
||||
# fingerprints, one per line. The deployed checkout's copy decides, so a new key comes in
|
||||
# through a commit signed by a key already listed here, and its public key goes into
|
||||
# deploy's GPG keyring on sahaquiel (gpg --import).
|
||||
# deploy's GPG keyring on the server (gpg --import).
|
||||
B172B9ED76A32EBCABA24A9F07F6FCF405488B64
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
# Backs up learn.halkyon.eu off-site. Runs every hour from
|
||||
# deploy/backup/halkyon-backup.timer, as deploy on sahaquiel; deploy/backups.md says
|
||||
# deploy/backup/halkyon-backup.timer, as deploy on the server; deploy/backups.md says
|
||||
# how it was set up and how to restore.
|
||||
#
|
||||
# Everything people keep is in the database, their files too (Serverpod's database
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
# started since, that is everything: their app no longer finds its session and starts
|
||||
# anew (deploy/backups.md). After 3 months, a deleted account is gone from every
|
||||
# backup (the privacy page says so). The box's own automatic snapshots, which only
|
||||
# Hetzner's Console can remove, keep the backups safe from a taken-over sahaquiel,
|
||||
# Hetzner's Console can remove, keep the backups safe from a taken-over server,
|
||||
# which can delete what restic wrote.
|
||||
#
|
||||
# Failures go to the journal only (decided 2026-10-03):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# The hourly off-site backup of learn.halkyon.eu, on sahaquiel: deploy/backup.sh, as
|
||||
# The hourly off-site backup of learn.halkyon.eu, on its server: deploy/backup.sh, as
|
||||
# deploy, started by halkyon-backup.timer. Installed with the timer as
|
||||
# /etc/systemd/system/halkyon-backup.service; deploy/backups.md has the steps.
|
||||
#
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Starts halkyon-backup.service at the start of every hour; the run at 03:00,
|
||||
# sahaquiel's time (Europe/Berlin), also prunes and checks, done before the security
|
||||
# updates may reboot at 04:00. A run missed while sahaquiel was off happens as soon as
|
||||
# the server's time (Europe/Berlin), also prunes and checks, done before the security
|
||||
# updates may reboot at 04:00. A run missed while the server was off happens as soon as
|
||||
# it is back. Installed as /etc/systemd/system/halkyon-backup.timer.
|
||||
[Unit]
|
||||
Description=Hourly off-site backup of learn.halkyon.eu
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ Once, in this order. The commands name who runs them, and where.
|
|||
network. Samba and WebDAV stay off; FTP and SFTP on port 22 can't be turned off.
|
||||
2. Set up **automatic snapshots**: daily, at a fixed time, with as many kept as the box
|
||||
allows (10 on a BX11).
|
||||
3. Add a **sub-account** for this server: its own directory (e.g. `sahaquiel`), **SSH
|
||||
3. Add a **sub-account** for this server: its own directory (e.g. `learn-halkyon-eu`), **SSH
|
||||
support** and **External reachability** on, Samba and WebDAV off, not read-only
|
||||
(restic deletes what it prunes). Note its user name (`uXXXXX-subN`) and password; the
|
||||
password is needed once, below.
|
||||
|
|
@ -68,11 +68,11 @@ sudo apt install restic
|
|||
|
||||
### 3. The repository (deploy, on the server)
|
||||
|
||||
As `deploy` (`ssh sahaquiel-deploy` on learn.halkyon.eu). A key without a passphrase,
|
||||
As `deploy` (`ssh learn-deploy` on learn.halkyon.eu). A key without a passphrase,
|
||||
since nobody is there to type it at 03:00:
|
||||
|
||||
```sh
|
||||
ssh-keygen -t ed25519 -N '' -C 'deploy@sahaquiel: backups' -f ~/.ssh/storagebox
|
||||
ssh-keygen -t ed25519 -N '' -C 'deploy: learn.halkyon.eu backups' -f ~/.ssh/storagebox
|
||||
cat >>~/.ssh/config <<'EOF'
|
||||
Host storagebox
|
||||
HostName uXXXXX-subN.your-storagebox.de
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ services:
|
|||
- "443:443"
|
||||
- "443:443/udp" # HTTP/3
|
||||
environment:
|
||||
# `learn.halkyon.eu` on sahaquiel (automatic Let's Encrypt certificate);
|
||||
# `learn.halkyon.eu` on its server (automatic Let's Encrypt certificate);
|
||||
# `http://localhost` for the local rehearsal (plain HTTP, no certificate).
|
||||
DOMAIN: ${DOMAIN:?set DOMAIN in deploy/.env}
|
||||
volumes:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
# Deploys learn.halkyon.eu from main. The only command CI's deploy key may run: deploy's
|
||||
# ~/.ssh/authorized_keys on sahaquiel pins that key to this script, from sahaquiel itself:
|
||||
# ~/.ssh/authorized_keys on the server pins that key to this script, from the server itself:
|
||||
#
|
||||
# restrict,from="127.0.0.1,::1",command="/home/deploy/halkyon-learn/deploy/redeploy.sh" ssh-ed25519 … (CI deploy trigger)
|
||||
#
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
# before switching to the new server, and fails unless that server answers afterwards. A failure leaves the checkout at the deployed commit, so
|
||||
# running the CI job again retries. By hand, with your own key:
|
||||
#
|
||||
# ssh sahaquiel-deploy halkyon-learn/deploy/redeploy.sh <commit>
|
||||
# ssh learn-deploy halkyon-learn/deploy/redeploy.sh <commit>
|
||||
set -eu
|
||||
|
||||
main() {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# The Forgejo Actions runner of this repository's CI, on sahaquiel. Installed as
|
||||
# The Forgejo Actions runner of this repository's CI, on learn.halkyon.eu's server. Installed as
|
||||
# /etc/forgejo-runner/config.yml, read by forgejo-runner.service (next to this file).
|
||||
# Written for forgejo-runner v13.1.0; its full reference: `forgejo-runner generate-config`.
|
||||
#
|
||||
|
|
@ -16,12 +16,12 @@ runner:
|
|||
timeout: 1h
|
||||
shutdown_timeout: 10m
|
||||
fetch_timeout: 30s
|
||||
# How often to ask Forgejo for work. The default (2 s) is needless load on ramiel,
|
||||
# a one-core server.
|
||||
# How often to ask Forgejo for work. The default (2 s) is needless load on
|
||||
# code.halkyon.app's server, a one-core one.
|
||||
fetch_interval: 10s
|
||||
report_interval: 1s
|
||||
# `runs-on: sahaquiel` in a workflow means: here, on the host.
|
||||
labels: ["sahaquiel:host"]
|
||||
# `runs-on: instance` in a workflow means: here, on the instance's server, on the host.
|
||||
labels: ["instance:host"]
|
||||
|
||||
cache:
|
||||
# No cache server (it would listen on a port of its own); the SDKs and package
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# The Forgejo Actions runner of this repository's CI, on sahaquiel. Installed as
|
||||
# The Forgejo Actions runner of this repository's CI, on learn.halkyon.eu's server. Installed as
|
||||
# /etc/systemd/system/forgejo-runner.service; its configuration is config.yml, next to
|
||||
# this file.
|
||||
#
|
||||
|
|
|
|||
Loading…
Reference in a new issue