GitHub Actions (2. diel): Nasadenie projektu na server cez SSH

Nasadenie projektu na vlastný server pomocou GitHub Actions? V tomto článku si ukážeme, ako na to cez SSH a scp/rsync.

GitHub Actions (2. diel): Nasadenie projektu na server cez SSH
Photo by Mohammad Rahmani / Unsplash

Úvod

V predchádzajúcom článku sme si ukázali, ako vytvoriť základný GitHub Actions workflow pre buildovanie a testovanie projektu. V tomto pokračovaní sa zameriame na automatizované nasadenie (deploy) projektu na tvoj vlastný alebo firemný server pomocou SSH a rsync/scp.

Scenár

Predstavme si jednoduchý prípad: Máš statický web alebo Node.js aplikáciu, ktorú chceš po commite do vetvy main automaticky nahrávať na server (napr. VPS alebo hosting s SSH prístupom).

Požiadavky

  • SSH prístup k serveru
  • Vytvorený verejný a súkromný SSH kľúč
  • Nastavený GitHub repozitár

1. Generovanie SSH kľúča

ssh-keygen -t ed25519 -C "github-actions@deploy"

Ulož si id_ed25519 (privátny kľúč) a id_ed25519.pub (verejný kľúč). Verejný kľúč nahraj na server do ~/.ssh/authorized_keys.

2. Nastavenie GitHub Secrets

V tvojom repozitári na GitHube choď do Settings > Secrets and variables > Actions a pridaj tieto premenné:

  • SSH_HOST – IP alebo doména servera
  • SSH_USER – meno používateľa (napr. ubuntu)
  • SSH_KEY – obsah súkromného kľúča id_ed25519
  • DEPLOY_PATH – cieľová cesta na serveri (napr. /var/www/mysite)

3. Workflow pre nasadenie

Vytvor súbor .github/workflows/deploy.yml:

name: Deploy to Server

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Build (ak treba)
        run: |
          npm ci
          npm run build

      - name: Deploy via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          source: "./build"
          target: ${{ secrets.DEPLOY_PATH }}

Tento workflow:

  • Spustí sa pri každom pushnutí do main
  • Projekt builduje (voliteľné)
  • Nahrá súbory na server cez scp

Alternatíva: rsync cez SSH

Pre efektívnejší deploy (iba zmenené súbory) použi rsync cez appleboy/ssh-action:

- name: Deploy with rsync
  uses: appleboy/[email protected]
  with:
    host: ${{ secrets.SSH_HOST }}
    username: ${{ secrets.SSH_USER }}
    key: ${{ secrets.SSH_KEY }}
    script: |
      rsync -avz --delete ./build/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEPLOY_PATH }}

Bezpečnosť

  • Privátny kľúč uchovávaj iba v GitHub Secrets.
  • Používaj vyhradeného používateľa s obmedzenými právami.
  • Môžeš použiť chroot alebo rsync --bwlimit na obmedzenie prenosu.

Záver

GitHub Actions umožňujú bezpečné a automatizované nasadzovanie tvojich projektov – bez nutnosti manuálnych prístupov. V ďalšom diely si ukážeme, ako workflow rozšíriť o rollback alebo notifikácie cez Discord alebo Slack.