Skip to content

Repository files, collaboration, releases and project activity.

ARCHFORGE HISTORY

Blame · README.md

Branch main · the Commit author is not necessarily a verified ArchForge account.

2109dd33b8archadmin2026-10-121 # ArchForge External Status 1.0.8 — Debian 13 ArchForge Edition
2109dd33b8archadmin2026-10-122 
2109dd33b8archadmin2026-10-123 **New:** `.archforge` ArchForge migration, see `DEBIAN-13-GIT-URL-MIGRATION.md`.
2109dd33b8archadmin2026-10-124 
2109dd33b8archadmin2026-10-125 
2109dd33b8archadmin2026-10-126 **New:** `.archforge` ArchForge migration, see `DEBIAN-13-GIT-URL-MIGRATION.md`.
2109dd33b8archadmin2026-10-127 
2109dd33b8archadmin2026-10-128 
2109dd33b8archadmin2026-10-129 **New:** `.archforge` ArchForge migration, see `DEBIAN-13-GIT-URL-MIGRATION.md`.
2109dd33b8archadmin2026-10-1210 
2109dd33b8archadmin2026-10-1211 
2109dd33b8archadmin2026-10-1212 Release 1.0.8: consistent ArchForge service naming across the independent public and admin status website.
e59b7f7cc6archadmin2026-10-1113 
e59b7f7cc6archadmin2026-10-1114 Independent uptime monitoring at **https://status.archforge.nl**. This software runs on **a second VPS**, without Docker, Pterodactyl, ArchForge credentials, or any database connection to the main website.
e59b7f7cc6archadmin2026-10-1115 
2109dd33b8archadmin2026-10-1216 **It does not modify the ArchForge main website.** If archforge.nl becomes unreachable, the external service continues monitoring, saving independent history and sending alerts.
e59b7f7cc6archadmin2026-10-1117 
299229ecf6archadmin2026-10-1218 ## Nieuw in 1.0.6: veilige, aantoonbaar geïnstalleerde adminloginfix
299229ecf6archadmin2026-10-1219 
299229ecf6archadmin2026-10-1220 Een browser met privacybescherming kan `Origin` of `Referer` normaliseren of afschermen.
299229ecf6archadmin2026-10-1221 De server verwerkt nu browser-origininformatie met `Sec-Fetch-Site`, terwijl
299229ecf6archadmin2026-10-1222 **cross-site formulierverzoeken nog steeds worden geweigerd** en elk POST-verzoek
299229ecf6archadmin2026-10-1223 een CSRF-token nodig heeft. De bestaande scrypt-wachtwoordcontrole, TOTP-2FA,
299229ecf6archadmin2026-10-1224 Secure cookies en rate limiting blijven actief.
299229ecf6archadmin2026-10-1225 
2109dd33b8archadmin2026-10-1226 **Update via je eigen ArchForge-repository:** pak de 1.0.6-update uit in
299229ecf6archadmin2026-10-1227 de checkout op je pc, commit en push de wijzigingen. Op Debian 13 (als root):
299229ecf6archadmin2026-10-1228 
299229ecf6archadmin2026-10-1229 ```bash
299229ecf6archadmin2026-10-1230 cd ~/archforge-external-status
299229ecf6archadmin2026-10-1231 git pull --ff-only
299229ecf6archadmin2026-10-1232 bash ./repair-admin-login.sh
299229ecf6archadmin2026-10-1233 ```
299229ecf6archadmin2026-10-1234 
299229ecf6archadmin2026-10-1235 De herstelactie maakt een private back-up van `status.env`, corrigeert alleen
299229ecf6archadmin2026-10-1236 `STATUS_PUBLIC_URL` als die afwijkt, deployt de geteste release met een bestaande
299229ecf6archadmin2026-10-1237 databaseback-up en code-rollback, verifieert daarna de **daadwerkelijk draaiende
299229ecf6archadmin2026-10-1238 versie** via `/healthz` én probeert drie onschuldige loginverzoeken zonder echte
299229ecf6archadmin2026-10-1239 wachtwoorden: een gewone same-origin browser, een browser met privacyheader,
299229ecf6archadmin2026-10-1240 en een geweigerd cross-site verzoek. Bij een mislukte controle meldt de tool
299229ecf6archadmin2026-10-1241 precies welke fase faalde. Hij raakt geen adminwachtwoorden, TOTP of Caddy aan.
299229ecf6archadmin2026-10-1242 
299229ecf6archadmin2026-10-1243 Zie `FIX-ADMIN-LOGIN-1.0.6.md`. Een geslaagde lokale test bewijst nog niet wat
299229ecf6archadmin2026-10-1244 de browser op jouw apparaat verstuurt; als de 403 blijft, vermeld dan of de
299229ecf6archadmin2026-10-1245 melding hetzelfde is en welke foutregel de herstelactie heeft getoond.
299229ecf6archadmin2026-10-1246 
b0c4351f2earchadmin2026-10-1147 ## Nieuw in 1.0.5: adminlogin 403 Invalid origin oplossen
b0c4351f2earchadmin2026-10-1148 
b0c4351f2earchadmin2026-10-1149 Als de browser na het inloggen op `/admin/login` de fout **403 Invalid origin** toont,
b0c4351f2earchadmin2026-10-1150 wordt de POST **voor** de wachtwoord- en 2FA-controle geblokkeerd. De app
b0c4351f2earchadmin2026-10-1151 vergelijkt de herkomst met `STATUS_PUBLIC_URL`; een afwijkende (oude) instelling,
b0c4351f2earchadmin2026-10-1152 of een geldig HTTPS-origin met expliciete standaardpoort 443, kon login blokkeren.
b0c4351f2earchadmin2026-10-1153 
2109dd33b8archadmin2026-10-1254 Pak versie 1.0.5 uit over de bestanden van je **bestaande** ArchForge-repository, commit en push.
b0c4351f2earchadmin2026-10-1155 Start op VPS 2 (als root):
b0c4351f2earchadmin2026-10-1156 
b0c4351f2earchadmin2026-10-1157 ```bash
b0c4351f2earchadmin2026-10-1158 cd ~/archforge-external-status
b0c4351f2earchadmin2026-10-1159 git pull --ff-only
b0c4351f2earchadmin2026-10-1160 bash ./fix-admin-origin.sh
b0c4351f2earchadmin2026-10-1161 ```
b0c4351f2earchadmin2026-10-1162 
b0c4351f2earchadmin2026-10-1163 Deze herstelactie controleert de draaiende statusapp en Caddy-domeinconfiguratie,
b0c4351f2earchadmin2026-10-1164 maakt een private back-up van `status.env`, synchroniseert zo nodig alleen
b0c4351f2earchadmin2026-10-1165 `STATUS_PUBLIC_URL`, installeert de bijgewerkte code met de bestaande geteste
b0c4351f2earchadmin2026-10-1166 deployer, en verifieert dat een HTTPS-loginformulier de origincheck passeert
b0c4351f2earchadmin2026-10-1167 maar niet de CSRF-check. Wachtwoorden/2FA worden niet aangeraakt; de bestaande
b0c4351f2earchadmin2026-10-1168 SQLite-database, incidenten en Caddy-configuratie blijven behouden.
b0c4351f2earchadmin2026-10-1169 Zie `FIX-ADMIN-403-1.0.5.md`.
b0c4351f2earchadmin2026-10-1170 
6b0b538dd6archadmin2026-10-1171 ## Nieuw in 1.0.4: HTTP 302 monitoringfix
6b0b538dd6archadmin2026-10-1172 
2109dd33b8archadmin2026-10-1273 De hoofdwebsite kan een HTTP 302 naar een andere pagina **op hetzelfde HTTPS-domein** teruggeven. Vóór 1.0.4 werd dit ten onrechte als outage beschouwd. De websitecheck volgt nu maximaal 3 veilige redirects en accepteert alleen een uiteindelijke HTTP 200. Dit controleert **bereikbaarheid**, niet alle websitefuncties. API en ArchForge-controles blijven strikt.
6b0b538dd6archadmin2026-10-1174 
2109dd33b8archadmin2026-10-1275 Als je al bent ingelogd als root op VPS 2, voer na commit/push van de 1.0.4-bestanden op je ArchForge-server uit:
6b0b538dd6archadmin2026-10-1176 
6b0b538dd6archadmin2026-10-1177 ```bash
6b0b538dd6archadmin2026-10-1178 cd ~/archforge-external-status
6b0b538dd6archadmin2026-10-1179 git pull --ff-only
6b0b538dd6archadmin2026-10-1180 bash ./apply-monitor-fix.sh
6b0b538dd6archadmin2026-10-1181 ```
6b0b538dd6archadmin2026-10-1182 
6b0b538dd6archadmin2026-10-1183 Dit hergebruikt de bestaande code-deployer, inclusief back-up en rollback bij een mislukte restart. De eerste geslaagde check start meteen na het herstarten; na standaard 2 succesvolle controles verdwijnt het bestaande automatische incident. **Historische 302-fouten blijven in de uptimehistorie staan**. Zie `FIX-HTTP-302-1.0.4.md`.
6b0b538dd6archadmin2026-10-1184 
c50a429023archadmin2026-10-1185 ## Nieuw in 1.0.3: directe HTTPS-reparatie
c50a429023archadmin2026-10-1186 
c50a429023archadmin2026-10-1187 Wanneer Caddy alleen op `:80` luistert en `status.archforge.nl` een `Connection refused` op `:443` geeft, gebruik op **VPS 2** na `git pull --ff-only`:
c50a429023archadmin2026-10-1188 
c50a429023archadmin2026-10-1189 ```bash
c50a429023archadmin2026-10-1190 bash ./fix-https.sh
c50a429023archadmin2026-10-1191 ```
c50a429023archadmin2026-10-1192 
c50a429023archadmin2026-10-1193 Deze root-only herstelactie controleert de lokale statusapp, back-upt `/etc/caddy/Caddyfile`, vervangt **alleen op een dedicated status-VPS** de standaard `:80`-configuratie door een direct HTTPS-domeinblok en herstart Caddy. Wanneer Caddy op `:443` niet kan luisteren, herstelt hij de vorige configuratie en toont de concrete servicefout. Hij raakt `/etc/archforge-status/status.env`, SQLite en je adminaccount niet aan. Hij weigert een Caddy-setup met extra sites in `/etc/caddy/conf.d/`. Zie `FIX-HTTPS-1.0.3.md`.
c50a429023archadmin2026-10-1194 
b8619f148earchadmin2026-10-1195 ## Nieuw in 1.0.2: domein en SSL regelen na de installatie
b8619f148earchadmin2026-10-1196 
2109dd33b8archadmin2026-10-1297 Een **aparte ArchForge-ready wizard** koppelt een statusdomein aan de tweede Debian 13 VPS, controleert A/AAAA-records, configureert Caddy en verifieert de uitgegeven HTTPS-verbinding. De oude SQLite-, admin- en `.env`-instellingen blijven bestaan.
b8619f148earchadmin2026-10-1198 
b8619f148earchadmin2026-10-1199 ```bash
b8619f148earchadmin2026-10-11100 cd ~/archforge-external-status
b8619f148earchadmin2026-10-11101 git pull --ff-only
b8619f148earchadmin2026-10-11102 sudo bash ./configure-domain.sh
b8619f148earchadmin2026-10-11103 ```
b8619f148earchadmin2026-10-11104 
b8619f148earchadmin2026-10-11105 Als je al root bent, mag je `bash ./configure-domain.sh` gebruiken. Je hoeft `./install.sh` of `./update.sh` niet opnieuw te starten. **Lees eerst `DOMAIN-SSL-DEBIAN-13.md`.**
b8619f148earchadmin2026-10-11106 
f1897d33c0archadmin2026-10-11107 ## Admin wizard hotfix / interrupted v1.0.0 installation
f1897d33c0archadmin2026-10-11108 
2109dd33b8archadmin2026-10-12109 If the old installer hangs after the admin username, **do not delete the SQLite database or `.env`**. Update your ArchForge checkout to this release (or copy the hotfix `src/cli.js` and `recover-admin.sh` into it), then, on VPS 2:
f1897d33c0archadmin2026-10-11110 
f1897d33c0archadmin2026-10-11111 ```bash
f1897d33c0archadmin2026-10-11112 # If you are logged in as root:
f1897d33c0archadmin2026-10-11113 cd ~/archforge-external-status
f1897d33c0archadmin2026-10-11114 bash ./recover-admin.sh
f1897d33c0archadmin2026-10-11115 
f1897d33c0archadmin2026-10-11116 # Or if logged in as a regular sudo user:
f1897d33c0archadmin2026-10-11117 sudo bash ./recover-admin.sh
f1897d33c0archadmin2026-10-11118 ```
f1897d33c0archadmin2026-10-11119 
f1897d33c0archadmin2026-10-11120 This only replaces the CLI wizard and finishes admin creation. It does not reinstall packages, restart the service, modify the config or overwrite an existing admin account. Read `HOTFIX-ADMIN-1.0.1.md` for details. `sudo ./install.sh` on an already running installation also delegates to this recovery script.
f1897d33c0archadmin2026-10-11121 
f1897d33c0archadmin2026-10-11122 **Security:** v1.0.0's old `stty`/readline combination could echo the password. Use a fresh unique admin password, especially if the previous one was typed at that prompt.
f1897d33c0archadmin2026-10-11123 
e59b7f7cc6archadmin2026-10-11124 ## Included
e59b7f7cc6archadmin2026-10-11125 
2109dd33b8archadmin2026-10-12126 - Independent checks for main HTTPS website, optional public API, optional public ArchForge HTTPS, ArchForge SSH banner, DNS, and HTTPS TLS certificate.
e59b7f7cc6archadmin2026-10-11127 - Startup and repeating checks (default every 60 seconds). Three failures to confirm an outage; two successes to confirm recovery.
e59b7f7cc6archadmin2026-10-11128 - Responsive dark-blue status website, 7/30/90-day history, incident timeline, per-service details, observed uptime and monitoring coverage.
e59b7f7cc6archadmin2026-10-11129 - Automatic outage incidents and recovery records; manual admin incident updates and scheduled public maintenance notices.
e59b7f7cc6archadmin2026-10-11130 - Discord webhook and email through **the second VPS's own SMTP configuration**. Confirmed subscriptions and unsubscribe links.
e59b7f7cc6archadmin2026-10-11131 - Independent admin credentials, password hashing with scrypt, TOTP authenticator 2FA, session-based CSRF protection.
2109dd33b8archadmin2026-10-12132 - SQLite WAL database outside the ArchForge repository; systemd service; Caddy HTTPS; root-controlled secrets.
2109dd33b8archadmin2026-10-12133 - ArchForge-based manual updates, local release snapshots, `rollback.sh`, daily SQLite backups, `restore.sh` and `uninstall.sh`.
e59b7f7cc6archadmin2026-10-11134 
e59b7f7cc6archadmin2026-10-11135 ## Requirements
e59b7f7cc6archadmin2026-10-11136 
e59b7f7cc6archadmin2026-10-11137 A clean **Debian 13 (Trixie)** VPS with root/sudo access, a network connection for packages, DNS control for `status.archforge.nl`, ports 80/443 inbound, and an SMTP account if email alerts are needed. By default Node.js 24 is installed via a signed NodeSource APT repository. `sudo ./install.sh` makes system-level changes; examine scripts before executing.
e59b7f7cc6archadmin2026-10-11138 
2109dd33b8archadmin2026-10-12139 ## Step 1 — Put the project in ArchForge
e59b7f7cc6archadmin2026-10-11140 
e59b7f7cc6archadmin2026-10-11141 Create a repository, e.g. `archadmin/archforge-external-status`. Unzip this project locally, then run:
e59b7f7cc6archadmin2026-10-11142 
e59b7f7cc6archadmin2026-10-11143 ```bash
e59b7f7cc6archadmin2026-10-11144 git init
e59b7f7cc6archadmin2026-10-11145 git branch -M main
e59b7f7cc6archadmin2026-10-11146 git add .
e59b7f7cc6archadmin2026-10-11147 git commit -m "Initial independent status server"
e59b7f7cc6archadmin2026-10-11148 git remote add origin <ACTUAL_CLONE_URL_FROM_ARCHFORGE>
e59b7f7cc6archadmin2026-10-11149 git push -u origin main
e59b7f7cc6archadmin2026-10-11150 ```
e59b7f7cc6archadmin2026-10-11151 
e59b7f7cc6archadmin2026-10-11152 Do **not** commit a real `.env`, database, backup, SSH key or webhook token. `.gitignore` excludes local secrets. `.env.example` is a harmless template.
e59b7f7cc6archadmin2026-10-11153 
e59b7f7cc6archadmin2026-10-11154 ## Step 2 — DNS (second VPS)
e59b7f7cc6archadmin2026-10-11155 
e59b7f7cc6archadmin2026-10-11156 Add a DNS `A` record for `status.archforge.nl` pointing to the **public IPv4 of VPS 2**. Add an `AAAA` record only if the VPS has working public IPv6. Allow TCP 80 and 443 through provider firewall and OS firewall. Do not proxy the subdomain through VPS 1.
e59b7f7cc6archadmin2026-10-11157 
2109dd33b8archadmin2026-10-12158 ## Existing install: branding repair (v1.0.9)
2109dd33b8archadmin2026-10-12159 
2109dd33b8archadmin2026-10-12160 If your status page still shows **Git SSH** / **Git Smart HTTP** after upgrades, use the
2109dd33b8archadmin2026-10-12161 [branding repair guide](BRANDING-FIX-V109.md). No clean install is needed.
2109dd33b8archadmin2026-10-12162 The repair script only deploys the new application code and preserves the existing
2109dd33b8archadmin2026-10-12163 SQLite database, admin login, monitoring data and Caddy configuration.
2109dd33b8archadmin2026-10-12164 
e59b7f7cc6archadmin2026-10-11165 ## Step 3 — Install on Debian 13
e59b7f7cc6archadmin2026-10-11166 
e59b7f7cc6archadmin2026-10-11167 On VPS 2:
e59b7f7cc6archadmin2026-10-11168 
e59b7f7cc6archadmin2026-10-11169 ```bash
e59b7f7cc6archadmin2026-10-11170 sudo apt-get update
e59b7f7cc6archadmin2026-10-11171 sudo apt-get install -y git
e59b7f7cc6archadmin2026-10-11172 # Use the clone URL displayed by YOUR ArchForge repository.
e59b7f7cc6archadmin2026-10-11173 git clone <ACTUAL_CLONE_URL_FROM_ARCHFORGE> archforge-external-status
e59b7f7cc6archadmin2026-10-11174 cd archforge-external-status
e59b7f7cc6archadmin2026-10-11175 chmod +x install.sh
e59b7f7cc6archadmin2026-10-11176 sudo ./install.sh
e59b7f7cc6archadmin2026-10-11177 ```
e59b7f7cc6archadmin2026-10-11178 
2109dd33b8archadmin2026-10-12179 The interactive wizard checks Debian 13, installs ArchForge, SQLite, Node.js 24, Caddy, msmtp and other requirements, creates a dedicated `archforge-status` service user, asks for domain/targets, Discord webhook and optional SMTP. The wizard generates `/etc/archforge-status/status.env` and an encrypted TOTP secret in SQLite. You must pair an authenticator app and verify a six-digit code during initial admin setup.
e59b7f7cc6archadmin2026-10-11180 
e59b7f7cc6archadmin2026-10-11181 **Do not use `sudo ./install.sh` on the main VPS!** Install it only on VPS 2.
e59b7f7cc6archadmin2026-10-11182 
2109dd33b8archadmin2026-10-12183 ### Secrets and data are not in ArchForge
e59b7f7cc6archadmin2026-10-11184 
e59b7f7cc6archadmin2026-10-11185 | File | Purpose |
e59b7f7cc6archadmin2026-10-11186 | --- | --- |
e59b7f7cc6archadmin2026-10-11187 | `/etc/archforge-status/status.env` | Root-controlled configuration, encryption key, Discord webhook |
e59b7f7cc6archadmin2026-10-11188 | `/etc/archforge-status/msmtprc` | Restricted SMTP client configuration |
e59b7f7cc6archadmin2026-10-11189 | `/var/lib/archforge-status/status.db` | Independent SQLite database and admin credentials |
e59b7f7cc6archadmin2026-10-11190 | `/opt/archforge-status/app` | Running, installed program code |
e59b7f7cc6archadmin2026-10-11191 | `/var/backups/archforge-status/` | Private database and configuration backups |
e59b7f7cc6archadmin2026-10-11192 
e59b7f7cc6archadmin2026-10-11193 Do not lose the environment encryption key or TOTP recovery will fail. **Backups include sensitive credentials** and should be stored on an encrypted disk and ideally copied to a secure location *outside* VPS 2.
e59b7f7cc6archadmin2026-10-11194 
e59b7f7cc6archadmin2026-10-11195 ## Step 4 — Confirm operation
e59b7f7cc6archadmin2026-10-11196 
e59b7f7cc6archadmin2026-10-11197 ```bash
e59b7f7cc6archadmin2026-10-11198 sudo systemctl status archforge-status --no-pager
e59b7f7cc6archadmin2026-10-11199 sudo journalctl -u archforge-status -n 80 --no-pager
e59b7f7cc6archadmin2026-10-11200 curl -fsS http://127.0.0.1:3000/healthz
e59b7f7cc6archadmin2026-10-11201 curl -I https://status.archforge.nl
e59b7f7cc6archadmin2026-10-11202 ```
e59b7f7cc6archadmin2026-10-11203 
e59b7f7cc6archadmin2026-10-11204 Open `https://status.archforge.nl`, and log in at `/admin/login` with the separate admin credentials and TOTP. First-time uptime history starts empty; days without measurements are shown as **Unknown**, not as successful uptime.
e59b7f7cc6archadmin2026-10-11205 
e59b7f7cc6archadmin2026-10-11206 If HTTPS is not issuing, verify DNS points to VPS 2, ports 80/443, `sudo systemctl status caddy`, and `sudo journalctl -u caddy -n 80`. The installer does not modify `archforge.nl` or its reverse proxy.
e59b7f7cc6archadmin2026-10-11207 
e59b7f7cc6archadmin2026-10-11208 ## Operations
e59b7f7cc6archadmin2026-10-11209 
e59b7f7cc6archadmin2026-10-11210 ```bash
e59b7f7cc6archadmin2026-10-11211 sudo systemctl restart archforge-status
e59b7f7cc6archadmin2026-10-11212 sudo systemctl status archforge-status
e59b7f7cc6archadmin2026-10-11213 sudo journalctl -u archforge-status -f
2109dd33b8archadmin2026-10-12214 ./update.sh # run as the ArchForge checkout owner, NOT with sudo
e59b7f7cc6archadmin2026-10-11215 ./backup.sh # invokes sudo
e59b7f7cc6archadmin2026-10-11216 ./rollback.sh # restores previous installed application code
e59b7f7cc6archadmin2026-10-11217 ./restore.sh /var/backups/archforge-status/backup-YYYYMMDD-HHMMSS.tar.gz
e59b7f7cc6archadmin2026-10-11218 sudo bash scripts/uninstall.sh
e59b7f7cc6archadmin2026-10-11219 ```
e59b7f7cc6archadmin2026-10-11220 
2109dd33b8archadmin2026-10-12221 `./update.sh` fetches from the configured ArchForge remote using `git pull --ff-only`, confirms the intended deployment, tests the staged release and backs up SQLite before changing the installed application. ArchForge connectivity is required **only for fetching new code**. A primary VPS outage does not affect the running monitoring service.
e59b7f7cc6archadmin2026-10-11222 
e59b7f7cc6archadmin2026-10-11223 `./rollback.sh` returns the prior *code* snapshot; it does not reverse database schema migrations. `restore.sh` restores config and database from a manually selected backup (after explicit confirmation). A daily systemd timer performs a SQLite-consistent backup with 14-day local rotation. This retention period is configurable in `scripts/backup.sh`.
e59b7f7cc6archadmin2026-10-11224 
e59b7f7cc6archadmin2026-10-11225 ## Monitoring targets
e59b7f7cc6archadmin2026-10-11226 
e59b7f7cc6archadmin2026-10-11227 Use `TARGET_WEBSITE=https://archforge.nl`. The default public API target is an **optional, separately monitored service**, not a data source required by the monitor. An inaccessible API is reported as an observed failure while VPS 2 remains operational. Leave `TARGET_API_URL=` blank to disable it.
e59b7f7cc6archadmin2026-10-11228 
2109dd33b8archadmin2026-10-12229 For real public ArchForge HTTPS checking, configure `TARGET_GIT_HTTP_URL` to an existing **public repository** route ending with `/info/refs`. For example: `https://archforge.nl/USER/PUBLIC_REPO.archforge/info/refs` *if that matches your ArchForge-server URL*. The request is read-only and requires a valid ArchForge upload-pack discovery response. Leave empty if your ArchForge HTTPS endpoint is private or unavailable.
e59b7f7cc6archadmin2026-10-11230 
2109dd33b8archadmin2026-10-12231 ArchForge SSH checks only test TCP plus an SSH protocol banner, **not an authenticated ArchForge push**. DNS resolution only verifies DNS lookups. A successful HTTPS check does not mean all website features work. Internal components without external endpoints must not be labeled independently healthy.
e59b7f7cc6archadmin2026-10-11232 
e59b7f7cc6archadmin2026-10-11233 ## Configuration
e59b7f7cc6archadmin2026-10-11234 
e59b7f7cc6archadmin2026-10-11235 All primary options are documented in `.env.example`. Modify the real file with:
e59b7f7cc6archadmin2026-10-11236 
e59b7f7cc6archadmin2026-10-11237 ```bash
e59b7f7cc6archadmin2026-10-11238 sudoedit /etc/archforge-status/status.env
e59b7f7cc6archadmin2026-10-11239 sudo systemctl restart archforge-status
e59b7f7cc6archadmin2026-10-11240 ```
e59b7f7cc6archadmin2026-10-11241 
e59b7f7cc6archadmin2026-10-11242 For SMTP changes, update `/etc/archforge-status/msmtprc` as well (owned by `archforge-status`, mode `600`). The app sends mail using Debian's `msmtp` binary and never relies on VPS 1 SMTP. Discord messages use the standard Discord channel webhook format `https://discord.com/api/webhooks/ID/TOKEN`, NOT an invite URL such as `https://discord.gg/...`.
e59b7f7cc6archadmin2026-10-11243 
e59b7f7cc6archadmin2026-10-11244 Monitoring runs once per minute by default (30-second minimum). The last ~400 days of raw samples are retained. Use the Admin Control Center to publish incident progress and announce planned maintenance. Scheduled maintenance **informs visitors**, but cannot execute remote maintenance on VPS 1.
e59b7f7cc6archadmin2026-10-11245 
e59b7f7cc6archadmin2026-10-11246 ## Independent security model
e59b7f7cc6archadmin2026-10-11247 
e59b7f7cc6archadmin2026-10-11248 - The status site listens only on `127.0.0.1:3000`; Caddy handles HTTPS.
e59b7f7cc6archadmin2026-10-11249 - No shared login tokens with ArchForge, no database credentials from the main platform, no remote shell, no arbitrary URL checking from the admin dashboard.
e59b7f7cc6archadmin2026-10-11250 - Public subscriptions are confirmed via email and include unsubscribe links; HTTP forms have CSRF protection and simple rate limits.
e59b7f7cc6archadmin2026-10-11251 - Rate limiting is in-process and resets after a service restart; a network-level reverse-proxy limit is recommended for high-traffic installations.
e59b7f7cc6archadmin2026-10-11252 - Systemd hardening and per-file permissions are used. Keep Debian, Caddy, Node.js and the service patched.
e59b7f7cc6archadmin2026-10-11253 - This is **one external monitor on one VPS**. If VPS 2 or its network goes down, it cannot independently report its own outage. Consider a third-party heartbeat for that later.
e59b7f7cc6archadmin2026-10-11254 
e59b7f7cc6archadmin2026-10-11255 ## Tests
e59b7f7cc6archadmin2026-10-11256 
e59b7f7cc6archadmin2026-10-11257 ```bash
e59b7f7cc6archadmin2026-10-11258 node --version # supported in production: v24 or later
e59b7f7cc6archadmin2026-10-11259 npm test
e59b7f7cc6archadmin2026-10-11260 npm run check
e59b7f7cc6archadmin2026-10-11261 bash -n install.sh scripts/*.sh
e59b7f7cc6archadmin2026-10-11262 ```
e59b7f7cc6archadmin2026-10-11263 
2109dd33b8archadmin2026-10-12264 This is a first release. Run the installer and a controlled failure/recovery test on your VPS before relying on it for production alerts. Never upload real secrets or your SQLite database to ArchForge.