Viikko 3 harjoitus 3 – Apache-weppipalvelin ja LAMP kehitysalusta

Tämän viikon harjoituksessa tutustutaan Apache-weppipalvelimeen ja LAMP kehitysalustaan. Harjoituksessa käyttämäni kone on MSI:n valmistama GX 640-mallin kannettava tietokone. Koneeseen on asennettu käyttöjärjestelmäksi Linux Xubuntu 16.04.3 LTS. Käytän kuitenkin koneessa aiemmassa harjoituksessa luomaani 16.04.3 amd64-livetikkua. Voit saada oman Xubuntu 16.04.3 LTS versiosi seuraavasta linkistä.

Aloitin harjoituksien tekemisen maanantaina 5.2.2018 klo 02.00. Annan tämän julkaisun aikana kellonaikoja tehtävien välissä, jotta saatte kuvan kuinka kauan tämän harjoituksen suorittamiseen menee aikaa.

Tämän harjoituksen toimeksianto löytyy kurssini opettajan Tero Karvisen nettisivuilta.

Tehtävät ovat seuraavanlaiset:

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.Tee jokin seuraavista
(yksi riittää, useampi vapaaehtoisena lisätehtävänä):

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)

Valitsin tehtäviksi kohdat a, b, c, f ja i.

Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla. (H3 kohta a)

klo 02.10

Aloitetaan harjoitus avaamalla Terminal Emulator:

käynnistävalikko

Työpöydän vasemmasta yläreunasta klikkaamme Xubuntu-logoa ja avautuvasta valikosta valitsemme Terminal Emulatorin. Tämän jälkeen syötämme terminaaliin seuraavan komennon:

sudo apt-get update

Tämän jälkeen pääsemme asentamaan Apachen. Syötämme terminaalin komentoriville seuraavan komennon.

sudo apt-get install -y apache2

Asennuksen jälkeen avaamme nettiselaimen komennolla

firefox “http://localhost/”

Jos selaimessa avautuu seuraava sivu olemme onnistuneet asentamaan Apache2-palvelimen

oletussivu

Jotta palvelimen aloitussivu ei näytä oletussivulta voimme muokata sen näyttämään vaikka tässä tilanteessa Hello World! tekstiä. Tämä onnistuu seuraavalla komennolla:

sudoedit /var/www/html/index.html

Kun olemme saaneet auki oletussivun html tiedoston poistamme kaiken alkuperäisen tekstin painamalla CTRL+K niin kauan että kaikki teksti on poissa ja korvaamme sen
seuraavalla perus html-pohjalla.

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>Hello World!</title>
</head>
<body>

<h1>Hello World!</h1>
<p></p>

</body>
</html>

Tallennamme tämän tiedoston painamalla CTRL+X, jonka jälkeen painamme y-näppäintä ja enteriä.

Tämän jälkeen siirrymme testaamaan, että toimiiko testisivu. Käytämme tämän testaamiseen komentoa.

firefox “http://localhost/”

Jonka jälkeen pitäisi avautua seuraavanlainen sivu selaimessa.

oletussivu2

Seuraavaksi meidän tarvitsee sallia kotihakemiston luominen koneella. Jotta tämä onnistuu syötämme terminaalin komentoriville seuraavan komennon.

sudo a2enmod userdir

Tämän jälkeen käynnistämme Apache2 palvelimen uudestaan seuraavalla komennolla.

sudo systemctl restart apache2.service

Kun olemme saaneet Apache2 palvelimen uudelleenkäynnistettyä, luomme kansion ”public_html” kotihakemiston alle seuraavalla komennolla.

mkdir public_html

Tämän jälkeen tarkistamme kansion olemassa olon komennolla ls. Kansion löydyttyä siirrymme luomaan sisältöä tuonne kansioon. Ensin siirrymme juuri luodun
kansion sisälle komennolla.

cd public_html

Tämän jälkeen syötämme terminaalin komentoriville seuraavan komennon.

nano index.html

Tähän tiedostoon syötämme seuraavanlaisen perus html-pohjan.

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>Testi</title>
</head>
<body>

<h1>Hei! Tervetuloa testisivustolle.</h1>
<p>Tämä on testi.</p>

</body>
</html>

kuva tekstitiedostosta

Tallentaaksemme tämän tiedoston painamme CTRL+X, jonka jälkeen painamme y-näppäintä ja enteriä.

Tämän jälkeen siirrymme testaamaan, että toimiiko kotihakemisto. Käytämme tämän testaamiseen komentoa.

firefox “http://localhost/~xubuntu/”

Jos nettiselaimessa avautuu seuraavanlainen näkymä, kotihakemiston luonti on onnistunut.

kotihakemisto

Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit. (H3 kohta b)

klo 02.25

Seuraava harjoitus aloitetaan avaamalla Terminal Emulator:

