| .. | ||
| backend | ||
| frontend | ||
| .gitignore | ||
| deployment.yaml | ||
| docker-compose.yml | ||
| namespace.yaml | ||
| prepare-app.sh | ||
| README.md | ||
| remove-app.sh | ||
| service.yaml | ||
| start-app.sh | ||
| statefulset.yaml | ||
| stop-app.sh | ||
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 imagemysql: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ý priestorbattleship-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 obrazombattleship-backend:latesta 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íkladDB_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 obrazombattleship-frontend:latesta počtom replik nastaveným na 1. Frontend komunikuje so serverovou logikou cez port 80.
-
-
StatefulSet (battleship-mysql):
StatefulSet s názvombattleship-mysqlriadi nasadenie MySQL databázy s jednou replikou. Tento objekt používa PersistentVolumeClaim (mysql-pvc) pre trvalé ukladanie dát databázy. Kontajner beží s obrazommysql:8.0.30, počúva na porte 3306 a je nakonfigurovaný pomocou environment variablesMYSQL_ROOT_PASSWORD=somepasswordaMYSQL_DATABASE=battleship. -
PersistentVolume (mysql-pv):
PersistentVolume s názvommysql-pvposkytuje fyzické úložisko pre MySQL databázu. Konkrétne má kapacitu 1Gi, používa režim prístupu ReadWriteOnce a je nastavený na využitiehostPaths 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 StatefulSetbattleship-mysqlna 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 namespacebattleship-appa smeruje požiadavky na port 3306. -
backend:
NodePort služba, ktorá smeruje požiadavky na Deploymentbattleship-backendna 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 Deploymentbattleship-frontendna 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 sietiapp-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/mysqla 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=somepasswordMYSQL_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=mysqlDB_PORT=3306DB_USER=rootDB_PASSWORD=somepasswordDB_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