From 6cdbf7478625d4d22ec18b39e6ca12841335c286 Mon Sep 17 00:00:00 2001 From: mm390wk Date: Sun, 22 Mar 2026 12:58:49 +0100 Subject: [PATCH] hotovy projekt --- zadanie 1/README.md | 156 ++++++++++ zadanie 1/backend/Dockerfile | 24 ++ zadanie 1/backend/db.js | 37 +++ zadanie 1/backend/init.sql | 28 ++ zadanie 1/backend/package.json | 14 + zadanie 1/backend/server.js | 181 +++++++++++ zadanie 1/docker-compose.yaml | 130 ++++++++ zadanie 1/frontend/index.html | 494 +++++++++++++++++++++++++++++++ zadanie 1/frontend/logo_kps.png | Bin 0 -> 97597 bytes zadanie 1/frontend/new-post.html | 401 +++++++++++++++++++++++++ zadanie 1/frontend/post.html | 345 +++++++++++++++++++++ zadanie 1/nginx.conf | 42 +++ zadanie 1/prepare-app.sh | 15 + zadanie 1/remove-app.sh | 18 ++ zadanie 1/start-app.sh | 26 ++ zadanie 1/stop-app.sh | 17 ++ 16 files changed, 1928 insertions(+) create mode 100755 zadanie 1/README.md create mode 100755 zadanie 1/backend/Dockerfile create mode 100755 zadanie 1/backend/db.js create mode 100755 zadanie 1/backend/init.sql create mode 100755 zadanie 1/backend/package.json create mode 100755 zadanie 1/backend/server.js create mode 100755 zadanie 1/docker-compose.yaml create mode 100755 zadanie 1/frontend/index.html create mode 100755 zadanie 1/frontend/logo_kps.png create mode 100755 zadanie 1/frontend/new-post.html create mode 100755 zadanie 1/frontend/post.html create mode 100755 zadanie 1/nginx.conf create mode 100755 zadanie 1/prepare-app.sh create mode 100755 zadanie 1/remove-app.sh create mode 100755 zadanie 1/start-app.sh create mode 100755 zadanie 1/stop-app.sh diff --git a/zadanie 1/README.md b/zadanie 1/README.md new file mode 100755 index 0000000..bf5367a --- /dev/null +++ b/zadanie 1/README.md @@ -0,0 +1,156 @@ +# Blog – Dokumentacia + +Osobný blog nasadený pomocou Docker Compose. Sklada sa zo styroch sluzieb beziacich v samostatnych kontajneroch. + + + +# Popis aplikacie + +Webová aplikacia umoznuje: +- prezerať zoznam blogových príspevkov +- citat jednotlive prispevky +- vytvarat a upravovat nove príspevky +- spravovat databazu cez pgAdmin webove rozhranie + + + +# Podmienky nasadenia + + Softver | Minimálna verzia + Linux (Ubuntu/Debian/Fedora) + Docker Engine | 24.0 + Docker Compose (plugin) | 2.20 + +Overenie instalacie: +```bash +docker --version +docker compose version +``` + + + +# Architektura – prehlad sluzieb + +``` + Priehliadac -> Nginx(proxy - port 80) -> Backend(Node.js) -> DB(Postgres) <- pgAdmin + | ^ + | | + ------------------------------------------------------------ + port 8080 + +# Zoznam kontajnerov + +| Kontajner | Obraz | Port | Popis | +| `blog-nginx` | `nginx:alpine` | `80` | Webserver pre frontend + reverse proxy na backend | +|`blog-backend` | vlastny build | interny `3000` | Node.js REST API, komunikuje s DB | +| `blog-db` | `postgres:16-alpine`| interny `5432` | PostgreSQL databaza, uchovava prispevky | +| `blog-pgadmin` | `dpage/pgadmin4` | `8080` | Webove rozhranie pre spravu databazy | + + + +## Virtuálne siete + +# `blog-network` +- Interna Docker siet, do ktorej su zapojene vsetky styri kontajnery +- Kontajnery sa navzajom adresuju cez db +- Z hostovského pocitaca su zvonka dostupne len služby s mapovanym portom (`nginx` na 80, `pgadmin` na 8080) + + + +## Trvale zvazky + +# `db-data` +- Typ: pomenovay zvazok (managed volume) +- Pripojeny na: `/var/lib/postgresql/data` v kontajneri `blog-db` +- ucel: data PostgreSQL databazy (prispevky blogu) preziju restart alebo zmazanie kontajnera +- Zvazok sa zachova pri `stop-app.sh`, zmaze sa len pri `remove-app.sh` + + + +# Konfigurácia kontajnerov + +## Nginx +- Staticke subory frontendu su namontovane z `./frontend` do `/usr/share/nginx/html` (read-only) +- Vlastna konfiguracia z `nginx.conf` nahradza predvolenu +- Vsetky requesty na `/api/*` presmeruje na `http://backend:3000` (reverse proxy, v praxi to zlepsuje bezpecnost + navstevnika stranky resp. uzivatela) + +# Backend (Node.js) +- Zostavany z `./backend/Dockerfile` na zaklade obrazu `node:20-alpine` +- Konfiguracia databazy sa predava cez premenne prostredia (`DB_HOST`, `DB_USER`, atd.) +- Startuje az po tom, co DB kontajner hlasi `healthy` (healthcheck) + +# PostgreSQL +- pri prvom starte automaticky spusti `./backend/init.sql` – vytvori tabulku a vlozi ukazkovy prispevok +- data uklada do zvazku `db-data` + +# pgAdmin +- oredvolene prihlasenie: `admin@blog.local` / `admin` +- po prihlaseni je potrebne manualne pridat server s udajmi: host `db`, port `5432`, db `blog`, + user `blog_user`, heslo `blog_pass` + + + +## Navod na manazment aplikacie + +# Priprava (jednorazovo) +``` +./prepare-app.sh +``` + +# Spustenie +``` +./start-app.sh +``` + +# Zastavenie (ulozi sa stav) +``` +./stop-app.sh +``` + +# Opatovne spustenie +``` +./start-app.sh +``` + +# Uplne odstranenie +``` +./remove-app.sh +``` + + + +# Pristup cez prehliadac + +| URL | Popis | +|---|---| +| `http://localhost` | Blog – zoznam prispevkov | +| `http://localhost/new-post.html` | Formular na novy prispevok | +| `http://localhost:8080` | pgAdmin – sprava databazy | + + + +## Pouzite zdroje + +- [Docker dokumentácia](https://docs.docker.com/) +- [Docker Compose dokumentácia](https://docs.docker.com/compose/) +- [Express.js dokumentácia](https://expressjs.com/) +- [node-postgres (pg) dokumentácia](https://node-postgres.com/) +- [Nginx dokumentácia](https://nginx.org/en/docs/) +- [PostgreSQL dokumentácia](https://www.postgresql.org/docs/) + + + +## Použitie umelej inteligencie + +Pri tvorbe projektu bol použitý AI asistent Claude (Anthropic, claude.ai). + +Použitie: +- Navrh architektúry aplikácie a výber technológií +- Generovanie kostry kodu (`server.js`, `db.js`, HTML stránky) +- Úprava Docker konfigurácie (`docker-compose.yaml`, `nginx.conf`, `Dockerfile`) +- Generovanie grafickej úpravy tejto dokumentácie +- interne CSS v index.html + +Všetok vygenerovaný kód bol preštudovaný, pochopený a upravovaný. Komentáre v kóde odrážajú +vlastné porozumenie danej problematiky. diff --git a/zadanie 1/backend/Dockerfile b/zadanie 1/backend/Dockerfile new file mode 100755 index 0000000..ed12b11 --- /dev/null +++ b/zadanie 1/backend/Dockerfile @@ -0,0 +1,24 @@ +# ============================================================= +# Dockerfile – Inštrukcie pre zostavenie Docker obrazu backendu +# ============================================================= + +# Začneme od oficiálneho Node.js obrazu (verzia LTS = dlhodobá podpora) +FROM node:20-alpine + +# Nastavíme pracovný adresár vnútri kontajnera +WORKDIR /app + +# Skopírujeme package.json a nainštalujeme závislosti +# Robíme to PRED kopírovaním zvyšku kódu – Docker cachuje vrstvy +# Ak sa zmení len server.js, npm install sa znova nespustí +COPY package.json . +RUN npm install --omit=dev + +# Skopírujeme zvyšok kódu do kontajnera +COPY . . + +# Informujeme Docker, že kontajner počúva na tomto porte +EXPOSE 3000 + +# Príkaz, ktorý sa spustí keď kontajner naštartuje +CMD ["node", "server.js"] diff --git a/zadanie 1/backend/db.js b/zadanie 1/backend/db.js new file mode 100755 index 0000000..e17f3c1 --- /dev/null +++ b/zadanie 1/backend/db.js @@ -0,0 +1,37 @@ +// ============================================================= +// db.js – Pripojenie k PostgreSQL databáze +// ============================================================= +// Tento modul exportuje funkciu query(), ktorú voláme v server.js +// Namiesto priameho pripájania pri každom requeste používame +// "connection pool" – znovupoužiteľné pripojenia (efektívnejšie) +// ============================================================= + +const { Pool } = require('pg'); + +// Pool – skupina otvorených pripojení k databáze +// Keď príde request, vezme voľné pripojenie z poolu a vráti ho späť +// Konfigurácia sa číta z premenných prostredia (environment variables) +// Tie nastavíme v Docker Compose – takto kód nevie o konkrétnom hesle +const pool = new Pool({ + host: process.env.DB_HOST || 'localhost', // adresa DB servera + port: parseInt(process.env.DB_PORT) || 5432, // štandardný PostgreSQL port + database: process.env.DB_NAME || 'blog', // názov databázy + user: process.env.DB_USER || 'blog_user', // používateľ DB + password: process.env.DB_PASSWORD || 'blog_pass', // heslo +}); + +// Otestujeme pripojenie hneď pri štarte servera +pool.connect((err, client, release) => { + if (err) { + console.error('Chyba pri pripájaní k databáze:', err.message); + } else { + console.log('Úspešne pripojený k PostgreSQL databáze'); + release(); // vrátime pripojenie späť do poolu + } +}); + +// Exportujeme pomocnú funkciu query() +// Ostatné súbory ju volajú ako: db.query('SELECT ...', [param1, ...]) +module.exports = { + query: (text, params) => pool.query(text, params), +}; diff --git a/zadanie 1/backend/init.sql b/zadanie 1/backend/init.sql new file mode 100755 index 0000000..0f7f575 --- /dev/null +++ b/zadanie 1/backend/init.sql @@ -0,0 +1,28 @@ +-- ============================================================= +-- init.sql – Inicializácia databázy +-- ============================================================= +-- Tento skript sa spustí automaticky pri prvom štarte PostgreSQL +-- kontajnera (Docker ho hľadá v /docker-entrypoint-initdb.d/) +-- ============================================================= + +-- Vytvoríme tabuľku pre príspevky +-- IF NOT EXISTS – skript môžeme spustiť aj viackrát bez chyby +CREATE TABLE IF NOT EXISTS posts ( + id SERIAL PRIMARY KEY, + title VARCHAR(200) NOT NULL, + content TEXT NOT NULL, + category VARCHAR(100), + excerpt VARCHAR(300), + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP +); +-- Vložíme ukážkový príspevok, aby blog nebol prázdny pri prvom spustení +INSERT INTO posts (title, content, category, excerpt) VALUES +( + 'Vitajte na mojom blogu', + 'Toto je môj prvý príspevok. Blog beží na Docker infraštruktúre skladajúcej sa z Nginx webservera, Node.js backendu a PostgreSQL databázy. + +Každá služba beží vo vlastnom kontajneri a komunikujú medzi sebou cez virtuálnu Docker sieť.', + 'Technológie', + 'Prvý príspevok – predstavenie blogu a jeho technickej infraštruktúry.' +); diff --git a/zadanie 1/backend/package.json b/zadanie 1/backend/package.json new file mode 100755 index 0000000..27b5026 --- /dev/null +++ b/zadanie 1/backend/package.json @@ -0,0 +1,14 @@ +{ + "name": "blog-backend", + "version": "1.0.0", + "description": "Backend API pre osobný blog", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "cors": "^2.8.5", + "express": "^4.18.2", + "pg": "^8.11.3" + } +} diff --git a/zadanie 1/backend/server.js b/zadanie 1/backend/server.js new file mode 100755 index 0000000..1743ff4 --- /dev/null +++ b/zadanie 1/backend/server.js @@ -0,0 +1,181 @@ + +// server.js – Blog API server + +// Používame Express.js – minimálny webový framework pre Node.js +// Počúva na porte 3000 a odpovedá na HTTP požiadavky od frontendu + + +const express = require('express'); +const cors = require('cors'); +const db = require('./db'); + +const app = express(); +const PORT = process.env.PORT || 3000; + + +// MIDDLEWARE +// Middleware sú funkcie, ktoré spracujú každý request +// predtým, než sa dostane k nášmu kódu (route handleru) + + +// Povolíme príjem JSON v tele requestu (napr. pri POST) +app.use(express.json()); + +// CORS – Cross-Origin Resource Sharing +// Povolíme frontendu (Nginx na porte 80) volať náš backend (port 3000) +// Bez toho by prehliadač zablokoval požiadavky z inej domény/portu +app.use(cors()); + + +// ROUTES – definujeme čo sa stane pri každej URL + + +// GET /health – jednoduchý endpoint na overenie, že server beží +// Používa sa napr. v Dockeri ako "healthcheck" +app.get('/health', (req, res) => { + res.json({ status: 'ok' }); +}); + +// GET /api/posts – vráti zoznam všetkých príspevkov +// Príspevky sú zoradené od najnovšieho po najstarší (ORDER BY created_at DESC) +app.get('/api/posts', async (req, res) => { + try { + const result = await db.query( + 'SELECT * FROM posts ORDER BY created_at DESC' + ); + // result.rows je pole objektov – každý riadok z DB je jeden objekt + res.json(result.rows); + } catch (err) { + console.error('Chyba pri načítaní príspevkov:', err.message); + res.status(500).json({ error: 'Interná chyba servera' }); + } +}); + +// GET /api/posts/:id – vráti jeden konkrétny príspevok podľa ID +// :id je parameter v URL – napr. /api/posts/5 → id = 5 +app.get('/api/posts/:id', async (req, res) => { + const id = parseInt(req.params.id); // načítame ID z URL + + // Základná validácia – ID musí byť číslo + if (isNaN(id)) { + return res.status(400).json({ error: 'ID musí byť číslo' }); + } + + try { + // $1 je placeholder – ochrana pred SQL injection útokom + // Nikdy nevkladáme premennú priamo do SQL reťazca! + const result = await db.query( + 'SELECT * FROM posts WHERE id = $1', + [id] + ); + + if (result.rows.length === 0) { + return res.status(404).json({ error: 'Príspevok nenájdený' }); + } + + res.json(result.rows[0]); + } catch (err) { + console.error('Chyba pri načítaní príspevku:', err.message); + res.status(500).json({ error: 'Interná chyba servera' }); + } +}); + +// POST /api/posts – vytvorí nový príspevok +// Dáta prídu v tele requestu ako JSON +app.post('/api/posts', async (req, res) => { + // Destructuring – vyberieme len polia, ktoré potrebujeme + const { title, content, category, excerpt } = req.body; + + // Validácia vstupných dát + if (!title || !content) { + return res.status(400).json({ error: 'Nadpis a obsah sú povinné' }); + } + + try { + // RETURNING * – PostgreSQL vráti vložený riadok aj s vygenerovaným ID a dátumom + const result = await db.query( + `INSERT INTO posts (title, content, category, excerpt) + VALUES ($1, $2, $3, $4) + RETURNING *`, + [title.trim(), content.trim(), category || null, excerpt?.trim() || null] + ); + + // HTTP 201 Created – signalizuje, že bol vytvorený nový zdroj + res.status(201).json(result.rows[0]); + } catch (err) { + console.error('Chyba pri vytváraní príspevku:', err.message); + res.status(500).json({ error: 'Interná chyba servera' }); + } +}); + + +app.put('/api/posts/:id', async (req, res) => { + const id = parseInt(req.params.id); + + if (isNaN(id)) { + return res.status(400).json({ error: 'ID musí byť číslo' }); + } + + const { title, content, category, excerpt } = req.body; + + if (!title || !content) { + return res.status(400).json({ error: 'Nadpis a obsah sú povinné' }); + } + + try { + const result = await db.query( + `UPDATE posts + SET title = $1, content = $2, category = $3, excerpt = $4, updated_at = NOW() + WHERE id = $5 + RETURNING *`, + [title.trim(), content.trim(), category || null, excerpt?.trim() || null, id] + ); + + if (result.rows.length === 0) { + return res.status(404).json({ error: 'Príspevok nenájdený' }); + } + + res.json(result.rows[0]); + } catch (err) { + console.error('Chyba pri úprave príspevku:', err.message); + res.status(500).json({ error: 'Interná chyba servera' }); + } +}); + + + +// DELETE /api/posts/:id – zmaže príspevok podľa ID +app.delete('/api/posts/:id', async (req, res) => { + const id = parseInt(req.params.id); + + if (isNaN(id)) { + return res.status(400).json({ error: 'ID musí byť číslo' }); + } + + try { + const result = await db.query( + 'DELETE FROM posts WHERE id = $1 RETURNING id', + [id] + ); + + if (result.rows.length === 0) { + return res.status(404).json({ error: 'Príspevok nenájdený' }); + } + + // HTTP 200 s potvrdením zmazania + res.json({ message: 'Príspevok bol zmazaný', id }); + } catch (err) { + console.error('Chyba pri mazaní príspevku:', err.message); + res.status(500).json({ error: 'Interná chyba servera' }); + } +}); + + +// SPUSTENIE SERVERA +// app.listen() spustí server a začne počúvať na danom porte +// '0.0.0.0' znamená: počúvaj na všetkých sieťových rozhraniach +// (potrebné v Dockeri, inak by počúval len na localhost) + +app.listen(PORT, '0.0.0.0', () => { + console.log(`Backend server beží na porte ${PORT}`); +}); diff --git a/zadanie 1/docker-compose.yaml b/zadanie 1/docker-compose.yaml new file mode 100755 index 0000000..43eee18 --- /dev/null +++ b/zadanie 1/docker-compose.yaml @@ -0,0 +1,130 @@ +# ============================================================= +# docker-compose.yaml – Konfigurácia všetkých služieb +# ============================================================= +# Docker Compose číta tento súbor a spustí všetky kontajnery +# naraz, so správnym prepojením a konfiguráciou. +# +# SLUŽBY: +# db – PostgreSQL databáza (port 5432) +# backend – Node.js API server (port 3000, interný) +# nginx – Webserver + proxy (port 80, verejný) +# pgadmin – Webové rozhranie DB (port 8080) +# +# SIEŤ: blog-network (interná Docker sieť) +# ZVÄZOK: db-data (trvalé uloženie dát databázy) +# ============================================================= + +services: + + # ── 1. DATABÁZA ───────────────────────────────────────────── + db: + image: postgres:16-alpine # oficiálny obraz, alpine = menší + container_name: blog-db + restart: unless-stopped # reštartuj po páde, nie po ručnom zastavení + + environment: + POSTGRES_DB: blog # názov databázy ktorá sa vytvorí + POSTGRES_USER: blog_user # používateľ + POSTGRES_PASSWORD: blog_pass # heslo + ports: + - "5432:5432" + volumes: + # Trvalý zväzok – dáta v DB prežijú reštart kontajnera + - db-data:/var/lib/postgresql/data + # Init skript – PostgreSQL ho spustí pri prvom štarte + - ./backend/init.sql:/docker-entrypoint-initdb.d/init.sql + + networks: + - blog-network + + # Healthcheck – Docker kontroluje či je DB pripravená + # Backend nesmie štartovať skôr, než DB prijíma spojenia + healthcheck: + test: ["CMD-SHELL", "pg_isready -U blog_user -d blog"] + interval: 5s # kontroluj každých 5 sekúnd + timeout: 5s # čakaj max 5 sekúnd na odpoveď + retries: 5 # po 5 neúspechoch = unhealthy + + # ── 2. BACKEND ────────────────────────────────────────────── + backend: + build: ./backend # zostav obraz z ./backend/Dockerfile + container_name: blog-backend + restart: unless-stopped + + environment: + # Tieto premenné číta db.js – takto heslo nie je v kóde + DB_HOST: db # názov DB služby = hostname v Docker sieti + DB_PORT: 5432 + DB_NAME: blog + DB_USER: blog_user + DB_PASSWORD: blog_pass + PORT: 3000 + + networks: + - blog-network + + # Čakaj kým DB je zdravá – až potom spusti backend + depends_on: + db: + condition: service_healthy + + # ── 3. NGINX (webserver + reverse proxy) ──────────────────── + nginx: + image: nginx:alpine + container_name: blog-nginx + restart: unless-stopped + + ports: + # Mapovanie portov: HOST:KONTAJNER + # Prehliadač sa pripojí na localhost:80 + - "80:80" + + volumes: + # Statické súbory frontendu + - ./frontend:/usr/share/nginx/html:ro # :ro = read-only + # Naša konfigurácia namiesto predvolenej + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro + + networks: + - blog-network + + depends_on: + - backend + + # ── 4. PGADMIN (webové rozhranie pre databázu) ─────────────── + pgadmin: + image: dpage/pgadmin4:latest + container_name: blog-pgadmin + restart: unless-stopped + + environment: + PGADMIN_DEFAULT_EMAIL: admin@blog.local + PGADMIN_DEFAULT_PASSWORD: admin + + ports: + # pgAdmin dostupný na localhost:8080 + - "8080:80" + + networks: + - blog-network + + depends_on: + - db + +# ============================================================= +# SIETE +# ============================================================= +# Interná virtuálna sieť – kontajnery sa navzájom vidia +# cez názov služby (napr. "db", "backend") +# Zvonka (z hosťovského počítača) sú viditeľné len cez ports: +networks: + blog-network: + driver: bridge + +# ============================================================= +# ZVÄZKY +# ============================================================= +# Pomenovaný zväzok – Docker ho spravuje samostatne +# Dáta prežijú aj keď sa kontajner zmaže a znova vytvorí +volumes: + db-data: diff --git a/zadanie 1/frontend/index.html b/zadanie 1/frontend/index.html new file mode 100755 index 0000000..f873a3d --- /dev/null +++ b/zadanie 1/frontend/index.html @@ -0,0 +1,494 @@ + + + + + + Môj Blog + + + + + + + +
+
+ osobný blog + +
+
+

