Edelliseen tehtävään Etusivulle Seuraavaan tehtävään

Anna Kröger 2020-02-11

Apache 2 -palvelin ja sen käyttö

Tämä on Tero Karvisen Linux palvelimet -kurssin kolmannen kotitehtävän raportti. Tässä linkki kurssisivulle.

Tehtävä ei mennyt minun kannaltani oikein nappiin. Sain kaikki asiat, jotka teimme myös tunnilla, onglemitta tehtyä (eli kohta a ja b), mutta siihen se vähän jäikin. Tässä siis ensin koko tehtävänanto, sen jälkeen raportit mainitsemistani a ja b kohdista, ja lopuksi raportointi käytännössä kaikesta lopusta.

Tehtävänanto (h3):

Tee viisi vapaavalintaista kohtaa. Säädä vaikeustaso oikeaksi: jos olet ihan alussa ja tämä on haastavaa, tee helpoimmat a b d i m. Jos osaat jo perusteet, tee useampia tai vaikeampia kohtia. Tarkoitus on, että tehtävät tehtyäsi osaat enemmän kuin osasit ennen. Tee tehtävät alusta lähtien koneella, vaikka olisitkin kokeillut samaa asiaa tunnilla.

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)

M) Vaihda Apachen oletussivu. Eli laita palvelimen etusivulla (ilman tildeä) näkyvä sivu niin, että alkuperäinen on jonkun käyttäjän kotihakemistossa ja voit muokata sitä ilman pääkäyttäjän oikeuksia.

N) Laita kaksi nimeä samaan IP-osoitteeseen. Voit simuloida nimipalvelun toimintaa /etc/hosts -tiedoston avulla. Eli niin, että samalla palvelimella osoitteella teronlenkkisivu.com tulee eri sisältö kuin osoitteella opipentest.com.
 


A) Apache 2:n asennus ja käyttäjien kotisivut

Käynnistin läppärini (ASUS gaming fx503vd) livetikulta, johon on asennettu Xubuntu 18.04. Heti yhdistettyäni nettiin, päivitin ensin saatavilla olevat paketit, ja sen jälkeen asensin Apache 2:n.

$ sudo apt-get update

$ sudo apt-get install apache2

Asennuksen jälkeen avasin selaimen ja tarkistin, että kaikki vaikuttaisi toimivan oikein. Tarkoittaen siis sitä, että localhostiin mennessä näkyy apache2:n vakio etusivu.

apache2:n etusivu

Etusivua pystyin nyt muokaamaan komennolla:

$ sudoedit /var/www/html/index.html

Halusin kuitenkin päästä helpommalla, joten

$ echo "Kiva etusivu" | sudo tee /var/www/html/index.html
etusivu

Seuraavaksi piti saada käyttäjien omat kotivisut toimimaan. Jotta niitä yleisesti pystyi näkemään, täytyi ne ensin "sallia" ja sen jälkeen käynnistää apache uudelleen.

$ sudo a2enmod userdir

$ sudo systemctl restart apache2

Sitten, jotta käyttäjän sivuilla jotain näkyisikin, täytyi sinne luoda vähintään etusivu. Home-kansiossa olessa loin siis uuden kansion ja siihen tiedoston.

$ mkdir public_html

$ cd public_html

$ nano index.html

Sivulle itsessään lisäsin vain jotakin tekstiä, joka eroaa jotenkin varsinaisen "etusivun" tekstistä, jotte näkee paremmin, että toimiiko se. Seuraavaksi menin siis selaimessa osoitteeseen 'oma-IP-osoite/~xubuntu'.

käyttäjän etusivu

Oman IP-osoitteensa saa komennolla

$ hostname -I

B) Apache2 access.log

Surffailin siis hetken (eli pidin tauon kesken homman, mistä omituiset ajat lokissa saattavat johtua) selaimella palvelimen sivuilla. Varmistin uudelleen kummankin olemassa olevan sivun toimivan ja yritin sen jälkeen katsoa jonkun muun käyttäjän sivuja (vaikka muita käyttäjiä ei siis ole). Lokit, joista näkee sivulataukset yms. sain komennolla

$ tail /var/log/apache2/access.log

