157 lines
4.2 KiB
Markdown
Executable File
157 lines
4.2 KiB
Markdown
Executable File
# 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.
|