Automatisch deployen via GitHub Actions naar KeurigOnline
Met GitHub Actions kun je een geautomatiseerde deploymentpijplijn opzetten die je website of applicatie automatisch naar je KeurigOnline-server uploadt bij elke push naar je repository. In dit artikel leggen we stap voor stap uit hoe je dit instelt.
Let op: SSH (en dus automatisch deployen via GitHub Actions) is alleen beschikbaar in het Plus en Pro pakket. Heb je een Start-pakket? Dan kun je upgraden via Mijn KeurigOnline.
Wat heb je nodig?
- Een KeurigOnline Plus of Pro pakket (SSH-toegang vereist)
- Een GitHub-repository met je projectcode
- Je DirectAdmin-gebruikersnaam en de hostnaam van je domein
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 lokale computer (niet op de server):
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, bewaar je voor GitHub)github_deploy_key.pub— de publieke sleutel (zet je op de server)
Stap 2: Voeg de publieke sleutel toe aan je server
Verbind via SSH met je server (gebruik poort 2020):
ssh gebruikersnaam@jouwdomein.nl -p 2020
Voeg vervolgens de inhoud van github_deploy_key.pub toe aan je authorized_keys:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "INHOUD_VAN_PUB_SLEUTEL" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Je kunt de inhoud van je publieke sleutel bekijken met: cat ~/.ssh/github_deploy_key.pub
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 -----BEGIN/END------regels) |
SSH_HOST |
Je domeinnaam, bijv. jouwdomein.nl |
SSH_USER |
Je DirectAdmin-gebruikersnaam |
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" \
./dist/ \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/domains/${{ secrets.SSH_HOST }}/public_html/
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" \
./ \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/domains/${{ secrets.SSH_HOST }}/public_html/ \
--exclude='.git' \
--exclude='.github' \
--exclude='node_modules' \
--exclude='README.md'
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.
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.
Wat is het standaard webpad op de server?
Het standaard webpad op KeurigOnline is /domains/jouwdomein.nl/public_html/. Vervang jouwdomein.nl door je daadwerkelijke domeinnaam. Voor een subdomein gebruik je /domains/sub.jouwdomein.nl/public_html/.
Kan ik ook Git rechtstreeks op de server gebruiken?
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 GitHub Actions + rsync aan, omdat de build-stap dan buiten de server plaatsvindt en je volledige controle hebt over wat er wordt gedeployd.
Ik krijg een "Permission denied (publickey)" fout
Controleer het volgende:
- De publieke sleutel staat 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. Maak hem 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 /domains/${{ secrets.SSH_HOST }}/public_html"