Automatisch deployen via GitHub Actions naar KeurigOnline

Met GitHub kun je je website of applicatie automatisch naar je KeurigOnline-server laten uploaden bij elke push naar je repository. Er zijn twee manieren, en in dit artikel leggen we allebei stap voor stap uit.

Goed om te weten: SSH en Git zitten in alle webhostingpakketten: Start, Plus en Pro.

Welke manier kies je?

A. GitHub Actions + rsync B. Git in DirectAdmin
Hoe het werkt GitHub bouwt je project en kopieert het resultaat naar de server DirectAdmin haalt je repository zelf op en zet hem in je webmap
Build-stap (npm, composer) Ja, in GitHub Actions Nee, de bestanden in de repository worden direct geplaatst
Instellen Workflow-bestand in je repository Een paar klikken in DirectAdmin, geen workflow nodig
Geschikt voor Projecten met een build-stap of een eigen deploy-flow Statische sites, PHP-projecten en alles wat kant-en-klaar in de repository staat

Heb je geen build-stap, dan is manier B de eenvoudigste. Moet er gebouwd worden, kies dan manier A.

Manier A: GitHub Actions + rsync

Stap 1: Maak een SSH-sleutel aan voor GitHub Actions

GitHub Actions heeft een SSH-sleutel nodig om in te loggen op je server. Maak een speciaal sleutelpaar aan op je eigen computer:

ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/github_deploy_key -N ""

Dit maakt twee bestanden aan:

  • github_deploy_key: de privésleutel (geheim, die gaat straks in GitHub)
  • github_deploy_key.pub: de publieke sleutel (die zet je op de server)

Stap 2: Zet de publieke sleutel op je server

Via DirectAdmin (aanbevolen): ga in DirectAdmin naar Geavanceerde functies (Advanced Features) → SSH Keys, kies voor het toevoegen van een sleutel en plak de volledige inhoud van github_deploy_key.pub. Zorg dat de sleutel als geautoriseerd (authorized) staat. Je kunt de inhoud van je publieke sleutel bekijken met:

cat ~/.ssh/github_deploy_key.pub

Via de commandline: verbind via SSH met je server (poort 2020) en voeg de sleutel toe aan authorized_keys:

ssh gebruikersnaam@jouwdomein.nl -p 2020
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "INHOUD_VAN_PUB_SLEUTEL" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Stap 3: Voeg secrets toe aan GitHub

Ga in je GitHub-repository naar Settings → Secrets and variables → Actions en voeg de volgende secrets toe:

Naam Waarde
SSH_PRIVATE_KEY De volledige inhoud van github_deploy_key (inclusief de -----BEGIN/END------regels)
SSH_HOST Je domeinnaam, bijv. jouwdomein.nl. Wijst je domein nog niet naar ons (bijvoorbeeld tijdens een verhuizing), gebruik dan de hostnaam van de server, bijv. cl08.keurigonline.nl. Die staat in je welkomstmail.
SSH_USER Je DirectAdmin-gebruikersnaam
DEPLOY_PATH De webmap van je site, relatief aan je homemap: domains/jouwdomein.nl/public_html/

Stap 4: Maak de GitHub Actions workflow aan

Maak in je repository het bestand .github/workflows/deploy.yml aan. Hieronder vind je voorbeelden voor veelgebruikte situaties.

Voorbeeld: Node.js project (React, Vue, Next.js statisch, etc.)

name: Deploy naar KeurigOnline

on:
  push:
    branches:
      - main  # of master, afhankelijk van je repository

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Installeer Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Installeer afhankelijkheden en bouw
        run: |
          npm ci
          npm run build

      - name: Stel SSH-sleutel in
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key
          chmod 600 ~/.ssh/deploy_key
          ssh-keyscan -p 2020 ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts

      - name: Deploy via rsync
        run: |
          rsync -avz --delete \
            -e "ssh -i ~/.ssh/deploy_key -p 2020" \
            --exclude='cgi-bin' \
            ./dist/ \
            ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEPLOY_PATH }}

Pas aan naar je project:

  • ./dist/: de map met je gebouwde bestanden (bijv. ./build/, ./out/ of ./.next/)
  • npm run build: het bouwcommando van jouw project
  • De branch main: pas aan als jouw hoofdbranch anders heet

Voorbeeld: statische HTML/CSS/JS (geen build-stap)

      - name: Deploy via rsync
        run: |
          rsync -avz --delete \
            -e "ssh -i ~/.ssh/deploy_key -p 2020" \
            --exclude='.git' \
            --exclude='.github' \
            --exclude='node_modules' \
            --exclude='README.md' \
            --exclude='cgi-bin' \
            ./ \
            ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEPLOY_PATH }}

De --exclude='cgi-bin' zorgt dat de map cgi-bin die DirectAdmin in elke webmap aanmaakt blijft staan als je --delete gebruikt.

Belangrijk: bouw je project in CI, niet op de server

Op KeurigOnline shared hosting is het niet de bedoeling om Node.js-builds of npm install rechtstreeks op de server uit te voeren. Shared hosting heeft beperkte CPU- en geheugenresources; een zware build kan je account overbelasten en leidt tot fouten of tijdelijke blokkades door het LVE-systeem.

