GitHub, Medii de Dev si CI/CD
In aceasta sesiune invatam version control cu GitHub, intelegem conceptul de medii de dezvoltare (dev/test/prod), comparam modurile de deployment si implementam CI/CD pentru deployment automat la push pe GitHub.
Pasul 1
Concepte GitHub
GitHub este platforma standard pentru version control. Permite sa urmaresti fiecare modificare, sa colaborezi cu altii si sa ai un backup permanent al codului.
De ce Git si GitHub?
- Istoric complet - vezi fiecare modificare, cand si de cine
- Backup automat - codul e in cloud, nu doar pe laptopul tau
- Colaborare - mai multi oameni pot lucra simultan
- Rollback - poti reveni la orice versiune anterioara
Comenzi esentiale Git
# Initializare proiect
git init
# Adauga fisierele pentru commit
git add .
# Creaza un commit (snapshot)
git commit -m "Descriere a modificarilor"
# Conecteaza cu repository-ul de pe GitHub
git remote add origin https://github.com/user/mynest.git
# Trimite codul pe GitHub
git push -u origin main
# Descarca modificarile de pe GitHub
git pull origin main
Flux de lucru zilnic
- Lucrezi la cod local
git add . - adaugi modificarile
git commit -m "mesaj" - salvezi un snapshot
git push - urci pe GitHub
Tip
Fa commit-uri mici si dese, cu mesaje descriptive. "Fix login bug" e mai bun decat "update stuff".
Pasul 2
Tipuri de environment-uri
In dezvoltarea software, folosim medii separate pentru a ne asigura ca ce ajunge la utilizatori functioneaza corect. Fiecare mediu are un scop distinct.
Cele 3 medii principale
Development (Dev)
- Mediul tau local, pe calculatorul personal
- Aici experimentezi, testezi idei noi, faci greseli
- Doar tu il vezi
- Datele sunt de test, nu conteaza daca se pierd
Testing / Staging (Test)
- O copie a productiei, dar cu date de test
- Aici verifici ca totul merge inainte de productie
- Acces pentru echipa de QA sau colegi
- Configuratia e identica cu productia
Production (Prod)
- Mediul real, vazut de utilizatori
- Trebuie sa fie stabil si rapid
- Modificarile ajung aici doar dupa testare
- Date reale - orice greseala afecteaza utilizatorii
# Exemplu de variabile de mediu diferite
# .env.development
DATABASE_URL=sqlite:///dev.db
DEBUG=true
API_URL=http://localhost:3000
# .env.production
DATABASE_URL=postgres://user:
[email protected]/prod
DEBUG=false
API_URL=https://api.mynest.com
Important
Nu testa niciodata direct pe productie. O greseala pe prod afecteaza toti utilizatorii. Foloseste mereu mediul de test inainte.
Pasul 3
Moduri de deployment
Exista doua abordari principale pentru a duce codul de la repository pe server: Pull si Push. Fiecare are avantaje si dezavantaje.
Pull Deployment
Serverul trage codul de pe GitHub
- + Simplu de implementat
- + Serverul controleaza cand face update
- - Trebuie sa intri pe server manual
- - Nu e automat
Push Deployment
Codul e trimis automat la server
- + Complet automat (CI/CD)
- + Mai rapid, fara interventi manuala
- - Setup mai complex initial
- - Necesita configurare pipeline
Pull: Serverul trage codul
# Te conectezi la server
ssh
[email protected]
# Navighezi la proiect
cd /var/www/mynest
# Tragi ultimele modificari
git pull origin main
# Repornesti serviciul daca e nevoie
systemctl restart mynest
Push: Codul ajunge automat
# La fiecare git push pe GitHub:
# 1. GitHub Actions detecteaza push-ul
# 2. Ruleaza teste automate
# 3. Daca testele trec, copiaza codul pe server
# 4. Reporneste serviciul
# Flux:
git push origin main
# => GitHub Actions => SSH to server => Deploy
Recomandare
Incepe cu Pull (simplu, intuitiv), apoi treci la Push (CI/CD) cand te simti confortabil. In aceasta sesiune implementam ambele variante.
Pasul 4
Lucru pe statii diferite
Cu GitHub, poti lucra de pe orice calculator: laptopul de acasa, PC-ul de la birou, sau chiar un computer nou. Codul e mereu sincronizat.
Flux pe calculator nou
# 1. Cloneaza repository-ul
git clone https://github.com/user/mynest.git
# 2. Intra in folder
cd mynest
# 3. Instaleaza dependintele
npm install
# 4. Configureaza mediul local
cp .env.example .env
# 5. Porneste aplicatia
npm run dev
Sincronizare intre statii
# Inainte sa incepi lucrul (trage ultimele modificari)
git pull origin main
# Lucreaza, apoi fa commit si push
git add .
git commit -m "Feature: dashboard nou"
git push origin main
# Pe cealalta statie, fa pull inainte de lucru
git pull origin main
Regula de aur
Intotdeauna fa git pull inainte de a incepe lucrul si git push cand ai terminat. Asa eviti conflictele.
Pasul 5
CI/CD in practica
CI/CD (Continuous Integration / Continuous Deployment) inseamna ca la fiecare push pe GitHub, codul este automat testat si deployat pe server. Nu mai intri manual pe server.
GitHub Actions - configurare
Creeaza fisierul .github/workflows/deploy.yml in proiect:
name: Deploy to Hetzner
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/mynest
git pull origin main
npm install --production
systemctl restart mynest
Configurare Secrets pe GitHub
- Mergi la repository pe GitHub
- Settings → Secrets and variables → Actions
- Adauga SERVER_HOST = IP-ul serverului Hetzner
- Adauga SSH_PRIVATE_KEY = continutul cheii private SSH
Fluxul complet CI/CD
# 1. Lucrezi local
git add .
git commit -m "Feature: notificari email"
git push origin main
# 2. GitHub Actions se activeaza automat
# - Se conecteaza la serverul Hetzner via SSH
# - Face git pull pe server
# - Instaleaza dependintele
# - Reporneste aplicatia
# 3. In 1-2 minute, modificarea e LIVE!
# Verifici pe: https://mynest.domeniu.com
Securitate
Cheia SSH privata din GitHub Secrets trebuie sa fie dedicata pentru deployment. Nu folosi cheia ta personala. Genereaza o pereche noua doar pentru CI/CD.
Rezultat
Dupa configurarea CI/CD, fluxul tau devine: editezi codul → git push → aplicatia se actualizeaza automat. Nu mai intri niciodata manual pe server pentru deployment.