diff --git a/.forgejo/workflows/dev.yaml b/.forgejo/workflows/dev.yaml index 61c2a21..0486c07 100644 --- a/.forgejo/workflows/dev.yaml +++ b/.forgejo/workflows/dev.yaml @@ -13,9 +13,9 @@ jobs: build-and-deploy: runs-on: ubuntu-latest # pas aan naar het label van jouw Forgejo-runner 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 }} - IMAGE_NAME: ${{ github.repository }} # bv. ramon/teach + IMAGE_NAME: ${{ github.repository }} # bes-r/teach steps: - uses: actions/checkout@v4 @@ -27,23 +27,18 @@ jobs: echo "sha_tag=${IMAGE}:dev-${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT" echo "dev_tag=${IMAGE}:dev" >> "$GITHUB_OUTPUT" - - name: Login bij Forgejo registry - uses: docker/login-action@v3 - with: - registry: ${{ vars.REGISTRY }} - username: ${{ secrets.REGISTRY_USER }} - password: ${{ secrets.REGISTRY_TOKEN }} - - - name: Build & push - uses: docker/build-push-action@v6 - with: - context: . - push: true - build-args: | - APP_VERSION=dev-${{ github.sha }} - tags: | - ${{ steps.meta.outputs.sha_tag }} - ${{ steps.meta.outputs.dev_tag }} + # Platte docker build/push i.p.v. buildx: betrouwbaarder tegen een + # HTTP-registry. De runner-host moet 10.0.20.22:3000 als + # insecure-registry hebben (zie README). + - name: Login, build & push + run: | + echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "$REGISTRY" -u "${{ secrets.REGISTRY_USER }}" --password-stdin + docker build \ + --build-arg APP_VERSION="dev-${GITHUB_SHA::7}" \ + -t "${{ steps.meta.outputs.sha_tag }}" \ + -t "${{ steps.meta.outputs.dev_tag }}" . + docker push "${{ steps.meta.outputs.sha_tag }}" + docker push "${{ steps.meta.outputs.dev_tag }}" - name: Deploy naar test-VM uses: appleboy/ssh-action@v1 diff --git a/.forgejo/workflows/release.yaml b/.forgejo/workflows/release.yaml index 0651e75..b2585a3 100644 --- a/.forgejo/workflows/release.yaml +++ b/.forgejo/workflows/release.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest # pas aan naar het label van jouw Forgejo-runner env: REGISTRY: ${{ vars.REGISTRY }} - IMAGE_NAME: ${{ github.repository }} + IMAGE_NAME: ${{ github.repository }} # bes-r/teach steps: - uses: actions/checkout@v4 @@ -29,23 +29,16 @@ jobs: echo "latest_tag=${IMAGE}:latest" >> "$GITHUB_OUTPUT" echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - - name: Login bij Forgejo registry - uses: docker/login-action@v3 - with: - registry: ${{ vars.REGISTRY }} - username: ${{ secrets.REGISTRY_USER }} - password: ${{ secrets.REGISTRY_TOKEN }} - - - name: Build & push - uses: docker/build-push-action@v6 - with: - context: . - push: true - build-args: | - APP_VERSION=${{ steps.meta.outputs.version }} - tags: | - ${{ steps.meta.outputs.version_tag }} - ${{ steps.meta.outputs.latest_tag }} + # Platte docker build/push (HTTP-registry, zie README voor insecure-registry). + - name: Login, build & push + run: | + echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "$REGISTRY" -u "${{ secrets.REGISTRY_USER }}" --password-stdin + docker build \ + --build-arg APP_VERSION="${{ steps.meta.outputs.version }}" \ + -t "${{ steps.meta.outputs.version_tag }}" \ + -t "${{ steps.meta.outputs.latest_tag }}" . + docker push "${{ steps.meta.outputs.version_tag }}" + docker push "${{ steps.meta.outputs.latest_tag }}" - name: Deploy naar productie-VM uses: appleboy/ssh-action@v1 diff --git a/README.md b/README.md index a1ada24..1609a30 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,11 @@ Maak een leeg repo (bv. `ramon/teach`) en push (zie onderaan). ### 2. Registry / Actions variabelen en secrets Onder **Settings → Actions → Variables** van het repo (of org): -| Variable | Voorbeeld | Uitleg | -|------------|--------------------------|---------------------------------| -| `REGISTRY` | `git.familiebesselink.nl`| Host van je Forgejo = registry | +| Variable | Waarde | Uitleg | +|------------|------------------|---------------------------------| +| `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**: @@ -65,10 +67,28 @@ Onder **Settings → Actions → Secrets**: | `PROD_SSH_KEY` | Private SSH-key voor de productie-VM | | `PROD_DEPLOY_PATH` | Pad op de productie-VM met de deploy-bestanden | -> De runner moet Docker + buildx beschikbaar hebben en `actions/checkout`, -> `docker/*` en `appleboy/ssh-action` kunnen ophalen (standaard van github.com; -> instelbaar via de runner-config). Pas `runs-on` in de workflows aan naar het -> label van jouw runner als dat niet `ubuntu-latest` is. +> De runner moet de `docker`-CLI kunnen gebruiken (host-socket of docker-in-docker) +> en `actions/checkout` + `appleboy/ssh-action` kunnen ophalen. Pas `runs-on` in +> de workflows aan naar het 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 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/ # maak een .env aan: 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_USER=teach POSTGRES_PASSWORD= @@ -118,7 +138,7 @@ server { ## Push naar Forgejo (eerste keer) ```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 dev ``` diff --git a/deploy/compose.deploy.yaml b/deploy/compose.deploy.yaml index f8e38a8..3682422 100644 --- a/deploy/compose.deploy.yaml +++ b/deploy/compose.deploy.yaml @@ -5,7 +5,7 @@ # docker compose -f compose.deploy.yaml up -d # # 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 # DATABASE_URL=postgres://:@db:5432/ # APP_PORT=3000 (poort die nginx op deze VM naar de app proxyt)