Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Deploy przez Git na hostingu i VPS

Ostatnia aktualizacja: kwiecień 2026

TL;DR: Na VPS: ustaw bare Git repo + hook post-receive — deploy przez git push production main. Na hostingu współdzielonym bez SSH: użyj GitHub Actions z krokiem SFTP/rsync. Wersja minimalna: 3 pliki konfiguracji, zero ręcznego FTP po wdrożeniu.

Metoda 1: Git hook post-receive na VPS

Najprostszy sposób automatycznego deployu na VPS. Po konfiguracji wystarczy git push production main i kod ląduje na serwerze.

Krok 1: Utwórz bare repository na serwerze

# Na serwerze (przez SSH)
mkdir -p /repos/myapp.git
cd /repos/myapp.git
git init --bare

# Katalog docelowy aplikacji
mkdir -p /var/www/myapp

Krok 2: Utwórz hook post-receive

# Plik: /repos/myapp.git/hooks/post-receive
#!/bin/bash

TARGET="/var/www/myapp"
GIT_DIR="/repos/myapp.git"
BRANCH="main"

while read oldrev newrev ref; do
  PUSHED_BRANCH=$(echo "$ref" | sed -n 's,refs/heads/,,p')

  if [ "$PUSHED_BRANCH" != "$BRANCH" ]; then
    echo "Ignoruję branch: $PUSHED_BRANCH (oczekuję: $BRANCH)"
    continue
  fi

  echo "--- Deploy branch $BRANCH ---"
  git --work-tree="$TARGET" --git-dir="$GIT_DIR" checkout -f "$BRANCH"
  cd "$TARGET"

  # Opcjonalne kroki po deployu:
  # npm ci --production
  # npm run build
  # pm2 restart myapp

  echo "Deploy zakończony: $(date)"
done
# Nadaj uprawnienia do uruchamiania
chmod +x /repos/myapp.git/hooks/post-receive

Krok 3: Dodaj remote lokalnie i deployuj

# Lokalnie — dodaj remote "production"
git remote add production [email protected]:/repos/myapp.git

# Deploy = git push
git push production main

# Output:
# --- Deploy branch main ---
# Deploy zakończony: Tue Apr  8 23:00:00 CEST 2026

Metoda 2: GitHub Actions z SSH (hosting + VPS)

GitHub Actions umożliwia automatyczny deploy po każdym push na branch. Działa zarówno na VPS jak i na hostingach z dostępem SSH.

Plik: .github/workflows/deploy.yml

name: Deploy to VPS

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Deploy via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.VPS_SSH_KEY }}
          script: |
            cd /var/www/myapp
            git pull origin main
            npm ci --production
            pm2 restart myapp

Konfiguracja GitHub Secrets

W repozytorium GitHub: Settings > Secrets and variables > Actions > New repository secret. Dodaj:

VPS_HOST — adres IP lub hostname serwera
VPS_USER — nazwa użytkownika SSH (np. root lub deploy)
VPS_SSH_KEY — zawartość prywatnego klucza SSH (-----BEGIN OPENSSH PRIVATE KEY-----)

Metoda 3: Deploy na hosting współdzielony przez SFTP

Na hostingach bez bare Git repository użyj GitHub Actions z krokiem SFTP:

name: Deploy to Shared Hosting

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build
        run: npm ci && npm run build

      - name: Deploy via SFTP
        uses: wlixcc/[email protected]
        with:
          username: ${{ secrets.FTP_USER }}
          server: ${{ secrets.FTP_HOST }}
          ssh_private_key: ${{ secrets.SSH_KEY }}
          local_path: './dist/*'
          remote_path: '/public_html/'
          delete_remote_files: true

Najczęstsze pytania

Czy mogę deployować przez Git na hostingu współdzielonym? +
Na większości hostingów współdzielonych (LH.pl, CyberFolks, zenbox.pl) nie masz dostępu SSH do bare Git repository, więc klasyczny git hook nie zadziała. Alternatywy: (1) GitHub Actions z rsync/FTP — workflow pushuje pliki przez SFTP po każdym commit; (2) Webhook + skrypt PHP — GitHub wywołuje endpoint na hostingu, który pobiera zmiany przez git pull (wymaga dostępu SSH do hostingu); (3) Deploy przez FTP automatycznie z pipeline CI/CD. Na VPS klasyczny git hook post-receive działa bez ograniczeń.
Czym jest git hook post-receive i jak go skonfigurować? +
Git hook post-receive to skrypt wykonywany automatycznie na serwerze gdy otrzyma nowe commity (po git push). Konfiguracja: (1) Na serwerze utwórz bare repository: git init --bare /repos/myapp.git; (2) Utwórz skrypt /repos/myapp.git/hooks/post-receive: #!/bin/bash, git --work-tree=/var/www/myapp checkout -f; (3) Nadaj uprawnienia: chmod +x hooks/post-receive; (4) Lokalnie dodaj remote: git remote add production user@server:/repos/myapp.git; (5) Deploy: git push production main.
Jak zautomatyzować deploy przez GitHub Actions? +
GitHub Actions może automatycznie deployować po każdym push na branch main. Konfiguracja: utwórz plik .github/workflows/deploy.yml z krokami: checkout → build (npm/composer) → deploy przez SSH (appleboy/ssh-action) lub rsync. Wymagane sekrety w GitHub: VPS_HOST, VPS_USER, VPS_SSH_KEY. Cały pipeline uruchamia się automatycznie po git push origin main, bez ręcznej interwencji.
Jak bezpiecznie przechowywać klucze SSH dla deployu? +
Nigdy nie wklejaj prywatnego klucza SSH do kodu. W GitHub Actions używaj GitHub Secrets (Settings → Secrets and variables → Actions). Generuj dedykowany klucz tylko dla deployu: ssh-keygen -t ed25519 -C "deploy@myapp" -f ~/.ssh/deploy_key. Dodaj klucz publiczny do ~/.ssh/authorized_keys na serwerze, a klucz prywatny jako sekret VPS_SSH_KEY w GitHub. Ogranicz uprawnienia tego klucza do minimum — tylko do katalogu aplikacji.

Szybkie przejście do ofert związanych z tym tematem

Wybraliśmy oferty i strony z kodami rabatowymi, które najczęściej pasują do tego scenariusza użycia.