Web Server Deployment & Synkronisering med Rsync over SSH (Push / Pull)
Denne guide gennemgår opsætningen af et lynhurtigt, password-frit deployment-workflow mellem din lokale arbejdsstation og en remote webserver / Linux-host ved hjælp af rsync over SSH.
1. Forudsætninger & SSH Nøgleopsætning
For at kunne køre automatiserede scripts uden at skulle indtaste adgangskode ved hver deployment, skal din offentlige SSH-nøgle tilføjes til serverens autoriserede nøgler.
1.1 Kopiér din Public Key til serveren
Kør følgende fra din Mac / Linux terminal:
# Erstat med din server IP/hostname og brugernavn
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.0.2.20
1.2 Verificér rettigheder på remote server
Log ind på serveren og kontrollér at fil- og maperettighederne på .ssh er korrekte (OpenSSH afviser login hvis rettighederne er for åbne for andre brugere):
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
/var/www/ eller /volume1/web/).2. Push Script: Lokal → Remote Server (push.sh)
Opret filen push.sh i dit lokale projekt. Scriptet overfører differentielt kun nye eller ændrede filer og ekskluderer automatisk versionsstyring, systemfiler og lokale scripts:
#!/usr/bin/env bash
set -e
# Remote Server Konfiguration
REMOTE_USER="web_user"
REMOTE_HOST="192.0.2.20"
REMOTE_PORT="22"
REMOTE_PATH="/var/www/mit-site.dk/"
SSH_KEY="$HOME/.ssh/id_rsa"
LOCAL_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/"
echo "🚀 Uploader ændringer til remote server ($REMOTE_HOST)..."
rsync -avz \
--exclude='.git' \
--exclude='.gitignore' \
--exclude='.DS_Store' \
--exclude='push.sh' \
--exclude='pull.sh' \
--exclude='README.md' \
-e "ssh -i $SSH_KEY -p $REMOTE_PORT" \
"$LOCAL_PATH" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
echo "✅ Synkronisering til server fuldført!"
3. Pull Script: Remote Server → Lokal (pull.sh)
Hvis der er blevet ændret eller uploadet filer direkte på webserveren, kan du hente de seneste ændringer ned til din lokale maskine med pull.sh:
#!/usr/bin/env bash
set -e
# Remote Server Konfiguration
REMOTE_USER="web_user"
REMOTE_HOST="192.0.2.20"
REMOTE_PORT="22"
REMOTE_PATH="/var/www/mit-site.dk/"
SSH_KEY="$HOME/.ssh/id_rsa"
LOCAL_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/"
echo "📥 Henter seneste version fra remote server ($REMOTE_HOST)..."
rsync -avz \
--exclude='.git' \
--exclude='.gitignore' \
--exclude='.DS_Store' \
--exclude='push.sh' \
--exclude='pull.sh' \
--exclude='README.md' \
-e "ssh -i $SSH_KEY -p $REMOTE_PORT" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" "$LOCAL_PATH"
echo "✅ Hentet fra server fuldført!"
4. Eksekveringsrettigheder & Daglig Brug
Gør scripts eksekverbare én gang for alle:
chmod +x push.sh pull.sh
Daglig arbejdsgang:
- Efter kodeændringer: Kør
./push.shfor at skubbe ændringerne live på få sekunder. - Før du starter nyt arbejde: Kør eventuelt
./pull.shhvis filer er blevet ændret remote. -a(Archive mode): Bevarer filrettigheder, tidsstempler, symlinks og ejerforhold rekursivt.-v(Verbose): Viser hvilke specifikke filer der bliver overført.-z(Compress): Komprimerer filerne under overførslen over netværket for maksimal hastighed.set -e: Stopper scriptet omgående ved eventuelle fejl (f.eks. netværksudfald eller SSH-fejl), så du undgår ufuldstændige uploads.