De juiste aanpak is altijd:

  1. Bouw je project in GitHub Actions: de CI-runner heeft ruim voldoende resources
  2. Kopieer alleen de eindresultaten (dist/ of build/) naar de server via rsync

Dit geldt ook voor PHP-projecten: voer composer install --no-dev --optimize-autoloader uit in CI en upload de vendor/-map via rsync naar de server.

Manier B: Git in DirectAdmin

DirectAdmin heeft een ingebouwde Git-functie waarmee de server je repository zelf ophaalt en in je webmap plaatst. Er is geen workflow-bestand nodig en je hoeft niets op je eigen computer in te stellen.

Stap 1 (alleen bij een privé-repository): SSH-sleutel koppelen

Is je repository openbaar, sla deze stap dan over. Bij een privé-repository heeft de server een sleutel nodig om bij GitHub te mogen:

  1. Ga in DirectAdmin naar Geavanceerde functies → SSH Keys en laat daar een nieuw sleutelpaar aanmaken.
  2. Kopieer de publieke sleutel en voeg die in GitHub toe onder Settings → Deploy keys van de repository (alleen-lezen is voldoende).

Stap 2: Repository toevoegen

  1. Ga in DirectAdmin naar Geavanceerde functies → Git.
  2. Kies voor een nieuwe repository, geef een naam op en plak de URL van je GitHub-repository. Bij een privé-repository gebruik je de SSH-URL (git@github.com:gebruiker/repo.git) en kies je de sleutel uit stap 1.
  3. Kies de branch en de map waarin de bestanden geplaatst moeten worden, meestal domains/jouwdomein.nl/public_html.
  4. Klik op deploy. DirectAdmin haalt de repository op en zet de bestanden in de gekozen map.

Stap 3: Automatisch deployen bij elke push

Bij de repository in DirectAdmin vind je een webhook-URL. Voeg die in GitHub toe onder Settings → Webhooks van je repository (content type application/json, alleen het event push). Vanaf dan haalt DirectAdmin bij elke push automatisch de nieuwste versie op en plaatst die in je webmap.

Let op: deze manier voert geen build-stap uit. Zorg dat de bestanden die op de server moeten komen (dus bijvoorbeeld de inhoud van dist/) in de repository zelf staan, of kies manier A.

Veelgestelde vragen

Welke poort moet ik gebruiken voor SSH?

Poort 2020. De standaard SSH-poort 22 werkt niet op onze servers. Vergeet ook de ssh-keyscan -p 2020-stap niet, zodat de host-sleutel geaccepteerd wordt door de runner.

Werkt dit ook met GitLab CI of Bitbucket Pipelines?

Ja, het principe is hetzelfde. Bewaar de privésleutel als CI/CD-variabele en gebruik dezelfde rsync-opdracht met poort 2020. De setup-stappen voor SSH zijn identiek. De Git-functie in DirectAdmin werkt ook met repositories op GitLab of Bitbucket.

Wat is het webpad op de server?

De webmap van je domein is domains/jouwdomein.nl/public_html/, relatief aan je homemap. Vervang jouwdomein.nl door je daadwerkelijke domeinnaam. Voor een subdomein gebruik je domains/sub.jouwdomein.nl/public_html/. Let op: er is geen absoluut pad /domains/...; gebruik in rsync dus gebruiker@host:domains/... (zonder slash aan het begin).

Kan ik ook Git rechtstreeks op de server gebruiken via SSH?

Ja, git is beschikbaar via SSH op onze servers. Je kunt een repository eenmalig clonen via:

git clone https://github.com/gebruiker/repo.git ~/domains/jouwdomein.nl/public_html/

Voor geautomatiseerde deploys raden we manier A of B hierboven aan.

Ik krijg een "Permission denied (publickey)" fout

Controleer het volgende:

  • De publieke sleutel staat in DirectAdmin onder SSH Keys als geautoriseerd, of correct in ~/.ssh/authorized_keys op de server (één sleutel per regel)
  • De rechten: ~/.ssh/ is 700 en authorized_keys is 600
  • De privésleutel in het GitHub-secret is volledig (inclusief de -----BEGIN/END------regels)
  • Je gebruikt de juiste gebruikersnaam in SSH_USER

De rsync-stap mislukt met "No such file or directory"

De doelmap bestaat nog niet, of het pad begint met een slash. Controleer eerst DEPLOY_PATH (zie hierboven). Bestaat de map echt niet, maak hem dan aan via SSH:

mkdir -p ~/domains/jouwdomein.nl/public_html

Of voeg een SSH-stap toe aan de workflow vóór rsync:

ssh -i ~/.ssh/deploy_key -p 2020 ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "mkdir -p ${{ secrets.DEPLOY_PATH }}"

Gerelateerde artikelen

Heb je een antwoord op je vraag gekregen? Heel erg bedankt voor je feedback! Er is een probleem opgetreden bij het verzenden van je feedback.

Nog steeds hulp nodig? Neem contact op Neem contact op