Pipeline afstemmen op HTTP-registry 10.0.20.22:3000 (bes-r/teach)
Some checks failed
dev - build & deploy naar test / build-and-deploy (push) Has been cancelled

This commit is contained in:
bes-r 2026-07-07 22:57:48 +02:00
parent 516a048ce7
commit 27faa8e6a1
4 changed files with 55 additions and 47 deletions

View file

@ -13,9 +13,9 @@ jobs:
build-and-deploy: build-and-deploy:
runs-on: ubuntu-latest # pas aan naar het label van jouw Forgejo-runner runs-on: ubuntu-latest # pas aan naar het label van jouw Forgejo-runner
env: env:
# git.jouwdomein.nl - host van je Forgejo (= container registry host) # 10.0.20.22:3000 - host van je Forgejo (= container registry host)
REGISTRY: ${{ vars.REGISTRY }} REGISTRY: ${{ vars.REGISTRY }}
IMAGE_NAME: ${{ github.repository }} # bv. ramon/teach IMAGE_NAME: ${{ github.repository }} # bes-r/teach
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -27,23 +27,18 @@ jobs:
echo "sha_tag=${IMAGE}:dev-${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT" echo "sha_tag=${IMAGE}:dev-${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
echo "dev_tag=${IMAGE}:dev" >> "$GITHUB_OUTPUT" echo "dev_tag=${IMAGE}:dev" >> "$GITHUB_OUTPUT"
- name: Login bij Forgejo registry # Platte docker build/push i.p.v. buildx: betrouwbaarder tegen een
uses: docker/login-action@v3 # HTTP-registry. De runner-host moet 10.0.20.22:3000 als
with: # insecure-registry hebben (zie README).
registry: ${{ vars.REGISTRY }} - name: Login, build & push
username: ${{ secrets.REGISTRY_USER }} run: |
password: ${{ secrets.REGISTRY_TOKEN }} echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "$REGISTRY" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
docker build \
- name: Build & push --build-arg APP_VERSION="dev-${GITHUB_SHA::7}" \
uses: docker/build-push-action@v6 -t "${{ steps.meta.outputs.sha_tag }}" \
with: -t "${{ steps.meta.outputs.dev_tag }}" .
context: . docker push "${{ steps.meta.outputs.sha_tag }}"
push: true docker push "${{ steps.meta.outputs.dev_tag }}"
build-args: |
APP_VERSION=dev-${{ github.sha }}
tags: |
${{ steps.meta.outputs.sha_tag }}
${{ steps.meta.outputs.dev_tag }}
- name: Deploy naar test-VM - name: Deploy naar test-VM
uses: appleboy/ssh-action@v1 uses: appleboy/ssh-action@v1

View file

@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest # pas aan naar het label van jouw Forgejo-runner runs-on: ubuntu-latest # pas aan naar het label van jouw Forgejo-runner
env: env:
REGISTRY: ${{ vars.REGISTRY }} REGISTRY: ${{ vars.REGISTRY }}
IMAGE_NAME: ${{ github.repository }} IMAGE_NAME: ${{ github.repository }} # bes-r/teach
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -29,23 +29,16 @@ jobs:
echo "latest_tag=${IMAGE}:latest" >> "$GITHUB_OUTPUT" echo "latest_tag=${IMAGE}:latest" >> "$GITHUB_OUTPUT"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT" echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
- name: Login bij Forgejo registry # Platte docker build/push (HTTP-registry, zie README voor insecure-registry).
uses: docker/login-action@v3 - name: Login, build & push
with: run: |
registry: ${{ vars.REGISTRY }} echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "$REGISTRY" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
username: ${{ secrets.REGISTRY_USER }} docker build \
password: ${{ secrets.REGISTRY_TOKEN }} --build-arg APP_VERSION="${{ steps.meta.outputs.version }}" \
-t "${{ steps.meta.outputs.version_tag }}" \
- name: Build & push -t "${{ steps.meta.outputs.latest_tag }}" .
uses: docker/build-push-action@v6 docker push "${{ steps.meta.outputs.version_tag }}"
with: docker push "${{ steps.meta.outputs.latest_tag }}"
context: .
push: true
build-args: |
APP_VERSION=${{ steps.meta.outputs.version }}
tags: |
${{ steps.meta.outputs.version_tag }}
${{ steps.meta.outputs.latest_tag }}
- name: Deploy naar productie-VM - name: Deploy naar productie-VM
uses: appleboy/ssh-action@v1 uses: appleboy/ssh-action@v1

View file

