{"id":50721726,"url":"https://github.com/cloudsteak/trn-azure-workshop","last_synced_at":"2026-06-10T00:30:52.146Z","repository":{"id":340032334,"uuid":"1148872896","full_name":"cloudsteak/trn-azure-workshop","owner":"cloudsteak","description":"Azure Quote of the Day","archived":false,"fork":false,"pushed_at":"2026-03-05T11:59:57.000Z","size":148,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T15:37:33.906Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudsteak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-03T13:18:55.000Z","updated_at":"2026-03-05T12:00:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cloudsteak/trn-azure-workshop","commit_stats":null,"previous_names":["cloudsteak/trn-azure-workshop"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cloudsteak/trn-azure-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-azure-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-azure-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-azure-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-azure-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudsteak","download_url":"https://codeload.github.com/cloudsteak/trn-azure-workshop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-azure-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34132030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-10T00:30:51.077Z","updated_at":"2026-06-10T00:30:52.128Z","avatar_url":"https://github.com/cloudsteak.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ☁️ Azure Képzés – Cloud Idézetek + AI Chatbot\n\nEgy napos, gyakorlati Azure képzés. A nap végére egy **működő webalkalmazást** hozunk létre,\nami idézeteket jelenít meg adatbázisból és egy AI chatbotot is tartalmaz.\n\n---\n\n## 🏗️ Architektúra\n\n```mermaid\ngraph TD\n    Browser[\"Böngésző\"]\n    VM[\"Frontend:\u003cbr/\u003eAzure VM + IIS\"]\n    AppService[\"Backend:\u003cbr/\u003eApp Service (Flask)\"]\n    MySQL[\"Database:\u003cbr/\u003eAzure MySQL\"]\n    OpenAI[\"AI:\u003cbr/\u003eAzure OpenAI\"]\n\n    Browser --\u003e VM\n    VM --\u003e AppService\n    AppService --\u003e MySQL\n    AppService --\u003e OpenAI\n\n    style Browser   fill:#1e293b,stroke:#94a3b8,color:#f1f5f9\n    style VM        fill:#1e3a5f,stroke:#38bdf8,color:#f1f5f9\n    style AppService fill:#1a3636,stroke:#4ade80,color:#f1f5f9\n    style MySQL     fill:#3b1f1f,stroke:#f97316,color:#f1f5f9\n    style OpenAI    fill:#3b1f3b,stroke:#f093fb,color:#f1f5f9\n```\n\n| Réteg     | Azure szolgáltatás        | Mappa                       |\n| --------- | ------------------------- | --------------------------- |\n| Frontend  | Azure VM + IIS (Windows)  | `01-Frontend/`              |\n| Backend   | App Service (Python)      | `02-Backend/`               |\n| Adatbázis | Azure Database for MySQL  | `03-Database/`              |\n| AI        | Azure OpenAI / AI Foundry | _(konzolban konfiguráljuk)_ |\n\n---\n\n## 📁 Projekt struktúra\n\n```\n.\n├── 01-Frontend/\n│   ├── index.html\n│   ├── css/\n│   │   └── style.css\n│   └── js/\n│       ├── config.js     ← ⚠️ BACKEND_URL beállítás\n│       └── app.js\n├── 02-Backend/\n│   ├── app.py            ← Flask API\n│   └── requirements.txt\n├── 03-Database/\n│   └── init.sql          ← Tábla + idézetek\n├── LICENSE\n├── README.md             ← Ez a fájl\n├── requirements.txt\n└── setup-iis.ps1         ← IIS telepítő script\n```\n\n---\n\n## 🎯 Haladási terv\n\n| #   | Lépés                                        | Működik utána?            |\n| --- | -------------------------------------------- | ------------------------- |\n| 1   | Azure VM + IIS + frontend feltöltés          | ❌ (nincs backend URL)    |\n| 2   | App Service létrehozása + GitHub deploy      | ❌ (nincs DB, nincs AI)   |\n| 3   | config.js frissítése az App Service URL-jére | ❌ (nincs DB)             |\n| 4   | Azure MySQL + init.sql + env vars            | ✅ Idézetek működnek!     |\n| 5   | Azure OpenAI deployment + env vars           | ✅ AI chatbot is működik! |\n\n---\n\n## Előfeltételek\n\n- Azure előfizetés (ingyenes trial elég)\n- GitHub fiók (a backend auto-deployhoz)\n- Régió mindenhova: **North Europe**\n- **DBeaver Community** (adatbázis kezeléshez) – https://dbeaver.io/download/\n\n---\n\n## 1. lépés – Resource Group\n\nAzure Portal → **Resource groups** → **Létrehozás**\n\n| Beállítás | Érték          |\n| --------- | -------------- |\n| Name      | `workshop-rg`  |\n| Region    | `North Europe` |\n\n\u003e 💡 Az összes erőforrást ide rakjuk – a végén egyetlen törlésssel mindent eltávolítunk.\n\n---\n\n## 2. lépés – Azure VM + IIS (Frontend)\n\n\u003e 📂 Fájlok: `01-Frontend/`\n\n### 2.1 VM létrehozása\n\nAzure Portal → **Virtual machines** → **Létrehozás** → **Azure virtual machine**\n\n| Beállítás         | Érték                                         |\n| ----------------- | --------------------------------------------- |\n| Erőforrás csoport | `workshop-rg`                                 |\n| Név               | `frontend-vm`                                 |\n| Régió             | `North Europe`                                |\n| Kép               | **Windows Server 2022 Datacenter**            |\n| Méret             | **Standard_B2s**                              |\n| Felhasználónév    | `rendszergazda`                               |\n| Jelszó            | válassz és jegyezd meg!                       |\n| Bejövő portok     | **HTTP (80), RDP (3389)**                     |\n| Nyilvános IP      | **Igen**, hozzunk létre egyet (hálózat fülön) |\n\n### 2.2 Csatlakozás\n\nAzure Portal → VM → **Connect** → **RDP** → letöltöd az RDP fájlt → megnyitod → bejelentkezel.\n\n### 2.3 IIS telepítése + frontend letöltése\n\nA VM-en nyiss egy **PowerShell** ablakot (**Run as Administrator**).\n\n**1. lépés – Töltsd le a setup scriptet:**\n\n```powershell\nInvoke-WebRequest \"https://raw.githubusercontent.com/cloudsteak/trn-azure-workshop/main/setup-iis.ps1\" -OutFile \"C:\\setup-iis.ps1\"\n```\n\n**2. lépés – Futtasd:**\n\n```powershell\nC:\\setup-iis.ps1\n```\n\nA script elvégez mindent: telepíti az IIS-t, letölti a frontend fájlokat, és kiírja az elérési URL-t.\n\n\u003e 💡 Ha kézzel szeretnéd elvégezni, itt a tartalom:\n\n```powershell\n# IIS telepítése\nInstall-WindowsFeature -Name Web-Server -IncludeManagementTools\n\n# Régi default oldal törlése\nRemove-Item C:\\inetpub\\wwwroot\\iisstart* -Force -ErrorAction SilentlyContinue\n\n# Frontend letöltése GitHub-ról\n$repo = \"https://raw.githubusercontent.com/cloudsteak/trn-azure-workshop/main/01-Frontend\"\n$root = \"C:\\inetpub\\wwwroot\"\n\nNew-Item -ItemType Directory -Force -Path \"$root\\css\", \"$root\\js\" | Out-Null\n\nInvoke-WebRequest \"$repo/index.html\"    -OutFile \"$root\\index.html\"\nInvoke-WebRequest \"$repo/css/style.css\" -OutFile \"$root\\css\\style.css\"\nInvoke-WebRequest \"$repo/js/config.js\"  -OutFile \"$root\\js\\config.js\"\nInvoke-WebRequest \"$repo/js/app.js\"     -OutFile \"$root\\js\\app.js\"\n```\n\nTeszt: `http://\u003cVM_PUBLIC_IP\u003e` → Az oldal megjelenik. A health dashboard piros – ez normális, nincs backend még.\n\n---\n\n## 3. lépés – App Service (Backend)\n\n\u003e 📂 Fájlok: `02-Backend/`\n\n### 3.1 App Service létrehozása\n\nAzure Portal → **App Services** → **Létrehozás** → **Web App**\n\n**Alapvető beállítások**\n\n| Beállítás                   | Érték                                            |\n| --------------------------- | ------------------------------------------------ |\n| Erőforrás csoport           | `workshop-rg`                                    |\n| Név                         | `azure-quotes-api` _(egyedi névnek kell lenni!)_ |\n| Közzététel                  | **Code**                                         |\n| Futtatókörnyezet            | **Python 3.12**                                  |\n| OS                          | **Linux**                                        |\n| Régió                       | `North Europe`                                   |\n| Linux-csomag (North Europe) | Új: `quotes-api-plan` (egyedi név)               |\n| Díjszabási csomag           | **Alapszintű B1**                                |\n\n**Felülvizsgálat + létrehozás** → Várj ~1 percet.\n\n_Megjegyzés: Ha elsőre nem sikerül létrehozni az akébbi hiba miatt: `No available instances to satisfy this request. App Service is attempting to increase capacity. Please retry your request later.` - ez egy kapacitásprobléma a régióban, várj néhány percet, majd kattints az `Újbóli üzembe helyezés` gombra._\n\n### 3.2 Alapbeállítások\n\nApp Service → **Konfiguráció** → **Általános beállítások**\n\n| Beállítás                                                | Érték            |\n| -------------------------------------------------------- | ---------------- |\n| SCM alapszintű hitelesítés közzétételi hitelesítő adatai | **Engedélyezés** |\n| Mindig bekapcsolvat                                      | **Engedélyezés** |\n\nMentéshez kattints az **Alkalmaz** gombra.\n\n### 3.3 Startup parancs beállítása\n\nApp Service → **Konfiguráció** → **Verembeállítások** → **Indítási parancs**:\n\n```\ngunicorn --bind 0.0.0.0 --timeout 230 app:app\n```\n\nMentéshez kattints az **Alkalmaz** gombra.\n\n### 3.4 GitHub auto-deploy bekötése\n\nApp Service → **Üzembe helyezési központ**\n\n| Beállítás                  | Érték                         |\n| -------------------------- | ----------------------------- |\n| Folyamatos üzembe helyezés | **Engedélyezés**              |\n| Szervezet                  | a te GitHub felhasználóneved  |\n| Adattár                    | `trn-azure-workshop`          |\n| Ág                         | `main`                        |\n| Munkafolyamat-beállítás    | Munkafolyamat hozzáadása: ... |\n| Hitelesítés típusa         | **Alapszintű hitelesítés**    |\n\nMentéshez kattints a **Mentés** gombra.\n\nAz Azure automatikusan létrehozza a `.github/workflows/main_azure-quotes-api.yml` fájlt a repóban. Ez a GitHub Actions workflow felelős azért, hogy a `main` branchre pusholt változtatásokat automatikusan deployolja az App Service-re.\n**Gyors megoldás (ha a workflow már fut és le kell állítani):**\n\n- GitHub web UI: menj a `https://github.com/\u003cowner\u003e/\u003crepo\u003e/actions` oldalra → kattints a futó workflow runra → jobb oldalt nyomd a **Cancel run** gombot.\n- Ha teljesen le akarod tiltani a jövőbeni futásokat: Repo → **Actions** → **Workflows** → válaszd ki a munkafolyamatot → **Disable workflow**.\n\nMivel az `app.py` a `02-Backend/` mappában van, a generált fájlban **két helyen kell módosítani**:\n\n```yaml\n# 1. sor – pip install: cd 02-Backend hozzáadása\n- name: Create and Start virtual environment and Install dependencies\n  run: |\n    cd 02-Backend          # ← ezt a sort add hozzá\n    python -m venv antenv\n    source antenv/bin/activate\n    pip install -r requirements.txt\n\n# 2. sor – artifact path: csak a 02-Backend mappa\n- name: Upload artifact for deployment jobs\n  uses: actions/upload-artifact@v4\n  with:\n    name: python-app\n    path: |\n      02-Backend/          # ← ezt módosítsd (volt: .)\n      !02-Backend/antenv/  # ← ezt módosítsd (volt: !antenv/)\n```\n\nMinden `main` branchre pusholt változtatás után az App Service automatikusan újra deployol.\n**Fontos**: Várd meg, míg az Üzembehelyezési központban a legutóbbi futás státusza **Sikeres** lesz, mielőtt továbblépsz.\n\n### 3.5 ⚠️ App Service: környezeti változók felvétele (egyelőre üresen)\n\nApp Service → **Beállítások** → **Környezeti változók** → **Alkalmazásbeállítások** → **Speciális szerkesztés**\n\nEbben a nézetben JSON formátumban adhatod meg a környezeti változókat.\nVedd fel az alábbi kulcsokat akkor is, ha most még nincs végleges értéked (érték mező maradhat átmenetileg üres):\n\nItt egy példa arra, hogyan nézhet ki a JSON:\n\n```json\n[\n  {\n    \"name\": \"SCM_DO_BUILD_DURING_DEPLOYMENT\",\n    \"value\": \"1\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"DB_HOST\",\n    \"value\": \"\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"DB_PORT\",\n    \"value\": \"3306\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"DB_USER\",\n    \"value\": \"adminuser\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"DB_PASSWORD\",\n    \"value\": \"\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"DB_NAME\",\n    \"value\": \"cloudquotes\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"OPENAI_ENDPOINT\",\n    \"value\": \"\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"OPENAI_KEY\",\n    \"value\": \"\",\n    \"slotSetting\": false\n  },\n  {\n    \"name\": \"OPENAI_DEPLOYMENT\",\n    \"value\": \"gpt-4.1-mini\",\n    \"slotSetting\": false\n  }\n]\n```\n\nMajd kattints az **OK** gombra, és végül az **Alkalmaz** gombra.\n\n\u003e Későbbi lépésekben ezeket kitöltjük a valós értékekkel.\n\n### 3.6 ⚠️ Vissza a VM-re: config.js frissítése\n\nA Web App URL-jét az **Áttekintés** menüben találod. **Alapértelmezett tartomány**: `XXXXXXXXXX.azurewebsites.net` (vagy a te egyedi URL-ed).\n\nNyisd meg a VM-en: `C:\\inetpub\\wwwroot\\js\\config.js` (Notepad vagy VS Code)\n\nCseréld ki a https:// utáni részt a te App Service URL-edre, így:\n\n```javascript\nconst CONFIG = {\n  BACKEND_URL: \"https://XXXXXXXXXX.azurewebsites.net\",\n};\n```\n\nMentés után a frontend készen áll, de még nem fog működni, mert a backendben sincsenek meg a helyes környezeti változók.\n\nA változásos felolvasásához a VM-en nyiss egy **PowerShell** ablakot és futtasd:\n\n```powershell\niisreset\n```\n\n---\n\n## 4. lépés – Azure Database for MySQL\n\n\u003e 📂 Fájlok: `03-Database/`\n\n### 4.1 MySQL Rugalmas kiszolgáló létrehozása\n\nAzure Portal → **Azure Database for MySQL – rugalmas kiszolgálók** → **Létrehozás**\n\n_Megjegyzés_:\n\n- _A MySQL-nek van egy \"Single Server\" és egy \"Flexible Server\" üzemmódja. A Flexible Server több testreszabási lehetőséget és jobb teljesítményt kínál, ezért ezt választjuk._\n- _A Rugalmas kiszolgálót hozd létre, ne a Wordpress telepítőt, mert az utóbbi egy előre konfigurált környezetet állít be, ami most nem szükséges._\n\n**Rugalmas kiszolgáló** → **Gyors létrehozás**\n\n| Beállítás                | Érték                   |\n| ------------------------ | ----------------------- |\n| Erőforráscsoport         | `workshop-rg`           |\n| Kiszolgálónév            | `quotes-db` _(egyedi!)_ |\n| Régió                    | `North Europe`          |\n| Admin felhasználónév     | `adminuser`             |\n| Jelszó                   | válassz és jegyezd meg! |\n| Számítási feladat típusa | **Dev/Test**            |\n\n→ **Felülvizsgálat + létrehozás** → Várj ~5 percet.\n\n### 4.2 Firewall – App Service hozzáférés\n\nMySQL Rugalmas kiszolgáló → **Hálózatkezelő**\n\n| Beállítás                                                                                                | Érték                                                        |\n| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |\n| Az Azure-ban található bármely Azure-szolgáltatás nyilvános hozzáférésének engedélyezése a kiszolgálóhoz | **Engedélyezés** (Ezt máskor csak indokolt esetben használd) |\n| + 0.0.0.0 – 255.255.255.255 hozzáadása                                                                   | **Engedélyezés**                                             |\n\nA **Mentés** gomb megnyomása után a tűzfal szabályok frissülnek, és az App Service képes lesz csatlakozni a MySQL adatbázishoz.\n\n\u003e ⚠️ Workshop után szűkítsd le!\n\nKattints az **SSL-tanúsítvány letöltése** gombra, és mentsd el a **DigiCertGlobalRootG2.crt.pem** tanúsítványt a gépedre a DBeaver SSL kapcsolathoz.\n\n### 4.3 Csatlakozás DBeaver-rel\n\nDBeaver → **New Database Connection** → **MySQL**\n\n| Mező     | Érték                                |\n| -------- | ------------------------------------ |\n| Host     | `quotes-db.mysql.database.azure.com` |\n| Port     | `3306`                               |\n| Database | `Show all databases`                 |\n| Username | `adminuser`                          |\n| Password | a te jelszavad                       |\n\nSSL tab – kötelező a MySQL-hez:\n\n| Beállítás                 | Érték                        |\n| ------------------------- | ---------------------------- |\n| Use SSL                   | ✅                           |\n| Require SSL               | ✅                           |\n| Verify server certificate | ✅                           |\n| CA Certificate            | DigiCertGlobalRootG2.crt.pem |\n\n→ **Test Connection** → **Finish**\n\n### 4.4 SQL futtatása DBeaver-ben\n\n1. Bal oldali fa → `quotes-db.mysql.database.azure.com` → Databases\n2. Felül keresd meg az **Open SQL script** gombot – megnyílik egy új SQL editor ablak\n3. Az üres részben kattints jobb gombbal és válaszd a **File** → **Import SQL script** opciót, majd tallózd be a `03-Database/init.sql` fájlt\n4. **Execute SQL script** gombra kattintva az összes parancs lefut\n5. Ellenőrzés: a Results panelen látod a kategóriánkénti darabszámot\n\n### 4.5 ⚠️ App Service: environment variables beállítása\n\nApp Service → **Beállítások** → **Környezeti változók** → **Alkalmazásbeállítások**\n\nMódosítsd egyenként az alábbi változókat:\n\n| Name          | Value                                |\n| ------------- | ------------------------------------ |\n| `DB_HOST`     | `quotes-db.mysql.database.azure.com` |\n| `DB_PORT`     | `3306`                               |\n| `DB_USER`     | `adminuser`                          |\n| `DB_PASSWORD` | a te jelszavad                       |\n| `DB_NAME`     | `cloudquotes`                        |\n\nAz összes módosítása után → **Alkalmaz** → **Megerősítés**\n\n\u003e ⚠️ Ezután az App Service automatikusan újraindul és felolvassa az értékeket. ~ 3-5 perc lehet, amíg újra elérhető lesz.\n\n### 4.6 Tesztelés\n\nNyisd meg a webapp-ot: `http://\u003cVM_PUBLIC_IP\u003e`\n\n🎉 **Az idézetek megjelennek!** A health dashboard-on az App Service és a MySQL zöldre vált.\n\n---\n\n## 5. lépés – AI Chatbot (Azure OpenAI)\n\n\u003e _(Nincs kódfájl – a backend kód a 3. lépésben már felkerült)_\n\n### 5.1 OpenAI erőforrás létrehozása (Azure AI Foundry)\n\n1. AI Foundry projekt létrehozása\n\n- Portál → keresd: **Azure AI Foundry** → **AI Foundry-erőforrás létrehozása**\n\n| Beállítás            | Érték                           |\n| -------------------- | ------------------------------- |\n| Erőforrás csoport    | `workshop-rg`                   |\n| Név                  | `quotes-azureai` _(egyedi név)_ |\n| Régió                | `North Europe`                  |\n| Default project name | `quotes-project`                |\n\nVégül hozd létre a szokásos módon.\n\n\u003e 1-2 perc alatt létrejön az erőforrás, utána lépj be a Foundry kezelőfelületére a portálról.\n\u003e 💡 Az Azure AI Foundry egy új szolgáltatás, amely egyesíti az Azure OpenAI és más AI képességeket egy közös kezelőfelületen. Itt fogjuk deployolni a gpt-4.1-mini modellt, amit a backendünk használni fog.\n\n- Amint kész kattints a **Ugrás a Foundry portálra** gombra.\n\n\u003e Mivel ennek különálló felölete van, így ide be kell jelentkezni ugyanazzal az Azure fiókkal, amivel a portálra is be vagy jelentkezve.\n\n2. Modell deploy (AI Foundry)\n\n- Foundry portál → **Modellek és végpontok** → **Modell üzembe helyezése** → **Alapmodell üzembe helyezése**\n- Model: válaszd (pl. `gpt-4.1-mini`) — ez egy olcsóbb, de még mindig nagyon jó modell a GPT-4 családból\n- Kattints a **Megerősítés** gombra a deploy megkezdéséhez\n- Deployment name: használj egyszerű, pontos nevet (például `gpt-4.1-mini`) — ez kerül az `OPENAI_DEPLOYMENT` env var‑ba. Bizonyosodj meg róla, hogy a _Resource location\\*\\* megegyezik a portálon létrehozott erőforrás régiójával_ (North Europe).\n- **Üzembe helyezés** → várd meg, hogy a deployment státusza **Kész / Sikeres** legyen\n\n3. Kulcs és endpoint (Portal)\n\n- OpenAI erőforrás → **Keys and Endpoint**\n- Másold ki az **Endpoint**-ot (például: `https://quotes-azureai.cognitiveservices.azure.com/`) — ügyelj a trailing slash‑re ha a kód azt várja\n- Másold ki az **Key1** értékét (API kulcs)\n\n4. App Service — környezeti változók beállítása\n\nApp Service → **Beállítások** → **Környezeti változók** → **Alkalmazásbeállítások**\n\nMódosítsd egyenként az alábbi változókat:\n\n- `OPENAI_ENDPOINT` = (az Endpoint)\n- `OPENAI_KEY` = (Key1)\n- `OPENAI_DEPLOYMENT` = (a Foundry deployment neve, pl. `gpt-4.1-mini`)\n- **Alkalmaz / Confirm** → az App Service automatikusan újraindul.\n\n5. Ellenőrzés (portal)\n\n- Foundry: győződj meg, hogy a deployment státusza **Ready**\n- App Service → **Configuration**: látszanak-e az `OPENAI_*` bejegyzések\n- App Service → **Log stream**: figyeld a startup és OpenAI hibákat\n- Health endpoint, például: https://azure-quotes-api.northeurope-01.azurewebsites.net/health — elvárt: `\"config\":{\"openai_missing\":[]}` és `\"openai\":\"ok\"`\n\nHibakeresési tippek (portal):\n\n- Ha `openai_missing` marad, ellenőrizd a `OPENAI_ENDPOINT` végén a `/`-t és a `OPENAI_DEPLOYMENT` pontos egyezését a Foundry deployment névvel.\n- Log streamen keresd az auth error/401, vagy \"deployment not found\" hibákat.\n  \u003e Memóriát (konverzáció-előzmények) Azure Cosmos DB-vel lehetne implementálni, de a cél most az volt,\n  \u003e hogy lássuk milyen **egyszerű egy AI chatbotot összerakni** Azure-on.\n\n---\n\n## 🎉 Kész!\n\nA teljes alkalmazás működik:\n\n```\nIdézetek:  Böngésző → VM IIS → App Service → Azure MySQL\nAI Chat:   Böngésző → VM IIS → App Service → Azure OpenAI\n```\n\n---\n\n## Takarítás (Erőforrások eltávolítása a képzés után!)\n\nAzure Portal → **Resource groups** → `workshop-rg` → **Delete resource group** → gépeld be: `workshop-rg` → **Delete**\n\nMinden törlődik egyszerre.\n\n---\n\n## ❓ Gyakori problémák\n\n| Probléma                     | Megoldás                                                               |\n| ---------------------------- | ---------------------------------------------------------------------- |\n| App Service létrehozási hiba | Várj 5-10 percet, majd próbáld újra létrehozni (kapacitás probléma)    |\n| App Service 500 hiba         | App Service → **Log stream** – ott látod a Python hibát                |\n| MySQL connection refused     | Firewall rule hozzáadva? App Service újraindult a Save után?           |\n| CORS hiba böngészőben        | `flask-cors` telepítve? App Service újraindult?                        |\n| OpenAI 404                   | A deployment neve pontosan egyezik az `OPENAI_DEPLOYMENT` env var-ral? |\n| OpenAI auth error            | Trailing slash az endpoint URL végén! (`…azure.com/`)                  |\n| Frontend nem frissül         | `Ctrl+Shift+R` hard reload a böngészőben                               |\n| GitHub deploy nem fut        | Repo → Actions → nézd meg a workflow log-ot                            |\n| IIS nem indul                | PowerShell → `Get-Service W3SVC`                                       |\n\n---\n\n## 💰 Költségek\n\n| Szolgáltatás               | Free tier      | Becsült költség |\n| -------------------------- | -------------- | --------------- |\n| VM Standard_B2s            | ❌             | ~$0.05/nap      |\n| App Service Alapszintű B1  | ❌             | ~$0.432/nap     |\n| Azure MySQL Burstable B1ms | ❌             | ~$0.02/nap      |\n| Azure OpenAI gpt-4.1-mini  | ❌ Pay-per-use | ~$0.01–0.05/nap |\n\nÖsszesen: **~$0.5/nap** (nagyrészt az App Service miatt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudsteak%2Ftrn-azure-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudsteak%2Ftrn-azure-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudsteak%2Ftrn-azure-workshop/lists"}