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:
- Bouw je project in GitHub Actions: de CI-runner heeft ruim voldoende resources
- Kopieer alleen de eindresultaten (
dist/ofbuild/) 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:
- Ga in DirectAdmin naar Geavanceerde functies → SSH Keys en laat daar een nieuw sleutelpaar aanmaken.
- 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
- Ga in DirectAdmin naar Geavanceerde functies → Git.
- 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. - Kies de branch en de map waarin de bestanden geplaatst moeten worden, meestal
domains/jouwdomein.nl/public_html. - 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_keysop de server (één sleutel per regel) - De rechten:
~/.ssh/is700enauthorized_keysis600 - 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 }}"