@ -46,9 +46,11 @@ Maak een leeg repo (bv. `ramon/teach`) en push (zie onderaan).
### 2. Registry / Actions variabelen en secrets ### 2. Registry / Actions variabelen en secrets
Onder **Settings → Actions → Variables** van het repo (of org): Onder **Settings → Actions → Variables** van het repo (of org):
| Variable | Voorbeeld | Uitleg | | Variable | Waarde | Uitleg |
|------------|--------------------------|---------------------------------| |------------|------------------|---------------------------------|
| `REGISTRY` | `git.familiebesselink.nl`| Host van je Forgejo = registry | | `REGISTRY` | `10.0.20.22:3000`| Host van je Forgejo = registry |
De image heet dan `10.0.20.22:3000/bes-r/teach`.
Onder **Settings → Actions → Secrets**: Onder **Settings → Actions → Secrets**:
@ -65,10 +67,28 @@ Onder **Settings → Actions → Secrets**:
| `PROD_SSH_KEY` | Private SSH-key voor de productie-VM | | `PROD_SSH_KEY` | Private SSH-key voor de productie-VM |
| `PROD_DEPLOY_PATH` | Pad op de productie-VM met de deploy-bestanden | | `PROD_DEPLOY_PATH` | Pad op de productie-VM met de deploy-bestanden |
> De runner moet Docker + buildx beschikbaar hebben en `actions/checkout`, > De runner moet de `docker`-CLI kunnen gebruiken (host-socket of docker-in-docker)
> `docker/*` en `appleboy/ssh-action` kunnen ophalen (standaard van github.com; > en `actions/checkout` + `appleboy/ssh-action` kunnen ophalen. Pas `runs-on` in
> instelbaar via de runner-config). Pas `runs-on` in de workflows aan naar het > de workflows aan naar het label van jouw runner als dat niet `ubuntu-latest` is.
> label van jouw runner als dat niet `ubuntu-latest` is.
### 2b. HTTP-registry toestaan (insecure-registries)
Je Forgejo draait op **`http://10.0.20.22:3000`** (platte HTTP). Docker weigert
HTTP-registries tenzij je ze expliciet toestaat. Doe dit op **drie** plekken: de
**runner-host** (die pusht) en **beide VM's** (die pullen). Op elke Docker-host:
```bash
# /etc/docker/daemon.json
{
"insecure-registries": ["10.0.20.22:3000"]
}
```
```bash
sudo systemctl restart docker
```
> Zet je Forgejo later achter HTTPS met een echt domein, dan kan deze stap weg
> en gebruik je dat domein als `REGISTRY`.
### 3. Deploy-map op elke VM ### 3. Deploy-map op elke VM
Op zowel de test- als de productie-VM, in het pad dat je bij `*_DEPLOY_PATH` Op zowel de test- als de productie-VM, in het pad dat je bij `*_DEPLOY_PATH`
@ -81,7 +101,7 @@ mkdir -p teach && cd teach
# db/ -> db/ # db/ -> db/
# maak een .env aan: # maak een .env aan:
cat > .env <<'EOF' cat > .env <<'EOF'
IMAGE=git.familiebesselink.nl/ramon/teach:dev # prod: laat CI dit op :vX.Y.Z zetten IMAGE=10.0.20.22:3000/bes-r/teach:dev # prod: laat CI dit op :vX.Y.Z zetten
POSTGRES_DB=teach POSTGRES_DB=teach
POSTGRES_USER=teach POSTGRES_USER=teach
POSTGRES_PASSWORD=<sterk-wachtwoord> POSTGRES_PASSWORD=<sterk-wachtwoord>
@ -118,7 +138,7 @@ server {
## Push naar Forgejo (eerste keer) ## Push naar Forgejo (eerste keer)
```bash ```bash
git remote add origin https://git.familiebesselink.nl/ramon/teach.git git remote add origin http://10.0.20.22:3000/bes-r/teach.git
git push -u origin main git push -u origin main
git push -u origin dev git push -u origin dev
``` ```

View file

@ -5,7 +5,7 @@
# docker compose -f compose.deploy.yaml up -d # docker compose -f compose.deploy.yaml up -d
# #
# Verwachte env-variabelen op de VM (in ./.env): # Verwachte env-variabelen op de VM (in ./.env):
# IMAGE=git.jouwdomein.nl/ramon/teach:dev (of :vX.Y.Z op prod) # IMAGE=10.0.20.22:3000/bes-r/teach:dev (of :vX.Y.Z op prod)
# POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD # POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD
# DATABASE_URL=postgres://<user>:<pw>@db:5432/<db> # DATABASE_URL=postgres://<user>:<pw>@db:5432/<db>
# APP_PORT=3000 (poort die nginx op deze VM naar de app proxyt) # APP_PORT=3000 (poort die nginx op deze VM naar de app proxyt)