zkt25/sk1/README.md

106 lines
4.5 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.

# Health AI Assistant
## Opis aplikácie
Health AI Assistant je webová aplikácia, ktorá umožňuje používateľom registráciu, prihlásenie, interaktívny chat a prezeranie histórie konverzácií. Aplikácia využíva generatívny model (pomocou Mistral) na spracovanie dotazov a poskytovanie odpovedí. Používateľom poskytuje možnosť overenia pomocou Google OAuth a uchováva dáta v databáze PostgreSQL.
## Použité cloudové a kontajnerové technológie
- **Verejný cloud:**
Aplikácia je nasadená na AWS EC2, pričom bol použitý Elastic IP, aby bola verejná IP adresa statická.
- **Docker:**
Nasadenie aplikácie je plne založené na Docker kontajneroch. Použité sú kontajnery pre:
- **Elasticsearch** pre fulltext vyhľadávanie a ukladanie indexov.
- **PostgreSQL** ako databáza s perzistentným zväzkom (volume `pgdata`).
- **Backend** Flask aplikácia, ktorá spracúvala API požiadavky.
- **Frontend** klientská časť, ktorá komunikuje s backendom.
- **Nginx:**
Ako reverzný proxy server je nastavený Nginx pre zabezpečený prístup cez HTTPS. Certifikát je získaný pomocou Certbot (Let's Encrypt).
- **Skripty:**
Nasadenie a zrušenie aplikácie sa automatizuje pomocou skriptov `prepare-app.sh`, `stop-app.sh`, `start-app.sh` a `remove-app.sh`.
## Obsah odovzdávaných súborov a konfigurácia
V repozitári sú nasledovné súbory a adresáre:
- **docker-compose.yml** definuje štyri služby (elasticsearch, postgres, backend, frontend) a sieť `app-network`.
- Pre každú službu je definovaný aj parameter `restart: always`, ktorý zabezpečuje automatický reštart v prípade chyby.
- Pre Postgres je definovaný persistent volume `pgdata`.
- **Dockerfile** pre jednotlivé komponenty:
- `./elasticsearch/Dockerfile`
- `./Backend/Dockerfile`
- `./frontend/Dockerfile`
- **Skripty:**
- `prepare-app.sh` zostaví a spustí aplikáciu pomocou `docker-compose up --build -d`
- `stop-app.sh` zastaví bežiace kontajnery
- `start-app.sh` spustí zastavené kontajnery
- `remove-app.sh` odstráni kontajnery, siete a volume
- **Nginx konfigurácia**:
Súbor `/etc/nginx/sites-available/healthai-tuke.com` (nasadený na AWS) zabezpečuje:
- Presmerovanie HTTP na HTTPS.
- Reverzný proxy pre `/api/` na backend (port 5000), a ostatné na frontend (port 5173).
## AWS EC2 Deployment Automatization
Pre jednoduché nasadenie, správu a odstránenie inštancií v AWS EC2 boli pridané skripty do adresára `aws config`:
| Skript | Popis |
|--------|-------|
| `deploy-instance.sh` | Vytvorí nový EC2 inštanciu, priradí k nej Elastic IP a vypíše jej IP adresu. |
| `setup-docker.sh` | Nainštaluje Docker, Docker Compose a Git na čerstvo nasadený EC2 server. |
| `setup-nginx-certs.sh` | Skopíruje certifikáty z Let's Encrypt na server a nakonfiguruje Nginx ako reverzný proxy s HTTPS. |
| `start-instance.sh` | Spustí poslednú zastavenú EC2 inštanciu. |
| `stop-instance.sh` | Zastaví poslednú bežiacu EC2 inštanciu. |
| `terminate.sh` | Zastaví a odstráni poslednú bežiacu EC2 inštanciu. |
| `connect.sh` | Pripojí sa k bežiacej EC2 inštancii cez SSH pomocou `.pem` kľúča. |
### Požiadavky
- Nainštalovaný AWS CLI
- Prístup k `.pem` súkromnému kľúču
- Nastavené identifikátory: `eipalloc-...`, `subnet-...`, `ami-...`, `sg-...`
### Ukážka použitia
```bash
# Vytvorenie a pripojenie inštancie
./aws\ config/deploy-instance.sh
./aws\ config/setup-docker.sh
./aws\ config/setup-nginx-certs.sh
# Pripojenie
./aws\ config/connect.sh
# Zastavenie alebo zrušenie
./aws\ config/stop-instance.sh
./aws\ config/terminate.sh
```
## Ako pozrieť a použiť aplikáciu
1. Otvorte webový prehliadač a zadajte adresu:
`https://healthai-tuke.com`
2. Funkcie aplikácie:
- Registrácia a prihlásenie
- Interaktívny chat
- Prezeranie histórie konverzácií
3. API rozhranie je možné použiť pomocou:
- curl
- Postman
- čalšie frontend požiadavky
## Zoznam externých zdrojov
- [Docker Documentation](https://docs.docker.com)
- [Docker Compose Documentation](https://docs.docker.com/compose/)
- [Nginx Documentation](https://nginx.org/en/docs/)
- [Let's Encrypt Certbot Documentation](https://certbot.eff.org)
- [Google OAuth 2.0](https://developers.google.com/identity/protocols/oauth2)
- [PostgreSQL Documentation](https://www.postgresql.org/docs/)
- [Sentence Transformers Documentation](https://www.sbert.net)
- [Hugging Face Hub Documentation](https://huggingface.co/docs)