Skip to content
Developer Hosting

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

  1. Deploy keys gebruiken: Read-only SSH keys specifiek voor deployment
  2. Webhook secrets: Valideer webhook signatures
  3. Geen credentials in repo: Gebruik environment variables
  4. Limit deploy user permissions: Alleen wat nodig is
  5. 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.

Ready to compare hosting?

Start comparing