# 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.