IPv4 Klient Forbinder...
IP Adresse: Søger... (home)
Reverse DNS: -
Provider / ASN: -
IPv6 Klient Forbinder...
IP Adresse: Søger... (home)
Reverse DNS: -
Provider / ASN: -
Forbindelse & Sikkerhed HTTPS
SSL / TLS: Søger...
Protokol: HTTP/1.1
⬅ Tilbage til Noter

Web Server Deployment & Synkronisering med Rsync over SSH (Push / Pull)

📅 Udgivet: 2026-08-15
#rsync #ssh #bash #devops #linux

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:

BASH
# 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):

BASH
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
💡 Tip: > Sørg for at SSH-tjenesten kører på remote hosten, og at din bruger har læse/skriverettigheder til destinationsmappen (f.eks. /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:

BASH
#!/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:

BASH
#!/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:

BASH
chmod +x push.sh pull.sh

Daglig arbejdsgang:

  • Efter kodeændringer: Kør ./push.sh for at skubbe ændringerne live på få sekunder.
  • Før du starter nyt arbejde: Kør eventuelt ./pull.sh hvis filer er blevet ændret remote.

  • 5. Vigtige Rsync Parametre & Best Practices

  • -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.

Kopieret: