zkt25/sk1/README.md

112 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Dokumentácia k projektu: Webová aplikácia s nasadením v Azure
## Čo robí aplikácia
Aplikácia je jednoduchý webový systém na správu používateľov. Umožňuje:
- zobrazovať zoznam používateľov uložených v databáze PostgreSQL,
- náhodne vybrať jedného používateľa,
- pridávať a odstraňovať používateľov cez frontend a REST API.
Frontend je napísaný v HTML a komunikácia so serverom je zabezpečená cez Flask. Dáta sú uložené v Azure PostgreSQL Flexible Serveri.
## Použitý verejný cloud a služby
Pre nasadenie aplikácie bol použitý **Microsoft Azure**. Zvolené služby:
- **Azure Resource Group**: slúži ako kontajner pre všetky ostatné zdroje.
- **Azure Container Registry (ACR)**: privátny Docker registry, kde je uchovaný obraz aplikácie.
- **Azure Container Apps**: služba na spustenie kontajнеризованных aplikácií bez potreby správy infraštruktúry.
- **Azure Database for PostgreSQL Flexible Server**: cloudová databáza na ukladanie dát používateľov.
- **Docker**: použitý na vytvorenie obrazu aplikácie.
- **psql**: klient na komunikáciu s databázou.
Aplikácia nemá explicitne definované trvalé zväzky, ale využíva trvalé úložisko databázy.
## Prehľad súborov a konfigurácií
### `prepare-app.sh`
Hlavný skript, ktorý zabezpečuje kompletné nasadenie aplikácie. Vykonáva:
- vytvorenie resource group (ak neexistuje),
- vytvorenie Azure Container Registry (ACR) a aktiváciu admin režimu,
- čakanie, kým sa ACR stane dostupným,
- vytvorenie PostgreSQL Flexible Servera a firewall pravidla,
- čakanie na stav **Ready** po vytvorení databázy,
- zmenu hesla administrátora databázy (pre istotu),
- build Docker obrazu a jeho push do ACR,
- vytvorenie Azure Container Environment (ak neexistuje),
- vytvorenie alebo aktualizáciu Container App so všetkými premennými prostredia (DB),
- vytvorenie tabuľky `users` v databáze cez psql.
Tento skript je navrhnutý tak, aby bol **idempotentný** — spustenie viackrát nevedie k zlyhaniu.
### `remove-app.sh`
Skript, ktorý zabezpečuje vymazanie všetkých vytvorených zdrojov:
- vymaže Container App, ak existuje,
- vymaže Container App Environment, ak existuje,
- vymaže databázový server, ak existuje,
- vymaže obraz z ACR, ak existuje.
Podmienky overujú existenciu každého zdroja pred pokusom o jeho vymazanie.
## Ostatné súbory
- `Dockerfile` definuje obraz aplikácie, založený na `python:3.9-slim`, kopíruje kód, inštaluje závislosti a nastaví CMD.
- `requirements.txt` obsahuje zoznam Python knižníc: Flask, psycopg2-binary, atď.
- `app.py` samotná aplikácia (Flask server), obsahuje REST API aj HTML render.
- `start-app.sh`, `stop-app.sh` pomocné skripty pre lokálne spustenie.
- `docker-compose.yml` konfigurácia na spustenie aplikácie a databázy lokálne (nepovinné).
## Návod na spustenie v prehliadači
Po úspešnom spustení `prepare-app.sh` aplikácia bude nasadená v Azure Container Apps. Presná URL bude vygenerovaná Azure službou a vyzerá napríklad takto:
```
https://userapp.randomhash.region.azurecontainerapps.io/
```
Túto adresu je možné získať príkazom:
```bash
az containerapp show --name userapp --resource-group userapp-rg --query properties.configuration.ingress.fqdn -o tsv
```
Po otvorení tejto adresy v prehliadači sa zobrazí frontend aplikácie.
## Podmienky pre spustenie skriptov
### `prepare-app.sh`
- potrebné mať nainštalovaný **Azure CLI** (`az`) a byť prihlásený (`az login`),
- musí byť prítomné prostredie s Dockerom a `psql` klientom (`sudo apt install postgresql-client`),
- skript možno spustiť príkazom:
```bash
chmod +x prepare-app.sh
./prepare-app.sh
```
### `remove-app.sh`
- vyžaduje prístup k tým istým zdrojom v Azure ako `prepare-app.sh`,
- spustenie:
```bash
chmod +x remove-app.sh
./remove-app.sh
```
## Zoznam externých zdrojov a použitie generatívneho modelu
Pri vytváraní dokumentácie a ladení skriptov bol použitý generatívny model **ChatGPT 4.0**, ktorý pomohol:
- pri kontrole syntaxe Bash skriptov,
- s optimalizáciou Azure CLI príkazov a ich poradie,
- pri generovaní častí tejto dokumentácie.
Všetky ostatné časti projektu (frontend, backend, Dockerfile, štruktúra aplikácie) boli vytvorené manuálne bez použitia šablón alebo generátorov.