Sesiunea 4

GitHub, Medii de Dev si CI/CD

Inapoi

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?

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

  1. Lucrezi la cod local
  2. git add . - adaugi modificarile
  3. git commit -m "mesaj" - salvezi un snapshot
  4. 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)

Testing / Staging (Test)

Production (Prod)

# 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

  1. Mergi la repository pe GitHub
  2. Settings → Secrets and variables → Actions
  3. Adauga SERVER_HOST = IP-ul serverului Hetzner
  4. 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.