# 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)