Arvutiteaduse instituut
  1. Kursused
  2. 2023/24 kevad
  3. Veebiteenuste ja hajussüsteemide arendus (LTAT.06.018)
EN
Logi sisse

Veebiteenuste ja hajussüsteemide arendus 2023/24 kevad

  • Pealeht
  • Loengud
  • Praktikumid
  • Lahenduste Esitamine

Kuues praktikum - Azure Pilveplatvorm

Selles praktikumis tutvume Microsoft Azure pilveplatvormiga. Vaatam, kuidas lihtsasti saab üles seada staatilisi veebirakendusi (HTTP, JS) ning kuidas kasutada IaaS pilvetehnoloogia lähenemist selleks, et üles seada Flask'i põhine Pythoni veebiteenus, mille me tegime neljandas praktikumis.

Probleemide korral kontrollige:

  1. Võimalikud probleemid ja nende potentsiaalsed lahendused osa praktikumi juhendi lõpus.
  2. Küsige otse #praktikum-6 Zulip teemas.
    • Ka siis kui soovite lihtsalt viheid.

Viited

  1. Github õpetus: https://guides.github.com/introduction/git-handbook/
  2. Github Hello-world õpetus: https://guides.github.com/activities/hello-world/

Ülesanne 6.1: Konto loomine

  • Logige Azure'i pilve sisse: https://azure.microsoft.com/en-us/
    • Kasutage oma ülikooli e-posti aadressi ja parooli
    • Kui teilt küsitakse, millist tellimuse tüüpi kasutada, valige Azure for Students tellimus.
  • Avage Azure Cloudi portaal: https://portal.azure.com/#home
  • Tutvuge saadaolevate teenustega: https://portal.azure.com/#allservices

Ülesanne 6.2: Azure Staatilised veebirakendused

Azure Static Web App teenust saab kasutada veebirakenduste juurutamiseks, mis ei vaja serveri poolseid (back-end) komponente ja mida saab ehitada HTML- või Javascripti lehtedena, kus kogu rakenduse loogika käivitatakse kliendi poolel. See on sobiv lihtsate kodulehtede jaoks.

Task 6.2.1 Veebilehe jaoks Github'i repositooriumi loomine