käynnistävalikko

Työpöydän vasemmasta yläreunasta klikkaamme Xubuntu-logoa ja avautuvasta valikosta valitsemme Terminal Emulatorin.

Terminal Emulatorin aukaistuamme syötämme sinne seuraavan komennon.

tail -f /var/log/apache2/access.log

Tällä komennolla pääsemme seuraamaan Apache2-palvelimen käyttöä access.log lokitiedoston kautta. Kun loki on avattu siirrymme nettiselaimella palvelimen kotisivulle. Syötämme osoiteriville osoitteen ”localhost” ja painamme enteriä. Lokiin tuli seuraava onnistunut tapahtuma kun olin avannut palvelimen kotisivun:

onnistunut.png

127.0.0.1 – – [05/Feb/2018:00:29:40 +0000] “GET /~xubuntu HTTP/1.1” 200 492 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0”

  • Ensin riville tulostuu Loopback ip-osoite
  • Seuraavaksi on kaksi viivaa, jotka merkitsevät sitä, että pyydettyä tietoa ei ole saatavilla. Viivojen kohdilla olisivat asiakasohjelman RFC 1413-identiteetti,
    sekä tapahtumaa pyytäneen käyttäjän userid. RFC1413-identiteettiä Apache ei yritä määrätä ellei IdentityCheck ole asetettu päälle. Pyydetty tiedosto ei ole salasanasuojattu, joten userid-kohtakin on tyhjä.
  • Tämän jälkeen on lokitapahtuman aika (5. helmikuuta 2018, kello 00:29:40, GMT+2:00 -aikavyöhyke)
  • Seuraavaksi ”GET / HTTP/1.1” 200 493 ”-” GET on asiakasohjelman (selaimen) metodi tiedon pyytämiselle. Pyydetty data on kotisivu, joten se on merkkitty vain ”/”.
    Pyynnössä käytettiin HTTP/1.1 -protokollaa. Luku 200 (OK 200) tarkoittaa onnistunutta tapahtumaa, ja luku 492 asiakasohjelmalle palautetun tiedon koko.

Latasin saman kotisivun uudelleen ja se antoi lokiin seuraavan epäonnistuneen tapahtuman:

epäonnistunut.png

127.0.0.1 – – [05/Feb/2018:00:30:49 +0000] “GET /~xubuntu/testi HTTP/1.1” 404 504 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0”

  • Ensin riville tulostuu Loopback ip-osoite
  • Seuraavaksi on kaksi viivaa, jotka merkitsevät sitä, että pyydettyä tietoa ei ole saatavilla. Viivojen kohdilla olisivat asiakasohjelman RFC 1413-identiteetti,
    sekä tapahtumaa pyytäneen käyttäjän userid. RFC1413-identiteettiä Apache ei yritä määrätä ellei IdentityCheck ole asetettu päälle. Pyydetty tiedosto ei ole salasanasuojattu, joten userid-kohtakin on tyhjä.
  • Tämän jälkeen on lokitapahtuman aika (5. helmikuuta 2018, kello 00:30:49, GMT+2:00 -aikavyöhyke)
  • Seuraavaksi ”GET / HTTP/1.1” 404 504 ”-” GET on asiakasohjelman (selaimen) metodi tiedon pyytämiselle. Pyydetty data on kotisivu, joten se on merkkitty vain ”/”.
    Pyynnössä käytettiin HTTP/1.1 -protokollaa. Luku 404 (Not found 404) tarkoittaa epäonnistunutta tapahtumaa, ja luku 504 asiakasohjelmalle palautetun tiedon koko.

Tee virhe weppipalvelimella ajettavaan koodiin (esim PHP tai Python), etsi se lokista ja analysoi tuo lokirivi (H3 kohta c)

klo 02.55

Seuraava harjoitus aloitetaan avaamalla Terminal Emulator:

käynnistävalikko

Työpöydän vasemmasta yläreunasta klikkaamme Xubuntu-logoa ja avautuvasta valikosta valitsemme Terminal Emulatorin. Tämän jälkeen syötämme terminaaliin seuraavan komennon:

sudo apt-get update

Jotta voimme käyttää aiemmin luomassamme palvelimen kotihakemiston html-pohjassa PHP-koodia joudumme asentamaan Apache2-palvelimeen PHP-kirjaston. Se onnistuu seuraavalla komennolla.

sudo apt-get install -y libapache2-mod-php

Kirjaston asennettua käynnistämme Apache2-palvelimen uudelleen komennolla:

sudo systemctl restart apache2.service

Tämän jälkeen muokkaamme juuri lisäämämme kirjaston php-asetustiedostoa lisäämällä #-kommenttimerkit asetustiedostossa määriteltyihin kohtiin, jotta saamme php:n käytön päälle public_html kansiossa. Jotta pääsemme muokkaamaan asetustiedostoa käytämme seuraavaa komentoa:

