| .. | ||
| 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