Go to file
2026-05-11 20:59:41 +02:00
backend test 2026-05-11 20:59:41 +02:00
frontend test 2026-05-11 20:59:41 +02:00
.env.azure.example test 2026-05-11 20:59:41 +02:00
.env.local.example test 2026-05-11 20:59:41 +02:00
.gitignore test 2026-05-11 20:59:41 +02:00
backup-db.sh test 2026-05-11 20:59:41 +02:00
docker-compose.yaml test 2026-05-11 20:59:41 +02:00
prepare-app.sh test 2026-05-11 20:59:41 +02:00
README.md first commit 2026-05-11 20:58:59 +02:00
remove-app.sh test 2026-05-11 20:59:41 +02:00
show-logs.sh test 2026-05-11 20:59:41 +02:00
start-app.sh test 2026-05-11 20:59:41 +02:00
stop-app.sh test 2026-05-11 20:59:41 +02:00

1. Opis aplikácie

Riešenie nasadzuje jednoduchú webovú aplikáciu typu guestbook. Používateľ cez webové rozhranie vie zobraziť uložené odkazy a pridať nový odkaz. Frontend komunikuje s backendom cez REST API a backend ukladá dáta do PostgreSQL databázy.

Aplikácia obsahuje aj kontrolný endpoint:

/api/health

Ten slúži na overenie, či backend komunikuje s databázou.

2. Použitý verejný cloud a služby

Riešenie je pripravené pre Microsoft Azure. Použité sú tieto služby:

  1. Azure Container Registry ukladanie kontajnerových obrazov frontendu a backendu.
  2. Azure Container Apps spustenie kontajnerov bez vlastnej správy virtuálneho servera.
  3. Azure Database for PostgreSQL Flexible Server spravovaná relačná databáza s trvalým úložiskom a automatickými zálohami.
  4. Azure Log Analytics / Container Apps logs zobrazenie aplikačných logov a prístupov.

3. Architektúra riešenia

Používateľ pristupuje iba na frontend. Frontend je verejne dostupný cez HTTPS URL vytvorenú službou Azure Container Apps. Požiadavky na /api/* posiela Nginx interne na backend.

Backend nie je verejne vystavený do internetu. Má interný ingress a je dostupný iba z prostredia Azure Container Apps. Backend komunikuje s databázou PostgreSQL cez šifrované pripojenie sslmode=require.

Zjednodušená schéma:

Používateľ
   |
   | HTTPS
   v
Azure Container Apps  frontend (Nginx)
   |
   | interné HTTP volanie /api
   v
Azure Container Apps  backend (Flask)
   |
   | PostgreSQL + SSL
   v
Azure Database for PostgreSQL Flexible Server

5. Opis súborov

Súbor/priečinok Význam
backend/ Flask backend aplikácie
backend/app.py REST API, inicializácia tabuľky a práca s PostgreSQL
backend/Dockerfile Docker obraz backendu
frontend/ Statický frontend a Nginx konfigurácia
frontend/index.html Webové používateľské rozhranie
frontend/nginx.conf.template Nginx konfigurácia so zástupnou premennou BACKEND_URL
frontend/Dockerfile Docker obraz frontendu
docker-compose.yaml Lokálne spustenie cez Docker Compose
.env.azure.example Vzor konfiguračného súboru pre Azure nasadenie
.env.local.example Vzor lokálnej Docker Compose konfigurácie
.gitignore Zamedzuje odoslaniu .env.azure, .env.local a záloh do GITu
prepare-app.sh Vytvorí Azure zdroje, buildne obrazy a nasadí aplikáciu
remove-app.sh Odstráni celú Azure resource group
backup-db.sh Vytvorí manuálnu SQL zálohu databázy cez pg_dump
show-logs.sh Zobrazí logy frontendu a backendu z Azure Container Apps
start-local.sh, stop-local.sh Lokálne spustenie/zastavenie Docker Compose verzie

6. Podmienky na spustenie skriptov

Skripty sú určené pre Bash prostredie, napríklad Ubuntu, WSL alebo Azure Cloud Shell.

Potrebné nástroje:

az --version
bash --version

Pred nasadením musí byť používateľ prihlásený do Azure CLI:

az login
az account show

Na manuálnu databázovú zálohu je potrebný aj nástroj pg_dump:

sudo apt install postgresql-client

7. Príprava konfigurácie

Najprv sa vytvorí lokálny konfiguračný súbor:

cp .env.azure.example .env.azure

V súbore .env.azure treba upraviť hlavne tieto hodnoty:

ACR_NAME=
PG_SERVER=
PG_PASSWORD=

8. Nasadenie aplikácie do Azure

Spustenie nasadenia:

chmod +x prepare-app.sh remove-app.sh backup-db.sh show-logs.sh
./prepare-app.sh

Skript vykoná tieto kroky:

  1. skontroluje Azure CLI a prihlásenie,
  2. vytvorí resource group,
  3. vytvorí Azure Container Registry,
  4. zostaví a odošle Docker image backendu,
  5. zostaví a odošle Docker image frontendu,
  6. vytvorí PostgreSQL Flexible Server,
  7. vytvorí Azure Container Apps environment,
  8. nasadí interný backend,
  9. nasadí verejný frontend,
  10. vypíše verejnú HTTPS adresu aplikácie.

Po dokončení skript vypíše napríklad:

https://zkt-frontend.<unikatny-identifikator>.<region>.azurecontainerapps.io

9. Použitie aplikácie v prehliadači

Po otvorení verejnej HTTPS adresy sa zobrazí stránka ZKT Guestbook.

Používateľ môže:

  1. zadať meno,
  2. napísať správu,
  3. kliknúť na tlačidlo Pridať správu,
  4. overiť, že sa správa uložila a po obnovení stránky zostáva v databáze.

Backend sa dá overiť na adrese:

https://<frontend-url>/api/health

Očakávaná odpoveď:

{
  "database": "connected",
  "status": "ok"
}

10. Zobrazenie záznamov o prístupoch z internetu

Prístupové logy z Nginx frontendu sa zobrazia príkazom:

./show-logs.sh

Ručne cez Azure CLI:

az containerapp logs show \
  --name zkt-frontend \
  --resource-group zkt-guestbook-rg \
  --tail 100

Vo výstupe sú požiadavky na frontend, napríklad otvorenie hlavnej stránky alebo volanie /api/health.

11. Zálohovanie dát

Manuálna SQL záloha

Manuálna záloha sa vykoná príkazom:

./backup-db.sh

Výstup sa uloží do priečinka:

backups/

Príklad názvu súboru:

guestbook_20260510_143000.sql

12. Odstránenie aplikácie

Celé cloudové riešenie sa odstráni príkazom:

./remove-app.sh

Skript odstráni celú Azure resource group, teda aj:

  • frontend Container App,
  • backend Container App,
  • Azure Container Registry,
  • PostgreSQL server,
  • databázu,
  • logovacie zdroje.

Stav odstránenia sa dá overiť:

az group exists --name zkt-guestbook-rg

13. Analýza nákladov na jeden rok prevádzky

Predpoklad:

  • 1000 používateľov denne,
  • databáza alebo súbory,
  • 2 malé kontajnery v Azure Container Apps,
  • 1 PostgreSQL Flexible Server,
  • Azure Container Registry Basic.

Ak by tam chodilo okolo 1000 ľudí denne ročne by to vyšlo cca 750 eur.

15. Použitie generatívnej AI

Použitý nástroj:

  • ChatGPT, Claude, Gemini.