Git deployment hosting: moderne workflows voor developers
Gepubliceerd op 09 December 2025
Git deployment bij webhosting: complete gids
Git is niet alleen voor versiebeheer - het is ook een krachtige tool voor het deployen van websites. In plaats van bestanden handmatig uploaden via FTP, push je wijzigingen naar een Git repository en worden ze automatisch naar je server gestuurd.
Deze gids behandelt alle manieren om Git te gebruiken voor deployments, van eenvoudige Git hooks tot geavanceerde CI/CD pipelines.
Waarom Git deployment?
Voordelen boven FTP
| Aspect | FTP | Git deployment |
|---|---|---|
| Versiebeheer | Nee | Ja |
| Rollback | Handmatig | Eén command |
| Teamwork | Conflict-gevoelig | Branches |
| Audit trail | Nee | Complete history |
| Automatisering | Beperkt | Volledig mogelijk |
| Snelheid | Alle bestanden | Alleen wijzigingen |
Use cases
- Automatische deployment bij code push
- Staging/productie vanuit verschillende branches
- Rollback naar vorige versies bij problemen
- Team deployments zonder FTP-credentials delen
Git deployment methodes
1. Handmatig via SSH
De eenvoudigste vorm: SSH naar je server en pull de laatste wijzigingen.
# Op de server
ssh user@mijnsite.nl
cd /var/www/mijnsite
git pull origin main
Voordelen:
- Werkt bij elke provider met SSH
- Geen setup nodig
Nadelen:
- Handmatig werk
- Geen automatisering
- Risico op vergeten stappen
2. Git hooks (server-side)
Configureer je server om automatisch te deployen wanneer je pusht:
Post-receive hook setup:
# Op de server: bare repository aanmaken
mkdir -p /var/repo/mijnsite.git
cd /var/repo/mijnsite.git
git init --bare
# Post-receive hook maken
cat > hooks/post-receive << 'EOF'
#!/bin/bash
TARGET="/var/www/mijnsite"
GIT_DIR="/var/repo/mijnsite.git"
BRANCH="main"
while read oldrev newrev ref
do
if [ "$ref" = "refs/heads/$BRANCH" ]; then
echo "Deploying $BRANCH to $TARGET..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
# Post-deployment tasks
cd $TARGET
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
fi
done
EOF
chmod +x hooks/post-receive
Lokaal remote toevoegen:
git remote add production user@server:/var/repo/mijnsite.git
git push production main
3. GitHub/GitLab webhooks
Laat je hostingprovider een deployment triggeren bij pushes:
Webhook endpoint (PHP):
<?php
// deploy.php
$secret = getenv('WEBHOOK_SECRET');
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';
$payload = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit('Invalid signature');
}
$data = json_decode($payload, true);
if ($data['ref'] === 'refs/heads/main') {
shell_exec('cd /var/www/mijnsite && git pull origin main 2>&1');
shell_exec('cd /var/www/mijnsite && composer install --no-dev 2>&1');
echo 'Deployed!';
}
4. CI/CD pipelines
Automatische deployment via CI/CD:
GitHub Actions:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/mijnsite
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
GitLab CI:
deploy:
stage: deploy
only:
- main
script:
- apt-get update -qq && apt-get install -y -qq openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
- ssh -o StrictHostKeyChecking=no $USER@$HOST "cd /var/www/mijnsite && git pull && composer install --no-dev"
5. Platform-specifieke oplossingen
Laravel Forge
- Automatische deployments
- GitHub/GitLab/Bitbucket integratie
- Deploy scripts configureerbaar
Ploi
- One-click deployments
- Zero-downtime support
- Webhook integratie
Netlify/Vercel
- Git-based deployment standaard
- Preview deployments voor branches
- Ideaal voor static sites en JAMstack
Git deployment bij Nederlandse providers
| Provider | Git support | Webhooks | CI/CD |
|---|---|---|---|
| TransIP | SSH + Git | Zelf configureren | Zelf opzetten |
| Antagonist | SSH + Git | Zelf configureren | Zelf opzetten |
| Vimexx | SSH + Git | Zelf configureren | Zelf opzetten |
| Cloudways | Ingebouwd | Ja | GitHub integration |
| Savvii | Ingebouwd | Ja | Staging support |
Zero-downtime deployment
Voorkom dat bezoekers een kapotte site zien tijdens deployments:
Symlink-based deployment
#!/bin/bash
# Zero-downtime deploy script
RELEASES_DIR="/var/www/releases"
CURRENT_LINK="/var/www/current"
RELEASE=$(date +%Y%m%d%H%M%S)
# Nieuwe release directory
mkdir -p $RELEASES_DIR/$RELEASE
cd $RELEASES_DIR/$RELEASE
# Clone en setup
git clone --depth 1 git@github.com:user/repo.git .
composer install --no-dev --optimize-autoloader
# Shared directories linken
ln -s /var/www/shared/storage storage
ln -s /var/www/shared/.env .env
# Migrations
php artisan migrate --force
# Atomic switch
ln -sfn $RELEASES_DIR/$RELEASE $CURRENT_LINK
# Oude releases opruimen (bewaar laatste 5)
cd $RELEASES_DIR
ls -t | tail -n +6 | xargs rm -rf
Tools voor zero-downtime
- Deployer: PHP deployment tool
- Envoyer: Laravel's eigen deployment service
- Capistrano: Ruby-based, werkt met elke stack
Rollback strategie
Met Git
# Laatste commit ongedaan maken
git revert HEAD
git push origin main
# Of naar specifieke commit
git reset --hard abc123
git push -f origin main # Let op: force push!
Met releases
# Symlink naar vorige release
ln -sfn /var/www/releases/20231201120000 /var/www/current
Security best practices
- Deploy keys gebruiken: Read-only SSH keys specifiek voor deployment
- Webhook secrets: Valideer webhook signatures
- Geen credentials in repo: Gebruik environment variables
- Limit deploy user permissions: Alleen wat nodig is
- Audit logging: Log alle deployments
Deploy key setup (GitHub):
# Op server: key genereren
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
# Public key toevoegen aan GitHub repo → Settings → Deploy keys
Troubleshooting
Permission denied
# Controleer ownership
chown -R www-data:www-data /var/www/mijnsite
# Controleer .git directory permissions
chmod -R 755 /var/www/mijnsite/.git
Git pull conflicts
# Force overwrite (let op: lokale wijzigingen weg!)
git fetch origin
git reset --hard origin/main
SSH key issues
# Test SSH verbinding
ssh -T git@github.com
# Debug mode
ssh -vT git@github.com
Conclusie
Git deployment transformeert je workflow van handmatig FTP-werk naar geautomatiseerde, versie-gecontroleerde deployments. Begin met simpele Git hooks of webhooks, en evolueer naar CI/CD pipelines naarmate je projecten complexer worden. De investering in setup betaalt zich snel terug in betrouwbaarheid en tijdsbesparing.
Gerelateerde artikelen
SSH toegang uitgelegd: waarom developers dit nodig hebben
Ontdek waarom SSH toegang essentieel is voor developers. Leer over veilige server toegang, remote management en de voordelen van SSH hosting.
Node.js hosting Nederland: complete gids voor developers
Alles over node.JS hosting in Nederland. Vergelijk providers, leer over deployment opties en ontdek de beste hosting voor je node.JS applicaties.
Python hosting opties: Django en Flask hosting gids
Ontdek de beste python hosting opties voor Django en Flask applicaties. Vergelijk providers en leer over deployment strategieën.