Linux palvelimet – LAMP (Linux, Apache, MySQL, PHP)

Tehtävänanto:

h3.
– Asenna LAMP (Linux, Apache, MySQL, PHP). Testaa kunkin komponentin toiminta. (Voit aloittaa tilanteesta, jossa Linux-käyttöjärjestelmä on jo asennettu, mutta ei muita (AMP) osia.
– 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ä):
– Tee virhe PHP-koodiin, etsi se lokista ja analysoi tuo lokirivi
– Tee virhe johonkin Apachen asetustiedostoon, etsi se lokista (Apachen omasta tai syslog:ista), ja analysoi tuo rivi.
– Asenna ja kokeile PhpMyAdmin:a
– Tee PHP-ohjelma, joka tekee käyttäjälle jonkin yksinkertaisen laskun (esim. painoindeksi BMI)
– Tee PHP-ohjelma, joka käyttää tietokantaa. Voit tehdä jonkin yksinkertaisen CRUD-ohjelman, esimerkiksi TODO-listan
– 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).
– Kuinka monta eri HTTP Status:ta (200, 404, 500…) saat aiheutettua lokeihin? Selitä, miten aiheutit tilanteet ja analysoi yksi rivi kustakin statuksesta.
Tehtävänannon lähde: http://terokarvinen.com/2016/aikataulu-linux-palvelimet-alkusyksy-2016

Harjoituksessa käytetty laitteisto:

  • 16GB Kingston DataTraveler 100 G3 USB 3.0 muistitikku
  • Tietokone (ga-b85m-d3h, E3-1230 V3, 8GB ddr3 1600MHz, r9 280x)
  • Oheishärpäkkeet

Alustavat valmistelut:

Seuraavat toimet suoritan aina, kun alan tekemään linux-harjoitusten eri osioita.
Boottasin Xubuntu-livetikulle valitsemalla USB-muistitikun käynnistyksen yhteydessä bootattavaksi levyksi.  Kun kysyttiin haluanko testata Xubuntua vaiko asentaa sen, valitsin vaihtoehdon “Try Xubuntu without installing“. Lyhyen latauksen päästä pääsin työpöydälle.
Yhdistin heti kotini langattomaan verkkoon työpöydän oikeasta yläkulmasta sekä muutin näppäimmistön layoutin suomiversioksi. Tämä onnistui asetukset -> näppäimmistö -> layout -> täppä pois “use system defaults”, jonka jälkeen alhaalta “add”-painikkeesta lisätään suomi näppäimmistön kieleksi. Sitten oikealla olevista nuolista siirretään Finnish-vaihtoehto English-vaihtoehdon yläpuolelle, ja ääkköset pelittää.
Avasin terminaalin, johon syötin heti ensimmäisenä komennon “$ sudo apt-get update“. Kyseinen komento päivittää pakettivarastot, ja se kannattaa suorittaa aina ennen kuin hyödyntää paketinhallintaa mihinkään.

Apachen asennus:

Alustavien toimenpiteiden jälkeen, aloitin harjoituksen tekemisen maanantaina 12. syyskuuta kello 13.55. Avasin terminaalin, johon kirjoitin komennon “$ sudo apt-get install apache2“. Kun kysyttiin halaunko jatkaa latausta, vastasin “yes”.
Seuraavaksi tarkastelin oman webbiserverini default-sivua. Tämä onnistui syöttämällä komentoriville komennon “$ firefox “http://localhost“. Komento avasi seuraavan näköisen aloitussivun Firefox-selaimeeni:
Apache2 Ubuntu Default Page.png
Nyt minun täytyi sallia userdir-moduulin käyttöönotto. Syötin komennon “$ sudo a2enmod userdir“. Jotta uusi konfigurointi tuli voimaan, täytyi minun ajaa komento “$ sudo service apache2 restart“.
Sitten loin kotihakemistooni kansion “public_html” komennolla: “$ mkdir public_html

xubuntu@xubuntu:~$ mkdir public_html
xubuntu@xubuntu:~$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  public_html  Templates  Videos

Tämän jälkeen surffasin sivulle komennolla: $ firefox “http://localhost/~xubuntu/“. Tällä hetkellä se näytti tältä:
Index of xubuntu.png
Seuraavaksi nano-tekstieditoria hyödyntäen, tein simppelin index-html tekstitiedoston kotihakemiston kansioon public_html. Laitoin sinne simppelin html-pohjan, jonka katsoin sivulta http://www.w3schools.com/html/. Tallensin teksitiedoston painamalla Ctrl + x -> y (yes) ja sitten enter.
nano-indexhtml
Päivitin sivun http://localhost/~xubuntu/ todetakseni, että unohdin lisätä UTF-8 metan html-koodiin. Lisäsin- tagien sisään “”> ja tallensin. Nyt sivuni näytti tältä, ja ääkköset pelitti oikein:
markuksen-testisivu

