1022 dagar sedan senaste inlägget så kändes som det kanske var dags att ge den här sidan lite kärlek igen.. Liten uppdatering - inget CCIE-cert ännu, däremot nytt jobb som IP Specialist på Telia sedan ~1 år tillbaka. Med SDN på intåg samt att certifieringar i det stora hela börjar kännas allt mer icke-relevanta pga braindumps m.m. så vet jag inte riktigt hur jag ska göra framöver. Just nu är det mer lärande för lärandets skull.. :)
Har haft som sidoprojekt senaste tiden att automatisera arbetsuppgifter/-moment via (shell)script, men tänkte försöka gå över till att använda Python istället i samband med lansering av en ny scriptserver på jobbet. Så i väntan på lanseringen har jag börjat kika lite på små pythonscript, men hade även en idé att försöka lyfta ur vissa bef. script som inte kräver någon nätaccess till en webbserver istället (och samtidigt skriva dessa i python istället) för att göra det mer användarvänligt/lättillgängligt.
Då jag ville använde mig av Python3 som “backend” verkade Flask intressant, webbservern driver jag just nu på en raspberry (rasbian)/apache2. Efter x antal timmar börjar det nu faktiskt lira helt ok så tänkte det kunde vara på sin plats att dokumentera ner det hela lite grann. För att komma igång:
- Installera Python
- Installera Virtual Enviroment (ej ett krav men rekommenderat)
- Installera Apache2
Skapar sedan en katalog för min “hemsida” under /var/www/html/ (default för debian):
1
2
3
4
5
6
7
8
9
10
$ mkdir website
# För bilder/css/js etc
$ mkdir website/static
# För html-filer
$ mkdir website/templates
$ cd website
# Skapar en Virtual enviroment för Py3 med namnet flaskenv
$ virtualenv --python=python3 flaskenv
\# Aktivera VE
$ source flaskenv/bin/activate
Fungerar allt som det ska bör prompten se ut likt detta (min prompt ser kanske lite udda ut men är endast för jag skapat en symlänk mellan hemkatalogen & /var/www/html/):
1
2
3
4
5
(flaskenv) joco02@webdev:~/www/website$
(flaskenv) joco02@webdev:~/www/website$ python -V
Python 3.5.3
# Installera Flask:
(flaskenv) joco02@webdev:~/www/website$ pip install flask
Vi kan nu testa slänga ihop ett litet script:
1
2
3
4
5
6
7
8
9
10
11
(flaskenv) joco02@webdev:~/www/website$ nano test.py
from flask import Flask
app = Flask(\_\_name\_\_)
@app.route('/')
def hello\_world():
return 'Hello World!'
if \_\_name\_\_ == '\_\_main\_\_':
app.run()
Starta sedan Flasks inbyggda webbserver med:
1
2
(flaskenv) joco02@webdev:~/www/website$ python test.py
\* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
I default-läget är dock Flasks webbserver endast nåbar från localhost, vi kan alltid verifiera mer curl om det fungerar men mer lämpligt är väl att öppna upp så du kan testa från andra enheter:
1
2
3
4
5
6
7
8
9
10
(flaskenv) joco02@webdev:~/www/website$ export LC_ALL=C.UTF-8
(flaskenv) joco02@webdev:~/www/website$ export LANG=C.UTF-8
(flaskenv) joco02@webdev:~/www/website$ export FLASK_APP=test.py
(flaskenv) joco02@webdev:~/www/website$ flask run --host=0.0.0.0
\* Serving Flask app "test"
\* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
# Alt. så justerar vi vår test.py enligt följande:
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
Surfar vi nu in till vår server på port 5000 bör du mötas av en fin “Hello World!”. Men för att få det att fungera med apache2 krävs det ytterligare en hel del jobb. Vi behöver först installera WSGI för Python3:
1
2
3
4
5
(flaskenv) joco02@webdev:~/www/website$ deactivate
joco02@webdev:~/www/website$ sudo apt-get install libapache2-mod-wsgi-py3
joco02@webdev:~/www/website$ # Aktivera mod\_wsgi och starta om apache2
joco02@webdev:~/www/website$ a2enmod wsgi
joco02@webdev:~/www/website$ sudo /etc/init.d/apache2 restart
Skapa sedan en Virtual Host i Apache2:
joco02@webdev:/var/www/html/website$ sudo nano /etc/apache2/sites-available/website.conf
Min fil ser ut enligt följande (observera att WSGIProcessGroup måste matcha din WSGI-fil du skapar i nästa steg):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<VirtualHost \*:80>
WSGIDaemonProcess website user=xx group=xx threads=5
WSGIScriptAlias / /var/www/html/website/website.wsgi
ServerName x.se
ServerAdmin x@x
<Directory /var/www/html/website/>
WSGIProcessGroup website
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Require all granted
</Directory>
Alias /static /var/www/html/website/static
<Directory /var/www/html/website/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE\_LOG\_DIR}/error.log
LogLevel warn
CustomLog ${APACHE\_LOG\_DIR}/access.log combined
</VirtualHost>
Vi akviterar den sedan med:
sudo a2ensite website
Vi närmar oss.. Nu behövs en WSGI-fil som vi skapar i vår “website”-mapp. Efter en hel del trixande/trial & error ser min fil tillslut ut enligt följande:
1
2
joco02@webdev:/etc/apache2/sites-available$ cd /var/www/html/website/
joco02@webdev:/var/www/html/website$ nano website.wsgi
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python
import sys
import logging
import site
site.addsitedir('/var/www/website/flaskenv/lib/python3.5/site-packages')
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/html/website/")
from test import app as application
Starta sedan om apache och du ska förhoppningsvis få upp din hemsida om du surfar in på http://*serverip*, det var en del svett, blod & tårar innan jag kom såhär långt själv… :) Kommer ytterligare något inlägg om hur vi bygger vidare på applikationen framöver, min egna lilla server rullar fortfarande på: www.jonascollen.se.