diff --git a/z1/README.md b/z1/README.md index e69de29..3b0ac8d 100644 --- a/z1/README.md +++ b/z1/README.md @@ -0,0 +1,142 @@ +# 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. + diff --git a/z1/docker-compose.yml b/z1/docker-compose.yml index 044e6af..34c16aa 100644 --- a/z1/docker-compose.yml +++ b/z1/docker-compose.yml @@ -45,7 +45,7 @@ services: networks: app-net: - external: true + driver: bridge volumes: db_data: diff --git a/z1/frontend/Dockerfile b/z1/frontend/Dockerfile index 6f0ccdb..8305919 100644 --- a/z1/frontend/Dockerfile +++ b/z1/frontend/Dockerfile @@ -3,25 +3,25 @@ WORKDIR /app - # Копируем package.json и package-lock.json (если есть) + COPY package*.json ./ - # Устанавливаем зависимости + RUN npm install - # Копируем исходный код + COPY . . - # Собираем проект (Vite по умолчанию генерирует папку dist) + RUN npm run build - # --- Production stage --- + FROM nginx:alpine - # Копируем собранный проект в nginx + COPY --from=build /app/dist /usr/share/nginx/html - # Открываем порт 80 для nginx + EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] diff --git a/z1/frontend/src/App.jsx b/z1/frontend/src/App.jsx index 713b3d5..534836b 100644 --- a/z1/frontend/src/App.jsx +++ b/z1/frontend/src/App.jsx @@ -65,7 +65,7 @@ function App() { } }; - // Функция для сброса состояния и начала новой игры + const resetGame = () => { setStep(0); setGameId(null); diff --git a/z1/prepare-app.sh b/z1/prepare-app.sh index 9c78117..2dd4561 100644 --- a/z1/prepare-app.sh +++ b/z1/prepare-app.sh @@ -1,10 +1,10 @@ echo "Preparing app..." -# Создаем сеть, если хотите оставить её внешней + docker network inspect app-net >/dev/null 2>&1 || docker network create app-net -# Собираем образы (backend, frontend) через docker-compose + docker-compose build echo "Preparation done." diff --git a/z1/remove-app.sh b/z1/remove-app.sh index 561834d..12f8b65 100644 --- a/z1/remove-app.sh +++ b/z1/remove-app.sh @@ -1,11 +1,9 @@ echo "Removing app..." -# Останавливаем и удаляем все контейнеры, -# а также volume (db_data), образы локальные (если надо) docker-compose down -v --rmi local -# Если хотите удалить и внешнюю сеть: + docker network rm app-net || true echo "App removed completely."