Messuraportti ja Flask

26.9. – 27.9.2017 järjestestettiin Cyber Security Nordic messut Helsingin messukeskusessa. Viikkotehtävänä oli tehdä raportti kolmesta messuilla olleesta tuotteesta tai esityksestä. Tämän lisäksi piti asentaa ja testata Python Flask palvelin.

Linkki messuraporttiin

Flask

Tein harjoituksen Fujitsu Lifebook i3 -koneella, johon oli asennettu Windows 7. Harjoitusta varten käytin 1. harjoituksessa tehtyä Xubuntu-livetikkua. Käytin tässä tehtävässä Tero Karvisen ohjetta Flaskin asentamiseen.

Aluksi asennetaan Flaskin käytössä vaadittavat ohjelmat ja jo aikaisemmin käyttämäni screenshot-ohjelma (scrot).

sudo apt-get update

sudo apt-get -y install python3 ipython3 python3-flask curl scrot

Jonka jälkeen luodaan harjoitusta varten flask kansio

mkdir flask

Jonka jälkeen tein flask-kansioon tervehdysviestin.

nano tervehdysmaailma.py

Johon kirjoitin ohjeen mukaan:

from flask import Flask
app = Flask(__name__)

@app.route(’/’)
def hello_world():
return ’Hello Kitty!\n\n’

if __name__ == ’__main__’:
app.run(host=’0.0.0.0′, port=5000)

Seuraavaksi testataan sivua. Jos selaimessa yrittää avata 0.0.0.0:5000, tulee ilmoitus ”Unable to connect. Firefox can’t establish a connection to the server at localhost:5000.” Aluksi pitää ajaa komentoriviltä tervehdysmaailma.py ohjelma.

python3 tervehdysmaailma.py

Jolloin tulee ilmoitus:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Kun avaan selaimella sivun 0.0.0.0:5000 (portti 5000) tai localhost:5000, teksti tulee selaimeen näkyville ja komentoriville tulee ilmoitus sivun onnistuneesta avaamisesta:
127.0.0.1 – – [01/Oct/2017 14:49:41] ”GET / HTTP/1.1” 200 –

Palvelinta voi testata myös avaamalla toisen komentokehoitteen ja antamalla komennon (alussa asennettin myös curl):

curl http://localhost:5000

Jolloin komentorivin alapuolelle tulee teksti:

Hello Kitty!!

Jos suljen Flask-palvelimen (CTRL+C), niin curl antaa virheilmoituksen:

curl: (7) Failed to connect to localhost port 5000: Connection refused

Eli palvelin ei vastaa.

Tuotantotyyppinen asennus

Jatketaan Flaskin asentamista tuotantotyyppiseksi saman ohjeen mukaan ja asennetaan Apache2 ja mod-wsgi-moduuli, joka mahdollistaa Python ohjelmien ajamisen Apachen palvelimella. Asennuksessa tulee ottaa huomioon, että lataa wsgi.py3-version, koska alussa ladattiin Python3.

sudo apt-get -y install apache2 libapache2-mod-wsgi-py3

Tässä vaiheessa havaitsin, että latauksen aikana tuli kasa virheilmoituksia:

2017-10-01-171248_1366x768_scrot.png

Lopuksi tuli ehdotus, että päivitä paketit käskyllä: apt-get update. Tein tämän ja asennus onnistui ilman virheilmoituksia.

Testataan vielä Apachen toimintaa avaamalla selain ja kirjoittamalla osoitteeksi localhost. Apachen oletussivu avautuu, joten Apache toimii. Toimintaa voi testata myös komentoriviltä kirjoittamalla:

curl localhost

jolloin näkyviin tulee aloitussivun lähdekoodi. Suraavaksi vaihdetaan oletussivuksi aikaisemmin luomani tervehdys-sivu. Aluksi tehdään apachen Virtual-host asetukset ohjeen mukaan tiedostonimellä tervehdysmaailma.conf kansioon ”sites-available”:

sudoedit /etc/apache2/sites-available/tervehdysmaailma.conf

ja taas ohjetta muokaten:

## /etc/apache2/sites-available/tervehdysmaailma.conf
<VirtualHost *>
ServerName xubuntu.example.com

