zkt25/z2
2025-04-09 23:29:29 +02:00
..
backend 2 zadanie 2025-04-03 11:57:59 +02:00
frontend 2 zadanie 2025-04-03 11:57:59 +02:00
.gitignore 2 zadanie 2025-04-03 11:57:59 +02:00
deployment.yaml 2 zadanie 2025-04-03 11:57:59 +02:00
docker-compose.yml 2 zadanie 2025-04-03 11:57:59 +02:00
namespace.yaml 2 zadanie 2025-04-03 11:57:59 +02:00
prepare-app.sh upd scripts 2025-04-09 23:29:29 +02:00
README.md upd readme 2025-04-09 10:53:31 +02:00
remove-app.sh upd bash files 2025-04-09 10:56:01 +02:00
service.yaml 2 zadanie 2025-04-03 11:57:59 +02:00
start-app.sh upd scripts 2025-04-09 23:29:29 +02:00
statefulset.yaml 2 zadanie 2025-04-03 11:57:59 +02:00
stop-app.sh upd bash files 2025-04-09 10:56:01 +02:00

Battleship Web Application

1. Opis aplikácie

Battleship Web Application je interaktívna hra „Battleship“, v ktorej hráči zadávajú svoje mená, umiestňujú lode a súperia proti sebe. Aplikácia je rozdelená do troch hlavných služieb:

  • Frontend: Poskytuje moderné webové rozhranie (na React-e), cez ktoré hráči vykonávajú svoje akcie.
  • Backend: Slúži ako serverová logika, ktorá spracováva požiadavky, komunikuje s databázou a riadi hernú logiku.
  • Databáza (MySQL): Ukladá trvalé dáta informácie o hrách, výsledkoch a nastaveniach s využitím persistent volume pre zabezpečenie dát aj po reštarte.

2. Zoznam použitých kontajnerov a ich stručný opis

  • battleship_mysql:
    Používa oficiálny Docker image mysql:8.0.30. Tento kontajner spúšťa MySQL databázu so základným nastavením (heslo, názov databázy) a využíva pripojený persistent volume pre trvalé ukladanie dát.

  • battleship_backend:
    Node.js aplikácia, ktorá poskytuje API pre hru, spracováva logiku aplikácie a komunikuje s databázou. Builduje sa z Dockerfile umiestneného v priečinku ./backend.

  • battleship_frontend:
    Webová aplikácia postavená na React-e, ktorá umožňuje interakciu hráčov s hrou. Builduje sa z Dockerfile umiestneného v priečinku ./frontend.


3. Zoznam Kubernetes objektov a ich stručný opis

  • Namespace (battleship-app):
    Tento objekt vytvára samostatný menný priestor battleship-app, do ktorého patria všetky nasadené komponenty aplikácie, čím je zabezpečená logická izolácia zdrojov.

  • Deployment:

    • battleship-backend:
      Deployment pre backend službu, ktorý spúšťa Node.js aplikáciu s obrazom battleship-backend:latest a počtom replik nastaveným na 1. Aplikácia počúva na porte 4000 a využíva environment variables pre pripojenie k databáze (napríklad DB_HOST=mysql, DB_PORT=3306, DB_USER=root, DB_PASSWORD=somepassword, DB_NAME=battleship).

    • battleship-frontend:
      Deployment pre frontend službu, ktorý nasadzuje webové rozhranie s obrazom battleship-frontend:latest a počtom replik nastaveným na 1. Frontend komunikuje so serverovou logikou cez port 80.

  • StatefulSet (battleship-mysql):
    StatefulSet s názvom battleship-mysql riadi nasadenie MySQL databázy s jednou replikou. Tento objekt používa PersistentVolumeClaim (mysql-pvc) pre trvalé ukladanie dát databázy. Kontajner beží s obrazom mysql:8.0.30, počúva na porte 3306 a je nakonfigurovaný pomocou environment variables MYSQL_ROOT_PASSWORD=somepassword a MYSQL_DATABASE=battleship.

  • PersistentVolume (mysql-pv):
    PersistentVolume s názvom mysql-pv poskytuje fyzické úložisko pre MySQL databázu. Konkrétne má kapacitu 1Gi, používa režim prístupu ReadWriteOnce a je nastavený na využitie hostPath s cestou /mnt/data/mysql.

  • PersistentVolumeClaim (mysql-pvc):
    Tento objekt žiada úložný priestor vo veľkosti 1Gi s prístupom ReadWriteOnce. PVC sa následne používa v StatefulSet battleship-mysql na pripojenie trvalého úložiska k databáze.

  • Service:

    • mysql:
      ClusterIP služba, ktorá poskytuje interný prístup k MySQL databáze v rámci namespace battleship-app a smeruje požiadavky na port 3306.

    • backend:
      NodePort služba, ktorá smeruje požiadavky na Deployment battleship-backend na port 4000 a mapuje ho na externý port 30000, čím zabezpečuje prístup k backend API.

    • frontend:
      NodePort služba, ktorá poskytuje prístup k webovému rozhraniu nasadenému prostredníctvom Deployment battleship-frontend na porte 80, pričom mapuje tento port na externý port 30001.


