zkt25/z2/README.md
2025-04-09 10:53:31 +02:00

160 lines
7.1 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):**
Tento objekt vytvára samostatný menný priestor `battleship-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 obrazom `battleship-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íklad `DB_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 obrazom `battleship-frontend:latest` a počtom replik nastaveným na 1. Frontend komunikuje so serverovou logikou cez port **80**.
- **StatefulSet (battleship-mysql):**
StatefulSet s názvom `battleship-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 obrazom `mysql:8.0.30`, počúva na porte **3306** a je nakonfigurovaný pomocou environment variables `MYSQL_ROOT_PASSWORD=somepassword` a `MYSQL_DATABASE=battleship`.
- **PersistentVolume (mysql-pv):**
PersistentVolume s názvom `mysql-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žitie `hostPath` 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 StatefulSet `battleship-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 namespace `battleship-app` a smeruje požiadavky na port **3306**.
- **backend:**
NodePort služba, ktorá smeruje požiadavky na Deployment `battleship-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 Deployment `battleship-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 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`