Harjoitus 5, Flask

Akseli Huovinen | Haaga-Helia ammattikorkeakoulu

Kurssi: http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/

Laitteet: HP Laptop 14-ck1003 (Intel i5-8250U, 4Gt RAM), Kingston 32GB DataTraveler

Tee Python Flask hei maailma kehitysympäristössä. Voit siis käyttää tuotantoon sopimatonta app.run(debug=True) ajoa.

Aloitin harjoituksen avaamalla linuxin live-tilassa (kts. Harjoitus 1).

Flaskin asennus:

Asensin Flaskin komennoilla ”sudo apt-get update” ja ”sudo apt-get -y install python3-flask”

Hello.py

Loin ajettavan tiedoston ”hello.py” komennolla ”nano hello.py” ja lisäsin tiedostoon seuraavat tiedot ->

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
	return "Linux palvelimet harjoitus 5, flaskin ihmeellinen maailma!"

app.run(debug=True)

Tämän jälkeen ajoin tiedoston komennolla ”python3 hello.py”

Menin vielä selaimella tarkastelemaan lopputulosta osoitteessa localhost:5000


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

Aloitin harjoituksen avaamalla linuxin live-tilassa ja asentamalla apache2:n ja pyhton3 flaskin

Setxkbmap fi
Sudo apt-get -y install apache2
Sudo apt-get -y install python3-flask

Asennuksien jälkeen muokkasin apachen default-etusivun tiedostosijaintia komennolla ”echo testi123|sudo tee  /var/www/html/index.html”.

Hain selaimella ”localhost” tarkastellakseni apachen toimivuutta sekä tekemääni muutosta.


Uuden käyttäjän luominen

Harjoitusta varten tarvitsin uuden käyttäjän sekä ryhmän, joiden tarkoituksena on toimia ainoastaan tiedostosijaintina.

Käyttäjän sekä samannimisen ryhmän loin komennolla: ”sudo adduser akseliwsgi”.

Käyttäjälle annetaan turvallinen salasana sekä nimi, josta voidaan päätellä sen käyttötarkoitus/vastuuhenkiö. Tässä tapauksessa nimeksi Akseli WSGI.


Luomisen jälkeen lukitsin käyttäjän komennolla ”sudo usermod –lock akseliwsgi”.

Tämän jälkeen lisäsin oman live-käyttäjäni luomaani ryhmään (akseliwsgi) komennolla: ”sudo adduser xubuntu akseliwsgi”

Sitten kirjauduin ulos desktopilta, jotta ryhmämuutos tulee voimaan.

Ryhmämuutoksen tarkoituksena on antaa käyttäjälle ”xubuntu” oikeus muokata akseliwsgin kotihakemistossa sijaitsevia tiedostoja.

Name based virtual host

Seuraava askel harjoituksessa oli  uuden virtual hostin luominen Flaskille

Apachen virtual hostingia koskevat .conf tiedostot sijaitsevat hakemistossa /etc/apache2/sites-available joten luodaan sinne uusi tiedosto komennolla:

”sudoedit /etc/apache2/sites-available/akseliwsgi.conf”

Laitoin tiedostoon seuraavanlaisen sisällön:

<VirtualHost *:80>
        ServerName akseli.example.com    

        WSGIDaemonProcess akseliwsgi  user=akseliwsgi  group=akseliwsgi threads=5
        WSGIScriptAlias / /home/akseliwsgi/public_wsgi/akseli.wsgi

        <Directory /home/akseliwsgi/public_wsgi/>
                WSGIScriptReloading On
                WSGIProcessGroup akseliwsgi
                WSGIApplicationGroup %{GLOBAL}
                Require all granted
        </Directory>
</VirtualHost>

Tiedoston luomisen jälkeen otin sen käyttöön ja samalla otin apachen default .conf tiedoston pois käytöstä komennoilla:

”sudo a2ensite akseliwsgi.conf” ja ”sudo a2dissite 000-default.conf”

Samalla tajusin, että en ollut vielä käyttäjien hakemistoja apachen käyttöön eli komento ”sudo a2enmod userdir”

Sitten vielä WSGI-moduulin asennus ennen apachen uudelleenkäynnistystä ->

”sudo apt-get -y install libapache2-mod-wsgi-py3” ja ”sudo systemctl restart apache”

Testasin vielä varmuuden vuoksi apache konfiguraatiota (apache2ctl configtest)

APPI

Itse apin asennusta varten tarvitsin kansion sekä varsinaisen tiedoston käyttäjän akseliwsgi kotihakemistoon,

Ensin loin hakemiston komennolla: sudo mkdir /home/akseliwsgi/public_wsgi. Luomisen jälkeen korjasin kansion oikeuksia:

sudo chown akseliwsgi:akseliwsgi /home/akseliwsgi/public_wsgi

Seuraavaksi annoin kaikille ryhmän akseliwsgi jäsenille oikeudet muokata hakemistoa:

sudo chmod g=rwxs /home/akseliwsgi/public_wsgi


Sitten loin tiedoston akseli.wsgi, joka toimii ns. entry pointtina luotavalle python-apille:

nano /home/askeliwsgi/public_wsgi/akseli.wsgi
ja sinne sisältöä ->

import sys
assert sys.version_info.major >= 3, "Python version too old in akseli.wsgi!"

sys.path.insert(0, '/home/akseliwsgi/public_wsgi/')
from hello import app as application

Tämän jälkeen tarvitsin enää varsinaisen .py -tiedoston niinpä loin harjoituksen ensimmäisen osion tavoin uuden hello.py tiedoston ->

nano /home/akseliwsgi/public_wsgi/hello.py

(käyttöoikeusmuutosten ansiosta muokkaaminen onnistuu ilman sudoa)

Ja sisällöksi:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
        return "Learning Flask, hopefully!\n"

Tärkeänä muutoksena aikaisempaan app.run rivi poistetaan kokonaan tuotantoon tarkoitetussa asennuksessa.

Testatakseni lopputulosta suuntasin jälleen selaimella localhost osoitteeseen.

Testasin vielä hello.py tiedoston muokkaamista ilman apachen restarttia.

nano /home/akseliwsgi/public_wsgi/hello.py

Muokkauksen jälkeen ”touch akseli.wsgi” ja takaisin selaimelle.


Lisää tuotanto-Flaskiin muotit (templates)
Ohje:
http://terokarvinen.com/2020/flask-templates/

Aloitin luomalla akseliwsgi kotihakemistoon uuden kansion ”templates” ja sinne tiedoston ”base.html”


Testatakseni templatea tein uuden python sovelluksen templates-flask.py->

#!/usr/bin/python3
"Return HTML templated page"

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def templated():
	return render_template("base.html", greeting="Hello Templates!")

app.run(debug=True)

Ja ajoin sen – ”python3 templates-flask.py”

Menin selaimella osoitteeseen localhost:5000 tarkastelemaan lopputulosta


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”.

Tehtävän suorittaakseni muokkasin aiemmin tekemääni hello.py tiedostoa.

Testasin tekemääni muutosta antamalla ensin touch-komennon ja suuntaamalla selaimella osoitteeseen localhost

Muutokset toimivat haluamallani tavalla.

Lähteet:

Karvinen, Tero 2020 http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/

http://terokarvinen.com/2020/hello-flask-python-web-app/

http://terokarvinen.com/2020/deploy-python-flask-to-production/

http://terokarvinen.com/2020/flask-templates/

2 vastausta artikkeliin “Harjoitus 5, Flask

Jätä kommentti

Design a site like this with WordPress.com
Aloitus