sudoedit /etc/apache2/mods-available/php7.0.conf

asetustiedosto

Asetustiedoston muutoksien jälkeen käynnistämme Apache2-palvelimen uudelleen komennolla:

sudo systemctl restart apache2.service

Tämän jälkeen siirrymme muokkaamaan aiemmin luomaamme index.html tiedostoa ja lisäämme sinne php-koodia. Aluksi siirrymme public_html kansioon seuraavalla komennolla:

cd public_html

Tämän jälkeen muutamme index.html tiedoston päätteen .php päätteeksi seuraavalla komennolla.

mv index.html index.php

Seuraavaksi avaamme index.php tiedoston seuravaalla komennolla.

nano index.php

Lisäämme aiemmin luomaamme tiedostoon seuraavanlaisen php-koodin.

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>Testi</title>
</head>
<body>

<h1>Hei! Tervetuloa testisivustolle.</h1>
<p>Tämä on testi.</p>
<p>Matematiikkaa:</p>
<?php print(100*100); ?>

</body>
</html>

Tallentaaksemme tämän tiedoston painamme CTRL+X, jonka jälkeen painamme y-näppäintä ja enteriä.

Tämän jälkeen siirrymme testaamaan, että toimiiko kotihakemisto. Käytämme tämän testaamiseen komentoa.

firefox “http://localhost/~xubuntu/”

Jos nettiselaimessa avautuu seuraavanlainen näkymä, kotihakemiston luonti on onnistunut.

oletussivu3

Virheen lisääminen php-koodiin

Vaihdoin php-koodinpätkässä i- ja r-kirjaimen paikkoja print-komennossa. Koodi näytti lisäyksen jälkeen seuraavalta:

<?php pirnt(100*100); ?>

Tallennettuani muutokset painamalla CTRL+X, jonka jälkeen painamme y-näppäintä ja enteriä. Avasin kotihakemiston sivun komennolla.

firefox “http://localhost/~xubuntu/”

Avasin samalla Apachen virhelokitiedoston toiseen terminaaliin seuraavalla komennolla.

tail -f /var/log/apache2/error.log

Lokitiedostossa näkyy seuraava tapahtuma:

phpkoodi

[Mon Feb 05 01:02:31.693591 2018] [:error] [pid 20808] [client 127.0.0.1:42616] PHP Fatal error: Uncaught Error: Call to undefined function pirnt() in /home/xubuntu/public_html/index.php:12\nStack trace:\n#0 {main}\n thrown in /home/xubuntu/public_html/index.php on line 12

Ensin tulee virheen tapahtuma-aika, virheilmoitus, pid 20808 = prosessi id, asiakasohjelman ip-osoite ja porttinumero, virheen status: määrittelemätön funktio
pirnt index.php-tiedostossa rivillä 12. Tämä taas johtuu siitä, että ”pirnt” ei ole php:ssa komento.

Tee palvelimella ajettava weppiohjelma, joka tekee käyttäjälle jonkin yksinkertaisen laskun (H3 kohta f)

klo 03.15

Seuraava harjoitus aloitetaan avaamalla Terminal Emulator:

käynnistävalikko

Työpöydän vasemmasta yläreunasta klikkaamme Xubuntu-logoa ja avautuvasta valikosta valitsemme Terminal Emulatorin.

Terminal Emulatorin aukaistuamme syötämme sinne seuraavan komennon.

cd public_html

Tällä komennolla siirrymme kotihakemistoon. Siellä luomme uuden html tiedoston komennolla.

nano bmi.html

Käytin ohjelmoinnin orientaatiokurssilla tekemäni javascriptillä toimivaa painoindeksilaskuria joka näyttää suurinpiirtein tältä.

bmi.png

Tallennettuani muutokset painamalla CTRL+X, jonka jälkeen painamme y-näppäintä ja enteriä. Avasin kotihakemistossa olevan bmi.html tiedoston komennolla.

firefox “http://localhost/~xubuntu/bmi.html/”

Avautui seuraavanlainen sivu

bmi_web.png

Syötin laskuriin omat mittani jotta sain testattua toimiiko laskuri.

Kuinka monta eri HTTP Status:ta (200, 404, 500…) saat aiheutettua lokeihin? Selitä, miten aiheutit tilanteet ja analysoi yksi rivi kustakin statuksesta. (H3 kohta i)

klo 03.20

analysointi

Onnistuin saamaan seuraavat 3 erilaista HTTP Statusta:

