141 lines
2.7 KiB
Markdown
141 lines
2.7 KiB
Markdown
1. Nieuwe app aanmaken
|
||
1.1 Gitea repo
|
||
|
||
Log in op Gitea: https://git.appmodel.nl
|
||
|
||
Maak een nieuwe repo aan, bijvoorbeeld:
|
||
|
||
Owner: Tour
|
||
|
||
Name: viewer
|
||
|
||
1.2 Skeleton genereren op de server
|
||
|
||
Op de server:
|
||
|
||
apps-create viewer static-fe
|
||
|
||
|
||
Dit doet:
|
||
|
||
/opt/apps/viewer klaarzetten (proberen te clonen uit git@git.appmodel.nl:Tour/viewer.git)
|
||
|
||
een multi-stage Dockerfile voor een Node-based static frontend aanmaken
|
||
|
||
~/infra/viewer/docker-compose.yml aanmaken met:
|
||
|
||
service viewer
|
||
|
||
koppeling aan traefik_net
|
||
|
||
Traefik route: https://viewer.appmodel.nl
|
||
|
||
2. Develop & build
|
||
|
||
Op je dev machine:
|
||
|
||
git clone git@git.appmodel.nl:Tour/viewer.git
|
||
cd viewer
|
||
# bouw je app zoals normaal
|
||
npm install
|
||
npm run build # output in dist/
|
||
git add .
|
||
git commit -m "First version"
|
||
git push
|
||
|
||
|
||
De Dockerfile verwacht een dist/ map met static files.
|
||
|
||
3. Deploy pipeline
|
||
3.1 app-deploy <app>
|
||
|
||
Op de server verzorgt app-deploy de generieke deploy:
|
||
|
||
app-deploy viewer
|
||
|
||
|
||
Doet:
|
||
|
||
cd /opt/apps/viewer
|
||
|
||
git pull --ff-only
|
||
|
||
cd /home/tour/infra/viewer
|
||
|
||
docker compose up -d --build viewer
|
||
|
||
Logs komen in:
|
||
|
||
/var/log/app-deploy-viewer.log
|
||
|
||
3.2 Automatisch deployen via Gitea hook
|
||
|
||
In Gitea (repo Tour/viewer):
|
||
|
||
Ga naar Instellingen → Git Hooks
|
||
|
||
Kies post-receive
|
||
|
||
Gebruik:
|
||
|
||
#!/usr/bin/env bash
|
||
/usr/local/bin/app-deploy viewer
|
||
|
||
|
||
Vanaf nu:
|
||
|
||
Elke git push naar Tour/viewer triggert automatisch een deploy.
|
||
|
||
4. Traefik & DNS
|
||
|
||
Traefik draait in de traefik stack op dezelfde server en beheert:
|
||
|
||
git.appmodel.nl
|
||
|
||
auction.appmodel.nl
|
||
|
||
aupi.appmodel.nl
|
||
|
||
… (nieuwe apps via labels)
|
||
|
||
Nieuwe app viewer krijgt via apps-create al de juiste labels:
|
||
|
||
labels:
|
||
- "traefik.enable=true"
|
||
- "traefik.http.routers.viewer.rule=Host(`viewer.appmodel.nl`)"
|
||
- "traefik.http.routers.viewer.entrypoints=websecure"
|
||
- "traefik.http.routers.viewer.tls=true"
|
||
- "traefik.http.routers.viewer.tls.certresolver=letsencrypt"
|
||
- "traefik.http.services.viewer.loadbalancer.server.port=80"
|
||
|
||
|
||
Je moet alleen in DNS nog een record maken:
|
||
|
||
viewer.appmodel.nl → publieke IP van de server
|
||
|
||
Traefik + Let’s Encrypt regelen het certificaat automatisch.
|
||
|
||
5. Nieuwe app types (toekomst)
|
||
|
||
Het apps-create script ondersteunt nu:
|
||
|
||
static-fe – Node build → Nginx → static frontend
|
||
|
||
Later kun je extra types toevoegen, bijvoorbeeld:
|
||
|
||
api-py – Python (Flask/FastAPI) API
|
||
|
||
worker-py – background worker / crawler
|
||
|
||
Door per type een eigen Dockerfile-sjabloon en standaard docker-compose.yml te genereren, wordt een nieuw project neerzetten:
|
||
|
||
apps-create stats api-py
|
||
apps-create crawler worker-py
|
||
|
||
|
||
en blijft de pipeline (app-deploy <naam>) identiek.
|
||
|
||
Je kunt nu:
|
||
|
||
apps-create viewer static-fe
|
||
app-deploy viewer |