Selles ülesandes loome lihtsa HTML-i veebirakenduse ja salvestame selle Github'i repositoorimisse.

  • Logige sisse oma Githubi (http://github.com/) kontole või looge uus konto.
  • Loome Azure'i staatilise veebi HTML-i rakenduse GitHubi näiteprojekti koopia (mitte-täielik fork)
    • Minge aadressile https://github.com/login?return_to=/staticwebdev/vanilla-basic/generate
    • Määrake loodavale GitHubi repositooriumile uus nimi.Näiteks: ut2024azapp
    • Klikkige nupul Create repository from template
  • Kui te ei tunne Git'i ja Github'i, siis lugege selle praktikumi juhendi viidete all olevaid juhendeid.
  • Minge oma loodud GitHub repositooriumisse. Rakendus on lihtne HTML lehekülg, mille sisu on kirjutatud faili src/index.html.
    • Muutke faili index.html (saab muuta otse Github'is brauseri kaudu) ja asendage HTML body sees olev <h1>Vanilla JavaScript App</h1> enda poolt muudetud sisuga, mis sisaldab vähemalt teie nime .
    • Lisage HTML-lehele täiendavat sisu või pilte, niikaua, kui teie nimi on lehel selgelt nähtav (teme hiljem üles seatud veebilehest ekraanipilte)

Task 6.2.2 Veebilehe üles seadmine Azure'i pilves staatilise veebirakendusena

Selles ülesandes seadistame ja konfigureerime Azure'i pilveteenuse, et üles seada rakendus otse GitHub'i repositooriumist.

  • Avage Azure'i pilveportaal: https://portal.azure.com/
  • Otsige teenust Static Web Apps
  • Looge uus staatiline veebirakendus (Static Web App)
  • Kui teil pole veel Azure ressursirühma (Resource Group), siis looge uus.
  • Logige sisse oma Githubi kontoga, et luua ühendus Azure ja GitHub kontode vahel
    • See annab MS Azure'ile juurdepääsu teie GitHubi kontole!
    • MS Azure kasutab seda automaatse juurutamise konfiguratsiooni seadistamiseks, et tuvastada iga kord, kui teete oma rakendus Github'is muudatusi. Vaatleme seda lähemalt ühes järgnevas ülesandes.
  • Valige organisatsiooniks oma Githubi kasutajanimi
  • Valige hiljuti loodud HTTP-rakenduste repositoorium.
  • Valige main rakenguse haruks (branch)
  • Valige Custom ehituse eelseadeks (Build Presets)
    • Seadistage rakenduse asukohaks /src
    • Ülejäänud valikud peaks samaks jääma!
  • Klikkige valikul Review and Create ja siis uuesti Create
  • Kui üles seadmine on lõppenud (võib võtta mõned minutid), võite minna loodud Static Web Appsi ressursile ja avada juurutatud teenuse URL, et pääseda ligi oma veebilehele:

Task 6.2.3 Rakenduse täiendamine

Eelmises ülesandes seadistati Azure's automatiseeritud töövoog, mis käivitub iga kord, kui teete Github'is muudatusi oma veebirakenduse lähtekoodis. Selles ülesandes muudame veebilehe sisu ning uurime, kuidas need muudatused jõuavad automaatselt Azure pilve ja meie rakendusse.

  • Muutke Githubis faili Index.html ja kinnitage muudatused (ja tehke Git push, kui te ei kasuta GitHubi veebisaiti otse).
  • GitHub-to-Azure'i integratsioon on loodud GitHub'i töövoona (workflow), mis on seadistatud teie repositooriumi sees (Azure poolt loodud) kaustas .github/workflows.
  • Avage töövoo fail ja lugege see läbi
    • Töövoog defineerib erinevad integreeimise tegevused, mis käivitatakse konkreetsete Git'i sündmuste (commit, release, vms.) korral.
    • Näiteks build_and_deploy_job töö käivitub, kui GitHubi sündmuse tüüp on PUSH (uued muudatused on GitHubisse lükatud)
    • Praktikas käivitatakse Dockeri konteineris olev käsk (pildi tüüp: Azure/static-web-apps-deploy@v1) iga kord, kui toimub PUSH-sündmus.
      • See käsk kasutab Azure'i pilve API-d uute muudatuste edastamiseks Azure'i staatilise rakenduse teenusesse.
  • Et Github saaks käivitada toiminguid Windows Azure'i platvormis, salvestatakse ka juurdepääsu info GitHubi repositooriumi seadetesse Github saladusena.
    • Töövoo definitsioonis pääseb nendele saladustele programmiliselt juurde järgmiselt: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_XXXXXXXXXXXXXXX}}
    • Saate värskendada või eemaldada saladusi, minnes oma projekti sätetesse ja avades lehe Secrets.
  • WorkFlow käivitamisi näete oma Githubi projekti vahekaardil Actions .
    • Seal näete ka millised töövoo toimingud olid edukad, nende olekut ja ka ise uusi töövooge luua.
    • Lisaks näeb seal veateateid, kui mõni töövoog ei olnud edukas.
  • Saate tühistada Azure'i juurdepääsu oma GitHubi kontole oma Githubi profiili seadetes (aadressil: https://github.com/settings/applications alamosas Authorized OAuth Apps).
    • Kuid ärge tehke seda enne, kui olete vähemalt kõik praktikasessiooni tulemused täitnud ja esitanud
  • Tehke ekraanipilt üles seatud staatilisest veebirakendusest
  • Vastake Küsimusele: Kui kaua kulub Azure'il teie rakenduse kuvatava sisu värskendamiseks?
    • Saate seda käsitsi testida (muuta HTML-lehe sisu ja kontrollida, kui kaua kulub Azure'il reaalajas veebilehe sisy värskendamiseks) või kontrollida, kui kaua värskendustoimingule tegelikult aega kulub (kontrollides GitHubi repositooriumi Actions sisu)

PS! See teenus käivitati 2020. aasta mais ja on väikeses mahus isiklikuks kasutamiseks tasuta.

Selles praktikumis me seda staatilist rakendust edasi ei arenda, aga tulevikus loome selle abil oma lahenduse veebiliidese (front end).

Ülesanne 6.3: Azure Virtuaalmasina tellimine

Selles ülesandes vaatame, kuidas me saame luua uusi Azure pilve virtuaalmasinaid.

  • Otsime Virtual machines Azure teenuste hulgast Azure veebikonsoolis
  • Loome uue Azure Virtuaalmasina
  • Seadistage järgmised valikud virtuaalmasina loomisel:
    • Region: North Europe
    • Image: Ubuntu 22.04
    • Size: DS1_v2 (Valige See all sizes ja siis D-Series v2 alt leiate DS1_v2)
      • Kui seda Size tüüpi ei ole võimalik valida mingil põhjusel, siis valigemõni teine odavam VM tüüp millel on 1-2 vCPU tuuma ja 4-8 GB mälu
    • Authentication type: SSH public key
    • SSH public key source: generate new (Loome uue SSH võtme)
    • username: azureuser
    • Select inbound ports: Aktiveerige/valige pordid 80 ja 22
    • Ülejäänud seadistused võivad samaks jääda.
  • Käivitame VM seadistamise
  • NB! Kindlasti laadige alla ja salvestage SSH-võtmefaili. See on vajalik VM-iga ühenduse loomiseks.
  • Pärast VM käivitamist avage VM-i ressursi leht ja kopeerige VM-i IP-aadress.

Visuaalsed näited kuidas valida VM tüüp:

  • Valige See all sizes:
  • Seejärel valige D-Series v3 alt DS1_v2 tüübi ja siis legekülje all klikkige nupul Select:

Ülesanne 6.4: Virtuaalmasinasse ühendamine Üle SSH.

Kasutame Virtuaalmasinasse üle interneti sisselogimiseks Secure Shell'i (SSH) protokolli. Pilves olevatel virtuaalmasinatel võib olla mitu IP-aadressi. 'Avalik IP on juurdepääsuks väljastpoolt pilve ja Privaatne IP on juurdepääsuks pilve seest (teistest virtuaalmasinatest).

Logige VM'i sisse ssh kaudu, kasutades SSH-võtmepõhist autentimist

  • Linuksis:
    • ssh -i path_to_my_key_pair_file azureuser@<instance public ip address>
    • Näiteks: ssh -i .cloud/jakovits_key.pem azureuser@13.81.112.239
    • kui saate veateate, kontrollige, kas tee võtmefailini on korrektne ja sellel on õiged õigused (chmod 400 <failinimi>)
  • Windows'is:
    • Kui CMD käsureal on olemas käsurea ssh käsk, siis kasutage täpselt sama lähenemist, kui Linuksis!
      • ssh -i path_to_my_key_pair_file azureuser@<instance public ip address>
        • Näiteks: ssh -i .cloud/jakovits_key.pem azureuser@13.81.112.239
      • Kui saate veateate et faili õigustega on probleem, siis
        • Windowsis: muutke võtmefaili turbeõigusi (File -> Properties -> Security ) ja eemaldage üldiste kasutajate õigused, jättes oma Windowsi kasutaja ja administraatori kasutajaõigused paika.
        • Enne failiõiguste muutmist peate võib-olla keelama ka faili/objekti õiguste pärimise.
    • Kui ssh-käsk ei tööta, saate Windowsis lubada OpenSSH-kliendirakenduse.
      • Operatsioonisüsteemis Windows 11: avage "Settings" > "Apps" > "Optional Features" ja kontrollige, kas OpenSSH-klient on installitud – vajadusel installige see valiku "Add optional feature" kaudu.
    • Alternatiiv, Kui teie arvutis on installeeritud Windows Git, ja Git BASH (https://gitforwindows.org/) käsurida, siis saate samuti kasutada täpselt sama lähenemist, kui Linuksis!
    • Muudel juhtutel: Kasutage Putty, WinSCP, SSH secure shell, või mõnda muud SSH programmi, et saada käsurea liides virtuaalmasinasse ssh-i kaudu üle interneti.

(Näita lisa võimalusi)

  • PuTTy Kaudu:
    • Kui kasutate Putty Windowsis, peame esmalt muutma alla laetud privaatvõtme faili (_keyname_.pem) ümber .ppk failiks.
      • PEM ehk Privacy Enhanced Mail on Base64 kodeeringuga DER-sertifikaat. PEM-sertifikaate kasutatakse sageli serverites, kuna neid saab lihtsa tekstiredaktoriga hõlpsasti loetavateks andmeteks tõlkida.
      • Saate kasutada PuTTYgen, et teisendada sertifikaat Putty spetsiifilisse *.ppk vormingusse. Kasutage selleks programmis PuttyGen funktsioone Load ja Save private key.
        • Saate jälgida õpetust: Convert your private key using PuTTYgen .pem võtmefaili .ppk failiks teisendamiseks.
      • Pärast võtme teisendamist saate kasutada Putty't oma võtmega uue SSH-ühenduse loomiseks
        • SSH-ühenduse kasutajanimi peab olema azureuser
          • Määrake see Putty's Connection->Data-> Login details all
        • Host väärtus peab olema käivitatud virtuaalmasina avalik IP
        • SSH-võti peab olema sama .ppk-võti, mille teisendasite rakendusega PuttyKeyGen
        • Määrake võtme asukoht seadetes asukohas: Connection->SSH->Auth->Privaatvõtme fail...

Ülesanne 6.5: Flask rakenduse üles seadmine Virtuaalmasinas

Selles ülesandes liigutame virtuaalmasinasse oma Neljandas praktikumis loodud Flask REST API rakenduse ning käivitame selle seal veebiteenusena.

  1. Failide liigutamine virtuaalmasinasse.
    • Pakkige oma neljanda praktikumi REST API python'i projekti kaust kokku zip failiks.
    • Linuxis või windowsis (kui cmd või Git BASH käsureal on scp käsk)
      • scp -i path_to_my_key_pair_file path/to/local/file azureuser@<instance_public_ip_address>:path/to/remote/file
        • Näide: scp -i .cloud/jakovits_key.pem python_projekt.zip azureuser@13.81.112.239:python_projekt.zip
          • NB! scp käsus peab IP aadressi järel peab olema koolon ":" ja faili tee (path) serveris.
    • Windowsis peaks ka scp käsk töötama käsureat või Powershellist. Aga alternatiiv oleks kaWinSCP programmi kasutamine
      • Või näiteks installeerige Git for Windows, millega tuleb kaasa Git BASH käsurida (https://gitforwindows.org/), kuna selle abil on migav mitmeid linuksi käsurea käske windowsis kasutada.
  2. Logige ssh kaudu uuesti sisse virtuaalmasinasse
  3. Uuendage linuksi paketihalduri info: sudo apt update
  4. installeerige virtuaalmasinas unzip programm zip faili lahti pakkimiseks
    • sudo apt install unzip
    • pakkige fail lahti: unzip failinimi.zip
  5. Installeerimine Python teekide halduri pip: sudo apt install python3-pip
  6. Instaleerime vajalikud paketid:
    • sudo pip3 install flask
    • teeme seda siin root kasutaja õigustes, kuna hiljem on vaja jooksutada flask rakendust root kasutaja all, muidu ei saa protsessi panna kuulama porti 80.
  7. Muudame oma Python programmi, et see pandaks läima pordi 80 peal:
    • Asendage rida app.run(debug=True) reaga: app.run(host='0.0.0.0', port=80)
    • Selle tulemusena pannakse nüüd Flask veebiserver tööle pordi 80 peal, ning kuulama kõiki võrguliideseid.
  8. Paneme rakenduse tööle: sudo python3 python_skripti_nimi.py
    • Kui vajalik, installeeriga ka vajalikud python teegid.
  • Tehke ekraanipilt käsurea väljundist, milles oleks näha, et õnnestus Pythoni programm käivitada
    • Ekraanivaatel peaks olema näha käivitatud käsk ning selle väljund

Testige, et teie REST api töötab:

  • Avage oma rakenduse aadtess: http://TEIE_AZURE_VM_PUBLIC_IP/raamatud
    • Näide: http://13.81.112.239/raamatud
  • Saatke POST päring uue raamatu allatõmbamiseks, ning kontrollige, et see töötab ning raamat lisatakse API poolt hallatavate raamatute nimekirja.
  • Tehke veel üks ekraanipilt üles seatud veebirakendusest (/raamatud), nii, et oleks näha ka brauseri aadress koos IP'ga
    • Samuti peaks seal olema näha, et API haldab raamatuid (ei ole tühi list)

NB! See on lihtsustatud näide. Pärismaailmas Flask programme tavaliselt ei jooksutata otse ja sudo (root kasutaja) õigustes. Tavaliselt pannakse vahepeale vähemalt üks lihtne HTTP server, näiteks NGINX, või gunicorn. Sudo kasutamise vältimiseks saab kasutada authbind programmi, et anda tava kasutaja programmidele õigused mingit provileegitud porti (siin on selleks 80) kasutada. Lisaks peaks päriselus rakenduse tööle panema püsivalt, nii, et ka VM'ile restardi tegemise järel programm hakkaks uuesti tööle.

Lahenduse esitamine

Praktikumi lahendusena tuleb esitada:

  1. Ekraanivaated ülesannetest 6.2 ja 6.5 (kokku kolm ekraanivaadet)
    • Vastus küsimusele: Kui kaua kulus Azure'il teie rakenduse kuvatava sisu värskendamiseks?
  2. Link Azure staatilise veebilehele (kommentaarina), mille seadsime üles ülesandes 6.1 ja 6.2.
  3. Failid tuleks kokku pakkida üheks suuremaks zip failiks enne üles laadimist.
  4. NB! Ärge unustage pärast lahenduse lõpetamist Azure'i VM kustutada või seisma panna! Vastasel juhul kulutab see teie krediiti edasi.
Lahenduste esitamiseks peate olema sisse loginud ja kursusele registreerunud.

Võimalikud probleemid ja nende potentiaalsed lahendused.

  • Veateade WARNING: UNPROTECTED PRIVATE KEY FILE!
    • SSH võtmefailil ei tohi olla õigusi kolmandatele kasutajatele. Tuleb failiõigused "madalamaks" seadistada.
    • Linuksis saab seda teha näiteks nii: chmod 400 <failinimi>
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused