# Battleship Web Application ## 1. Podmienky na nasadenie a spustenie Na spustenie tejto aplikácie je potrebný nasledujúci softvér: - **Docker** (nainštalovaný a správne nakonfigurovaný) - **Docker Compose** (verzia 3.8 a vyššia) - **Bash** (pre spúšťanie skriptov) Odporúčané prostredie: Linux alebo Windows s nainštalovaným WSL2. ## 2. Opis aplikácie Táto webová aplikácia predstavuje jednoduchú hru Battleship. Aplikácia je rozdelená na tri hlavné služby: - **Frontend:** Webové rozhranie, kde hráči zadávajú svoje mená, umiestňujú svoje lode a hrajú hru. - **Backend:** Serverová logika, ktorá spracováva požiadavky od frontendu, komunikuje s databázou a ukladá výsledky hier. - **Databáza (MySQL):** Ukladá trvalé dáta – informácie o hrách, výsledkoch a nastaveniach. Dáta sú uchovávané v persistent volume, aby prežili reštarty kontajnerov. ## 3. Opis virtuálnych sietí a pomenovaných zväzkov ### Virtuálna sieť - **app-net:** Všetky kontajnery (frontend, backend, MySQL) bežia v rámci jednej Docker siete s názvom `app-net`. - Ak sieť nie je vytvorená, skripty ju vytvoria. - Sieť umožňuje vzájomnú komunikáciu kontajnerov pomocou mien služieb (napr. backend pristupuje k databáze pomocou mena `mysql`). ### Pomenované zväzky - **db_data:** Tento persistent volume je pripojený k službe MySQL a ukladá dáta (obsah databázy) na ceste `/var/lib/mysql`. - Zabezpečuje, že aj pri reštarte alebo odstránení kontajnera sa dáta nevymažú, pokiaľ ich zámselne neodstránite. ## 4. 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) - **Persistent Volume:** `db_data` pripojený na `/var/lib/mysql` - **Sieť:** `app-net` - **Reštart:** `unless-stopped` ### Backend - **Build:** Dockerfile v priečinku `./backend` - **Port:** 4000 (mapovaný na localhost:4000) - **Environment Variables:** - `DB_HOST=mysql` (meno služby MySQL v rámci docker-compose) - `DB_PORT=3306` - `DB_USER=root` - `DB_PASSWORD=somepassword` - `DB_NAME=battleship` - **Závislosť:** Závisí od služby MySQL (nastavené v `depends_on`) - **Sieť:** `app-net` - **Reštart:** `unless-stopped` ### Frontend - **Build:** Dockerfile v priečinku `./frontend` - **Port:** 80 (mapovaný na localhost:3001) - **Závislosť:** Závisí od backendu (nastavené v `depends_on`) - **Sieť:** `app-net` - **Reštart:** `unless-stopped` ## 5. Zoznam použitých kontajnerov a ich stručný opis - **battleship_mysql:** Beží MySQL databáza, ktorá ukladá trvalé dáta aplikácie. Používa persistent volume `db_data`. - **battleship_backend:** Node.js aplikácia, ktorá poskytuje API pre hru, komunikuje s databázou a spracováva hernú logiku. - **battleship_frontend:** Webové rozhranie aplikácie (React), prostredníctvom ktorého hráči interagujú s hrou. ## 6. Návod ako pripraviť, spustiť, pozastaviť a vymazať aplikáciu Súčasťou projektu sú štyri skripty: ### Príprava aplikácie **prepare-app.sh** Tento skript: - Vytvorí externú sieť `app-net` (ak ešte neexistuje). - Zostaví Docker obrazy pre MySQL, backend a frontend prostredníctvom docker-compose. Spustenie: ```bash ./prepare-app.sh ``` ### Spustenie aplikácie **start-app.sh** Tento skript: - Spustí všetky kontajnery (MySQL, backend, frontend) pomocou `docker-compose up -d`. - 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 ostanú zachované (persistent volume). Spustenie: ```bash ./stop-app.sh ``` ### Odstránenie aplikácie **remove-app.sh** Tento skript: - Odstráni všetky vytvorené kontajnery, obrazy a persistent volume (ak sa použije parameter `-v`). Spustenie: ```bash ./remove-app.sh ``` ## 7. Návod ako si pozrieť aplikáciu na webovom prehliadači ### Frontend: Otvorte webový prehliadač a zadajte: [http://localhost:3001](http://localhost:3001) ### Backend API: API je dostupné na: [http://localhost:4000](http://localhost:4000) ### MySQL: Pripojte sa k databáze na `localhost:3306` pomocou MySQL klienta.