Vanha arvioitava labraharjoitus

Vanha arvioitava labraharjoitus - Viikkotehtävä 7

TLDR (Too Long Didn’t Read)

Tehtävänanto

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

UFW enabled

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.

Kurlattu localhost

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.

PSQL

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.

Python

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

Atopin pikaopas

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.

Taulun luonti

Seuraavaksi syötin asiakkaiden tiedot tietokantaan

Asiakkaiden syöttö

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.

Flask running commandline

Working Flask

Tietokantayhteys

Seuraavaksi muodostin yhteyden tietokantaan testi.py sovelluksella. Testi.py tiedostoni sisältöä täytyi siis muuttaa:

testi.py sisältö

Loin myös sorkka kansion sisälle templates kansion, johon laitoin index.html tiedoston seuraavalla sisällöllä:

indexhtml

tietokannan tiedot näkyviin

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ö

apacheconf

sorkka.wsgi sisältö

sorkkawsgi

/etc/hosts sisältö

hosts

sorkkacrm.example.com Sivu

sorkkaexample

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ö

rauta.conf

/etc/hosts Sisältö

rautahosts

~/public_wsgi/html/index.html Sisältö

index.html

rauta.example.com Sivu

rauta.example.com

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

einarin luonti

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ö

einari.conf

/home/einari/public_wsgi/ Sisältö

einariwsgi

/home/einari/public_wsgi/templates/einari.html Sisältö

einarihtml

localhost/einari Sivu

einarisivu

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.

Linkkejä

Kurssin materiaali

Python flask documentaatio