No description
  • Shell 71.8%
  • Makefile 17.9%
  • Jinja 10.3%
Find a file
Jaakko Ruhanen 1ddb5d7b07 Add handbook, move guide and test markers
handbook.md describes how the team manages projects and repositories.
SIIRTO.md describes moving to another provider, with the S3 bucket
staying at Hetzner as an offsite copy. RUNBOOK and KIRJAUTUMINEN now
record what has been tested under each heading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 21:42:30 +02:00
roles Merge split of site.yml into local roles 2026-11-05 11:53:50 +02:00
scripts Split site.yml into local roles 2026-11-05 11:52:09 +02:00
.gitattributes Build Forgejo host: playbook, nightly run, backups, restore 2026-11-04 22:51:39 +02:00
.gitignore Build Forgejo host: playbook, nightly run, backups, restore 2026-11-04 22:51:39 +02:00
architecture.svg Update docs and diagram to the current system 2026-11-05 03:06:28 +02:00
config.yml Add login guide and rename the admin key 2026-11-05 12:37:10 +02:00
handbook.md Add handbook, move guide and test markers 2026-11-05 21:42:30 +02:00
inventory.example.ini Caddy, split settings, admin users, restic cache, audit fixes 2026-11-05 01:31:44 +02:00
KIRJAUTUMINEN.md Add handbook, move guide and test markers 2026-11-05 21:42:30 +02:00
Makefile Add S3 preview check, live job progress and restore targets 2026-11-05 02:58:34 +02:00
README.md Remove the notes reference from README 2026-11-05 12:38:08 +02:00
requirements.yml Build Forgejo host: playbook, nightly run, backups, restore 2026-11-04 22:51:39 +02:00
RUNBOOK.md Add handbook, move guide and test markers 2026-11-05 21:42:30 +02:00
SIIRTO.md Add handbook, move guide and test markers 2026-11-05 21:42:30 +02:00
site.yml Split site.yml into local roles 2026-11-05 11:52:09 +02:00
vars.example.yml Replace pgBackRest and rclone with hourly pg_dump and restic 2026-11-05 02:24:06 +02:00

forgejo-host

Forgejo Git-palvelimeksi yhdellä virtuaalikoneella.

Tavoite

  • Forgejo pyörii virtuaalikoneella ja isännöi Git-repojamme.
  • Se päivittää itsensä automaattisesti.
  • Se vaatii mahdollisimman vähän käsin tehtävää ylläpitoa.
  • Koko VM on vain Forgejoa varten, joten asennus pysyy hyvin yksinkertaisena.

Suunnitelma

Järjestelmän yleiskuva

Asennus on rakennettu ja testattu dev1-koneella: asennus, varmuuskopio, palautus ja uudelleenkäynnistys toimivat. Käyttöohjeet ovat tiedostossa RUNBOOK.md, ja lyhyet komennot näkyvät ajamalla make.

  • Käyttäjät: noin kuuden hengen tiimi. Repot ovat yksityisiä, kirjautuminen on pakollinen, rekisteröityminen on pois päältä ja ylläpitäjä luo tilit. Demon ajaksi kirjautumispakko on pois päältä, katso Ennen tuotantoa.
  • Palvelin: yksi käsin tehty Hetzner-VM, AlmaLinux 10, SELinux enforcing-tilassa. Ei Dockeria. Tuotanto tehdään uudelle koneelle.
  • Verkko: Caddy hoitaa TLS:n, sertifikaatin ja HSTS:n, ja Forgejo kuuntelee vain paikallisesti. Git SSH toimii portissa 22.
  • Suojaus: SELinux rajaa Postgresia, mutta ei Forgejoa, jota rajataan systemd-asetuksilla.
  • Ylläpito: henkilökohtaiset sudo-käyttäjät config.yml-tiedostossa. Root ei pääse kirjautumaan.
  • Osoite: toistaiseksi forgejo.jrcloud.dev testiympäristönä. Domain on yksi Ansible-muuttuja.
  • Tietokanta: Postgres 18, PGDG:n paketeista.
  • Asetukset: config.yml on Gitissä, ja vars.yml sisältää vain salaisuudet vaultissa.
  • Periaate: palvelimen odotettu tila on kirjoitettu Ansibleen niin pitkälle kuin mahdollista, eikä konetta muuteta käsin.

Yöajo

Yksi skripti ja yksi ajastin, aikaan jolloin kukaan ei työskentele:

  1. Varmuuskopio S3:een.
  2. Käyttöjärjestelmän pakettien päivitys.
  3. Forgejon päivitys LTS-linjan sisällä.
  4. Uudelleenkäynnistys, jos needs-restarting -r sitä vaatii.
  5. Tarkistus, että Forgejo vastaa.

Epäonnistunut varmuuskopio tuottaa hälytyksen, mutta ei estä tietoturvapäivityksiä. Pääversiopäivitykset eivät ole automaattisia, vaan tavoiteversio vaihdetaan config.yml:ssä ja ajetaan Ansible.

Varmuuskopiot

  • Malli: tunnin välein pg_dump ja restic S3:een. Sama ajo ottaa tietokannan, repot, liitteet ja konfiguraation, joten ne ovat lähes samalta hetkeltä. Menetettävää dataa on enintään noin tunti.
  • Paikallinen kopio: viimeisin dump jää koneelle nopeaa palautusta varten.
  • Kohde: Hetzner Object Storage.
  • Hälytykset: epäonnistuneet ajot ja vähäinen levytila. Ping-osoitteet lisätään myöhemmin.
  • Salaisuudet: VM:llä töitä varten vain rootin luettavissa, ja kopio on tallessa Ansible Vaultissa ja salasanamanagerissa.

Palautuksen testaus

  • Viikoittain, automaattisesti, VM:llä: palautus väliaikaiseen paikkaan, väliaikainen Postgres, datan tarkistus ja git fsck palautetulle repolle.
  • Ennen käyttöönottoa ja noin kerran vuodessa, käsin: täysi palautus uudelle VM:lle pelkästään vanhan koneen ulkopuolella olevilla tiedoilla.
  • Testit ja oikeat palautukset käyttävät samaa palautusskriptiä: make restore-test ja make restore SNAPSHOT=id.

Ennen tuotantoa

Demoa varten julkiset repot on sallittu tilapäisesti. Nämä on palautettava ennen tuotantoa:

  • Tiedostossa app.ini.j2 takaisin REQUIRE_SIGNIN_VIEW = true ja FORCE_PRIVATE = true, minkä jälkeen make deploy.
  • Demoa varten julkisiksi vaihdetut repot takaisin yksityisiksi Forgejossa. FORCE_PRIVATE ei muuta olemassa olevia repoja.

Myöhemmin

  • CrowdSec: suojaamaan palvelua hyökkäysyrityksiltä.
  • Hälytykset: ping-osoitteet, ennen tuotantoa.
  • Bucketin versiointi ja säilytyssääntö: auditoinnin kohta H1.
  • Sähköposti ja CI.
  • Tuotannon domain.