Git Deployment Hosting: Modern Workflows for Developers
Published on 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.
Related articles
SSH Access Explained: Why Developers Need This
Discover why SSH access is essential for developers. Learn about secure server access, remote management and the benefits of SSH hosting.
Node.js Hosting Netherlands: Complete Guide for Developers
Everything about Node.js hosting in Netherlands. Compare providers, learn about deployment options and discover the best hosting for your Node.js applications.
Python Hosting Options: Django and Flask Hosting Guide
Discover the best Python hosting options for Django and Flask applications. Compare providers and learn about deployment strategies.