| .. | ||
| backend | ||
| frontend | ||
| docker-compose.yaml | ||
| nginx.conf | ||
| prepare-app.sh | ||
| README.md | ||
| remove-app.sh | ||
| start-app.sh | ||
| stop-app.sh | ||
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:
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.