first commit
This commit is contained in:
commit
883f62b717
241
README.md
Normal file
241
README.md
Normal file
@ -0,0 +1,241 @@
|
||||
|
||||
## 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:
|
||||
|
||||
```text
|
||||
/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:
|
||||
|
||||
```text
|
||||
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:
|
||||
|
||||
```bash
|
||||
az --version
|
||||
bash --version
|
||||
```
|
||||
|
||||
Pred nasadením musí byť používateľ prihlásený do Azure CLI:
|
||||
|
||||
```bash
|
||||
az login
|
||||
az account show
|
||||
```
|
||||
|
||||
Na manuálnu databázovú zálohu je potrebný aj nástroj `pg_dump`:
|
||||
|
||||
```bash
|
||||
sudo apt install postgresql-client
|
||||
```
|
||||
|
||||
## 7. Príprava konfigurácie
|
||||
|
||||
Najprv sa vytvorí lokálny konfiguračný súbor:
|
||||
|
||||
```bash
|
||||
cp .env.azure.example .env.azure
|
||||
```
|
||||
|
||||
V súbore `.env.azure` treba upraviť hlavne tieto hodnoty:
|
||||
|
||||
```bash
|
||||
ACR_NAME=
|
||||
PG_SERVER=
|
||||
PG_PASSWORD=
|
||||
```
|
||||
|
||||
## 8. Nasadenie aplikácie do Azure
|
||||
|
||||
Spustenie nasadenia:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```text
|
||||
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:
|
||||
|
||||
```text
|
||||
https://<frontend-url>/api/health
|
||||
```
|
||||
|
||||
Očakávaná odpoveď:
|
||||
|
||||
```json
|
||||
{
|
||||
"database": "connected",
|
||||
"status": "ok"
|
||||
}
|
||||
```
|
||||
|
||||
## 10. Zobrazenie záznamov o prístupoch z internetu
|
||||
|
||||
Prístupové logy z Nginx frontendu sa zobrazia príkazom:
|
||||
|
||||
```bash
|
||||
./show-logs.sh
|
||||
```
|
||||
|
||||
Ručne cez Azure CLI:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
./backup-db.sh
|
||||
```
|
||||
|
||||
Výstup sa uloží do priečinka:
|
||||
|
||||
```text
|
||||
backups/
|
||||
```
|
||||
|
||||
Príklad názvu súboru:
|
||||
|
||||
```text
|
||||
guestbook_20260510_143000.sql
|
||||
```
|
||||
|
||||
## 12. Odstránenie aplikácie
|
||||
|
||||
Celé cloudové riešenie sa odstráni príkazom:
|
||||
|
||||
```bash
|
||||
./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ť:
|
||||
|
||||
```bash
|
||||
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.
|
||||
Loading…
Reference in New Issue
Block a user