zkt25/z2/README.md
2025-04-09 10:43:14 +02:00

150 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 image `mysql: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úci `hostPath` 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 sieti `app-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:
```bash
./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:
```bash
./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:
```bash
./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:
```bash
./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](http://localhost:3001)
- **Backend API:**
API je dostupné na:
[http://localhost:4000](http://localhost:4000)
- **MySQL:**
Pre pripojenie k databáze použite MySQL klienta a pripojte sa na:
`localhost:3306`