zkt26/zadanie 1
2026-03-23 12:43:05 +01:00
..
backend hotovy projekt 2026-03-22 12:58:49 +01:00
frontend hotovy projekt 2026-03-22 12:58:49 +01:00
docker-compose.yaml mail problem fix 2026-03-23 12:43:05 +01:00
nginx.conf hotovy projekt 2026-03-22 12:58:49 +01:00
prepare-app.sh hotovy projekt 2026-03-22 12:58:49 +01:00
README.md hotovy projekt 2026-03-22 12:58:49 +01:00
remove-app.sh hotovy projekt 2026-03-22 12:58:49 +01:00
start-app.sh hotovy projekt 2026-03-22 12:58:49 +01:00
stop-app.sh hotovy projekt 2026-03-22 12:58:49 +01:00

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.