| .. | ||
| 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):
Poskytuje izolované prostredie pre všetky vytvorené objekty súvisiace s aplikáciou. -
Deployment:
- battleship-backend: Deployment pre backend službu s 1 replikou, ktorý zabezpečuje prevádzku Node.js aplikácie.
- battleship-frontend: Deployment pre frontend službu s 1 replikou, ktorý zabezpečuje dostupnosť webového rozhrania.
-
StatefulSet (battleship-mysql):
Riadi nasadenie MySQL databázy s 1 replikou a využíva PersistentVolumeClaim na trvalé ukladanie dát. -
PersistentVolume (PV):
Definovaný zdroj pre uloženie dát databázy, typicky využívajúcihostPathalebo iný storage provisioner. -
PersistentVolumeClaim (PVC):
Požaduje úložný priestor pre MySQL databázu (1Gi), ktorý sa následne pripojí k objektu StatefulSet. -
Service:
- mysql: ClusterIP služba pre internú komunikáciu s databázou.
- backend: NodePort služba pre prístup ku backend aplikácii.
- frontend: NodePort služba pre prístup k webovému rozhraniu frontend aplikácie.
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