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.
Ú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 serveraSSH_USER
– meno používateľa (napr.ubuntu
)SSH_KEY
– obsah súkromného kľúčaid_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
aleborsync --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.