Ensimmäisestä loki-pätkästä näkee esimerkin onnistunesta sivulatauksesta. Joka rivi alkaa IP-osoitteella, jota seuraa päivämäärä ja kellonaika.

					192.168.0.13 - - [10/Feb/2020:22:00:00 +0000] "GET / HTTP/1.1" 200 295 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86 64; rv:68.0) Gecko/20100101 Firefox/68.0" 
				

Kellonajasta seuraava kohta, eli GET tarkoittaa sitä, että lähetämme palvelimelle GET-pyynnön, jonka vastauksena näemme html-sivun. / HTTP/1.1 ymmärtääkseni vain viittaa URLiin. Tai lähinnä siihen, että tässä esimerkiksi haemme koko sivun etusivua. Koodi 200 tarkoittaa sitä, että pyyntömme on mennyt läpi, mutta koodista 295 en osaa sanoa mitään. Koko loppupätkän lokia syötin sellaisenaan Googleen, ja sain suoran vastauksen. "This user agent string belongs to Firefox browser running on Ubuntu Linux. The browser is developed by Mozilla Foundation and renders web pages using the Gecko engine."

Seuraavalta loki-riviltä näkee esimerkin epäonnistuneesta sivulatauksesta. Erona siinä näkyy haettu sivu, sekä tietenkin koodi 404, eli sivua ei löytynyt. Haetusta sivusta myös näkyy se, että URL, jolla hain, päättyi /~jokumuu, eli yritin hakea jokumuu-nimisen käyttäjän sivua.

					192.168.0.13 - - [10/Feb/2020:22:17:50 +0000] "GET /-jokumuu HTTP/1.1" 404 491 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86 64; ry:68.0) Gecko/20100101 Firefox/68.0" 
				

Yritykseni tehdä loput tehtävät...

E) PhpMyAdminin asennus ja kokeilu

Lähdetään siitä, että en ottanut asiasta alkuun sen enempää selvää, vaan lähdin suoraan asentamaan PhpMyAdminia:

$ sudo apt-get install phpmyadmin

Asennukseen kuului monta kysymystä:

1. Mille palvelimelle haluan PhpMyAdminin asentaa -> vastasin luetelluista vaihtoehdoista apache2:n
2. Haluanko, että tietokanta konfiguroidaan dbconfig-common:illa -> vastasin kyllä
3. Aseta salasana tietokannalle -> asetin hyvän salasanan
4. Aseta salasana tietokannan admin -käyttäjälle -> asetin hyvän salasanan

Tässä vaiheessa tuli ensimmäistä kertaa error, jossa vaihtoehtoina oli abort, retry, retry + skip, ja ignore.
Valitsin retry.
Asennus tuntui jatkuvan oikein. Lisää kysymyksiä:

5. Connection method -> vaihtoehtoina oli Unix socket tai TCP/IP. Valitsin niistä Unix socketin (lähinnä sen takia, koska se oli valittuna automaattisesti)
6. Nimeä tietokanta -> Nimesin tietokannan
7. Provide a username -> ymmärtääkseni se ei kuulunut olla jo olemassa oleva käyttäjä, joten jätin ohjelman ehdottaman phpmyadmin@localhostiin
8. äsken luomalle käyttäjälle salasana -> asetin hyvän salasanan
9. Provide a name of the account with which this package should perform actions -> ohjelma väitti sen olevan lähes aina root, joten jätin sen siihen

Taas sama error.

Valitsin vielä kertaalleen retryn, ihan vain varmuuden vuoksi, ja annoin kaikkiin yhdeksään kysymykseen samat vastaukset. Ei auttanut. Valitsin VIELä kerran retry, koska uskoin, että ongelma saattoi olla jossain antamissani vastauksissa. Tällä kertaa valitsin 5. kysymyksessä TCP/IP:n Unix socketin sijaan. Sain lisää kysymyksiä:

10. Hostname -> valitsin localhostin
11. Specify the port the DB is running on -> Kysymyksessä myös luki, että jos haluaa käyttää defaulttia, eli oletusta, voi vastauksen jättää tyhjäksi, joten niin tein.

Tämän jälkeen tuli ensin uudestaan mm. kaikki nimeämiskysymykset ja salasanat jne... mutta ei. Sama error edelleen.

