Viikko 3

Tehtävänanto: (tummenetut tehty)

Tee viisi vapaavalintaista kohtaa. Säädä vaikeustaso oikeaksi: jos olet ihan alussa ja tämä on haastavaa, tee helpoimmat a b c d i. Jos osaat jo perusteet, tee useampia tai vaikeampia kohtia. Tarkoitus on, että tehtävät tehtyäsi osaat enemmän kuin osasit ennen.
a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.
b) Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit.
c) Tee virhe weppipalvelimella ajettavaan koodiin (esim PHP tai Python), etsi se lokista ja analysoi tuo lokirivi
d) Tee virhe johonkin Apachen asetustiedostoon, etsi ja analysoi tuo rivi. Etsimiseen sopivat esimerkiksi Apachen omat lokit, syslog sekä ‘apache2ctl configtest’.
e) Asenna ja kokeile PhpMyAdmin:a tai jotain muuta valmista weppiliittymää tietokantojen hallinnointiin.
f) Tee palvelimella ajettava weppiohjelma, joka tekee käyttäjälle jonkin yksinkertaisen laskun (esim. painoindeksi BMI)
g) Tee palvelimella ajettava weppiohjelma, joka käyttää tietokantaa. Voit tehdä jonkin yksinkertaisen CRUD-ohjelman, esimerkiksi TODO-listan
h) Tee Apachelle uusi sivu, joka näkyy suoraan palvelimen pääsivulla, mutta jonka sivuja voi muokata normaalin käyttäjän oikeuksilla (name based virtual host, DocumentRoot käyttäjän kotihakemistoon).
i) Kuinka monta eri HTTP Status:ta (200, 404, 500…) saat aiheutettua lokeihin? Selitä, miten aiheutit tilanteet ja analysoi yksi rivi kustakin statuksesta.
j) Asenna LAMP (Linux, Apache, MySQL, PHP). Testaa kunkin komponentin toiminta. Testaa lopuksi kokonaisuus. (Voit aloittaa tilanteesta, jossa Linux-käyttöjärjestelmä on jo asennettu, mutta ei muita (AMP) osia.
k) Kokeile jotain Flaskin uutta ominaisuutta flask-testipalvelimessa. Voit kokeilla esim. muotteja (templates), tietokantaa tai syötteiden ottamista lomakkeilta (forms).
l) Asenna Python Flask + PostgreSQL + Apache mod WSGI. Testaa kunkin komponentin toiminta. Testaa lopuksi kokonaisuus. (vaikea)

http://terokarvinen.com/2018/aikataulu-linux-palvelimet-ict4tn021-3004-ti-alkukevat-2019-5-op#h3

Harjoitusympäristö:

Suoritin harjoitukset 3.2.2019 kotonani, käyttäen Dell Latitude E5440 -kannettavaa tietokonettani, jossa käyttöjärjestelmänä on Xubuntu.

Apachen asennus ja käyttäjien omat kotisivut: (tehtävä a + j alkaa)

Aloitin kirjautumalla Xubuntuun, avasin terminaalin ja sudo apt-get update -komennolla hain uusimmat päivitykset. Sitten lähdin asentamaan maailman suosituinta webbipalvelinta Apachea. Se tapahtui komennolla sudo apt-get install apache2. Asennus tapahtui muutamissa sekunneissa, ja palvelin oli heti toiminnassa. Testasin tämän menemällä Firefox-selaimella osoitteeseen localhost, ja koska näkyviin tuli Apache 2 Ubuntu Default page, tarkoitti se palvelimen olevan käynnissä.

Uuden palvelimen oletussivu. Kuva: Wikipedia

Seuraavaksi muutin echo moikka moi|sudo tee /var/www/html/index.html -komennolla oletussivun muotoon moikka moi.

Palvelimen oletussivun muuttaminen.

Seuraavaksi laitoin palomuurin päälle komennolla sudo ufw enable. Sen jälkeen komennoilla sudo ufw allow 22/tcp ja sudo ufw allow 80/tcp, sallin palomuurista liikenteen porttien 22 ja 80 kautta.

Sitten lähdin tekemään käyttäjille omia kotisivuja. Ensin komennolla sudo a2enmod userdir sallin käyttäjien omien sivujen luomisen, ja systemctl restart apache2 -komennolla käynnistin palvelimen uudelleen, jotta muutokset tulevan voimaan. Tämän jälkeen mkdir public_html -komennolla loin kansion sivuja varten. Lopuksi loin kyseiseen kansioon index.php tiedoston, johon kirjoitin “Jaakko”. Testasin toiminnan menemällä osoitteeseen localhost/~jaakko (käyttäjän nimi on jaakko), ja siellä luki “Jaakko”, joten operaatio oli onnistunut. Huvin ja urheilun vuoksi tein vielä Xubuntuun uuden käyttäjän nimellä “testi”. Kirjauduin sillä sisään, tein public_html -kansion ja index.php -tiedoston, johon kirjoitin “Testikäyttäjän sivut”. Testasin toiminnan menemällä osoitteeseen localhost/~testi, ja koska sivulla luki “Testikäyttäjän sivut”, oli operaatio jälleen onnistunut.


Palvelimen oletussivu ja kahden käyttäjän omat sivut.

Apachen lokitiedostot & HTTP-statukset (tehtävät b & i)

Avasin terminaalissa /var/log/apache2/ -kansiosta less acces.log -komenolla palvelimen sivujen lataustietoja sisältävän lokitiedoston:

Analysoin tässä muutaman rivin:

127.0.0.1 – – [03/Feb/2019:09:08:42 +0200] “GET /~jaakko/ HTTP/1.1” 200 263 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0”

Ensin on palvelimen osoite, sitten päivämäärä ja kellonaika. Sitä seuraa tieto, että kyseessä on GET-pyyntö, jolla kysellään käyttäjän “jaakko” oman kotisivun perään. HTTP-status on 200, eli sivun lataus on onnistunut. Sitä seuraa tietoja käytetystä käyttöjärjestelmästä ja selaimesta.

192.168.1.92 – – [03/Feb/2019:09:10:47 +0200] “GET / HTTP/1.1” 200 293 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36”

Ensin jälleen palvelimen osoite, eri numerot koska tämän yhteyden otin toisella, samassa verkossa olevalla, koneellani. Kellonaikaa seuraa taas tieto GET-pyynnöstä. Lopuksi taas tiedot käyttöjärjestelmästä ja selaimesta, jotka ovat siis eri kuin edellisessä.


192.168.1.92 – – [03/Feb/2019:09:10:50 +0200] “GET /favicon.ico HTTP/1.1” 404 505 “http://192.168.1.186/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36”

Tässä GET-pyynnöllä etsitään favicon-kuvatiedostoa, mutta sitä ei syystä tai toisesta löydy. Seurauksena on HTTP-status 404, joka tarkoittaa että yhteys palvelimeen on saatu, mutta haluttua (tässä tapauksessa favicon.ico-tiedosto) asiaa ei löydy.

