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

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Deploy przez Git na hostingu i VPS

# Deploy przez Git na hostingu i VPS

Ostatnia aktualizacja: 30 kwietnia 2026

⚡ W skrócie · 8 min czytania

-   Jak deployować aplikację przez Git? Post-receive hook na VPS, GitHub Actions z SSH, deploy skrypty. Automatyczny deploy po git push bez ręcznego FTP. Kompletny poradnik.
-   Metoda 1: Git hook post-receive na VPS.
-   Metoda 2: GitHub Actions z SSH (hosting + VPS).
-   Metoda 3: Deploy na hosting współdzielony przez SFTP.
-   Najczęstsze pytania.

**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. Sprawdziliśmy że działa na [LH.pl](/out/lh-pl/#reklama "LH.pl"), [CyberFolks](/out/cyberfolks/#reklama "CyberFolks") i [webh.pl](/out/webh/#reklama "webh.pl") - potrzebujesz dostępu SFTP/SSH.

```
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](https://www.lh.pl/?ref=helpguru#reklama), [CyberFolks](https://cyberfolks.pl/?ref=36810861#reklama), [zenbox.pl](https://zenbox.pl/?p=2321#reklama)) 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 "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 "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 "webh.pl")

#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/)
-   [Jak wybrać hosting?](/jaki-hosting-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 30 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)