Nahrát soubory do „sk1“
This commit is contained in:
parent
af635d7601
commit
faa936cd2d
119
sk1/README.md
Normal file
119
sk1/README.md
Normal file
@ -0,0 +1,119 @@
|
||||
# Dokumentácia k nasadeniu webovej aplikácie
|
||||
|
||||
## Podmienky na nasadenie a spustenie
|
||||
|
||||
Na správne nasadenie a spustenie aplikácie je potrebné mať nainštalovaný nasledujúci softvér:
|
||||
|
||||
- Operačný systém: Linux (testované na Ubuntu, ale môže fungovať aj na iných distribúciách)
|
||||
|
||||
- Docker: Nástroj na kontajnerizáciu aplikácií
|
||||
|
||||
- Docker Compose: Nástroj na orchestráciu viacerých kontajnerov
|
||||
|
||||
Odporúčam overiť správnu inštaláciu spustením príkazov:
|
||||
|
||||
```bash
|
||||
docker --version
|
||||
docker-compose --version
|
||||
```
|
||||
|
||||
## Opis aplikácie
|
||||
|
||||
|
||||
Táto aplikácia slúži na detekciu nenávistnej reči v textoch. Umožňuje používateľovi zadať ľubovoľný text prostredníctvom webového rozhrania, ktorý je následne odoslaný na spracovanie backendovej časti systému. Backend využíva trénovaný model strojového učenia založený na transformer architektúre (Hugging Face Transformers), ktorý vyhodnotí, či text obsahuje nenávistný obsah.
|
||||
|
||||
Na základe výstupu modelu aplikácia:
|
||||
|
||||
- označí text ako „nenávistný“ alebo „bezpečný“,
|
||||
|
||||
- zobrazí výsledok používateľovi v prehľadnej forme,
|
||||
|
||||
Táto aplikácia je jednoduchý webový systém, ktorý obsahuje frontendovú a backendovú časť:
|
||||
|
||||
- Frontend: React aplikácia, ktorá poskytuje webové rozhranie pre používateľov.
|
||||
|
||||
- Backend: API server napísaný vo Flask, ktorý spracováva textové dáta s pomocou modelu strojového učenia (Hugging Face Transformers).
|
||||
|
||||
|
||||
|
||||
## Používané virtuálne siete a zväzky
|
||||
|
||||
Aplikácia využíva Docker Compose na vytvorenie izolovanej siete a spravovanie dát.
|
||||
|
||||
- Virtuálna sieť: Docker Compose automaticky vytvorí vlastnú sieť, ktorá zabezpečuje komunikáciu medzi frontendom a backendom.
|
||||
|
||||
## Konfigurácia kontajnerov
|
||||
|
||||
Aplikácia sa skladá z dvoch kontajnerov:
|
||||
|
||||
- Frontend:
|
||||
- Port: 5174:5174
|
||||
- Závislosť: backend (musí byť dostupný pre správne fungovanie frontendu)
|
||||
- Automatické reštartovanie: always (zabezpečí opätovné spustenie v prípade výpadku)
|
||||
- Vytvára sa zo súborov v priečinku frontend/
|
||||
|
||||
- Backend:
|
||||
- Port: 5000:5000
|
||||
- Automatické reštartovanie: always
|
||||
- API endpoint:
|
||||
- POST /api/predict - prijíma JSON so vstupným textom a vracia klasifikáciu toxickosti.
|
||||
- Používaná modelová knižnica: Hugging Face Transformers
|
||||
- Obsahuje hlavné API aplikácie a spracováva požiadavky od frontendu
|
||||
- Vytvára sa zo súborov v priečinku backend/
|
||||
|
||||
## Používané kontajnery
|
||||
|
||||
V aplikácii sú použité tieto kontajnery:
|
||||
|
||||
- Frontend:
|
||||
- Technológia: React
|
||||
- Poskytuje webové rozhranie aplikácie
|
||||
- Beží na porte 5174
|
||||
|
||||
- Backend:
|
||||
- Technológia: Python (FastAPI/Flask)
|
||||
- Spracováva požiadavky z frontendu
|
||||
- Beží na porte 5000
|
||||
|
||||
## Príručka pre nasadenie
|
||||
|
||||
Na nasadenie aplikácie postupujte podľa nasledujúcich krokov:
|
||||
|
||||
- Príprava aplikácie:
|
||||
|
||||
```bash
|
||||
./prepare-app.sh
|
||||
```
|
||||
Tento krok vytvorí potrebné Docker obrazy a pripraví aplikáciu na spustenie.
|
||||
|
||||
- Spustenie aplikácie:
|
||||
|
||||
```bash
|
||||
./start-app.sh
|
||||
```
|
||||
Po spustení bude aplikácia dostupná na http://localhost:5174
|
||||
|
||||
Pozastavenie aplikácie:
|
||||
|
||||
```bash
|
||||
./stop-app.sh
|
||||
```
|
||||
Tento príkaz zastaví všetky bežiace kontajnery bez ich odstránenia.
|
||||
|
||||
Odstránenie aplikácie:
|
||||
|
||||
```bash
|
||||
./remove-app.sh
|
||||
```
|
||||
Tento príkaz odstráni všetky vytvorené kontajnery a ich dáta.
|
||||
|
||||
## Príklad použitia
|
||||
|
||||
Po spustení aplikácie otvorte webový prehliadač a prejdite na http://localhost:5174. Na stránke by sa mala zobraziť webová aplikácia, ktorá komunikuje s backendom.
|
||||
|
||||
Ak backend správne funguje, môžete skúsiť odoslať požiadavku cez terminál:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:5000/api/predict -H "Content-Type: application/json" -d '{"text": "Ahoj"}'
|
||||
```
|
||||
Tento príkaz by mal vrátiť odpoveď z backendu, čo znamená, že komunikácia medzi frontendom a backendom je funkčná.
|
||||
17
sk1/docker-compose.yaml
Normal file
17
sk1/docker-compose.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
frontend:
|
||||
build: ./frontend
|
||||
ports:
|
||||
- "5174:5174"
|
||||
depends_on:
|
||||
- backend
|
||||
restart: always
|
||||
|
||||
backend:
|
||||
build: ./backend
|
||||
ports:
|
||||
- "5000:5000"
|
||||
restart: always
|
||||
|
||||
124
sk1/package-lock.json
generated
Normal file
124
sk1/package-lock.json
generated
Normal file
@ -0,0 +1,124 @@
|
||||
{
|
||||
"name": "zkt25",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.7.2",
|
||||
"@fortawesome/react-fontawesome": "^0.2.2",
|
||||
"react-icons": "^5.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@fortawesome/fontawesome-common-types": {
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz",
|
||||
"integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@fortawesome/fontawesome-svg-core": {
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz",
|
||||
"integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-common-types": "6.7.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@fortawesome/free-brands-svg-icons": {
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.2.tgz",
|
||||
"integrity": "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==",
|
||||
"license": "(CC-BY-4.0 AND MIT)",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-common-types": "6.7.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@fortawesome/react-fontawesome": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz",
|
||||
"integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"prop-types": "^15.8.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "~1 || ~6",
|
||||
"react": ">=16.3"
|
||||
}
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/loose-envify": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"js-tokens": "^3.0.0 || ^4.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"loose-envify": "cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/prop-types": {
|
||||
"version": "15.8.1",
|
||||
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
|
||||
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.4.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"react-is": "^16.13.1"
|
||||
}
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "19.0.0",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
|
||||
"integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-icons": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
|
||||
"integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"react": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/react-is": {
|
||||
"version": "16.13.1",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
8
sk1/package.json
Normal file
8
sk1/package.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.7.2",
|
||||
"@fortawesome/react-fontawesome": "^0.2.2",
|
||||
"react-icons": "^5.5.0"
|
||||
}
|
||||
}
|
||||
4
sk1/prepare-app.sh
Normal file
4
sk1/prepare-app.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
echo "Príprava aplikácie..."
|
||||
docker-compose build
|
||||
echo "Aplikácia je pripravená!"
|
||||
8
sk1/prepare-app.sh.save
Normal file
8
sk1/prepare-app.sh.save
Normal file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
echo "Deploying backend..."
|
||||
cd backend
|
||||
railway up --service
|
||||
|
||||
echo "Deploying frontend..."
|
||||
cd ../frontend
|
||||
railway up
|
||||
5
sk1/remove-app.sh
Normal file
5
sk1/remove-app.sh
Normal file
@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
echo "Odinštalovanie aplikácie..."
|
||||
docker-compose down -v
|
||||
docker rmi $(docker images -q)
|
||||
echo "Aplikácia bola úplne vymazaná!"
|
||||
4
sk1/start-app.sh
Normal file
4
sk1/start-app.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
echo "Spustenie aplikácie..."
|
||||
docker-compose up -d
|
||||
echo "Aplikácia je k dispozícii na adrese http://localhost:5174"
|
||||
4
sk1/stop-app.sh
Normal file
4
sk1/stop-app.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
echo "Zastavenie aplikácie..."
|
||||
docker-compose down
|
||||
echo "Aplikácia bola zastavená!"
|
||||
9
sk1/upload_model.py
Normal file
9
sk1/upload_model.py
Normal file
@ -0,0 +1,9 @@
|
||||
from huggingface_hub import HfApi
|
||||
|
||||
api = HfApi()
|
||||
|
||||
api.upload_folder(
|
||||
folder_path="backend/hate_speech_model/final_model",
|
||||
repo_id="tetianamohorian/hate_speech_model",
|
||||
repo_type="model"
|
||||
)
|
||||
Loading…
Reference in New Issue
Block a user