4. Opis virtuálnych sietí a pomenovaných zväzkov

  • Virtuálna sieť (app-net):
    V prostredí Docker (a Docker Compose) kontajnery bežia vo vymedzenej sieti app-net, čo umožňuje vzájomnú komunikáciu pomocou mien služieb. Ak sieť ešte neexistuje, príslušné skripty ju vytvoria.

  • Pomenovaný zväzok (db_data):
    Tento zväzok slúži pre uchovávanie dát databázy MySQL. Je pripojený do kontajnera na ceste /var/lib/mysql a zabezpečuje, že dáta pretrvávajú aj po reštarte alebo odstránení kontajnera.


5. Opis konfigurácie kontajnerov

MySQL

  • Image: mysql:8.0.30
  • Premenné prostredia:
    • MYSQL_ROOT_PASSWORD=somepassword
    • MYSQL_DATABASE=battleship
  • Port: 3306 (mapovaný na localhost:3306 v Docker prostredí)
  • Persistent Volume: Pripojený pomenovaný zväzok (db_data) k /var/lib/mysql
  • Sieť: Všetky kontajnery komunikujú cez sieť app-net
  • Reštart: unless-stopped

Backend

  • Build: Docker image sa vytvára pomocou Dockerfile umiestneného v priečinku ./backend.
  • Port: 4000 (mapovaný na localhost:4000)
  • Environment Variables:
    • DB_HOST=mysql
    • DB_PORT=3306
    • DB_USER=root
    • DB_PASSWORD=somepassword
    • DB_NAME=battleship
  • Závislosť: Nastavená závislosť na MySQL službe (v docker-compose) cez depends_on
  • Sieť: app-net
  • Reštart: unless-stopped

Frontend

  • Build: Docker image sa vytvára pomocou Dockerfile umiestneného v priečinku ./frontend.
  • Port: 80 (mapovaný na localhost:3001)
  • Závislosť: Nastavená závislosť na backend službe (v docker-compose) cez depends_on
  • Sieť: app-net
  • Reštart: unless-stopped

6. Návod ako pripraviť, spustiť, pozastaviť a vymazať aplikáciu

Príprava aplikácie

prepare-app.sh
Tento skript:

  • Vytvorí externú Docker sieť app-net (ak ešte neexistuje).
  • Zostaví Docker obrazy pre MySQL (ak je potrebný custom image), backend a frontend (na základe Dockerfile v príslušných adresároch).

Spustenie:

./prepare-app.sh

Spustenie aplikácie

start-app.sh
Tento skript:

  • Spustí všetky kontajnery (MySQL, backend, frontend) pomocou príkazu docker-compose up -d (alebo príkazov pre Kubernetes, ak sa používa K8s).
  • Vypíše informácie o dostupnosti aplikácie.

Spustenie:

./start-app.sh

Pozastavenie aplikácie

stop-app.sh
Tento skript:

  • Pozastaví všetky služby, pričom dáta v databáze (persistent volume) zostanú zachované.

Spustenie:

./stop-app.sh

Odstránenie aplikácie

remove-app.sh
Tento skript:

  • Odstráni všetky vytvorené kontajnery, obrazy a (ak je použitý parameter -v) aj persistent volume.

Spustenie:

./remove-app.sh

7. Návod ako si pozrieť aplikáciu na webovom prehliadači

  • Frontend:
    Otvorte webový prehliadač a zadajte adresu:
    http://localhost:3001

  • Backend API:
    API je dostupné na:
    http://localhost:4000

  • MySQL:
    Pre pripojenie k databáze použite MySQL klienta a pripojte sa na:
    localhost:3306