Tässä vaiheessa päätin, että oli ehkä aika lähteä Googlaamaan erroria. Luin eri foorumeiden keskusteluita ja vaikka sieltä en suoraan samaa tilannetta löytänyt, niin päättelin niistä kuitenkin, että ongelma on jonkin sortin sisäänkirjautumis-virhe, joka ymmärtääkseni johtui siitä, ettei MySQL ole käytössä. Eli joko se ei ole asennettu, tai sitten se ei ole käynnissä. Xubuntuni kansiota tutkiessani löysin sieltä MySQL:n, joten oletin sen olevan asennettu. Yritin siis näiltä samoilta foorumeilta löytämieni ohjeiden mukaan käynnistää sitä. Mutta se ei onnistunut. Ongelmia oli useita: sitä ei kuulemma löytynyt sieltä, missä sen pitäisi olla, ja joku tiedosto puuttui kokonaan. Oletukseni oli nyt siis se, että joudun sen asentamaan. Päätin kuitenkin ensin katsoa HostingAdvice sivuston PhpMyAdmin - asennnusohjeita. Siellä oli hyvät ohjeet siihen, kuinka tarkistaa, että onko koneella MySQL ja jos on, niin mikä versio.

Komentorivi mysql -v

Tämän tulkitsin niin, että minun siis täytyy asentaa MySQL uudelleen. Jos ei muuta, niin oletin sen silloin laittavan tiedostot niiden "oletus-paikkoihin". Luin vielä varmuuden vuoksi vähän lisää aikaisemmin jo lukemaani foorumia, ja siellä joku sanoi ratkaiseensa saman ongelman asentamalla MySQL:n komennolla:

$ sudo apt-get install mysql-server

Ja niin tein. Yritin siis asentaa MySQL:ää. Ohjelma ehti hetken asentua, kunnes automaattisesti avautui taas sama PhpMyAdminin konfiguraation-asennus-sivu. Uskoin silloin, että se oli varmaankin hyvä merkki, joten vastailin taas samoihin kysymyksiin uudelleen ja - .... ei vieläkään. Sama error tuli ja valitsin abort. Heti kun olin abortoinut prosessin, jatkui mysql-serverin asennus ja sain taas hetken toivoa, että se ehkä onnistuisikin. Mutta ei. Erilaisia erroreita, failureita ja abortteja lähes joka rivillä.

Asennus ei onnistunut

Yritin selvitellä asiaa ja kokeilin sitä useampaan kertaan, mutta en vain saanut sitä toimimaan. Jos tulkitsen virhekoodin oikein, tarkoittaa se sitä, että MySQL:n pitää olla "running", mutta en vain voi ymmärtää, miten se voi olla syy siihen, ettei sitä voi asentaa. Tulin siis siihen tulokseen, etten ainakaan tällä kertaa tulisi pääsemään asiassa eteenpäin, ja että minun olisi tutustuttava asiaan kunnolla joskus, kun on rutkasti aikaa niin tehdä.

Kuvankaappauksia kysymyksistä ja virheilmoituksesta
Viides kysymys Kuudes kysymys Seitsemäs kysymys Kymmenes kysymys Jatkuvasti annettu virheilmoitus
C) Virhe palvelimella ajettavassa koodissa

Olen aikaisemmin tutustunut hieman PHP-palvelimella toimimiseen, joten ajattelin, että yksinkertaisesti tekisin käyttäjän public_html kansioon php-tiedoston, johon esimerkiksi tekisin jonkun simppelin syntaksivirheen ja katsoisin tapahtuuko lokeissa mitään. En päässyt edes siihen asti.

Aloitin sillä, että loin testi.php tiedoston xubuntun kansioon public_html. Tiedoston sisältö oli:

PHP testi

Sain sivun avattua ilman varsinaisia ongelmia osoitteesta localhost/~xubuntu/testi.php
Varsinaisia ongelmia tarkoittaen siis sitä, että mitään erroreita (esim 404) ei ollut. Ongelma kuitenkin oli se, ettei mitään näkynyt. Sivu oli tyhjä. Kokeilin toista taktiikkaa, jossa laitoin index.html sivun sisään php:tä. Laitoin tuo saman aikaisemman koodin pätkän html-sivun bodyn sisään.

PHP html:n sisällä

