Airbnb Clone - Pipeline DevOps

📋 Opis projektu

Ten projekt zawiera kompletny zestaw narzędzi i konfiguracji do uruchomienia zautomatyzowanego pipeline’u CI/CD dla aplikacji React (klon Airbnb). Wykorzystuje architekturę opartą na AWS z serwerami Jenkins, bazą danych MySQL oraz systemem monitorowania Prometheus/Grafana.

🏗️ Architektura projektu

Projekt składa się z następujących komponentów:

  • Aplikacja React: Klon Airbnb zbudowany w React
  • Pipeline CI/CD: Automatyzacja procesu budowy, testów i wdrażania
  • Infrastruktura: Skrypty Ansible do konfiguracji serwerów
  • Konteneryzacja: Dockerfile i Docker Compose
  • Monitoring: System Prometheus, Grafana i SmokePing
  • Bezpieczeństwo: Skanowanie Trivy i analiza kodu SonarQube

Infrastruktura AWS

Projekt wymaga następującej infrastruktury AWS:

  • Węzeł kontrolny Ansible: Zarządza konfiguracją wszystkich pozostałych serwerów
  • Serwer Jenkins: Obsługuje procesy CI/CD (budowanie, testowanie, wdrażanie)
  • Serwer monitorujący: Hostuje Prometheus i Grafana do monitorowania
  • Serwer bazy danych: Hostuje bazę danych MySQL dla aplikacji
  • Serwer aplikacyjny: Uruchamia kontenery z aplikacją React

📁 Struktura folderów

REACT-AIRBNB-CLONE/
├── src/                       # Kod źródłowy aplikacji React
├── infrastructure/            # Pliki konfiguracyjne infrastruktury
│   └── ansible/
│       ├── ansible.sh         # Skrypt instalacyjny Ansible
│       ├── inventory.yml      # Konfiguracja hostów
│       └── playbooks/
│           ├── jenkins.yml    # Playbook instalacyjny Jenkins
│           ├── database.yml   # Playbook instalacyjny bazy danych
│           └── monitoring.yml # Playbook instalacyjny monitoringu
├── ci-cd/                     # Konfiguracja CI/CD
│   ├── Jenkinsfile            # Pipeline Jenkins
│   ├── Dockerfile             # Konfiguracja Docker
│   ├── docker-compose.yml     # Kompozycja usług Docker
│   └── app-setup.sh           # Skrypt konfiguracyjny serwera aplikacji
├── monitoring/                # Konfiguracja monitoringu
│   ├── prometheus.yml         # Konfiguracja Prometheus
│   └── grafana-dashboard-setup.sh # Konfiguracja dashboardu Grafana
└── docs/                      # Dokumentacja
    ├── DeploymentGuide.md     # Przewodnik wdrożenia
    ├── Pipeline-architecture.mmd # Diagram architektury
    └── README.md              # Ten plik

🚀 Fazy wdrożenia

Projekt podzielony jest na następujące fazy:

Faza 1: Konfiguracja infrastruktury

  • Uruchomienie instancji EC2 na AWS
  • Instalacja Ansible na kontrolerze
  • Konfiguracja serwerów (Jenkins, baza danych, monitoring)

Faza 2: Konfiguracja CI/CD

  • Instalacja wtyczek Jenkins
  • Konfiguracja narzędzi (Docker, Node.js, Java)
  • Konfiguracja pipeline’u z Jenkinsfile

Faza 3: Monitoring

  • Konfiguracja Prometheus
  • Konfiguracja dashboardów Grafana
  • Konfiguracja SmokePing

Faza 4: Wdrożenie

  • Zautomatyzowane wdrożenie przez Jenkins
  • Konteneryzacja z Docker
  • Weryfikacja wdrożenia

📋 Wymagania

AWS EC2 (min. 5 instancji):

  • EC2 Węzeł kontrolny Ansible - Ubuntu 22.04, t3.micro (2 vCPU, 1 GB RAM)
  • EC2 Jenkins - Ubuntu 22.04, t3.medium (2 vCPU, 4 GB RAM)
  • EC2 Monitoring - Ubuntu 22.04, t3.small (2 vCPU, 2 GB RAM)
  • EC2 Baza danych - Ubuntu 22.04, t3.small (2 vCPU, 2 GB RAM)
  • EC2 Aplikacja - Ubuntu 22.04, t3.small (2 vCPU, 2 GB RAM)
  • Odpowiednie grupy bezpieczeństwa AWS umożliwiające komunikację
  • Ten sam klucz SSH do dostępu do wszystkich maszyn
  • Konto Docker Hub

🛠️ Instalacja i wdrożenie

Pełne instrukcje instalacji można znaleźć w pliku DeploymentGuide.md.

Przygotowanie infrastruktury

  • Utwórz wszystkie wymagane instancje EC2 w AWS zgodnie z sekcją “Wymagania”
  • Skonfiguruj grupy bezpieczeństwa, aby umożliwić komunikację między maszynami
  • Zanotuj adresy IP wszystkich maszyn

Konfiguracja Ansible

  • Sklonuj to repozytorium na węzeł kontrolny Ansible:
git clone https://github.com/your-username/react-airbnb-clone.git
cd react-airbnb-clone
  • Skonfiguruj serwer Ansible:
chmod +x infrastructure/ansible/ansible.sh
./infrastructure/ansible/ansible.sh
  • Zaktualizuj plik inventory.yml rzeczywistymi adresami IP serwerów:
vi infrastructure/ansible/inventory.yml
  • Uruchom playbooki Ansible, aby skonfigurować wszystkie serwery:
cd infrastructure/ansible
ansible-playbook -i inventory.yml jenkins.yml
ansible-playbook -i inventory.yml monitoring.yml
ansible-playbook -i inventory.yml database.yml

Konfiguracja Jenkins

  • Uzyskaj dostęp do Jenkins przez przeglądarkę: http://jenkins-server-ip:8080
  • Zainstaluj sugerowane wtyczki oraz dodatkowe wymienione w DeploymentGuide.md
  • Skonfiguruj pipeline, podając ścieżkę do repozytorium Git zawierającego Jenkinsfile

Wykonanie pipeline’u

Po zakończeniu konfiguracji Jenkins automatycznie:

  • Pobierze kod z repozytorium
  • Zainstaluje zależności
  • Uruchomi testy jednostkowe
  • Przeprowadzi analizę kodu SonarQube
  • Przeprowadzi skanowanie bezpieczeństwa z Trivy
  • Zbuduje obraz Docker
  • Wdroży na serwer aplikacyjny

📊 Monitoring

System monitorowania oparty jest na:

  • Prometheus: Zbieranie metryk
  • Grafana: Wizualizacja danych
  • Node Exporter: Metryki systemowe
  • SmokePing: Monitorowanie dostępności

Dostęp do dashboardów:

  • Grafana: http://monitoring-server-ip:3000
  • Prometheus: http://monitoring-server-ip:9090

🔒 Bezpieczeństwo

Pipeline zawiera automatyczne skanowanie bezpieczeństwa:

  • Trivy: Skanowanie obrazów Docker
  • SonarQube: Statyczna analiza kodu
  • OWASP Dependency-Check: Sprawdzanie zależności

📝 Licencja

MIT

👨‍💻 Autor

MichalADA