https://terokarvinen.com/2020/linux-palvelimet-2021-alkukevat-kurssi-ict4tn021-3014/
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’).
Tehty https://terokarvinen.com/2020/deploy-python-flask-to-production/ ohjeen mukaisesti osittain muokattuna.
Tein asennuksen droplet002.dennisgustafsson.net palvelimelle jossa on jos asennettuna Apache2.
$ curl -s localhost
Nothing to see heree
Aloitin luomalla uuden käyttäjän ja sille salasanan.
$ sudo adduser riverwsgi
Adding user `riverwsgi' ...
Adding new group `riverwsgi' (1002) ...
Adding new user `riverwsgi' (1002) with group `riverwsgi' ...
Creating home directory `/home/riverwsgi' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for riverwsgi
Enter the new value, or press ENTER for the default
Full Name []: River WSGI
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
Ja tämän jälkeen estin käyttäjän kirjautumisen palvelimelle.
sudo usermod --lock riverwsgi
Lisäsin myös itseni käyttäjän ryhmään.
sudo adduser $(whoami) riverwsgi
Adding user `dennis' to group `riverwsgi' ...
Adding user dennis to group riverwsgi
Done.
Lisätään hakemisto verkkosivuille ja lisätään oikeudet valmiiksi
sudo mkdir /home/riverwsgi/public_wsgi
Muokataan hakemiston oikeuksia niin että kaikilla riverwsgi ryhmän jäsenille on kansion muokkaus oikeudet
sudo chmod g=rwxs /home/riverwsgi/public_wsgi
Luodaan uusi Named based virtual host river.dennisgustafsson.net ensin lisäsin osoitteen DNS tietoihin.
Tämän jälkeen tein palvelimella tarvittavat muutokset.
sudoedit /etc/apache2/sites-available/riverwsgi.conf
Tämän jälkeen vielä aktivoin uuden virtuaalisen sivuston ja poistin oletusasetukset käytöstä
$ sudo a2ensite riverwsgi.conf
Enabling site riverwsgi.
To activate the new configuration, you need to run:
systemctl reload apache2
$ sudo a2dissite 000-default.conf
Tämä tosin antoi virhe ilmoituksen kun WSGI moduuli puuttuu.
Eli WSGI moduliin asennus seuraavaksi.
$ sudo apt-get -y install libapache2-mod-wsgi-py3
$ sudo systemctl restart apache2
$ sudo systemctl restart apache2
dennis@droplet002:~$ sudo apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Ja palvelin vastaakin jo osoitteessa http://river.dennisgustafsson.net
Seuraavaksi luodaankin itse wsgi tiedosto
$ sudo nano /home/riverwsgi/public_wsgi/river.wsgi
Sitten pitää vielä luoda itse ”hello” sovellus
$ sudo nano /home/riverwsgi/public_wsgi/hello.py
Lopputulos päättyy virheeseen…
[Sun Mar 14 18:31:18.134225 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] mod_wsgi (pid=1950): Failed to exec Python script file ’/home/riverwsgi/public_wsgi/river.wsgi’.
[Sun Mar 14 18:31:18.134329 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] mod_wsgi (pid=1950): Exception occurred processing WSGI script ’/home/riverwsgi/public_wsgi/river.wsgi’.
[Sun Mar 14 18:31:18.134416 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] Traceback (most recent call last):
[Sun Mar 14 18:31:18.134444 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] File ”/home/riverwsgi/public_wsgi/river.wsgi”, line 5, in
[Sun Mar 14 18:31:18.134450 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] from hello import app as application
[Sun Mar 14 18:31:18.134457 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] File ”/home/riverwsgi/public_wsgi/hello.py”, line 1, in
[Sun Mar 14 18:31:18.134462 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] from flask import Flask
[Sun Mar 14 18:31:18.134479 2021] [wsgi:error] [pid 1950:tid 140443863582464] [remote 84.251.88.81:58062] ModuleNotFoundError: No module named ’flask’
Vertailu toimivan paikallisen virtuaalikoneen ja ei toimivan pilvessä olevan välissä löytyi pitkään etsimisen ja testailun jälkeen ero. Paikaillisesti oli asennettu python3-flask kun taas pilvessä oli jostain syystä python-plask.
Komento jolla asennetut sovellukset sai selville on,
apt list --installed
Ensin komento
sudo apt-get autoremove python-flask
Jonka ajon jälkeen komento
sudo apt-get -y install python3-flask
ja varmuuden vuoksi vielä
sudo systemctl restart apache2
Tämän jälkeen asennus toimi.