Linux palvelimet ICT4TN021-3010 Harjoitus 5

Python Flask


Tehtävän suorittaminen aloitettu 2.3.2020 klo. 13:00

Laitteen tiedot, jolla tehtävä suoritettiin:

  • CPU: Intel i5-4670k
  • GPU: Nvidia GTX 1060 6 Gt VRAM
  • RAM: 16 Gt DDR3
  • Kingston DataTraveler G4 16 Gt, jossa Xubuntu 18.04.03
a) Hello Flask! Tee Python Flask hei maailma kehitysympäristössä. Voit siis käyttää tuotantoon sopimatonta app.run(debug=True) ajoa.

Aloitin asentamalla Flaskin komennoilla ”sudo apt-get update” ja ”sudo apt-get install python3-flask”. Tämän jälkeen loin uuden tiedoston käyttäjän kotihakemistoon komennolla ”nano hello.py” ja kopioin tiedostoon testausta varten Tero Karvisen tekemän lyhyen Python-ohjelman (http://terokarvinen.com/2020/hello-flask-python-web-app/). Vaihdoin hänen tekstiosuutensa tilalle ”Hello, World!” ja tallensin tiedoston painamalla Ctrl-X, Y ja Enter. Tämän jälkeen ajoin ohjelman komennolla ”python3 hello.py”, joka käynnisti ohjelman ja ilmoitti osoitteen, jossa voisin tarkastella sitä verkkoselaimessa (http://127.0.0.1:5000/). Verkkoselaimessa näkyikin aikaisemmin kirjoitettu teksti ”Hello, World!”, josta voidaan päätellä ohjelman toimivan halutusti.


b) Tuotanto-Flask. Tee tuotantotyyppinen asennus Flaskista käyttäen Apachen WSGI-moduulia. Kokeile, että pystyt muokkaamaan koodia ilman sudoa ja saat uuden version käyttöön käynnistämättä Apachea uudelleen. (‘touch foo.wsgi’).
Apache

Aloitin asentamalla Apachen komennolla ”sudo apt-get install apache2” ja testasin sivun toimivuuden menemällä localhost-osoitteeseen verkkoselaimessa, joka näyttikin Apachen default-sivun.

Tämän jälkeen muutin default sivun sisällön komennolla ”echo ”Cool stuff coming soon!”|sudo tee /var/www/html/index.html”, jonka jälkeen valitsemani lause näkyi localhost-osoitteessa.

Uusi käyttäjä

Tämän jälkeen loin uuden käyttäjän/ryhmän, jonka tarkoituksena on toimia esimerkiksi yhteisen projektin sijaintina ja johon voidaan lisätä ja poistaa käyttäjiä halutessa. Ensimmäiseksi loin käyttäjän ”harjoituswsgi” komennolla ”sudo adduser harjoituswsgi”. Syötin salasanan ja nimikenttään tiedot kenelle käyttäjä/ryhmä kuuluu (tässä tilanteessa laitoin tiedoksi tosin vain ”Harjoitus WSGI”, mutta normaalisti laitettaisiin esimerkiksi yhteyshenkilön nimi, joka on vastuussa kyseisestä projektista). Tämän jälkeen lukitsin käyttäjän komennolla ”sudo usermod –lock harjoituswsgi”, sillä keneenkään ei kuulu kirjautua suoraan käyttäjälle vaa tätä käytetään vain keskitettynä kansiona/sijaintina esim. projektissa (johon käyttäjät tekevät muutoksia omien tunnuksiensa kautta). Lisäsin vielä itseni luomaani ryhmään komennolla ”sudo adduser xubuntu harjoituswsgi”, jonka jälkeen asetin xubuntu-tilille salasanan. Kirjauduin ulos ja takaisisin sisään, jonka yhteydessä xubuntu-tili liitettiin harjoituswsgi-ryhmään.

Virtual Host Flaskille ja ohjelman asennus

