160 lines
7.1 KiB
Markdown
160 lines
7.1 KiB
Markdown
|
||
# 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`
|
||
|