Môj
Blog

+ Katedra počítačových sietí +
+
+ +
+
+ + + + + +
+ +
+
+ +
+
+ + + +
+ + + + diff --git a/zadanie 1/frontend/logo_kps.png b/zadanie 1/frontend/logo_kps.png new file mode 100755 index 0000000000000000000000000000000000000000..acb0060db2ee37e07942fcb45de554200d0a2186 GIT binary patch literal 97597 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 + + + + + Nový príspevok + + + + + + + +
+ Späť na blog + Môj Blog +
+ +
+

Nový príspevok

+

Napíšte
článok

+ +
+
+ + +
0 / 200
+
+ +
+ + +
+ +
+ + +

Zobrazí sa v zozname príspevkov. Ak nevyplníte, použije sa začiatok textu.

+
+ +
+ + +
0 znakov
+
+ +
+ + Zrušiť +
+
+
+ +
+ + + + + diff --git a/zadanie 1/frontend/post.html b/zadanie 1/frontend/post.html new file mode 100755 index 0000000..5e87f4c --- /dev/null +++ b/zadanie 1/frontend/post.html @@ -0,0 +1,345 @@ + + + + + + Príspevok — Môj Blog + + + + + + + +
+ Späť na blog + Môj Blog +
+ +
+ +
+
+
+
+
+
+
+
+
+ +
+ + + + diff --git a/zadanie 1/nginx.conf b/zadanie 1/nginx.conf new file mode 100755 index 0000000..a32e6fd --- /dev/null +++ b/zadanie 1/nginx.conf @@ -0,0 +1,42 @@ +# ============================================================= +# nginx.conf – Konfigurácia webservera Nginx +# ============================================================= +# Nginx plní dve úlohy naraz: +# 1. Servuje statické HTML/CSS/JS súbory frontendu +# 2. Funguje ako reverse proxy – preposiela /api/* requesty na backend +# +# Reverse proxy = Nginx stojí pred backendom a preposiela mu requesty +# Klient (prehliadač) vidí iba Nginx na porte 80, backend je skrytý +# ============================================================= + +server { + # Počúvame na porte 80 (štandardný HTTP port) + listen 80; + + # Koreňový adresár so statickými súbormi frontendu + root /usr/share/nginx/html; + + # Predvolený súbor keď sa otvorí / (koreň webu) + index index.html; + + # ── Statické súbory (frontend) ──────────────────────────── + # Každá URL, ktorá nezačína /api, sa obsluží ako statický súbor + location / { + # try_files: skús súbor → adresár → vráť index.html + # Posledné "/" zabezpečí, že vždy vrátime index.html + try_files $uri $uri/ /index.html; + } + + # ── Reverse proxy pre API ────────────────────────────────── + # Všetky requesty začínajúce /api sa presmerujú na backend + location /api/ { + # "backend" je názov služby v Docker Compose + # Docker vyrieši toto meno na IP adresu backend kontajnera + proxy_pass http://backend:3000; + + # Hlavičky – informujeme backend o pôvodnom requeste + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} diff --git a/zadanie 1/prepare-app.sh b/zadanie 1/prepare-app.sh new file mode 100755 index 0000000..4ca80df --- /dev/null +++ b/zadanie 1/prepare-app.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# ============================================================= +# prepare-app.sh – Príprava aplikácie +# ============================================================= +# Zostaví Docker obraz backendu. +# Sieť a zväzok vytvorí Docker Compose automaticky pri štarte. +# ============================================================= + +echo "Pripravujem aplikáciu..." + +# Zostav obraz backendu podľa ./backend/Dockerfile +# --no-cache = vždy čerstvý build, ignoruje cache +docker compose build --no-cache + +echo "Príprava dokončená." diff --git a/zadanie 1/remove-app.sh b/zadanie 1/remove-app.sh new file mode 100755 index 0000000..11e66e1 --- /dev/null +++ b/zadanie 1/remove-app.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# ============================================================= +# remove-app.sh – Úplné odstránenie aplikácie +# ============================================================= +# Odstráni VŠETKO čo vytvoril prepare-app.sh a start-app.sh: +# - kontajnery +# - sieť blog-network +# - zväzok db-data (POZOR: dáta z DB sa stratia!) +# - zostavené Docker obrazy +# ============================================================= + +echo "Odstraňujem aplikáciu..." + +# --volumes = zmaže aj pomenované zväzky (dáta DB) +# --rmi all = zmaže aj zostavené obrazy +docker compose down --volumes --rmi all + +echo "Aplikácia bola odstránená." diff --git a/zadanie 1/start-app.sh b/zadanie 1/start-app.sh new file mode 100755 index 0000000..c92ebe6 --- /dev/null +++ b/zadanie 1/start-app.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# ============================================================= +# start-app.sh – Spustenie aplikácie +# ============================================================= + +echo "Spúšťam aplikáciu..." + +# -d = detached mode (kontajnery bežia na pozadí) +# Docker Compose automaticky vytvorí sieť a zväzok ak neexistujú +docker compose up -d + +echo "" +echo "Aplikácia je dostupná na:" +echo " Blog: http://localhost:80" +echo " pgAdmin: http://localhost:8080" +echo "" +echo "Prihlasovacie údaje pgAdmin:" +echo " Email: admin@blog.local" +echo " Heslo: admin" +echo "" +echo "Pripojenie k DB v pgAdmine:" +echo " Host: db" +echo " Port: 5432" +echo " Database: blog" +echo " User: blog_user" +echo " Heslo: blog_pass" diff --git a/zadanie 1/stop-app.sh b/zadanie 1/stop-app.sh new file mode 100755 index 0000000..9aa8d93 --- /dev/null +++ b/zadanie 1/stop-app.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# ============================================================= +# stop-app.sh – Pozastavenie aplikácie +# ============================================================= +# Zastaví kontajnery ale ZACHOVÁ: +# - zväzok db-data (dáta databázy) +# - sieť blog-network +# - zostavené obrazy +# Po stop-app.sh môžete znova spustiť start-app.sh +# a aplikácia bude presne v takom stave, v akom ste ju nechali. +# ============================================================= + +echo "Zastavujem aplikáciu..." + +docker compose stop + +echo "Aplikácia zastavená. Dáta sú zachované."