5.5 KiB
Deployment Instructions
Overview
Deployment gebeurt via Gitea Actions, opgesplitst in twee bestanden:
.gitea/workflows/continuous_integration.yaml— build/test/lint-gate, plus dedeploy-testjob..gitea/workflows/deploy.yaml— herbruikbare workflow diedist/via SCP naar een omgeving uploadt.
Sinds deze stap wordt er automatisch gedeployed naar een testomgeving: een Raspberry Pi die de site serveert via nginx, bereikbaar achter een tweede Raspberry Pi met een nginx reverse proxy.
Pipeline Files
continuous_integration.yaml— getriggerd doorpull_request(build/test/lint-gate),pushnaarmaster, en handmatig viaworkflow_dispatch.- Heeft bovenaan een
env:-blok (NODE_VERSION,PNPM_VERSION) — pas de Node/pnpm-versie hier op één plek aan, gebruikt wordt dit door allesetup-node/pnpm/action-setup-stappen. prepare→build(uploadtdistartifact) →test(lint + unit tests)deploy-test(alleen bijworkflow_dispatchof een push naarmaster) roeptdeploy.yamlaan metenvironment: testendeploy_path: /html/test/slpsoftware
- Heeft bovenaan een
deploy.yaml— download dedist-artifact en upload de inhoud viaappleboy/scp-actionnaar de opgegevendeploy_pathop de host uit de meegegeven secrets.deploy_path/environment/artifact_namezijn al herbruikbare inputs bovenaan dit bestand (workflow_call.inputs).
Waarom staan deploy_path/environment niet ook in het env:-blok?
Gitea/GitHub Actions ondersteunt geen env-context in de with:-sectie waarmee een reusable workflow wordt aangeroepen (jobs.<job_id>.with) — dat werkt alléén binnen jobs.<job_id>.steps. Daarom moeten artifact_name, environment en deploy_path in de deploy-test-job in continuous_integration.yaml letterlijk blijven staan; dit is een beperking van Actions zelf, niet iets dat hier is opgelost. Wil je dit pad wijzigen, pas dan die regels rechtstreeks aan (zie ook de eerdere uitleg hierover).
Eenmalige Setup — Gitea Secrets
Voeg deze secrets toe in Gitea: Repository → Settings → Actions → Secrets:
| Secret | Waarde |
|---|---|
PI_MAIN_HOST |
Intern IP-adres van de webserver-Pi (192.168.1.103) |
PI_MAIN_PORT |
SSH-poort (2224) |
PI_MAIN_USERNAME |
SSH-gebruikersnaam (webadmin) |
PI_MAIN_PASSWORD |
Het SSH-wachtwoord van deze gebruiker |
Deze secrets heten PI_MAIN_* (niet PI_TEST_*), omdat dezelfde Pi (Pi Main) en dezelfde inloggegevens naar verwachting ook voor toekomstige omgevingen/webhosts gebruikt worden. Mocht dat later veranderen, dan worden hiervoor alsnog omgeving-specifieke secrets geïntroduceerd.
Eenmalige Setup — Domeinnaam & DNS
- Test:
test.slpsoftware.nl→ moet als DNS A-record wijzen naar het publieke IP van de reverse-proxy-Pi. - Productie (nog niet automatisch gedeployed, maar domein al bekend):
slpsoftware.nl(enwww.slpsoftware.nl) → zelfde reverse-proxy-Pi, zodra productie wordt opgezet.
Eenmalige Setup — nginx & SSL op de Raspberry Pi's
- Kopieer
operations/deployment/nginx/webserver-nginx.conf.examplenaar/etc/nginx/sites-available/op de webserver-Pi, maak een symlink insites-enabled/, en herlaad nginx. - Kopieer
operations/deployment/nginx/reverse-proxy-nginx.conf.examplenaar/etc/nginx/sites-available/slpsoftware-test.confop de reverse-proxy-Pi, maak een symlink insites-enabled/, en herlaad nginx. Dit bestand gebruikt altest.slpsoftware.nlalsserver_name. - Vraag op de reverse-proxy-Pi een SSL-certificaat aan met certbot (Let's Encrypt), nadat het DNS-record klopt:
sudo certbot --nginx -d test.slpsoftware.nl. Certbot regelt automatisch de HTTPS-configuratie en de HTTP→HTTPS-redirect (net zoals je gewend bent van certbot). - Zorg dat de map
/html/test/slpsoftwarebestaat op de webserver-Pi en schrijfbaar is voor de gebruikerwebadmin(bijv.sudo mkdir -p /html/test/slpsoftware && sudo chown webadmin:webadmin /html/test/slpsoftware). - Voor later, wanneer productie wordt opgezet: zie
operations/deployment/nginx/reverse-proxy-nginx-production.conf.example(domeinslpsoftware.nl, certbot-commando alvast gedocumenteerd).
How to Deploy to Test
Automatisch
Merge een pull request naar master — de deploy-test job draait dan automatisch na een groene build/test-run.
Handmatig
- In Gitea, open de repository's Actions tab.
- Selecteer de Continuous Integration workflow.
- Klik Run workflow, kies de gewenste branch/ref, en start.
Verifying a Deployment
- Bevestig dat de Gitea Actions run succesvol is (alle jobs groen, inclusief
deploy-test). - Open de testomgeving in de browser (via het adres/IP dat je bij de reverse-proxy hebt ingesteld) en controleer dat de site correct laadt (check de browserconsole op fouten, zoals in de handmatige smoke test in
construction/build-and-test/integration-test-instructions.md).
Future Work
- Van wachtwoord naar SSH-key: vervang
password: ${{ secrets.PI_MAIN_PASSWORD }}indeploy.yamldoorkey: ${{ secrets.PI_MAIN_SSH_KEY }}(een nieuwe secret met de private key-inhoud), en zet de bijbehorende public key in~/.ssh/authorized_keysvan dewebadmin-gebruiker op de webserver-Pi. Verwijder daarna het wachtwoord-secret. - Productie-omgeving: voeg een
deploy-production-job toe zodra de definitieve productiehosting bekend is (ziedeployment-plan.md's "Open Item"), en pasnginx/reverse-proxy-nginx-production.conf.example(domeinslpsoftware.nl) toe zodra de webserver-locatie voor productie vastligt.