diff --git a/sk1/README.md b/sk1/README.md index 4e6a973..238779c 100644 --- a/sk1/README.md +++ b/sk1/README.md @@ -1,72 +1,111 @@ -# **Správa Používateľov - Docker Aplikácia** +# Dokumentácia k projektu: Webová aplikácia s nasadením v Azure -## **1. Podmienky na nasadenie a spustenie aplikácie** -Aby ste mohli aplikáciu spustiť, musíte mať nainštalované: -- **Linux** (napr. Ubuntu vo WSL, alebo iná distribúcia) -- **Docker** (https://docs.docker.com/get-docker/) -- **Docker Compose** (https://docs.docker.com/compose/install/) +## Čo robí aplikácia -## **2. Opis aplikácie** -Aplikácia poskytuje jednoduché webové rozhranie na správu používateľov. Používateľlia sú uložení v databáze PostgreSQL a aplikácia ich dokáže pridávať alebo mazať cez jednoduché API a webové rozhranie. +Aplikácia je jednoduchý webový systém na správu používateľov. Umožňuje: -## **3. Opis virtuálnych sietí a pomenovaných zväzkov** -- **Virtuálna sieť `app_network`** - Umožňuje komunikáciu medzi kontajnermi (web, db, pgAdmin). -- **Pomenovaný zväzok `pgdata`** - Používa sa na trvalé uloženie databázových údajov PostgreSQL, aby sa nestratili pri reštarte kontajnerov. +- 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. -## **4. Opis konfigurácie kontajnerov** -Aplikácia používa **Docker Compose**, kde sú definované tri kontajnery: -- **Web** (Flask aplikácia) - - Počúva na porte **5000** - - Komunikuje s databázou `db` -- **DB** (PostgreSQL) - - Používa volume `pgdata` na trvalé uloženie údajov - - Počúva na porte **5432** -- **pgAdmin** (Grafické rozhranie na správu PostgreSQL) - - Počúva na porte **8080** +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. -## **5. Zoznam použitých kontajnerov** -- **Web (Flask)** - Používa Python 3.9 a Flask na poskytovanie webovej aplikácie. -- **PostgreSQL** - Používa obraz `postgres:13`, databázu `mydatabase`. -- **pgAdmin** - Používa obraz `dpage/pgadmin4`, port **8080**. +## Použitý verejný cloud a služby -## **6. Ako pripraviť, spustiť, pozastaviť a vymazať aplikáciu** +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: -### **Príprava aplikácie:** ```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 ``` -Týmto príkazom sa vytvorí sieť, volume a pripraví databáza. -### **Spustenie aplikácie:** -```bash -./start-app.sh -``` -Aplikácia sa spustí a bude dostupná na **http://localhost:5000**. +### `remove-app.sh` -### **Pozastavenie aplikácie:** -```bash -./stop-app.sh -``` -Pozastavenie aplikácie neodstráni údaje. +- vyžaduje prístup k tým istým zdrojom v Azure ako `prepare-app.sh`, +- spustenie: -### **Vymazanie aplikácie:** ```bash +chmod +x remove-app.sh ./remove-app.sh ``` -Tento príkaz **vymaže všetky kontajnery, sieť a volume**, čo znamená, že **databáza bude kompletne vymazaná**. -## **7. Ako si pozrieť aplikáciu v prehliadači** -- **Hlavná aplikácia:** [http://localhost:5000](http://localhost:5000) -- **pgAdmin (správa databázy):** [http://localhost:8080](http://localhost:8080) +## Zoznam externých zdrojov a použitie generatívneho modelu -## **8. Príklad práce s aplikáciou** +Pri vytváraní dokumentácie a ladení skriptov bol použitý generatívny model **ChatGPT 4.0**, ktorý pomohol: -### **Pridanie používateľa:** -1. Otvorte aplikáciu na **http://localhost:5000** -2. Zadajte meno do textového poľa. -3. Kliknite na **"Pridať"**. -4. Používateľ sa uloží do databázy a zobrazí na stránke. +- pri kontrole syntaxe Bash skriptov, +- s optimalizáciou Azure CLI príkazov a ich poradie, +- pri generovaní častí tejto dokumentácie. -### **Odstránenie používateľa:** -1. Kliknite na tlačidlo **"Odstrániť"** pri konkrétnom používateľovi. -2. Používateľ bude vymazaný z databázy. \ No newline at end of file +Všetky ostatné časti projektu (frontend, backend, Dockerfile, štruktúra aplikácie) boli vytvorené manuálne bez použitia šablón alebo generátorov.