Apachen lokien analysointi:

Tarkoituksena oli siis etsiä Apache lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta.
Apachen lokitiedot löytyivät kansiosta $ cd /var/log/apache2/. Komento “ls” listasi sijainnin kaikki eri lokit:

xubuntu@xubuntu:/var/log/apache2$ ls
access.log  error.log  other_vhosts_access.log

Kyseisistä lokeista tarkasten tässä harjoituksessa access -ja error.logia.
Access.logia seurasin komennolla “$ tail -F /var/log/apache2/access.log“. Päivitin sivuni http://localhost/~xubuntu/ samalla, kun pidin lokia auki.
Tulos:

127.0.0.1 - - [12/Sep/2016:12:39:28 +0000] "GET /~xubuntu/ HTTP/1.1" 200 506 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
  • 127.0.0.1 on remote host.
  • – – Jotain tietoa puuttuu tässä kohtaa
  • 12.syyskuuta kello 12:39:28. Kellonaika ja päivämäärä, jolloin palvelin lopetti pyynnön käsittelyn. Lopussa aikavyöhyke.
  • GET /~xubuntu/ HTTP/1.1″ 200 506 = Se mitä palvelin teki: haki resurssin ~xubuntu ja käytti siihen protokollaa HTTP/1.1.200 on palvelimen lähettämä statuskoodi. Se tarkoittaa, että sivunlataus onnistui. 506 on bitteinä palvelimelta saadun vastauksen koko.
  • Mozilla/5.0 on se selain, jolla tähän URL:iin navigoitiin.
  • (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0 = user agent. Se indentifioi selaimen ja käyttöjärjestelmän webbipalvelimelle.

Käytin apuna analysoinnissa: http://httpd.apache.org/docs/2.4/mod/mod_log_config.html
Seuraavaksi tarkoituksena oli luoda epäonnistunut sivunlataus error.logiin. Avasin lokin komennolla “$ tail -F/var/log/apache2/error.log“. *** access.log… (keskiviikko 14.9.)
Tarkastelin lokia samalla, kun navigoin sivulle komennolla $ firefox “http://localhost/~xubuntukohan/ “. Kirjoitin nimeni tarkoituksella väärin nähdäkseni tuottaako se errorin lokiin. Sivu antoi kuin antoikin 404 errorin:
Apache Log 404 NOT FOUND.png
Jostain syystä en kuitenkaan saa error-lokissa tapahtumasta mitään tietoa. ***
APACHE error log.png
*** EDIT (keskiviikko 14.9. kello 23.55) :
404 error tulee  access.log, eikä error.log…

127.0.0.1 - - [14/Sep/2016:20:53:18 +0000] "GET /~xubuntukohan/ HTTP/1.1" 404 504 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
  • 127.0.0.1 on remote host.
  • – – Jotain tietoa puuttuu tässä kohtaa
  • 14.syyskuuta kello 20:53:18. Kellonaika ja päivämäärä, jolloin palvelin lopetti pyynnön käsittelyn. Lopussa aikavyöhyke.
  • GET /~xubuntu/ HTTP/1.1″ 404 504 = Se mitä palvelin teki: haki resurssin ~xubuntu ja käytti siihen protokollaa HTTP/1.1.200 on palvelimen lähettämä statuskoodi. Se tarkoittaa, että sivunlataus onnistui. 504 on bitteinä palvelimelta saadun vastauksen koko.
  • Mozilla/5.0 on se selain, jolla tähän URL:iin navigoitiin.
  • (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0 = user agent. Se indentifioi selaimen ja käyttöjärjestelmän webbipalvelimelle.

Käytin apuna analysoinnissa: http://httpd.apache.org/docs/2.4/mod/mod_log_config.html

MySQL asennus:

MySQL tietokannan asensin tiistaina 13.9. kello 20.50 eteenpäin.  Seurasin prosessissa tarkasti näitä Tero Karvisen ohjeita: http://terokarvinen.com/2016/mysql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu.
Asensin tietokannan komennolla “$ sudo apt-get install mysql-server mysql-client“. Kun kysyttiin haluanko jatkaa latausta, vastasin “yes”.
Hetken päästä ponnahti esiin tämän näköinen ruutu:
mysql-no1
Siihen keksin monimutkaisen salasanan root käyttäjälle, ja jatkoin eteenpäin. Salasana piti vielä vahvistaa kirjoittamalla se uudestaan.
Tämän jälkeen kirjauduin MySQL root käyttäjälle komennolla “$ mysql -u root -p“. Se kysyi salasanaani, jonka syötin siihen. Rivillä näkyi “mysql>”, joten kirjautuminen onnistui.
Kirjoitin komentoriville “CREATE DATABASE student CHARACTER SET utf8;“. Seuraavaksi “SHOW DATABASES;“. “GRANT ALL ON student. * TO student@localhost IDENTIFIED BY ’96ict-infrastruktuuripalvelualustammekohanz170!’;. Tässä siis luotiin tietokanta sekä käyttäjä, jolle asetettiin salasana.
mysql-no2
Poistuin root käyttäjältä komennolla “exit“. Tämän jälkeen kokeilin kirjautua juuri luomalleni käyttäjälle komennolla “$ mysql -u student -p“. Kirjoitin salasanan, ja pääsin sisään.
Tarkoituksena oli kaiken tämän jälkeen automatisoida MySQL kirjautuminen säilömällä kirjautumistunnukset kotihakemistoni konfigurointitiedostoon. Loin nanolla tiedoston:

xubuntu@xubuntu:~$ nano .my.cnf

Kirjoitin tekstitiedostoon seuraavat tiedot ja tallensin.
mysql-no3
Nyt, kun kirjoitan komennon “$ mysql“, minut kirjataan automaattisesti sisään kysymättä salasanaa.
Seuraavaksi testasin ohjeiden mukaisesti CRUDia (Create, Read, Update, Delete).
http://terokarvinen.com/2016/instant-firewall-sudo-ufw-enable
C: CREATE
Tässä tehtiin nyt oma tietokanta. Suoritin alla olevassa kuvassa näkyvät komennot:
mysql-no4
mysql-no5
C: Create records: INSERT
Lisäsin tietokantaan kolme henkilöä:
MySQL no6.png
R: Read: SELECT
MySQL no7.png
U: UPDATE
MySQL no8.png
Päivitin ylempänä nimeeni myös sukunimen.
D: DELETE

mysql> DELETE FROM students WHERE name="Jaakko";
Query OK, 1 row affected (0.00 sec)

MySQL no9.png
Koko CRUD tuli nyt kokeiltua. Lopetin MySQL:llä säätämisen tuntia myöhemmin kello 21.50.

PHP:

Muutin index.html-tekstitiedoston nimen index-php:ksi komennolla: $ mv index.html index.php”. Nyt voin halutessani lisätä php-koodia sivulleni.

Sitten asensin seuraavan paketin komennolla “$ sudo apt-get install libapache2-mod-php“. Kun kysyttiin haluanko jatkaa latausta, vastasin “yes”.
Menin hakemistoon “cd /etc/apache2“, ja kirjoitin komentoriville komennon “$ grep -ri php“. Siitä seurasi tällainen näkymä:
grep-mod
Ilmeisesti Php on asentunut oikein.
Php.conf tiedostosta tuli myös kommentoida ifmodulet pois, eli $ sudoedit /etc/apache2/mods-available/php7.0.conf
(kommentoi pois ##) (ifmodule)

Lisätehtävä:

” -Tee virhe johonkin Apachen asetustiedostoon, etsi se lokista (Apachen omasta tai syslog:ista), ja analysoi tuo rivi.”
Tarkastelin syslogia komennolla “$ tail -F /var/log/syslog/“. Tarkoituksenani on tehdä jokin virhe apachen asetustiedostoon, ja nähdä se lokista.
Kokeilin muuttaa ports.conf-asetuksia muokkaamalla tekstitiedostoa:

xubuntu@xubuntu:/etc/apache2$ nano ports.conf

Kyseinen asennustiedosto näytti tältä:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
        Listen 443
        Listen 443
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Yritin tehdä tiedostoon mahdollisimman paljon virheitä ja tallensin. Tästä ei kuitenkaan seurannut mitään virheilmoitusta lokiin.
Jatkan harjoitusta vielä keskiviikkona ja kokeilen jotain muuta.

Yhteenveto:

Tässä harjoituksessa asennettiin onnistuneesti Apache, MySQL ja PHP aiemmin asennetun Linuxin päälle. Lisäksi tehtiin minimalistiset webbisivut omalle Apache-palvelimelle, joiden toimivuutta testattiin Apachen lokitietoja tarkkailemalla.

Lähteet:

http://terokarvinen.com/2016/aikataulu-linux-palvelimet-alkusyksy-2016
http://terokarvinen.com/2016/mysql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu
http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4
http://httpd.apache.org/docs/2.4/mod/mod_log_config.html

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

5 thoughts on “Linux palvelimet – LAMP (Linux, Apache, MySQL, PHP)”

  1. Pingback: Palvelinten hallinta – Harjoitus 6 – Markus Pyhäranta

  2. Pingback: Digitekniikat – Oppimistehtävä 4 – WordPress – Markus Pyhäranta

  3. Pingback: Digitekniikat – Oppimistehtävä 4 – WordPress & Web Hosting – Markus Pyhäranta

  4. Pingback: Ubuntu-virtuaalipalvelimen käyttöönotto ja Domain-nimen osoittaminen palvelimeen DigitalOceanissa – Markus Pyhäranta

  5. Pingback: Linux palvelimet h3 | Jaakko Vehkamäki

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top