Aloitin luomalla uuden .conf-tiedoston komennolla ”sudoedit /etc/apache2/sites-available/harjoituswsgi.conf”. Tiedostoon liitin Tero Karvisen valmiin mallin (http://terokarvinen.com/2020/deploy-python-flask-to-production/), johon tein tarvittavat nimimuutokset yms. omaa käyttöäni varten. Tämän jälkeen tallensin tiedoston ja aktivoin sen komennolla ”sudo a2ensite harjoituswsgi.conf” ja otin samalla default .conf-tiedoston pois käytöstä komennolla ”sudo a2dissite 000-default.conf”. Asensin tämän jälkeen myös tarvittavan WSGI-moduulin komennolla ”sudo apt-get install libapache2-mod-wsgi-py3”, jonka jälkeen käynnistin Apache-demonin uudestaan komennolla ”sudo systemctl restart apache2”. Komennolla ”apache2ctl configtest” sainkin tämän jälkeen vastaukseksi ”Syntax OK”.

Kun Apachen konfiguraatiot olivat kunnossa tein uuden kansion komennolla ”sudo mkdir /home/harjoituswsgi/public_wsgi” ja korjasin vaadittavat ongelmat käyttöoikeuksien kanssa komennoilla ”sudo chown harjoituswsgi:harjoituswsgi /home/harjoituswsgi/public_wsgi” ja ”sudo chmod g=rwxs /home/harjoituswsgi/public_wsgi”. Komennolla ”ls -ld /home/harjoituswsgi/public_wsgi” näin, että kansion oikeudet olivat kunnossa. Jäin kuitenkin hieman ihmettelemään kohtaa ”40”, sillä esimerkissä tämän luvun kohdalla on luku 4096, jonka oletin viittaavan jollain tasolla muistiin tai tilaan. En kuitenkaan törmännyt mihinkään ongelmiin, joten annoin asian toistaiseksi olla (Mikäli ongelmia olisi ilmennyt olisin yrittänyt selvittää asiaa tarkemmin). Tehtyäni nämä muutokset localhost-osoitteen error-koodi muuttui 403 -> 404, josta pystyin päättelemään muutoksien toimineen halutusti. Tämän jälkeen loin uuden .wsgi-tiedoston komennolla ”nano /home/harjoituswsgi/public_wsgi/harjoitus.wsgi” ja uuden python-tiedoston komennolla ”nano hello.py” (sillä olin tällä hetkellä jo public_wsgi kansiossa), johon liitin saman python-ohjelman kuin aikaisemmassa tehtävässä (ilman app.run(debug=True) riviä). Jolloin verkkosivu näytti kirjoittamani lauseen! Testasin myös sivun päivittämistä ilman apachen uudelleenkäynnistämistä tekemällä muutoksen python-tiedostoon ja tämän jälkeen ajamalla komennon ”touch harjoitus.wsgi”, joka päivitti sivun sisällön uuteen.


c) Lisää tuotanto-Flaskiin muotit (templates).

Loin aluksi harjoituswsgi-käyttäjän kotihakemistoon ohjeenmukaisen kansion, html-tiedoston ja python-tiedoston (http://terokarvinen.com/2020/flask-templates/), joihin liitin myös ohjeessa annetut sisällöt. Tämän jälkeen ajoin python-ohjelman komennolla ”python3 templates-flask.py” ja avasin verkkoselaimeen ohjelman antaman osoitteen (http://127.0.0.1:5000/), jolloin sain myös ohjeenmukaisen sivun näkynään

HUOM! Muokkaus 5.3.2020 klo. 10:00

Huomasin tehneeni Templatet alkuperäisessä palautuksessa väärin ja sain ne toimimaan oikein uudelleen tehtyäni harjoituksen tunnilla. Tällöin tiedostopuu näytti seuraavalta:


d) Sun IP. Tee Flask-sivu, jolla näkyy tietoja käyttäjästä. Esimerkiksi request.user_agent.string, request.remote_addr. Muista “from flask import request”.

Päätin muokata jo olemassa olevaa hello.py -tiedostoa, jotta en joutuisi muokkaamaan myös esim. wsgi-tiedostoa. Muokkasin hello.py-tiedostoa komennolla ”nano hello.py” ja lisäsin import-riville requestin. Lisäsin tämän jälkeen hello-funktioon kaksi muuttujaa kayttaja ja iposoite, jotka poimivat käyttäjän IP-osoitteen ja muut tiedot. Lisäsin nämä muuttujat myös palautettavaan lauseeseen, jolloin sain lopputulokseksi seuraavan.

Tehtävä suoritettu 2.3.2020 klo. 18:00


Muokkaukset:

5.3.2020, Korjattu väärin tehty harjoitus
23.3.2020, Lisätty laitteen tiedot, jolla tehtävä on suoritettu. Muokattu tekstin ulkoasua siistimmäksi.

Lähteet

Karvinen, Tero 2020: Aikataulu, h5. http://terokarvinen.com/2020/aikataulu-linux-palvelimet-ict4tn021-3010-torstai-aamu-alkukevat-2020-5-op#h1, Luettu 2.3.2020

Karvinen, Tero 2020: Hello Flask – Write a Python Web App. http://terokarvinen.com/2020/hello-flask-python-web-app/, Luettu 2.3.2020

Karvinen, Tero 2020: Flask Templates. http://terokarvinen.com/2020/flask-templates/, Luettu 2.3.2020

Karvinen, Tero 2020: Deploy Python Flask to Production. http://terokarvinen.com/2020/deploy-python-flask-to-production/, Luettu 2.3.2020

Gratschew, Tommy 6.2.2020: Linux palvelimet ICT4TN021-3010 Harjoitus 3. https://tgratschew.news.blog/2020/02/06/linux-palvelimet-ict4tn021-3010-harjoitus-3/, Luettu 2.3.2020

One thought on “Linux palvelimet ICT4TN021-3010 Harjoitus 5

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create your website with WordPress.com
Get started
%d bloggers like this: