# 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ámyselne 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 (napr. 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: ./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: ./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). Môže tiež odstrániť externú sieť. Spustenie: ./remove-app.sh Poznámka: Ak chcete zachovať dáta v databáze medzi spusteniami, neodstraňujte persistent volume (odstráňte parameter -v v remove-app.sh). 7. Návod ako si pozrieť aplikáciu na webovom prehliadači Frontend: Otvorte webový prehliadač a zadajte: http://localhost:3001 Backend API: API je dostupné na: http://localhost:4000 MySQL: Pripojte sa k databáze na localhost:3306 pomocou obľúbeného MySQL klienta. 8. Príklad práce s aplikáciou ./prepare-app.sh Preparing app... ... (vypíšu sa informácie o sieti, zostavení obrazov, atď.) ./start-app.sh Starting app... App is running. Frontend is available at: http://localhost:3001 Backend is available at: http://localhost:4000 MySQL is available at: localhost:3306 ./stop-app.sh Stopping app... App stopped. You can run ./start-app.sh to resume. ./remove-app.sh Removing app... App removed completely.