PHP:n asennus ja testaaminen (tehtävä j jatk(tehtävä c, f + j jatkuu)

Vuorossa oli PHP:n asennus, joka tapahtui komennolla sudo apt-get install libapache2-mod-php, jonka jälkeen sudo systemctl restart apache2 –komennolla käynnistin palvelimen uudelleen.

Halusin testata PHP-ohjelman tekemistä käyttäjän omalla kotisivulla, ja tämä on oletuksena estetty asetuksissa. Komennolla sudoedit /etc/apache2/mods-available-php7.2.conf avasin asetustiedoston, ja sallin PHP:n käytön. Tämä tapahtui muuttamalla asetustiedostosta kotikansiota koskevat osat kommenteiksi #-merkeillä.

IfModule piti muuttaa kommenteiksi, jotta käyttäjän omilla sivulla saa PHP:n käyttöön.

Testatakseni PHP:n toiminnan kirjoitin alla olevan koodin (yhteenlasku 2+2) index.php -tiedostoon käyttäjän public_html -kansioon:

MariaDB

Viimeisenä osana LAMP:ia varten asennetavana oli tietokanta, eli tässä tapauksessa MariaDB. Asennus tapahtui komennolla sudo apt-get -y install mariadb-client mariadb-server.

Kirjauduin tietokantaan root-käyttäjänä, komennolla sudo mariadb -u root. Sitten loin SQL-komennoilla tietokantaan testitaulun ja siihen dataa.

CREATE DATABASE test
use test;
show tables;
+----------------+
| Tables_in_test |
+----------------+
| tests |
+----------------+
1 row in set (0.01 sec)
create table tests (id int auto_increment primary key, name varchar(1024));
insert into tests(name) VALUES ("database test");
Testitietokannan luominen MariaDB:llä.

Lopuksi vielä komennolla grant all on test.* to testuser identified by ‘123test456pass789word’;, loin testikäyttäjätunnuksen tietokannan käyttämistä varten, ja annoin sille kaikki oikeudet luomaani test-tietokantaan.

LAMP toiminnassa (tehtävä j)

Kun viimeinenkin osa oli asennettu, oli aika testata koko putken toimivuus. Tero Karvisen ohjeita noudattaen lähdin tekemään websivua, jolle tulostuisi äsken tekemäni tietokannan sisältö.

Kopioin Karvisen esimerkki PHP-koodin, ja vaihdoin siihen luomani tietokannan testikäyttäjätunnuksen ja sen salasanan. Testasin sivuston toimintaa, mutta sivulla näkyi ainoastaan valkoinen tausta. Komennolla tail /var/log/apache2/error.log avasin Apachen virhelokitiedoston, josta löytyi seuraava rivi:

[Sun Feb 03 16:42:22.249929 2019] [php7:error] [pid 14996] [client 127.0.0.1:52330] PHP Fatal error:  Uncaught PDOException: could not find driver in /home/jaakko/public_html/index.php:18\nStack trace:\n#0 /home/jaakko/public_html/index.php(18): PDO->__construct('mysql:host=loca…', 'testuser', '123test456pass7…')\n#1 {main}\n  thrown in /home/jaakko/public_html/index.php on line 18

Teksti “could not find driver” oli vahva vihje, että jotain oli jäänyt asentamatta. Hetken ohjeita luetuani, tajusin puuttuvan paketin olevan php-mysql, jonka asensin komennolla sudo apt-get install php-mysql. Käynnistin taas palvelimen uudelleen komennolla sudo systemctl restart apache2, ja latasin websivun uudelleen. Nyt sinne ilmestyi tekstinä tietokantaan tallentamani rivi, eli koko LAMP oli nyt toiminnassa:

Webbisivulle tulostui PHP-skriptin avulla tietokannan sisältämä rivi. LAMP toimii.

PHPMYADMIN (tehtävä e)

Lopuksi asensin vielä PhpMyAdmin-lisäosan. Se on selaimen kautta käytettävä tietokantojen hallintatyökalu. Asennus tapahtui komennolla sudo apt-get install -y phpmyadmin. Asennus kysyi mihin tietokantaan haluan yhdistää, ja valitsin Apache2:n. Lisäksi asennus pyysi asettamaan uuden salasanan, jolla tietokantaan kirjaudutaan sisään.

Testasin toiminnan lisäämällä luomaani tietokantaan “tests” uuden rivin, ja tarkistin että se näkyy selaimessa.

PhpMyAdmin hallintatyökalulla voi hallita tietokantoja graafisella käyttöliittymällä.

Lähteet:

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

Pohjana Tero Karvinen 2012: Linux kurssi, http://terokarvinen.com

Advertisements

One thought on “Viikko 3

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s