Ja taas, sivu latautui ongelmitta, mutta php:n tulostetta siellä ei näkynyt. Koska en kokemuksesta osannut sanoa mistä tämä voisi johtua, aloitin taas tutkimisen. Yksi mahdollinen ratkaisu jonka löysin, oli ongelma liittyen johonkin tiettyihin kansiorakenteisiin. Kokeilin siis myös sitä, että tein public_html kansion sisään toisen kansion, jonka nimesin "phptiedostoja" kansioksi. Sen sisälle kokeilin laittaa sekä php tiedoston, että html tiedoston. Taas sain kummatkin ongelmitta auki urlista localhost/~xubuntu/phptiedostoja/testi.php (ja ../testi.html), mutta php-osuutta sielläkään ei näkynyt.

Tiesin kuitenkin aikaisemmasta tehtävän yrityksestä, että PHP oli yleisesti asennettu. Menin siis tarkastelemaan apache2:n tiedostoja. Tarkistin ensin, että onko PHP:n jokin modi, joka ei esimerkiksi ole päällä. Avasin siis tiedoston, ja tutkin sen siältöä.

$ cd /etc/apache2/mods-available

$ ls

Ja siellähän se olikin! Php7.2.conf ja php7.2.load.

$ sudo a2enmod php7.2

Kävi kuitenkin ilmi, että kyseinen modi oli jo käytössä.

php already enabled

Varmistin vielä asian menemällä kyseiseen kansioon, ja siellähän se oli. Ongelma ei siis ollut siinä.

$ cd /etc/apache2/mods-enabled

$ ls

Ryhdyin siis vielä viimeisen kerran Googlailemaan asiaa, ja totesin, että ongelma saattaa ehkä ollakin hankalampi kuin oletin, eli kävi vähän samanlainen tilanne, kuin edellisessä tehtävässä. Kaikkialta löytyi ristiriitaista tietoa siitä, mitä kuuluisi tehdä. Koska monessa "ratkaisussa" ei kerrottu, miksi x-asiat pitää tehdä, en niitä halunnut tehdä. Tarkoitukseni oli kuitenkin oppia jotain, eikä vain apinoida oikeita vastauksia ja saada asiat vahingossa toimimaan. Joten tulin tässäkin tehtävässä siihen tulokseen, että tutustun asiaan paremmin joskus toiste.

J) LAMP?

Tässä vaiheessa huomasin, että olin tavallaan koko ajan yrittänyt tehdä J kohtaa tehtävästä, eli LAMP:n asentamista. Tai no, AMP:n koska Linux oli jo asennettu.

F) BMI laskuri

Tässä BMI-laskuri jonka tein, mutta jota en jostain syystä millään saanut toimimaan kunnolla varsinaisessa tehtävässä.
EDIT(2020-02-20): En tiedä miksen saanut koodia aikaisemmin tässä toimimaan, mutta olen nyt saanut sen toimimaan moitteetomasti muuallakin kuin tässä.

Paino (kg):
Pituus (cm):


Käyttämäni lähteet (vähintään lähes kaikki)

Karvinen, Tero: Oppitunnit 2020-02-06, Linux palvelimet -kurssi
http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/

User Agents: 2020, Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
https://user-agents.net/s/GxAiL29O

Website for Students: 2017-12-18, Setup Apache2 Web Servers With PHP Support On Ubuntu Servers
https://websiteforstudents.com/setup-apahce2-with-php-support-on-ubuntu-servers/

Nicholson, Jacob: HostingAdvice.com 2019-01-28, How to Install phpMyAdmin on Ubuntu
https://www.hostingadvice.com/how-to/install-phpmyadmin-on-ubuntu/

Drake, Mark: DigitalOcean 2018-04-27, How to Install MySQL on Ubuntu 18.04
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04

Question by decaobr: DigitalOcean 2014-09-30, MySQL - Can't connect to local MySQL server through socket '/var/run/mysql/mysqld.sock' (2)
https://www.digitalocean.com/community/questions/mysql-can-t-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysqld-sock-2

Question by user dukevin: StackExchange serverfault 2011-03-04, Getting PHP to work with apache to run .php files through browser
https://serverfault.com/questions/243435/getting-php-to-work-with-apache-to-run-php-files-through-browser

Question by user SE_1991: stackoverflow 2017-03-07, Enable PHP Apache2
https://stackoverflow.com/questions/42654694/enable-php-apache2

Omorokunwa, Alexander Wayne: FossNaija 2017-08-03, How to install phpmyadmin on Linux (Ubuntu)
https://fossnaija.com/install-phpmyadmin-linux-ubuntu/

BMI-laskuri: lista siitä, mihin kategoriaan eri BMI:t kuuluvat
https://bmi.fi/