Vanha arvioitava labraharjoitus - Viikkotehtävä 7
TLDR (Too Long Didn’t Read)
Tehtävässä ratkaisin Pythonin suorittamista userdirin kautta lukuunottamatta vanhan arvioitavan Labraharjoituksen.
Tehtävän valinta
Arvioitavaksi labraharjoitukseksi valitsin tämän tehtävän.
Asenna linux ja suojaa kone tulimuurilla
Ensimmäisenä vuorossa oli linuxin asentaminen. Tehtävää varten asensin Debian 10 virtuaalisena virtualboxin avulla. Asennusohjeet löytää täältä.
Ohjeissa mainittiin, että pitäisi avata portti etähallintaa varten (22), mutta tässä tehtävässä en käytä etähallintaa. Portti saa siis jäädä kiinni.
Tulimuurin saa käyttöönsä kahdella komennolla:
$ sudo apt-get -y install ufw
$ sudo ufw enable
Asenna LAMP
Toisena vuorossa oli asentaa LAMP (Linux Apache MariaDB PHP) ja testata sen toimivuus. Tehtävää varten käytän Postgresql tietokantana ja Pythonia PHP:n sijaan.
Apache
Apachen asennus ja käyttöönotto tapahtuu kahdella komennolla.
$ sudo apt-get -y install apache2
$ sudo systemctl restart apache2
Localhost osoitteesta voi tarkistaa lähtikö apache toimimaan.
Postgresql
Tietokanta-ajuriksi valitsin Postgresql. Postgresin käyttöönotto on tavattoman helppoa
Kolme komentoa riittää.
Ainakin melkein. Asennuksen jälkeen täytyy Debianilla vielä käynnistää postgres sudo systemctl start postgresql
komennolla.
Eli:
$ sudo apt-get -y install postgresql
$ sudo systemctl start postgresql
$ sudo -u postgres createdb $(WHOAMI)
$ sudo -u postgres createuser $(WHOAMI)
$ psql
komennolla kirjaudutaan postgresiin sisään. Näin tarkistamme toimiiko asennuksemme.
Hyvin toimii!
Python
Python on valmiiksi asennettuna eikä sitä tarvitse erikseen hakea mistään. Python tulkin tämän hetken viimeisimmän version
saa auki komentoriville komennolla $ python3
.
Kuormitustietojen kerääminen
Kurssilla ei käyty läpi, kuinka kerätä kuormitustietoja. Asensin atop nimisen ohjelman ja käynnistin sen toiseen komentorivi-ikkunaan
komennolla atopsar -c 10
. Tällöin atop kerää kuormitustietoja 10sec välein siihen asti, kunnes lopetan komennon ctrl+c yhdistelmällä.
Sorkka ja Rauta Oy:n CRM
Seuraavaksi vuorossa oli luoda asiakastietokanta, joka sisältää seuraavat asiakkaat:
Kulta ja Kaivos Ky
Piilosana Ry
MetalliMake
Sekä tehdä PHP ohjelma joka näyttää asiakastietueet. PHP osion korvaan Pythonilla.
Tietueet tulee olla nähtävissä sorkkacrm.example.com osoitteesta.
Tietokannan luominen
Kirjauduin postgresiin sisään $ psql
komennolla ja loin taulun tietokantaan.
Seuraavaksi syötin asiakkaiden tiedot tietokantaan
Python ohjelma
Tästä osiosta tulee hieman pidempi. Seuraavaksi asensin Python Flaskin jolla luomme tietokantaa lukevan sovelluksen.
Paketit jotka asensin tätä kohtaa varten:
- python3-flask
- python3-flask-sqlalchemy
- python3-psycopg2 - Postgresql adapteri pythonia varten
Seuraavaksi loin kotihakemistooni sorkka nimisen kansion jonka sisälle tein testi.py tiedoston. testi.py tiedoston sisältö näytti seuraavalta:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
app.run(debug=True)
Tämän avulla testaamme flask asennuksen toimivuuden.
Tietokantayhteys
Seuraavaksi muodostin yhteyden tietokantaan testi.py sovelluksella. Testi.py tiedostoni sisältöä täytyi siis muuttaa:
Loin myös sorkka kansion sisälle templates kansion, johon laitoin index.html tiedoston seuraavalla sisällöllä:
Modwsgi
Seuraavaksi edellisessä kohdassa luomani ohjelma täytyi saada toimimaan apachen kanssa.
Tätä varten seurasin Teron ohjeita enemmän tai vähemmän tarkkaan.
Aloitin asentamalla apacheen lisäosan, jotta se voi toimia mod_wsgin kanssa
$ sudo apt-get -y install libapache2-mod-wsgi-py3
$ sudo systemctl restart apache2
Tämän jälkeen loin sorkkacrm.conf tiedoston apachen asetuksiin, otin sen käyttöön ja poistin vanhan 000-default.conf käytöstä.
Loin myös public_wsgi kansion, jonka sisälle siirsin aikaisemmin luomani sorkka kansion.
/etc/apache2/sites-available/sorkkacrm.conf sisältö
sorkka.wsgi sisältö
/etc/hosts sisältö
sorkkacrm.example.com Sivu
Rosvoja porteilla
Tässä osiossa tuli etsiä merkkejä murtautumisyrityksistä omalta koneelta. Nämä tiedot löytyvät /var/log/auth.log tiedostosta.
Koska kyseessä on virtuaalikone eikä julkisessa internetissä oleva palvelin lokitiedostosta ei löytynyt merkkejä tunkeutumisesta.
Sorkan sivut
Osiossa täytyi luoda staattinen HTML5 weppisivu, jonka titlenä sekä otsikkona on “Sorkka ja Rauta Oy”. Sivu tuli olla tarkasteltavissa rauta.example.com osoitteesta.
Tämä osio on hyvin samanlainen kuin edellinen. Tästä ohjeesta näkee, miten uusi rauta.conf tiedosto eroaa äskeisestä wsgi asennuksesta. Loin myös kansion html public_wsgi kansion sisään
/etc/apache2/sites-available/rauta.conf Sisältö
/etc/hosts Sisältö
~/public_wsgi/html/index.html Sisältö
rauta.example.com Sivu
Einarin esimerkki
Einari Vähä-aho ryhtyy koodaamaan ja hänelle täytyy luoda käyttäjä sekä esimerkkikotisivu johon hän voi koodata pyhtonilla.
Sivu tulee olla näkyvissä localhost/~einari
osoitteessa.
Aluksi luodaan Einarille käyttäjä:
$ sudo adduser einari
Yritin etsiä ohjeita, kuinka apachen userdir modin (a2enmod userdir) joka on vastuussa käyttäjäkohtaisista kotisivuista saisi toimimaan modwsgin kanssa tuloksetta. Einari kuitenkin halusi todella kovasti päästä luomaan sisältöä pythonilla, joten järjestin hänelle seuraavaksi parhaan vaihtoehdon. Samanlainen modwsgi järjestely kuin sorkkacrm oli tehty, mutta Einarin tiedoilla.
Einari.conf Sisältö
/home/einari/public_wsgi/ Sisältö
/home/einari/public_wsgi/templates/einari.html Sisältö
localhost/einari Sivu
Kuormituksen tarkastus
Aloitin kuormituksen seurannan kello 16:40 ja kaikkine taukoineen lopetin tehtävän 20:10.
Suurin mihin näin tulosteesta virtuaalikoneen suorittimen kuormituksen nousevan oli 31% hetkellisesti.