WSGIDaemonProcess tervehdysmaailma user=xubuntu group=xubuntu threads=5
WSGIScriptAlias / /home/xubuntu/flask/tervehdysmailma.wsgi

<Directory /home/xubuntu/flask/>
WSGIProcessGroup tervehdysmaailma
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On

Require all granted
</Directory>
</VirtualHost>

 

Punaisella vahingossa tekemäni kirjoitusvirhe, jonka huomasin vasta paljon myöhemmin… Tämän jälkeen muutetaan tervehdysmaailma.conf oletukseksi ja poistetaan Apachen antama oletus. Tämän jälkeen käynnistetään Apache uudelleen, jotta muutokset tulevat voimaan.

sudo a2dissite 000-default.conf

sudo a2ensite tervehdysmaailma.conf

sudo service apache2 restart

Tämän jälkeen tulee vielä tehdä tervehdysmaailma.wsgi tiedosto, jotta aloitussivuksi muuttuisi tervehdysmaailma.py. Tiedosto tehdään samaan kansioon kuin aloitussivu, eli tässä tapauksessa flask-kansioon.

nano tervehdysmaailma.wsgi

Ja kopioidaan ohjeesta pienellä muokkauksella:

import sys

if sys.version_info[0]<3: # require python3
raise Exception(”Python3 required! Current (wrong) version: ’%s'” % sys.version_info)

sys.path.insert(0, ’/home/xubuntu/flask/’)
from tervehdysmaailma import app as application

Jonka jälkeen käynnistetään Apache uudelleen.

Avataan selaimessa localhost… ja tulee ilmoitus:2017-10-01-185013_1366x768_scrot.png

Ei ollenkaan hyvä. Kävin uudelleen läpi kaikki tiedostot (ja useamman kerran), kunnes kokeilin mitä virheloki voisi kertoa minulle.

cat /var/log/apache2/error.log

Sieltä löytyi virheilmoitus:

[Sun Oct 01 18:56:03.528837 2017] [wsgi:error] [pid 26641:tid 140405299476224] [client 127.0.0.1:54280] Target WSGI script not found or unable to stat: /home/xubuntu/flask/tervehdysmailma.wsgi

Eli virhe viittauksessa (tervehdysmaailma.conf) wsgi-tiedostoon. Korjasin kirjoitusvirheen,  käynnistin Apachen uudelleen ja sivusto aukesi.

2017-10-01-190519_1366x768_scrot.png

Lue tietueita Postgre-tietokannasta Flaskilla

Tein tämän tehtävän seuraavana päivänä, joten jouduin tekemään kaiken yllä olevan uudelleen ennen varsinaista harjoitusta, koska tein tehtävät live-tikulla… ja 5 min myöhemmin…

Mennään eteenpäin Tero Karvisen ohjeen mukaan.

Asennetaan tarvittavat ohjelmat.

sudo apt-get update

sudo apt-get -y install python3-flask-sqlalchemy python3-psycopg2

sudo apt-get -y install postgresql

ja tehdään tietokanta ja tietokannalle käyttäjä. Ohje

sudo -u postgres createdb xubuntu

sudo -u postgres createuser xubuntu

Kopioidaan ”main program” ohjeesta ja tallennetaan alkuperäisen tervehdysmaailma.py ohjelman tilalle.

Seuraavaksi tehdään (template ohje) template kansio ja template-tiedostot.

Testataan ohjelmaa kirjoittamalla selaimeen ”localhost”… ja taas virheilmoitus, ettei sivua löydy. Olen tehnyt muutoksia asetuksiin, joten käynnistetään Apache uudelleen.

sudo service apache2 restart

Uusi yritys ja sivu toimii.

2017-10-02-171611_1366x768_scrot.png

2017-10-02-171621_1366x768_scrot.png

Katsotaan miltä tietokanta näyttää joten avataan PostgreSQL

psql

xubuntu=> SELECT * FROM animals;
id | name
—-+——–
1 | Lion
2 | Dragon
3 | Dog
4 | Horse
(4 rows)

 

Lähteet: terokarvinen.com

***************************************************************************************

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

***************************************************************************************

 

 

 

 

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

w

Muodostetaan yhteyttä palveluun %s