commit e625e0ae555d012c5b3273957e5db6f8ae530678 Author: Tetiana Mohorian Date: Tue Mar 18 20:31:23 2025 +0000 Nahrát soubory do „z1“ diff --git a/z1/README.md b/z1/README.md new file mode 100644 index 0000000..b91ce0d --- /dev/null +++ b/z1/README.md @@ -0,0 +1,116 @@ +#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í (stiahnuť Docker) + +- Docker Compose: Nástroj na orchestráciu viacerých kontajnerov (stiahnuť Docker Compose) + +Odporúčame overiť správnu inštaláciu spustením príkazov: + +docker --version +docker-compose --version + +Opis aplikácie + +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ý v Pythone (FastAPI alebo Flask), ktorý spracováva požiadavky od frontendu. + +Aplikácia umožňuje používateľom interakciu cez webový prehliadač, pričom backend spracováva požiadavky a odosiela odpovede. Systém je navrhnutý tak, aby bol jednoduchý na nasadenie pomocou Dockeru. + +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. + +Pomenované zväzky: Použité na ukladanie perzistentných dát v prípade potreby, napríklad ak by aplikácia mala databázu alebo logy. + +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 + +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: + +./prepare-app.sh + +Tento krok vytvorí potrebné Docker obrazy a pripraví aplikáciu na spustenie. + +Spustenie aplikácie: + +./start-app.sh + +Po spustení bude aplikácia dostupná na http://localhost:5174 + +Pozastavenie aplikácie: + +./stop-app.sh + +Tento príkaz zastaví všetky bežiace kontajnery bez ich odstránenia. + +Odstránenie aplikácie: + +./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: + +curl -X POST http://localhost:5000/api/predict -H "Content-Type: application/json" -d '{"input": "some_data"}' + +Tento príkaz by mal vrátiť odpoveď z backendu, čo znamená, že komunikácia medzi frontendom a backendom je funkčná. \ No newline at end of file diff --git a/z1/docker-compose.yaml b/z1/docker-compose.yaml new file mode 100644 index 0000000..4090077 --- /dev/null +++ b/z1/docker-compose.yaml @@ -0,0 +1,16 @@ +version: '' + +services: + frontend: + build: ./frontend + ports: + - "5174:5174" + depends_on: + - backend + restart: always + + backend: + build: ./backend + ports: + - "5000:5000" + restart: always diff --git a/z1/package-lock.json b/z1/package-lock.json new file mode 100644 index 0000000..92bebc4 --- /dev/null +++ b/z1/package-lock.json @@ -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" + } + } +} diff --git a/z1/package.json b/z1/package.json new file mode 100644 index 0000000..82f2a3b --- /dev/null +++ b/z1/package.json @@ -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" + } +} diff --git a/z1/prepare-app.sh b/z1/prepare-app.sh new file mode 100644 index 0000000..1166c00 --- /dev/null +++ b/z1/prepare-app.sh @@ -0,0 +1,4 @@ +#!/bin/bash +echo "Príprava aplikácie..." +docker-compose build +echo "Aplikácia je pripravená!" diff --git a/z1/remove-app.sh b/z1/remove-app.sh new file mode 100644 index 0000000..f86fb45 --- /dev/null +++ b/z1/remove-app.sh @@ -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á!" diff --git a/z1/start-app.sh b/z1/start-app.sh new file mode 100644 index 0000000..937ab79 --- /dev/null +++ b/z1/start-app.sh @@ -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" diff --git a/z1/stop-app.sh b/z1/stop-app.sh new file mode 100644 index 0000000..12cb832 --- /dev/null +++ b/z1/stop-app.sh @@ -0,0 +1,4 @@ +#!/bin/bash +echo "Zastavenie aplikácie..." +docker-compose down +echo "Aplikácia bola zastavená!"