.. | ||
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úcihostPath
alebo 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/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