127.0.0.1 – – [05/Feb/2018:01:02:31 +0000] “GET /~xubuntu/ HTTP/1.1” 500 365 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0”

  • Ensin riville tulostuu Loopback ip-osoite
  • Seuraavaksi on kaksi viivaa, jotka merkitsevät sitä, että pyydettyä tietoa ei ole saatavilla. Viivojen kohdilla olisivat asiakasohjelman RFC 1413-identiteetti,
    sekä tapahtumaa pyytäneen käyttäjän userid. RFC1413-identiteettiä Apache ei yritä määrätä ellei IdentityCheck ole asetettu päälle. Pyydetty tiedosto ei ole salasanasuojattu,
    joten userid-kohtakin on tyhjä.
  • Tämän jälkeen on lokitapahtuman aika (5. helmikuuta 2018, kello 01:02:31, GMT+2:00 -aikavyöhyke)
  • Seuraavaksi ”GET / HTTP/1.1” 404 504 ”-” GET on asiakasohjelman (selaimen) metodi tiedon pyytämiselle. Pyydetty data on kotisivu, joten se on merkkitty vain ”/”.
    Pyynnössä käytettiin HTTP/1.1 -protokollaa. Luku 500 (Internal Error 500) tarkoittaa epäonnistunutta tapahtumaa, ja luku 365 asiakasohjelmalle palautetun tiedon koko.

Tämä ilmoitus johtui PHP-koodin virheestä, joka aiheutti palvelimelle sisäisen virheen.

127.0.0.1 – – [05/Feb/2018:01:21:02 +0000] “GET /~xubuntu/ HTTP/1.1” 200 492 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0”

  • Ensin riville tulostuu Loopback ip-osoite
  • Seuraavaksi on kaksi viivaa, jotka merkitsevät sitä, että pyydettyä tietoa ei ole saatavilla. Viivojen kohdilla olisivat asiakasohjelman RFC 1413-identiteetti,
    sekä tapahtumaa pyytäneen käyttäjän userid. RFC1413-identiteettiä Apache ei yritä määrätä ellei IdentityCheck ole asetettu päälle. Pyydetty tiedosto ei ole salasanasuojattu, joten userid-kohtakin on tyhjä.
  • Tämän jälkeen on lokitapahtuman aika (5. helmikuuta 2018, kello 01:21:02, GMT+2:00 -aikavyöhyke)
  • Seuraavaksi ”GET / HTTP/1.1” 200 493 ”-” GET on asiakasohjelman (selaimen) metodi tiedon pyytämiselle. Pyydetty data on kotisivu, joten se on merkkitty vain ”/”.
    Pyynnössä käytettiin HTTP/1.1 -protokollaa. Luku 200 (OK 200) tarkoittaa onnistunutta tapahtumaa, ja luku 492 asiakasohjelmalle palautetun tiedon koko.

Tämä ilmoitus tuli kun latasin kotihakemiston ja kaikki onnistui hyvin.

127.0.0.1 – – [05/Feb/2018:01:21:09 +0000] “GET /~xubunt HTTP/1.1” 404 504 “-” “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0”

  • Ensin riville tulostuu Loopback ip-osoite
  • Seuraavaksi on kaksi viivaa, jotka merkitsevät sitä, että pyydettyä tietoa ei ole saatavilla. Viivojen kohdilla olisivat asiakasohjelman RFC 1413-identiteetti,
    sekä tapahtumaa pyytäneen käyttäjän userid. RFC1413-identiteettiä Apache ei yritä määrätä ellei IdentityCheck ole asetettu päälle. Pyydetty tiedosto ei ole salasanasuojattu, joten userid-kohtakin on tyhjä.
  • Tämän jälkeen on lokitapahtuman aika (5. helmikuuta 2018, kello 01:21:09, GMT+2:00 -aikavyöhyke)
  • Seuraavaksi ”GET / HTTP/1.1” 404 504 ”-” GET on asiakasohjelman (selaimen) metodi tiedon pyytämiselle. Pyydetty data on kotisivu, joten se on merkkitty vain ”/”.
    Pyynnössä käytettiin HTTP/1.1 -protokollaa. Luku 404 (Not found 404) tarkoittaa epäonnistunutta tapahtumaa, ja luku 497 asiakasohjelmalle palautetun tiedon koko.

Tämä ilmoitus tuli kun yritin ladata kotihakemistoa puutteellisella osoitteella, jolloin se ei tietenkään onnistunut.

Lopetin harjoituksen tekemisen 5.2.2018 klo 03.30 eli harjoituksen tekemiseen meni noin 1,5 tuntia.

Lähteet:

Tero Karvisen nettisivut : http://terokarvinen.com/2017/aikataulu-%E2%80%93-linux-palvelimet-ict4tn021-7-ti-ja-6-to-alkukevat-2018-5-op

 

Mainokset

Yksi vastaus artikkeliiin “Viikko 3 harjoitus 3 – Apache-weppipalvelin ja LAMP kehitysalusta

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

w

Muodostetaan yhteyttä palveluun %s