 Autor: [Tomasz Nowosielski](/autorzy/tomasz-nowosielski) Redaktor naczelny, analityk hostingu · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/)
2.  /
3.  [Baza wiedzy](/baza-wiedzy/)
4.  /
5.  Deploy przez Git 

# 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 user@twoj-serwer.pl:/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/ssh-action@v1.0.3
        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/SFTP-Deploy-Action@v1.2.4
        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.

LH.pl

Hosting z sensownym workflow pod Git deploy.

Git

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

CyberFolks

Dobry wybór do CI/CD dla PHP i WordPressa.

CI/CD

[Aktywuj rabat →](/out/cyberfolks)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/cyberfolks)

webh.pl

Hosting cloudowy pod częste wdrożenia.

Cloud

[Aktywuj rabat →](/out/webh)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/webh)

## Powiązane strony

-   [Docker na VPS](/baza-wiedzy/docker-na-vps)
-   [Nginx — konfiguracja vhostów](/baza-wiedzy/nginx-vhost-konfiguracja)
-   [Node.js na hostingu](/baza-wiedzy/nodejs-na-hostingu-wspoldzielonym)
-   [SSL Let's Encrypt — automatyzacja](/baza-wiedzy/ssl-lets-encrypt-automatyzacja)
-   [Porównanie VPS](/vps/)
-   [Baza wiedzy](/baza-wiedzy/)