.. | ||
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: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í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:latest
a počtom replik nastaveným na 1. Frontend komunikuje so serverovou logikou cez port 80.
-
-
StatefulSet (battleship-mysql):
StatefulSet s názvombattleship-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 obrazommysql:8.0.30
, počúva na porte 3306 a je nakonfigurovaný pomocou environment variablesMYSQL_ROOT_PASSWORD=somepassword
aMYSQL_DATABASE=battleship
. -
PersistentVolume (mysql-pv):
PersistentVolume s názvommysql-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žitiehostPath
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 StatefulSetbattleship-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 namespacebattleship-app
a smeruje požiadavky na port 3306. -
backend:
NodePort služba, ktorá smeruje požiadavky na Deploymentbattleship-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 Deploymentbattleship-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 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