JAH380 - Linux Server - WWW

Näkymät
Syotec Wiki
Loikkaa: valikkoon, hakuun

Sisällysluettelo

WWW-palvelin

WWW-palvelinten merkitys on käsittämättömän suuri nykypäivän tietoverkoissa. Palvelinten WWW-palvelinohjelmat tarjoavat käytännössä sisällön verkkoon. Ne toimivat työjuhtina, raskaan työn raatajina, vaikkakin niiden tehtävä on suhteellisen yksinkertainen. Yksinkertaistettuna palvelinohjelma kuuntelee porttia 80 ja sen pitää vastata selaimen tekemään HTTP-pyyntöön tietyllä tavalla. Alla esimerkki selaimen pyynnöstä:

 11:52:43.046274 IP 213.250.105.53.34877 > 213.250.107.183.80: P 3947168519:3947168900(381) ack 694100747 win 54 <nop,nop,timestamp 3861743 1357319>
 E.....@.@.....i5..k..=.P.E..)_#....6.......
 .:......GET / HTTP/1.1
 Host: www.syotec.fi
 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/2009032711 Ubuntu/8.04 (hardy) Firefox/3.0.8
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
 Accept-Language: en-us,en;q=0.5
 Accept-Encoding: gzip,deflate
 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
 Keep-Alive: 300
 Connection: keep-alive    
 

Pyynnössä selain kysyy tietyn protokollan (HTTP/1.1) mukaisella tavalla tiettyjä asioita palvelinohjelmalta. Samalla selain suorittaa esittelyn, jossa se voi kertoa erilaisia asioita itsestään:

request-header = Accept
               | Accept-Charset
               | Accept-Encoding
               | Accept-Language
               | Authorization
               | Expect
               | From
               | Host
               | If-Match
               | If-Modified-Since
               | If-None-Match
               | If-Range
               | If-Unmodified-Since
               | Max-Forwards
               | Proxy-Authorization
               | Range
               | Referer
               | TE
               | User-Agent

Alla esimerkki palvelinohjelman antamasta vastauksesta

 11:52:43.219454 IP 213.250.107.183.80 > 213.250.105.53.34878: . 1:1449(1448) ack 479 win 65056 <nop,nop,timestamp 1357695 3861767>
 E....G@...h...k...i5.P.>(.1...Y.... .......
 .....:..HTTP/1.1 200 OK
 Cache-Control: private, max-age=0
 Content-Length: 40427
 Content-Type: text/html; charset=utf-8
 Expires: Tue, 07 Apr 2009 08:52:42 GMT
 Last-Modified: Wed, 22 Apr 2009 08:52:42 GMT
 Server: Microsoft-IIS/6.0
 X-Powered-By: ASP.NET
 MicrosoftSharePointTeamServices: 12.0.0.6219
 X-AspNet-Version: 2.0.50727
 Date: Wed, 22 Apr 2009 08:52:42 GMT
 
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
 <html>
    
 <head><link rel="stylesheet" type="text/css" href="/Style%20Library/en-US/Core%20Styles/controls.css"/>
 <link rel="stylesheet" type="text/css" href="/_layouts/1033/styles/HtmlEditorCustomStyles.css?rev=8SKxtNx33FmoDhbbfB27UA%3D%3D"/>
 <link rel="stylesheet" type="text/css" href="/_layouts/1033/styles/HtmlEditorCustomStyles.css?rev=8SKxtNx33FmoDhbbfB27UA%3D%3D"/>
 <link rel="stylesheet" type="text/css" href="/_layouts/1033/styles/HtmlEditorTableFormats.css?rev=guYGdUBUxQit03E2jhSdvA%3D%3D"/>
 <link rel="stylesheet" type="text/css" href="/Style%20Library/en-US/Core%20Styles/intra_etusivu_band.css"/>
 <link rel="stylesheet" type="text/css" href="/Style%20Library/en-US/Core%20Styles/intra_etusivu_custom.css"/>
 <link rel="stylesheet" type="text/css" href="/Style%20Library/en-US/Core%20Styles/intranet_PageLayouts.css"/>
 <link rel="stylesheet" type="text/css" href="/Style%20Library/en-US/Core%20Styles/rca_intranet.css"/>
 <link rel="stylesheet" type="text/css" href="/Style%20Library/zz1_blue.css"/>
 <link rel="stylesheet" type="text/css" href="/_layouts/1033/sty
 ..............
 

Palvelinohjelma tarjoaa selaimelle vastauksen. Jos selaimelle on laitettu esimerkiksi osoite http://www.testiverkko.info/tekstitiedosto.txt, palvelin toimittaa tiedoston selaimelle (Jos olemassa!) ja selain näyttää sisällön käyttäjälle. Tiedosto voi olla käytännössä mikä vain, mutta selain tulkitsee sen aina tavallaan.

Selain ohjataan siis aina johonkin tiedostoon, joista yleisimpiä (Pois lukien Microsoftin viritykset) ovat index.html ja index.php. Käytännössä siis esimerkiksi osoite http://www.testiverkko.info ohjautuu index-tiedostoihin, jos palvelin on asennettu oletusasetuksilla. Esimerkiksi Apachessa

 <VirtualHost *:80>
 ServerName www.testiverkko.info
 ServerAdmin webmaster@testiverkko.info
 DocumentRoot /var/www
 DirectoryIndex login.php index.php home.html
 </VirtualHost>

WWW-palvelinohjelmia on paljon, joista yleisimpiä ovat seuraavien kappaleen palvelimet. Eroja ohjelmien välillä on käytännössä resurssien kulutuksessa, hinnassa, toimintalogiikassa, hallittavuudessa ja integroinnissa muihin tuotteisiin.

http://news.netcraft.com/archives/web_server_survey.html

Turvallisuudessa suosituimmat palvelinohjelmat ovat käytännössä tasoissa:

http://www.cert.fi

Sen voi huomata myös palveluiden tarjoajista:

http://uptime.netcraft.com/

Suurimmat haasteet palvelimille, ja sen tarjoamalle WWW-palvelulle, ovat perinteiset saatavuus, luottamuksellisuus ja eheys. Käytännössä siis palvelimen pitää tarjota sisältö pienimmillään muutamalle ja suurimmillaan tuhansille käyttäjille 24/7/365. Tämän lisäksi sisältö voi olla hyvinkin arkaluonteista, joten käyttäjien oikeuksia täytyy päästä rajaamaan. Sisällön tulee pysyä myös sovittujen sääntöjen mukaisena ja ympäristöön sopivana. Huom! WWW-sisältöä sääntelee myös yhteiskunnalliset säännöt ja hyvät tavat. Haasteita siis on, ja näiden asioiden kanssa taistellaan joka päivä.

IIS

IIS on Microsoftin oma WWW-palvelinohjelma. IISin suurin vahvuus verrattuna kilpailijoihin on ASP-tuki ja integrointi muihin Microsoftin ohjelmiin ja kehitystyökaluihin (.NET, MS-SQL..). Ongelmaksi on muodostunut sitoutuminen omaan tuoteperheseen, joka käytännössä tarkoittaa sitä, että ympäristö on sidottu Microsoftin tuotteisiin. Esimerkkinä mainittakoon Microsoft Outlook Web Access, joka jättää suuren osan ominaisuuksista pois käytettäessä muita selaimia (esim. Firefox). IISillä on tuki toki myös yleisesti käytetyille rajapinnoille, kuten PHP ja JAVA.

Lisätietoa:

http://fi.wikipedia.org/wiki/IIS

Referenssejä:

http://uptime.netcraft.com/up/graph?site=www.microsoft.com
http://uptime.netcraft.com/up/graph?site=www.syotec.fi

Apache

Apache on ollut ja on edelleen suosituin WWW-palvelinohjelma. Apachen suosio perustuu avoimeen lähdekoodiin, jolla siitä on saatu toimiva ja luotettava. Ongelmana on monen mielestä vaikeampi konfigurointi kuin esimerkiksi IISissä, mutta Apachen Unix-mainen eli tiedostopohjainen tapa on osoittautunut hyväksi. Apachen ehdoton vahvuus on tuki lukemattomille rajapinnoille, jonka vuoksi se taipuu käytännössäkin tilanteeseen kuin tilanteeseen. Ongelmana on edellisen vastakohta eli pullataikina-ilmiö, jossa lukemattomien rajapintojen joukosta ei löydä sitä oikeaa.

http://fi.wikipedia.org/wiki/Apache_(palvelinohjelma)

Referenssejä

http://uptime.netcraft.com/up/graph?site=www.verkkokauppa.com
http://uptime.netcraft.com/up/graph?site=www.eniro.fi

Lighttpd

Lighttpd on palvelinohjelmisto, jonka vahvuus on keveydessä. Sivujensa mukaan esimerkki youtube käyttää ko. ohjelmaa, joten suorituskykyä ja varmuuttaa pitäisi löytyä. Lighttpd on kuten Apache, mutta ilman valtavaa määrää erilaisia ominaisuuksia. Toki yleisimmät rajapinnat löytyy, kuten esimerkiksi PHP.

Lisätietoa

http://linux.fi/index.php/Lighttpd

Referenssejä

http://uptime.netcraft.com/up/graph?site=irc-galleria.net
http://uptime.netcraft.com/up/graph?site=thepiratebay.org

Muita

http://www.acme.com/software/micro_httpd/
http://www.acme.com/software/mini_httpd/

Sisällysluetteloon


HTML

HTML on kieli, jolla selain tulkitsee palvelimelta tulevaa dataa. HTML-kielen lähtökohtana on ollut ajatus siitä, että miten saadaan linkitettyä materiaalia käyttäen yksinkertaisia syntakseja. Nykyään HTML-kielen variaatioita on erittäin paljon ja tästä syystä hyvän materiaalin tekeminen (teksti, tekstin ulkoasu, käyttöliittymän toimivuus, ulkoasu..) vaatii vankkaa ammattitaitoa. Tästä syystä erilaiset WYSIWYG-editorit ovat tulleet "helpottamaan" sisällön kanssa taistelevia.

WWW-palvelimen näkökulmasta perusajatus on kuitenkin pysynyt lähes samana. Alla esimerkki palvelimella olevasta tiedostosta. (Huom! Firefox ja paina CTRL-U)

<html>
<body>
Tämä näkyy selaimella.
</body>
</html>


Selain suorittaa siis HTTP-protokollan mukaisen pyynnön selaimeen annetun osoitteen palvelimeen. Palvelimella on tiedostoja, jotka toimitetaan selaimella. Tiedostossa on määritelty, että miten selaimen pitää se tulkita, jotta näkymä on halutun kaltainen. Alla esimerkkejä tiedostojen ensimmäisistä riveistä:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html dir="ltr">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi" dir="ltr">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

Käytännössä jokaisen tiedoston eli siis sivun tulisi täyttää yhteiset speksit. Valitettavasti näin ei ole. Toisekseen, jokaisen selaimen pitäisi speksien mukaisesti esittää näkymä yhdenmukaisena. Tähänkään ei ole pystytty. Sivustoille pitäisi aina tehdä Validointi, jolla varmistetaan, että edes yksittäinen sivu on tehty speksien mukaisesti. Se, miten selain näyttää sisällön (Siis kuinka hyvin tulkitsee speksejä) on selaimen valmistajan vastuulla.

Onko sivusi kunnossa?

http://validator.w3.org/

Esimerkkejä

http://validator.w3.org/check?uri=www.yle.fi&charset=(detect+automatically)&doctype=Inline&group=0
http://validator.w3.org/check?uri=www.nordicweather.net&charset=(detect+automatically)&doctype=Inline&group=0

Staattinen HTML

Staattinen HTML on yksinkertaisin tapa luoda sisältöä WWW-palvelimelle. Staattisuudella tarkoitetaan palvelimella olevia tiedostoja, jotka tuodaan pyydettäessä selaimelle sellaisenaan. Sisältö pysyy siis aina samana. Otetaan esimerkki.

<html>
<body>
T&auml;n&auml;&auml;n on perjantai. Aurinko paistaa ja linnut laulaa.
</body>
</html>

Selain tulostaa ruudulle tekstin:

Tänään on perjantai. Aurinko paistaa ja linnut laulaa.

Edellinen sisältö on tallennettu tiedostopäätteellä html palvelimelle. Ajatuksena on, että sisältöä muutetaan harvoin. Luotettava, toimiva, nopea ja yksinkertainen tapa, mutta sisällön tuottaminen hankalaa ja hidasta. Kuormittaa palvelinta ja selainta erittäin vähän. Käyttökohteita nykyäänkin paljon, mutta käytännössä poistumassa sellaisenaan.

Alla hyvä opas HTML-kielen perusteista

http://cs.stadia.fi/~lehtk/html.html

Dynaaminen HTML

Toisin kuin edellisessä dynaaminen html generoi selaimelle toimitettavan sisällön käyttäjän syötteiden, palvelimen syötteiden, kolmannen osapuolen (SQL) syötteiden mukaisesti. Käytännössä siis palvelimen index.html tiedostoa ei toimiteta sellaisenaan selaimelle. Palvelin luo sisällön lennosta eli palvelinta kuormitetaan jokaisen sivun luonnin yhteydessä. Alla olevassa esimerkissä on kutsuttu PHP-kielen vakiofunktiota date, joka tulostaa selaimelle lähetettävään tiedostoon sen hetkisen päivämäärän ja ajan.

<html>
<body>
<?php
 
echo "Kello on ".date('H:s:i').'</br>';
echo "Tänään on ".date('j.n.Y');
 
?>
</body>
</html>

Selaimelle toimitettavaa tiedostoa ei ole tallennettu selaimen välimuistia lukuunottamatta mihinkään. Sisältö on siis täysin dynaamista, sen hetkistä. Dynaaminen sisältö vaatii aina palvelimen (Apache..), palvelimella olevan tiedoston ja selaimelle toimitettavan sisällön välille rajapinnan eli kielen. Vaihtoehtoja on paljon, joista alla muutama esimerkki:

http://fi.wikipedia.org/wiki/PHP
http://fi.wikipedia.org/wiki/ASP
http://fi.wikipedia.org/wiki/Java

Kaikkia kieliä käytetään, mutta ehkä yleisimmäksi on muodostunut PHP. Tämä siksi, että se on osoittautunut erittäin monipuoliseksi, keveäksi, avoimien rajapintojen myötä hyvin muokattavaksi, palvelinta vähän kuormittavaksi ja ennen kaikkea käyttäjäystävälliseksi. PHP ei tarvitse erillistä ohjelmaa käyttäjän laitteistoon, kuten esimerkiksi JAVA.

Alla kuva, jossa esitelty staattisen ja dynaamisen html:n eroja.




Sisällysluetteloon


SQL

SQL sanalla on monta merkitystä nykypäivän tietotekniikassa. Yleisesti ottaen SQL on tietokanta, johon tehdään hakuja tietyn syntaksin mukaisesti. Tietokanta sisältää tauluja, kenttiä ja rivejä, ja tästä syystä tietokanta on helpoiten ajatella taulukkotiedostoksi (Excel). Erona on oikeastaan hakunopeus, hakutavat ja käyttäjien hallinta. Tarkemmin ajatellen SQL on tapa hakea tietokannasta tietoa. Alla esimerkki hausta, jossa taulusta page on haettu rivi, jossa page_id kentän arvo on 2.

 SELECT * FROM `page` WHERE `page_id`=2 LIMIT 0 , 30

Nykyisin yleisin SQL:n tehtävä on tarjota sisältöä dynaamisille HTML-sivuille. Ajanvarausjärjestelmät, aikataulut, säätiedot, uutiset yms. järjestelmät käyttävät SQL-pohjaista sisältöä. Erittäin hyvä ja kätevä järjestely, jossa voidaan muokata lähes jokaista asiaa joka muokattavissa vain on. Tietokantajärjestelmiä on paljon tarjolla, joista alla esitelty muutama. Suurimmat eroavaisuudet ovat hakutavan, hakunopeuden, hallittavuuden (GUI..), hakusyntaksin ja yhteensopivuuden välillä.

Alla linkki, jossa on suomennettu tietokantoihin liitettyjä sanoja ja sanontoja

Tietokantasanasto

MySQL

MySQL on yksi yleisimmistä SQL-ratkaisuista. Erittäin paljon käytetty hyvien työkalujen, hyvän yhteensopivuuden ja avoimen lähdekoodin vuoksi. Työkaluja alla

http://www.phpmyadmin.net/home_page/index.php

PostgreSQL

PostgreSQL on lähes vastaava kuin MySQL, mutta sisältää tiettyjä eroavaisuuksia.

http://www.phppgadmin.org/
http://www.pgadmin.org/

SQLite

SQLite on nimensä mukaisesti erittäin kevyt ohjelma, joka tarjoaa tietokantatyyppistä palvelua sovelluksien käyttöön. Esimerkkinä voitaisiin mainita Firefox 3, joka käyttää SQLiteä historiatietoihin ja kirjanmerkkeihin. Lisätietoa alla olevasta linkistä

http://www.sqlite.org/

MS SQL

MS SQL Microsoftin oma tietokantajärjestelmä, jolla on tietenkin hintalappu päällä. Hyvä yhteensopivuus muihin Microsoftin tuotteisiin. Alla Microsoftin myyntipuhe tuotteensa paremmuudesta verrattuna muihin tuotteisiin.

http://www.microsoft.com/sqlserver/2008/en/us/compare-mysql.aspx
MySQL offers its Community Server for free. The company cautions, however, that MySQL comes without support or regularly scheduled updates.
If you do not have the technical expertise to provide these services on your own, buying them can be expensive



Sisällysluetteloon


WWW-ympäristön tekeminen

Toimivaan WWW-ympäristöön tarvitaan käytännössä vain kone ja siihen palvelinohjelma. Edellisellä päästään alkuun eli järjestelmä toimii, mutta todellisten ympäristöjen järjestelmät alla olevan kuvan mukaisten ohjelmien toiminnallisuuden.


Seuraavassa kuvassa on ympäristö, jossa tietokantapalvelin on ulkoistettu. Tämän ratkaisun etuna on se, että tietokantapalvelin joutuu tietyissä tilanteissa kovalle kuormitukselle, ja näin syntyvä kuormaa voidaan keskittää tehokkaammille palvelimille.


Tietokantapalvelimen lisäksi voidaan ulkoistaa myös nimipalvelin. Näin saadaan kriittisessä asemassa oleva palvelu ulkoistettua.


Seuraavassa kuvassa on se tyypillisin ratkaisu, jossa on ulkoistettu kaikki mahdollinen. Tätä palvelua kutsutaan webhotelliksi.


Webhotelli-palvelujen tarjoajia on huomattava määrä. Palveluiden hinnat ja sisällöt vaihtelevat rajusti, mutta näissä asioissa ei kannata tyytyä halvimpaan. Webhotellien taustalla on valtaosassa käytössä samat ohjelmat, joita seuraavissa kappaleissa käytetään.

DNS-palvelin

DNS-palvelin rooli WWW-järjestelmissä on yksinkertainen, mutta lähes välttämätön. DNS-palvelimen tärkein tehtävä on vastata selain-koneelta tuleviin nimipyyntöihin eli A-tietuiden kyselyihin. Seuraavassa esimerkki komennosta nslookup, jolla voidaan DNS:n toimivuutta.

ville@ville-ibm:~$ nslookup
> www.syotec.fi
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
Name:	www.syotec.fi
Address: 213.250.107.183
> www.yle.fi
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
Name:	www.yle.fi
Address: 194.252.88.100
> 213.250.107.183
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
183.107.250.213.in-addr.arpa	name = uusiwww.kauhava.fi.

Authoritative answers can be found from:
107.250.213.in-addr.arpa	nameserver = ns1.netikka.fi.
107.250.213.in-addr.arpa	nameserver = ns2.netikka.fi.
107.250.213.in-addr.arpa	nameserver = ns.kauhava.fi.
ns.kauhava.fi	internet address = 213.250.107.188
ns1.netikka.fi	internet address = 62.148.192.130
ns2.netikka.fi	internet address = 62.148.192.131
> 194.252.88.100
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
100.88.252.194.in-addr.arpa	name = www.yle.fi.

Authoritative answers can be found from:
88.252.194.in-addr.arpa	nameserver = ns.yle.fi.
> 

Alla esimerkki komennon dig käytöstä.

ville@ville-ibm:~$ dig www.syotec.fi

; <<>> DiG 9.5.1-P2.1 <<>> www.syotec.fi
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58294
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;www.syotec.fi.			IN	A

;; ANSWER SECTION:
www.syotec.fi.		6911	IN	A	213.250.107.183

;; AUTHORITY SECTION:
syotec.fi.		1367	IN	NS	ns3.netikka.fi.
syotec.fi.		1367	IN	NS	ns1.netikka.fi.
syotec.fi.		1367	IN	NS	ns2.netikka.fi.
syotec.fi.		1367	IN	NS	ns.kauhava.fi.

;; ADDITIONAL SECTION:
ns.kauhava.fi.		51478	IN	A	213.250.107.188
ns1.netikka.fi.		61177	IN	A	62.148.192.130
ns2.netikka.fi.		60679	IN	A	62.148.192.131
ns3.netikka.fi.		64111	IN	A	62.148.192.154

;; Query time: 10 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan  5 22:09:50 2010
;; MSG SIZE  rcvd: 198

ville@ville-ibm:~$ dig -x 213.250.107.183

; <<>> DiG 9.5.1-P2.1 <<>> -x 213.250.107.183
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7933
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;183.107.250.213.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
183.107.250.213.in-addr.arpa. 6896 IN	PTR	uusiwww.kauhava.fi.

;; AUTHORITY SECTION:
107.250.213.in-addr.arpa. 6896	IN	NS	ns1.netikka.fi.
107.250.213.in-addr.arpa. 6896	IN	NS	ns2.netikka.fi.
107.250.213.in-addr.arpa. 6896	IN	NS	ns.kauhava.fi.

;; ADDITIONAL SECTION:
ns.kauhava.fi.		51410	IN	A	213.250.107.188
ns1.netikka.fi.		61109	IN	A	62.148.192.130
ns2.netikka.fi.		60611	IN	A	62.148.192.131

;; Query time: 10 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan  5 22:10:58 2010
;; MSG SIZE  rcvd: 187

ville@ville-ibm:~$ 

Linux Server - Verkkopalvelut -kurssilla keskityttiin nimipalvelinohjelmaan Bind, joka on eräs parhaimmista saatavilla olevista nimipalvelimista. Tällä kurssilla käytetään täsmälleen samaa ohjelmaa, koska se on edelleen yksi luotettavimmista nimipalvelinohjelmista.

Ohjelman perusasennus ja hallinta löytyy edellisen kerran materiaalista

A- ja PTR-tietue

Alla esimerkki A-tietueen lisäämisestä zone-tiedostoon

router:/etc/bind/zones# cat db.testiverkko.info 
$TTL 86400 
$ORIGIN testiverkko.info.
@       SOA     router.testiverkko.info. hostmaster.testiverkko.info. (
                200908061       ; serial
                28800           ; refresh (8 hours)
                7200            ; retry (2 hours)
                2419200         ; expire (4 weeks)
                86400 )         ; minimum (1 day)
 
                NS      router.testiverkko.info.

router          A       10.0.28.1
ntp             A       10.0.28.1

Seuraavassa esimerkki PTR-tietueen lisäämisestä.

router:/etc/bind/zones# cat db.10.0.28 
$TTL 86400
$ORIGIN 28.0.10.in-addr.arpa.
@       SOA     router.testiverkko.info. hostmaster.testiverkko.info. (
                200908061  ; serial
                28800      ; refresh (8 hours)
                7200       ; retry (2 hours)
                2419200    ; expire (4 weeks)
                86400 )    ; minimum (1 day)
 
               NS      router.testiverkko.info.
 
1              PTR     router.testiverkko.info.
Muutoksen jälkeen palvelinohjelma pitää muistaa käynnistää uudestaan!

Sisällysluetteloon


WWW-ympäristö, LAMP

Termi LAMP on muodostunut de facto standardiksi WWW-ympäristöistä puhuttaessa. Ympäristön ohjelmistot ovat avoimeen lähdekoodiin perustuvia, joten ympäristöstä ei muodostu lisenssikustannuksia. Tämä on yksi niistä syistä, joka on johtanut uskomattomaan suosioon. LAMP-ympäristön päälle on rakennettu valtavan paljon erilaisia CMS-järjestelmiä, joista alla on lueteltu muutamia:

* http://www.joomla.org/
* http://wordpress.org/
* http://moodle.org/
* http://plone.org/
* http://www.mediawiki.org/
* http://drupal.org/
* http://www.phpbb.com/
* http://coppermine-gallery.net/
* http://www.schooltool.org/
* .......

Järjestelmien toimintalogiikka on lähes kaikissa sama. Järjestelmissä on staattisessa tilassa olevia tiedostoja, joita muokataan pääsääntöisesti vain asennuksen yhteydessä. Tiedoistoissa määritellään tietokanta, jota ne käyttävät sisällönhallintaan erittäin tehokkaasti. Tietokannan ja järjestelmän välillä on rajapinta, joka muodostuu tietystä ohjelmointikielestä. Järjestelmät tarvitsevat siis toimiakseen WWW-palvelinohjelmiston, tietokantaohjelmiston ja rajapinnan. Eli käytännössä siis tässä tapauksessa Apache (WWW-palvelinohjelmisto), MySQL (Tietokantaohjelmisto) ja PHP (ohjelmointikieli). Luonnollisesti järjestelmä rakentuu käyttöjärjestelmän päälle, joka seuraavassa tulee olemaan Linux.

LAMP-ympäristö mielletään monesti pieniin ja vaatimattomiin ratkaisuihin. Avartaakseen tätä maailmaa kannattaa tutustua Internetissä oleviin suosittuihin sivuistoihin ja niiden käyttämiin tekniikoihin. Kummallahan mahtaa olla enemmän käyttäjiä, jos verrataan esimerkiksi Wikipediaa tai yksittäisen yrityksen Intraa? Samalla kannattaa miettiä myös sitä, että miksi tällaisessa maailmassa tämä kokonaisuus on niin suosittu.

Apachen asennus

LAMP rakentuu siis Linuxin päälle, jonka asennusta on käsitelty edellisillä kursseilla. Niinpä siirrytään seuraavaan vaiheeseen eli Apacheen. Asennus tapahtuu seuraavan esimerkin mukaisesti. Ohjelma on heti käyttövalmis. Kokeileppa vaikka menemällä osoitteeseen, joka yksinkertaisesti tarjoaa toimiessaan vastauksen It Works!

apache:~# apt-get install apache2
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 libmysqlclient15off libpq5 mysql-common openssl
  openssl-blacklist ssl-cert
Ehdotetut paketit:
  apache2-doc apache2-suexec apache2-suexec-custom ca-certificates
Seuraavat UUDET paketit asennetaan:
  apache2 apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 libmysqlclient15off libpq5 mysql-common
  openssl openssl-blacklist ssl-cert
0 päivitetty, 12 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 11,1Mt.
Toiminnon jälkeen käytetään 25,1M t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://security.debian.org lenny/updates/main openssl 0.9.8g-15+lenny1 [1036kB]
.......

Konfigurointi

Apachen kaikki konfigurointitiedostot sijaitsevat kansiossa /etc/apache2. Niitä konfiguroimalla voidaan muuttaa ohjelman toimintaa. Tiedostojen ja kansioiden tarkoitus on seuraava:

apache2.conf    =>    Yleiset asetukset
ports.conf      =>    Mitä portteja apache kuuntelee
mods-available  =>    Käytettävissä olevat modulit
sites-available =>    Käytettävissä olevat sivut
conf.d          =>    Aliakset

Apachea voidaan hallita kahdella eri komennolla, joiden käytöstä alla esimerkki.

apache:/etc/apache2# invoke-rc.d apache2 stop
Stopping web server: apache2 ... waiting .
apache:/etc/apache2# invoke-rc.d apache2 start
Starting web server: apache2.
apache:/etc/apache2# invoke-rc.d apache2 restart
Restarting web server: apache2 ... waiting .
apache:/etc/apache2# apache2ctl stop
apache:/etc/apache2# apache2ctl start
apache:/etc/apache2# apache2ctl restart
apache:/etc/apache2# 

Sivujen lisääminen ja poistaminen tapahtuu seuraavilla komennoilla

NAME
       a2ensite, a2dissite - enable or disable an apache2 site / virtual host

SYNOPSIS
       a2ensite [site]

       a2dissite [site]

DESCRIPTION
       This manual page documents briefly the a2ensite and a2dissite commands.

       a2ensite is a script that enables the specified site (which contains a <VirtualHost> block) within the apache2
       configuration.  It does this by creating symlinks within /etc/apache2/sites-enabled.  Likewise, a2dissite dis‐
       ables  a site by removing those symlinks.  It is not an error to enable a site which is already enabled, or to
       disable one which is already disabled.


Modulien lisääminen ja poistaminen vastaavasti

NAME
       a2enmod, a2dismod - enable or disable an apache2 module

SYNOPSIS
       a2enmod [module] 

       a2dismod [module]

DESCRIPTION
       This manual page documents briefly the a2enmod and a2dismod commands.

       a2enmod  is a script that enables the specified module within the apache2 configuration.  It does this by cre‐
       ating symlinks within /etc/apache2/mods-enabled.  Likewise, a2dismod disables a module by removing those  sym‐
       links.   It  is  not  an error to enable a module which is already enabled, or to disable one which is already
       disabled.

Oletusasetuksilla Apache kuuntelee porttia 80 ja ohjaa kaikki pyynnöt kansioon /var/www. Oletusasetuksilla voidaan tehdä todella monipuolisia ja luotettavia järjestelmiä, mutta vaativissa kohteissa kannattaa syventyä ohjelman toimintaan.

Ongelmatilanteissa kannattaa ensimmäiseksi tarkistaa seuraavat tiedostot komennoilla:

tail /var/log/apache2/access.log
tail /var/log/apache2/error.log

Aliakset

Aliakset ovat sivuja, joihin pääsee käsiksi laittamalla selaimeen osoitteen jälkeen kansion esimerkiksi http://apache.testiverkko.info/testi Tätä vastaava alias-tiedosto on esitetty alla ja siinä kyseinen osoite ohjataan koneen /srv/www/testikansio-kansioon. Aliakset ovat siis kätevä tapa linkittää osoitteeseen tuleva kansio koneen sisäiseen kansioon. Ei tarvitse tehdä edes muutoksia nimipalvelimeen. Asennus tapahtuu seuraavasti

Tehdään alias-tiedosto, jonka pitäisi näyttää seuraavalta

apache:/etc/apache2/conf.d# cat testialias 
 
Alias /testi /srv/www/testikansio
<Directory "/srv/www/testikansio">
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	Order allow,deny
	Allow from all
</Directory>

Tehdään kansio komennolla

mkdir -p /srv/www/testikansio

Käynnistetään apache uudestaan

apache2ctl restart

Mennään selaimella osoitteeseen

http://apache.testiverkko.info/testi

Virtual hostit - Apache2

Virtual host on tapa, jolla luodaan nimi-sivu-yhteensopivuus. Tämä tarkoittaa sitä, että yhteen IP-osoitteeseen voi olla monta eri nimi-ohjausta. Siis nimet www.testiverkko.info, webmail.testiverkko.info, intra.testiverkko.info ja www.toinenverkko.info voi saada nimipalvelulta vastaukseksi saman IP-osoitteen, jolloin selain ohjautuu samaan koneeseen. Apache päättelee selaimen kyselystä, että mihin kansioon se ohjataan.

Alla on esimerkki, jossa palvelimeen tuleva selaimen yhteydenotto, joka on osoitettu osoitteeseen webmail.testiverkko.info, ohjataan kansioon /srv/www/webmail. Asennus tapahtuu seuraavasti. Luodaan tiedosto, jonka pitäisi näyttää seuraavalta.

apache:/etc/apache2/sites-available# cat webmail 
<VirtualHost *:80>
	ServerName	webmail.testiverkko.info
        ServerAdmin 	webmaster@testiverkko.info
        DocumentRoot 	/srv/www/webmail
 
        <Directory /srv/www/webmail>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Julkaistaan sivusto alla olevan esimerkin mukaisesti

apache:/etc/apache2/sites-available# mkdir /srv/www/webmail
apache:/etc/apache2/sites-available# a2ensite webmail
Enabling site webmail.
Run '/etc/init.d/apache2 reload' to activate new configuration!
apache:/etc/apache2/sites-available# apache2ctl restart
apache:/etc/apache2/sites-available# 
Lopuksi pitää muistaa tehdä DNS-palvelimelle uusi A-tietue, joka vastaa ServerName-kohtaa!

Apache2 ja HTTPS

Nykyisissä verkoissa turvallisuus on eräs tärkeimmistä asioista. Tästä syystä pitäisi suosia erilaisten salaustapojen käyttöä sovelluksissa. WWW-ympäristöissä hyvin yleisesti käytetty menetelmä on SSL/TLS-salaus, jossa salattu yhteys muodosteen perinteisiä salausmenetelmiä hyväksi käyttäen. Käyttäjälle salaus näkyy yleensä HTTPS-osoitteina.

Apachessa voit laittaa sivusi suojatun yhteyden taakse seuraavasti:

apache:/etc/apache2/sites-available# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
apache:/etc/apache2/sites-available# mkdir /etc/apache2/ssl
apache:/etc/apache2/sites-available# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/webmail.testiverkko.info.pem
apache:/etc/apache2/sites-available# cat webmail 
<VirtualHost *:443>
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/webmail.testiverkko.info.pem
 
        ServerName      webmail.testiverkko.info
        ServerAdmin     webmaster@testiverkko.info
        DocumentRoot    /srv/www/webmail
 
        <Directory /srv/www/webmail>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>
apache:/etc/apache2/sites-available# apache2ctl restart

Otetaan yhteys osoitteeseen https://webmail.testiverkko.info


Tässä on tehty https-salaus mahdollisimman yksinkertaisesti. Lopputuloksena on salattu yhteys, mutta selaimet herjaavat sertifikaatista, joka on allekirjoitettu itsellään (self-signed cert). Täydellinen järjestelmä vaatii kolmannen osapuolen sertifikaatin, jossa ko. osapuoli on todistanut www-palvelimen olevan se miksi itseään väittää. Alla lisää asiasta

http://www.oulu.fi/atkk/ohjeet/www/ssl-sertifikaatti.html
http://www.debian-administration.org/articles/618

Seuraavassa esimerkki:

Tehdään CA-avain ja -sertifikaatti. Tämä tehdään siis sillä koneella, joka on valmis todentamaan www-palvelimen.

mkdir /etc/apache2/ssl/ca
openssl genrsa -des3 -out /etc/apache2/ssl/ca/ca.key -rand rand.dat 1024
openssl req -new -x509 -days 365 -key /etc/apache2/ssl/ca/ca.key -out /etc/apache2/ssl/ca/ca.cert

Tehdään konekohtainen avain ja sertifikaatti. Tämä tehdään www-palvelimella.

openssl genrsa -des3 -out /etc/apache2/ssl/www.testiverkko.info.key -rand rand.dat 1024
openssl req -new -days 365 -key /etc/apache2/ssl/www.testiverkko.info.key -out /etc/apache2/ssl/www.testiverkko.info.csr

Allekirjoitetaan konekohtainen sertifikaatti CA-sertifikaatilla. Tämä voidaan tehdä kummalla koneella vaan.

openssl ca -in /etc/apache2/ssl/www.testiverkko.info.csr \
 -keyfile /etc/apache2/ssl/ca/ca.key -cert /etc/apache2/ssl/ca/ca.cert \
 -out /etc/apache2/ssl/www.testiverkko.info.cert -outdir /etc/apache2/ssl

Otetaan käyttöön

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/certs/www.testiverkko.info.cert
SSLCertificateKeyFile /etc/apache2/ssl/private/www.testiverkko.info.key
SSLCACertificateFile /etc/apache2/ssl/ca/ca.cert
SSLCACertificatePath /etc/apache2/ssl/ca

Testataan sertifikaatin tilaa

openssl s_client -showcerts -connect www.testiverkko.info:443
openssl req -in /etc/apache2/ssl/www.testiverkko.info.csr -noout -text
openssl x509 -in /etc/apache2/ssl/www.testiverkko.info.csr -noout -text

Turvallisuusparannuksia

Apachen turvallisuus pysyy kunnossa Linuxissa käyttöjärjestelmän tarjomien päivityksien kautta. Jos halutaan kuitenkin maksimoida turvallisuuden tunnetta, kannattaa tehdä seuraavat muutokset. Muutoksilla vaikutetaan esimerkiksi siihen, että kuinka paljon Apache kertoo tieto itsestään käyttäjille.

apache:/etc/apache2/conf.d# cat security
----
# Changing the following options will not really affect the security of the
# server, but might make attacks slightly more difficult in some cases.

#
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of:  Full | OS | Minimal | Minor | Major | Prod
# where Full conveys the most information, and Prod the least.
#
ServerTokens Minimal
#ServerTokens Full

#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
#
ServerSignature Off
#ServerSignature On

#
# Allow TRACE method
#
# Set to "extended" to also reflect the request body (only for testing and
# diagnostic purposes).
#
# Set to one of:  On | Off | extended
#
TraceEnable Off
#TraceEnable On
----
apache:/etc/apache2/conf.d# apache2ctl restart
apache:/etc/apache2/conf.d#

PHP

PHP on rajapinta, jolla voidaan luoda sisältöä esimerkiksi HTML-sivuille. Asiaan liittyviä oppaita on saatavana paljon, joista alla muutama linkki

http://users.jyu.fi/~kolli/ITK215_05/php/
http://www.php.net/
http://www.ohjelmointiputka.net/opas.php?tunnus=phpj
http://wiki.mureakuha.com/wiki/PHP-opas

PHP:n määritelmä

"PHP5 is an HTML-embedded scripting language. Much of its syntax is borrowed
from C, Java and Perl with a couple of unique PHP-specific features thrown
in. The goal of the language is to allow web developers to write dynamically
generated pages quickly."

PHP on siis rajapinta palvelimella olevan tiedoston ja selaimelle toimitettavan tiedoston välillä. PHP voidaan kutsua erilaisia funktioita, määritellä muuttujia ja tehdä mitä ihmeellisimpiä asioita. Tällä hetkellä on käytettävissä kaksi versiota, versio 4 ja versio 5. Toiminnallisuudessa on eroja. Me käytämme jälkimmäistä.

PHP on uskomattoman hyvä rajapinta mitä erilaisimpiin ratkaisuihin. Yksinkertaisia etuja ovat ilmaiset kehitystyökalut, integrointi uskomattomaan määrään erilaisia yhteysrajapintoja (ldap, snmp, mysql, imap, pam..), keveys ja yksinkertaisuus.

Asennus ja käyttöönotto tapahtuu alla olevan esimerkin mukaisesti.

apache:/etc/apache2# apt-get install php5
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  apache2-mpm-prefork libapache2-mod-php5 php5-common
Ehdotetut paketit:
  php-pear
Seuraavat paketit POISTETAAN:
  apache2-mpm-worker
Seuraavat UUDET paketit asennetaan:
  apache2-mpm-prefork libapache2-mod-php5 php5 php5-common
0 päivitetty, 4 uutta asennusta, 1 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 3086kt.
Toiminnon jälkeen käytetään 6320k t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://ftp.fi.debian.org lenny/main apache2-mpm-prefork 2.2.9-10+lenny2 [238kB]
----
Creating config file /etc/php5/apache2/php.ini with new version
Reloading web server config: apache2.
Setting up php5 (5.2.6.dfsg.1-1+lenny2) ...
apache:/etc/apache2# pico /var/www/info.php
<?php
phpinfo();
?>
apache:/etc/apache2# apache2ctl restart
apache:/etc/apache2#

Tämän jälkeen osoitteessa http://apache.testiverkko.info näkyy tietoa rajapinnan toimivuudesta. Seuraavaksi on hieman esitelty sitä, että mikä PHP on.

apache:/etc/apache2# pico /var/www/testi.php 
<html>
<body>
<?php 
$nimi = 'Teemu'; 
$syntymavuosi = 1978; 
$vuosi = 2008;
$ika = $vuosi - $syntymavuosi;
 
print ("$nimi on $ika vuotta vanha.")
 
?> 
</body>
</html>
apache:/etc/apache2# 

Menemällä selaimella osoitteeseen http://apache.testiverkko.info/testi.php näkee, miten selain näyttää tekstin Teemu on 30 vuotta vanha. PHP-tiedostoon on määritelty muuttujia, joille on tehty laskutoimitus ennen selaimelle toimitusta. Muuttuja voi olla mikä vain, eli vaikkapa lämpötila, jonka arvoa PHP lukee anturilta. Seuraavaksi suoritetaan PHP:n tuntema sisäinen funktio.

apache:/etc/apache2# pico /var/www/date.php 
<html>
<body>
<?php
echo "Kello on ".date('H:i:s').'</br>';
echo "T&auml;n&auml;&auml;n on ".date('j.n.Y');
?>
</body>
</html>
apache:/etc/apache2# 

Yllä suoritetaan siis funktio, joka hakee ajan ja päivämäärän. Tällaisia sisäänrakennettuja funktioita on valtavan paljon, mutta niitä voidaan määritellä luonnollisesti myös itse. Käytännössä funktio tekee määritetyn operaation, ja palauttaa määritellyn arvon. Esimerkiksi, jos edellä mainittu lämpötila olisi miinuksen puolella, numerot olisivat sinisiä, ja plussalla punaisia.

apache:/etc/apache2# pico /var/www/loop.php 
<html>
<body>
<?php
 
// Kommentti
/* Tämäkin on kommentti */
   $taulukko = array('Ensiksi','toiseksi', 'kolmanneksi', 'viimeiseksi');
 
   for ( $i = 0; $i <= 3; $i += 1) {
       print $taulukko[$i];
 
       for ( $j = 0; $j <= pow(5,10); $j += 1) {;
       }
 
       echo "\n => kello on ".date('H:i:s').'</br>';
   }
?>
</body>
</html>
apache:/etc/apache2# 

Viimeisessä esimerkissä on esitelty muusta ohjelmoinnista tuttuja käsitteitä, kuten taulukkoja ja looppeja. Samalla huomataan, kuinka kone kuormittuu selaimella tiedostoa haettaessa.

Käytännön sovellus, hallintakansio

Tehdään PHP-ohjelmia, joilla saadaan tärkeitä tietoja koneen toiminnasta. Tarvittaessa voidaan tehdä ohjelmia, joilla voidaan hallita konetta.
Ongelmaksi muodostuu tietoturva eli pitää pystyä rajoittamaan pääsyä ohjelmiin!
1. Tehdään ohjelmille kansio, johon sallitaan pääsy vain tietystä IP-osoitteesta
lamp:~# mkdir /srv/www/hallinta
lamp:~# cd /etc/apache2/conf.d/
lamp:/etc/apache2/conf.d# cat hallinta
Alias /hallinta /srv/www/hallinta
<Directory "/srv/www/hallinta">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order Allow,Deny
        Allow from 213.250.106.204
</Directory>
lamp:/etc/apache2/conf.d# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
lamp:/etc/apache2/conf.d# 

2. Tehdään PHP-ohjelma, joka kertoo tietoa järjestelmästä
lamp:~# cat /srv/www/hallinta/syslog.php
<html>
<body>
 
<?php
        $Lokitiedosto = "/var/log/syslog";
        $Kahva = fopen($Lokitiedosto, 'r');
        while (!feof($Kahva))
        {
                $Sisalto = fgets($Kahva, 256);
                print $Sisalto;
                print "<br />";
        }
        fclose($Kahva);
?>
</body>
</html>

3. Annetaan avattavalle lokitiedostolle lukuoikeus
lamp:~# chmod a+r /var/log/syslog
lamp:~#

Ei muutako testaamaan!

MySQL-tietokanta

MySQL erittäin paljon käytetty tietokantaohjelmisto. Siihen löytyvästi hirvittävä määrä erilaista ohjeistusta ja opastusta. Alla olevassa linkissä eräs hyvistä MySQL-opaista:

http://www.ratol.fi/opensource/mysql/

Seuraavassa on näytetty, miten asennus voidaan suorittaa. MySQL on asennukseen jälkeen heti käytössä.

apache:/etc/apache2# apt-get install mysql-server
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  libdbd-mysql-perl libdbi-perl libhtml-template-perl libnet-daemon-perl libplrpc-perl libterm-readkey-perl
  mysql-client-5.0 mysql-server-5.0 psmisc
Ehdotetut paketit:
  dbishell libipc-sharedcache-perl libcompress-zlib-perl tinyca
Seuraavat UUDET paketit asennetaan:
  libdbd-mysql-perl libdbi-perl libhtml-template-perl libnet-daemon-perl libplrpc-perl libterm-readkey-perl
  mysql-client-5.0 mysql-server mysql-server-5.0 psmisc
0 päivitetty, 10 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 35,5Mt.
Toiminnon jälkeen käytetään 105M t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://ftp.fi.debian.org lenny/main libnet-daemon-perl 0.38-1.1 [45,8kB]
----
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
Setting up libhtml-template-perl (2.9-1) ...
Setting up libterm-readkey-perl (2.30-4) ...
Setting up mysql-server (5.0.51a-24) ...
apache:/etc/apache2# 

Järjestelmä tarjoaa oletuksena komentorivipohjaisen hallinnan. Seuraavaksi on asennettu erittäin paljon käytetty phpMyAdmin. Hallintaliittymä löytyy asennuksen jälkeen osoitteesta http://apache.testiverkko.info/phpmyadmin.

apache:/etc/apache2# apt-get install php5-mysql phpmyadmin php5-gd
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  defoma fontconfig-config libfontconfig1 libfreetype6 libgd2-xpm libjpeg62 libltdl3 libmcrypt4 libpng12-0 libt1-5
  libxpm4 php5-mcrypt ttf-dejavu ttf-dejavu-core ttf-dejavu-extra
Ehdotetut paketit:
  defoma-doc dfontmgr psfontmgr x-ttcidfont-conf libfreetype6-dev libgd-tools libmcrypt-dev mcrypt
Suositellut paketit:
  libft-perl
Seuraavat UUDET paketit asennetaan:
  defoma fontconfig-config libfontconfig1 libfreetype6 libgd2-xpm libjpeg62 libltdl3 libmcrypt4 libpng12-0 libt1-5
  libxpm4 php5-gd php5-mcrypt php5-mysql phpmyadmin ttf-dejavu ttf-dejavu-core ttf-dejavu-extra
0 päivitetty, 18 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 9052kt.
Toiminnon jälkeen käytetään 22,9M t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://ftp.fi.debian.org lenny/main defoma 0.11.10-0.2 [101kB]
Nouda:2 http://ftp.fi.debian.org lenny/main ttf-dejavu-core 2.25-3 [1360kB]
----
Setting up php5-gd (5.2.6.dfsg.1-1+lenny2) ...
Setting up php5-mcrypt (5.2.6.dfsg.1-1+lenny2) ...
Setting up php5-mysql (5.2.6.dfsg.1-1+lenny2) ...
Setting up phpmyadmin (4:2.11.8.1-5) ...
apache:/etc/apache2# apache2ctl restart
apache:/etc/apache2# 
Huom! phpMyAdmin sallii oletuksena pääsyn esimerkiksi tietokannan pääkäyttäjälle (root)!
Turvallisuuttaa voidaan parantaa esimerkiksi rajoittamalla pääsyä sivustolle tai/ja estää pääkäyttäjän sisäänkirjautuminen.
Pääsyn rajoittaminen
lamp:/etc/phpmyadmin# cat apache.conf
# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
        Options Indexes FollowSymLinks
        DirectoryIndex index.php

        Order Allow,Deny
        Allow from 213.250.106.204

Pääkäyttäjän sisäänkirjautumisen estäminen
lamp:/etc/phpmyadmin# cat config.inc.php
<?php
/**
 * Debian local configuration file
 *
 * This file overrides the settings made by phpMyAdmin interactive setup
 * utility.
 *
 * For example configuration see /usr/share/doc/phpmyadmin/examples/config.default.php.gz
 *
 * NOTE: do not add security sensitive data to this file (like passwords)
 * unless you really know what you're doing. If you do, any user that can
 * run PHP or CGI on your webserver will be able to read them. If you still
 * want to do this, make sure to properly secure the access to this file
 * (also on the filesystem level).
 */

/**
 * Server(s) configuration
 */
$i = 0;
// The $cfg['Servers'] array starts with $cfg['Servers'][1].  Do not use $cfg['Servers'][0].
// You can disable a server config entry by setting host to .
$i++;

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['AllowRoot'] = FALSE;

Tiedostot

MySQL-tietokannat sijaitsevat kansiossa /var/lib/mysql. Kansiossa on jokaisesta tietokannasta oma kansio, joiden sisällä on tietokantojen taulut tiedostoina.. MySQL:n konfiguraatiotiedostot sijaitsevat kansiossa /etc/mysql/, joista eräs tärkeimmistä on tiedosto my.cnf. my.cnf-tiedosto on määritelty esimerkiksi kuunneltava portti ja kuunnelta osoite. Oletuksena MySQL käyttää kommunikointiin porttia 3306 ja kuuntelee vain paikallista osoitetta eli 127.0.0.1.

Tietokannat ja käyttäjät

Tietokantojen luonnin voi tehdä phpmyadmin:lla tai komentoriviltä. Alla esimerkki, jossa on luotu tietokanta ja sille käyttäjä. Käyttäjä luo tietokantaan taulun, jossa on kolme saraketta. Seuraavan jälkeen tietokantaan luotu taulu on käytettävissä.

apache:/etc/apache2# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33
Server version: 5.0.51a-24 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE testikanta;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL ON testikanta.* TO 'testaaja'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye
apache:/etc/apache2# mysql -u testaaja -p testikanta
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.0.51a-24 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE TABLE `users` ( `pkid` SMALLINT(3) NOT NULL PRIMARY KEY AUTO_INCREMENT, `user` VARCHAR(120) NOT NULL DEFAULT 'nimi', \
    -> `password` VARCHAR(120) NOT NULL DEFAULT 'vaihda') ;
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye
apache:/etc/apache2#

Tietokannat ja peruskomennot

Seuraavassa muutama peruskomento

#Näytä käytössä oleva tietokannat
SHOW DATABASES;
 
#Valitaan tietokanta
USE tietokanta;
 
#Näytetään kannan taulut
SHOW TABLES;
 
#Lisätään tauluun sisältöä
INSERT INTO taulu (kenttä1,kenttä2) VALUES ('arvo1','arvo2');
 
#Haetaan taulusta sisältöä
SELECT * FROM taulu WHERE kenttä1>3
 
#Päivitetään kentän sisältö 
UPDATE taulu SET kenttä='arvo1', arvo2+1 WHERE arvo3=10;
 
#Poistetaan taulusta sisältöä  
DELETE FROM taulu WHERE kenttä1>3;
 
#Poistetaan taulu 
DROP TABLE taulu;
 
#Poistetaan tietokanta
DROP DATABASE tietokanta;
 
#Poistutaan liittymästä
exit;

Salasanat ja käyttäjät

Kaikkien käyttäjien salasanat ovat mysql-tietokannassa user-taulussa. Salasanojen muutokset voidaan tehdä kyseistä taulua käsittelemällä. Käyttäjän ja tietokannan liittäminen tapahtuu myös mysql-tietokannassa, mutta db-taulussa.

Alla on esitetty esimerkki, että miten täytyy toimia pääkäyttäjän salasanan unohtuessa.

#Pysäytetään MySQL
invoke-rc.d mysql stop
 
#Käynnistetään uudelleen, mutta ilman käyttöoikeuksia
mysqld --skip-grant-tables
 
#Kirjaudutaan sisälle pääkäyttäjänä
mysql -u root
 
#Päivitetään root-käyttäjän salasana
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
 
#Päivitetään käyttöoikeudet 
FLUSH PRIVILEGES;
 
#Poistutaan 
exit;
 
#Käynnistetään MySQL uudestaan
invoke-rc.d mysql restart

Varmuuskopiointi

Varmuuskopiointi voidaan tehdä phpmyadmin:lla, mutta hyvin yleinen tapa on käyttää komentoriviä. Tämä siksi, että toimenpide voidaan automatisoida helposti sopivalla skriptillä ja käyttäen cronia.

Varmuuskopiointi tapahtuu seuraavalla käskyllä

mysqldump -u käyttäjä -psalasana  tietokanta | bzip2 > Backup-"$(date +%y%m%d)".sql.bz2

Kopio palautetaan seuraavasti

bunzip2 < Backup-090109.sql.bz2 | mysql -u käyttäjä -psalasana  tietokanta 

Sisällysluetteloon


WWW-ympäristö, LLPP

Edellisessä tutustuttiin LAMP-ympäristöön, joka WWW-käytössä erittäin toimiva. LAMP on erittäin hyvä esimerkki siitä, mitä avoimella lähdekoodilla voidaan parhaimmillaan saavuttaa. LAMP-ympäristöstä on tullut monia variaatioita, jotka tunnetaan esimerkiksi nimillä WAMP ja XAMPP. Avoimen lähdekoodien hienoin ominaisuus on se, että ne ovat erittäin hyvin yhteensopivia. Esimerkiksi Apache voidaan korvata helposti toisella WWW-palvelinohjelmalla ja tietokannat ovat muutettavissa. Tässä onkin avoimien järjestelmien hienous, eli vältetään Vendor lock-in-ilmiö. Ei sidota investoinnilla itseään kiinni ratkaisuun, joka ei toimi ympäristöön sopivalla tavalla. Tarkoittaa käytännössä sitä, että maksetaan esimerkiksi ohjelmistosta 10000 €, joka ei ilman jatkuvaa uudelleen käynnistämistä ja huolenpitoa edes toimi. Ohjelmisto vaatii kunnolla toimiakseen saman valmistajan 5000 € lisäpaketin, jolla ehkä saavutetaan haluttu toiminnallisuus. Jos järjestelmää halutaan muokata, se onnistuu odottamalla uutta versiota, tai ostamalla jälleen uusi lisäpaketti.

Lyhenne LLPP tulee sanoista Linux, Lighttpd, PostgreSQL ja PHP. Lighttpd on erittäin pieni ja kevyt WWW-palvelinohjelmisto. Vahvuus on yksinkertaisuus ja sitä kautta varmuus ja suorituskyky. Lisämoduulien määrä on murto-osa Apachen tarjoamista, mutta silti täysin riittävä erittäin moneen tarkoitukseen. PostgreSQL on tietokanta-alusta, jonka vahvuus on muokattavuudessa ja joidenkin arvioiden mukaan toimintavarmuudessa.

Lighttpd

Lighttpd:n asennus tapahtuu alla olevan esimerkin mukaisesti. Palvelu on heti käytettävissä.

lighty:~# apt-get install lighttpd
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  fam libfam0 libterm-readkey-perl libterm-readline-perl-perl
Ehdotetut paketit:
  openssl rrdtool apache2-utils
Seuraavat UUDET paketit asennetaan:
  fam libfam0 libterm-readkey-perl libterm-readline-perl-perl lighttpd
0 päivitetty, 5 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 492kt.
Toiminnon jälkeen käytetään 1495k t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://ftp.fi.debian.org lenny/main fam 2.7.0-13.3 [70,3kB]
Nouda:2 http://ftp.fi.debian.org lenny/main libfam0 2.7.0-13.3 [27,9kB]
Nouda:3 http://ftp.fi.debian.org lenny/main libterm-readkey-perl 2.30-4 [33,2kB]
Nouda:4 http://ftp.fi.debian.org lenny/main libterm-readline-perl-perl 1.0302-1 [52,0kB]
Nouda:5 http://ftp.fi.debian.org lenny/main lighttpd 1.4.19-5 [308kB]
Noudettiin 492kt ajassa 4s (114kt/s)            
Selecting previously deselected package fam.
(Reading database ... 33291 files and directories currently installed.)
Unpacking fam (from .../fam_2.7.0-13.3_i386.deb) ...
Selecting previously deselected package libfam0.
Unpacking libfam0 (from .../libfam0_2.7.0-13.3_i386.deb) ...
Selecting previously deselected package libterm-readkey-perl.
Unpacking libterm-readkey-perl (from .../libterm-readkey-perl_2.30-4_i386.deb) ...
Selecting previously deselected package libterm-readline-perl-perl.
Unpacking libterm-readline-perl-perl (from .../libterm-readline-perl-perl_1.0302-1_all.deb) ...
Selecting previously deselected package lighttpd.
Unpacking lighttpd (from .../lighttpd_1.4.19-5_i386.deb) ...
Processing triggers for man-db ...
Setting up fam (2.7.0-13.3) ...
Starting file alteration monitor: FAM.
Setting up libfam0 (2.7.0-13.3) ...
Setting up libterm-readkey-perl (2.30-4) ...
Setting up libterm-readline-perl-perl (1.0302-1) ...
Setting up lighttpd (1.4.19-5) ...
Starting web server: lighttpd.
lighty:~#

Suurin osa ohjelman muutoksista tehdään kansion /etc/lighttpd tiedostoa lighttpd.conf muokkaamalla. Erittäin hyvä ohjeistus löytyy alla olevasta osoitteesta

http://redmine.lighttpd.net/wiki/lighttpd

Ohjelmaa käytetään alla olevan esimerkin komennoilla

lighty:~# invoke-rc.d lighttpd stop
Stopping web server: lighttpd.
lighty:~# invoke-rc.d lighttpd start
Starting web server: lighttpd.
lighty:~# invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
lighty:~# 

Aliakset - Lighttpd

Seuraavassa esimerkki aliaksista.

lighty:/etc/lighttpd# cat lighttpd.conf 
# Debian lighttpd configuration file
# 

############ Options you really have to take care of ####################

## modules to load
# mod_access, mod_accesslog and mod_alias are loaded by default
# all other module should only be loaded if neccesary
# - saves some time
# - saves memory
----
alias.url = ( "/testi" => "/srv/www/testikansio" )
---
lighty:/etc/lighttpd# mkdir -p /srv/www/alias
lighty:/etc/lighttpd# invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
lighty:/etc/lighttpd# touch /srv/www/alias/index.html
lighty:/etc/lighttpd#

Virtual Hostit - Lighttpd

Seuraavassa esimerkki virtual hostauksesta.

lighty:/etc/lighttpd# cat lighttpd.conf 
# Debian lighttpd configuration file
# 

############ Options you really have to take care of ####################

## modules to load
# mod_access, mod_accesslog and mod_alias are loaded by default
# all other module should only be loaded if neccesary
# - saves some time
# - saves memory
----

$HTTP["host"] =~ "virtual.testiverkko.info" {
        server.document-root = "/srv/www/virtual/"
}
----
lighty:/etc/lighttpd# mkdir -p /srv/www/virtual
lighty:/etc/lighttpd# invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
lighty:/etc/lighttpd# touch /srv/www/virtual/index.html
lighty:/etc/lighttpd# 

Seuraavaksi tehdään edellä olleiden esimerkkien mukaisesti DNS-palvelimelle nimiesittely (A-tietue).

LLPP => PHP

PHP:n käyttöönotto tapahtuu seuraavan esimerkin mukaisesti

lighty:/etc/lighttpd# apt-get install php5-cgi
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  php5-common
Ehdotetut paketit:
  php-pear
Seuraavat UUDET paketit asennetaan:
  php5-cgi php5-common
0 päivitetty, 2 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 5273kt.
Toiminnon jälkeen käytetään 11,4M t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://ftp.fi.debian.org lenny/main php5-common 5.2.6.dfsg.1-1+lenny2 [363kB]
Nouda:2 http://ftp.fi.debian.org lenny/main php5-cgi 5.2.6.dfsg.1-1+lenny2 [4910kB]
Noudettiin 5273kt ajassa 35s (149kt/s)                                                                                 
Selecting previously deselected package php5-common.
(Reading database ... 33439 files and directories currently installed.)
Unpacking php5-common (from .../php5-common_5.2.6.dfsg.1-1+lenny2_i386.deb) ...
Selecting previously deselected package php5-cgi.
Unpacking php5-cgi (from .../php5-cgi_5.2.6.dfsg.1-1+lenny2_i386.deb) ...
Processing triggers for man-db ...
Setting up php5-common (5.2.6.dfsg.1-1+lenny2) ...
Setting up php5-cgi (5.2.6.dfsg.1-1+lenny2) ...

Creating config file /etc/php5/cgi/php.ini with new version
lighty:/etc/lighttpd# lighttpd-enable-mod 
Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl status userdir 
Already enabled modules: 

 Enable module: fastcgi
Enabling fastcgi: ok
Run /etc/init.d/lighttpd force-reload to enable changes
lighty:/etc/lighttpd# invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
lighty:/etc/lighttpd# pico /var/www/info.php
<?php
phpinfo();
?>
lighty:/etc/lighttpd# 

Osoitteesta http://virtual.testiverkko.info/info.php voidaan havaita, että PHP-rajapinta toimii.

PostgreSQL ja PHP

PostgreSQL asennus tapahtuu seuraavan esimerkin mukaisesti

lighty:~# apt-get install postgresql-8.3
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  libpq5 openssl openssl-blacklist postgresql-client-8.3 postgresql-client-common postgresql-common ssl-cert
Ehdotetut paketit:
  ca-certificates oidentd ident-server postgresql-doc-8.3
Seuraavat UUDET paketit asennetaan:
  libpq5 openssl openssl-blacklist postgresql-8.3 postgresql-client-8.3 postgresql-client-common postgresql-common
  ssl-cert
0 päivitetty, 8 uutta asennusta, 0 poistettavaa ja 2 päivittämätöntä.
Noudettavaa arkistoa 14,8Mt.
Toiminnon jälkeen käytetään 35,3M t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://ftp.fi.debian.org lenny/main openssl-blacklist 0.4.2 [6338kB]
Nouda:2 http://security.debian.org lenny/updates/main openssl 0.9.8g-15+lenny1 [1036kB]    
----
Creating new cluster (configuration: /etc/postgresql/8.3/main, data: /var/lib/postgresql/8.3/main)...
Moving configuration file /var/lib/postgresql/8.3/main/postgresql.conf to /etc/postgresql/8.3/main...
Moving configuration file /var/lib/postgresql/8.3/main/pg_hba.conf to /etc/postgresql/8.3/main...
Moving configuration file /var/lib/postgresql/8.3/main/pg_ident.conf to /etc/postgresql/8.3/main...
Configuring postgresql.conf to use port 5432...
Starting PostgreSQL 8.3 database server: main.
lighty:~# 

Tietokantojen ja käyttäjien luominen tapahtuu seuraavasti

lighty:~# su postgres
postgres@lighty::/etc$ createuser testaaja
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
postgres@lighty::/etc$ createdb testikanta --owner=testaaja
postgres@lighty::/etc$ exit
exit
lighty::/etc$adduser testaaja
Adding user `testaaja' ...
Adding new group `testaaja' (1003) ...
Adding new user `testaaja' (1003) with group `testaaja' ...
Creating home directory `/home/testaaja' ...
Copying files from `/etc/skel' ...
Anna uusi UNIX-salasana: 
Anna uusi UNIX-salasana uudelleen: 
passwd: salasanan päivitys onnistui
Muutetaan käyttäjän testaaja tietoja
Syötä uusi arvo tai paina ENTER jättääksesi oletuksen 
	Koko nimi []:  
	Huonenumero []: 
	Työpuhelin []: 
	Kotipuhelin []: 
	Muu []: 
Is the information correct? [Y/n] y
lighty::/etc$ su testaaja
testaaja@lighty::/etc$ psql 
psql: FATAL:  database "testaaja" does not exist
testaaja@lighty::/etc$ man psql
testaaja@lighty::/etc$ psql -d testikanta
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

testikanta=> \?
testikanta=> \q
testaaja@lighty::/etc$ 

PHP-rajapinta asennetaan seuraavan esimerkin mukaisesti

lighty:~# apt-get install php5-pgsql
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat UUDET paketit asennetaan:
  php5-pgsql
0 päivitetty, 1 uutta asennusta, 0 poistettavaa ja 2 päivittämätöntä.
Noudettavaa arkistoa 52,4kt.
Toiminnon jälkeen käytetään 197k t lisää levytilaa.
Nouda:1 http://ftp.fi.debian.org lenny/main php5-pgsql 5.2.6.dfsg.1-1+lenny2 [52,4kB]
Noudettiin 52,4kt ajassa 0s (240kt/s)
Selecting previously deselected package php5-pgsql.
(Reading database ... 34476 files and directories currently installed.)
Unpacking php5-pgsql (from .../php5-pgsql_5.2.6.dfsg.1-1+lenny2_i386.deb) ...
Setting up php5-pgsql (5.2.6.dfsg.1-1+lenny2) ...
lighty:~#

pgAdmin

pgAdmin on postgresql-palvelimen hallintaa tarkoitettu työkalu. Ohjelma on saatavana monille alustoille, mukaan lukien Windows. Posgresql-palvelinta on kuitenkin konfiguroitava, ennen kuin sitä pystytään hallita muualta. Tämä muuttaminen tapahtuu seuraavasti.

Palvelin kuuntelee pelkästään sisäisiä yhteyksiä
llpp:/etc/postgresql/8.3/main# netstat -ltun | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:5432                :::*                    LISTEN
llpp:/etc/postgresql/8.3/main# cat postgresql.conf
----------
# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
----------
llpp:/etc/postgresql/8.3/main# /etc/init.d/postgresql-8.3 restart
Restarting PostgreSQL 8.3 database server: main.
llpp:/etc/postgresql/8.3/main# netstat -ltun | grep 5432
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN
tcp6       0      0 :::5432                 :::*                    LISTEN
llpp:/etc/postgresql/8.3/main#

Palvelin ei salli oletuksena ulkopuolisia yhteyksiä tietokantajärjestelmään. Seuraavassa listattu tämän asian määritelty tiedosto muutoksineen
llpp:/etc/postgresql/8.3/main# cat pg_hba.conf
----------
# "local" is for Unix domain socket connections only
local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

# Sallitut alueet
host    all     all     213.250.106.204/32   md5
llpp:/etc/postgresql/8.3/main# /etc/init.d/postgresql-8.3 restart
Restarting PostgreSQL 8.3 database server: main.
llpp:/etc/postgresql/8.3/main#               

Tehdään tietokantajärjestelmälle pääkäyttäjän oikeudet omaava tunnus.
llpp:/etc# su postgres
postgres@llpp:/etc$ createuser -P ville
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y
postgres@llpp:/etc$                                

Ei muutako testaamaan!

Sisällysluetteloon


Drupal

Drupal on yksi monesta CMS-järjestelmästä, joka on toteutettu LAMP-logiikalla. Drupalin asentaminen aloitetaan hakemalla uusin vakaa versio osoitteesta http://drupal.org

cd
wget http://ftp.drupal.org/files/projects/drupal-6.15.tar.gz
tar -xzvf drupal-6.15.tar.gz 
mv drupal-6.15 /srv/www/

Haetaan kielitiedosto

cd /srv/www/drupal-6.15
wget http://ftp.drupal.org/files/projects/fi-6.x-1.1.tar.gz
tar -xzvf fi-6.x-1.1.tar.gz
rm fi-6.x-1.1.tar.gz

Vaihdetaan omistus root-käyttäjään

cd /srv/www
chown -R root.root drupal-6.15

Drupal ja LAMP

Tehdään tietokanta:

mysql -u root -pSala1234
CREATE DATABASE drupal;
GRANT ALL ON drupal.* TO 'drupal'@'localhost' IDENTIFIED BY 'salasana';
exit;

Luodaan /etc/apache2/sites-available-kansioon tiedosto nimeltä drupal-6.15

pico /etc/apache2/sites-available/drupal-6.15

ja kopioidaan siihen alla oleva sisältö.

<VirtualHost *:80>
        ServerAdmin     webmaster@testiverkko.info
        ServerName      www.testiverkko.info
        DocumentRoot    /srv/www/drupal-6.15
        <Directory /srv/www/drupal-6.15>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Laita sivu näkyviin tekemällä linkin seuraavalla komennolla

a2ensite drupal-6.15

Käynnistä apache uudestaan

apache2ctl restart

Ota selaimella yhteys osoitteeseen http://www.testiverkko.info ja suorita asennus annettujen ohjeiden avulla loppuun.

Asennuksen ensimmäinen vaihe

cp /srv/www/drupal-6.15/sites/default/default.settings.php /srv/www/drupal-6.15/sites/default/settings.php 
chmod a+rwx /srv/www/drupal-6.15/sites/default/settings.php
mkdir /srv/www/drupal-6.15/sites/default/files
chmod a+rwx /srv/www/drupal-6.15/sites/default/files

Muutetaan oikeudet asennusprosessissa tulleesta vaatimuksesta

chmod a-w,a+rx /srv/www/drupal-6.15/sites/default/settings.php
chown www-data:www-data /srv/www/drupal-6.15/sites/default/files
chmod a-rwx,u+rwx /srv/www/drupal-6.15/sites/default/files

Järjestelmä on valmis käyttöön osoitteessa http://www.testiverkko.info

Sivuston toimivuuden kannalta on tärkeää, että tietyt asiat tehdään säännöllisin väliajoin. Tällaisia tehtäviä ovat esimerkiksi päivitykset. Ajastaminen tehdään lisäämällä crontab tiedostoon rivi

cd /etc/cron.d
echo "*/10 * * * *	root	/usr/bin/wget -q -O /dev/null http://www.testiverkko.info/cron.php" > drupal-cron

Drupal ja LLPP

Luodaan tietokantaja ja käyttäjä

lighty:~# su postgres
postgres@lighty:~$ createuser -P -E --no-adduser --no-createdb drupal
Enter password for new role: 
Enter it again: 
Shall the new role be allowed to create more new roles? (y/n) n
postgres@lighty:~$ createdb --encoding=UNICODE --owner=drupal drupal
postgres@lighty:~$ 

Muokataan Lighty kuntoon

lighty:~# cd /etc/lighttpd/
lighty:/etc/lighttpd# cat lighttpd.conf 
# Debian lighttpd configuration file
#
----
$HTTP["host"] =~ "virtual.testiverkko.info" {
        server.document-root = "/srv/www/drupal-6.15/"
}

lighty:/etc/lighttpd# invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
lighty:/etc/lighttpd# 

Otetaan selaimella yhteys osoitteeseen http://virtual.testiverkko.info ja suoritetaan asennus annettujen ohjeiden avulla loppuun.

Asennuksen ensimmäinen vaihe

lighty:/etc/lighttpd# cd /srv/www/drupal-6.15/
lighty:/srv/www/drupal-6.15# cp sites/default/default.settings.php sites/default/settings.php
lighty:/srv/www/drupal-6.15# chmod a+rwx /srv/www/drupal-6.15/sites/default/settings.php
lighty:/srv/www/drupal-6.15# mkdir sites/default/files
lighty:/srv/www/drupal-6.15# chmod a+rwx sites/default/files
lighty:/srv/www/drupal-6.15# 

Muutetaan oikeudet asennusprosessissa tulleesta vaatimuksesta

lighty:/srv/www/drupal-6.15# chmod a-rwx,a+rx sites/default/settings.php
lighty:/srv/www/drupal-6.15# chown www-data:www-data sites/default/files
lighty:/srv/www/drupal-6.15# chmod a-rwx,u+rwx sites/default/files
lighty:/srv/www/drupal-6.15# 

Järjestelmä on valmis käyttöön osoitteessa http://virtual.testiverkko.info

Sivuston toimivuuden kannalta on tärkeää, että tietyt asiat tehdään säännöllisin väliajoin. Tällaisia tehtäviä ovat esimerkiksi päivitykset. Ajastaminen tehdään lisäämällä crontab tiedostoon rivi

cd /etc/cron.d
echo "*/10 * * * *	root	/usr/bin/wget -q -O /dev/null http://www.testiverkko.info/cron.php" > drupal-cron

Sisällysluetteloon


Moodle

Moodle on erittäin paljon käytetty avoimeen lähdekoodiin perustuva verkko-oppimisympäristö. Moodle on myös toteuttu LAMP-logiikalla.

Asentaminen alkaa

cd
wget http://download.moodle.org/download.php/direct/stable19/moodle-weekly-19.tgz
tar -xzvf moodle-weekly-19.tgz
mv moodle /srv/www/

Asennetaan Moodlen vaatimat paketit

apt-get install php5-curl php5-xmlrpc

Tehdään moodledata-hakemisto

mkdir /srv/www/moodledata
chown -R www-data.www-data /srv/www/moodledata

Tehdään tietokanta

mysql -u root -pSala1234
CREATE DATABASE moodle;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodle@localhost IDENTIFIED BY 'salasana';
exit;

Luodaan /etc/apache2/sites-available-kansioon tiedosto nimeltä moodle

pico /etc/apache2/sites-available/moodle

ja kopioidaan siihen alla oleva sisältö.

<VirtualHost *:80>
        ServerAdmin webmaster@testiverkko.info
        ServerName  moodle.testiverkko.info
        DocumentRoot /srv/www/moodle
        <Directory /srv/www/moodle>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Laitetaan sivu näkyviin tekemällä linkin seuraavalla komennolla

a2ensite moodle

Käynnistetään apache uudestaan

/etc/init.d/apache2 restart

Luodaan moodlen config.php-tiedosto

pico /srv/www/moodle/config.php

<?php  /// Moodle Configuration File 
 
unset($CFG);
 
$CFG->dbtype    = 'mysql';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle';
$CFG->dbuser    = 'moodle';
$CFG->dbpass    = 'salasana';
$CFG->dbpersist =  false;
$CFG->prefix    = 'mdl_';
 
$CFG->wwwroot   = 'http://moodle.testiverkko.info';
$CFG->dirroot   = '/srv/www/moodle';
$CFG->dataroot  = '/srv/www/moodledata';
$CFG->admin     = 'admin';
 
$CFG->directorypermissions = 00777;  // try 02777 on a server in Safe Mode
 
require_once("$CFG->dirroot/lib/setup.php");
// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,
// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.
?>

Otetaan selaimella yhteys osoitteeseen http://moodle.testiverkko.info ja suoritetaan asennus annettujen ohjeiden avulla loppuun.

Ajastetut toiminnat Moodlessa tehdään lisäämäällä /etc/cron.d kansioon tiedosto

cd /etc/cron.d
echo "*/30 * * * *	root	/usr/bin/wget -q -O /dev/null http://www.testiverkko.info/cron.php" > moodle-cron



Sisällysluetteloon


Mediawiki

MediaWiki on saanut suurta huomiota osakseen, koska esimerkiksi Wikipedia on rakennettu käyttäen kyseistä ohjelmistoa. Tämäkin ohjelma perustuu LAMP-ympäristön hyödyntämiseen.

www:~# cd
www:~# wget http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz
--2009-05-04 19:23:07--  http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz
Selvitetään osoitetta download.wikimedia.org... 208.80.152.183, 2620:0:860:2:230:48ff:fe5a:eb1e
Yhdistetään palvelimeen download.wikimedia.org|208.80.152.183|:80... yhdistetty.
HTTP-pyyntö lähetetty, odotetaan vastausta... 200 OK
Pituus: 10122254 (9,7M) [application/octet-stream]
Tallennetaan kohteeseen ”mediawiki-1.15.1.tar.gz”
 
62% [===================================>                      ] 6 292 815    213K/s  eta 19s     
----
www:~# tar -xzvf mediawiki-1.15.1.tar.gz
----
mediawiki-1.15.1/maintenance/importImages.inc.php
mediawiki-1.15.1/maintenance/dumpUploads.php
mediawiki-1.15.1/maintenance/dumpHTML.php
mediawiki-1.15.1/maintenance/sql.php
mediawiki-1.15.1/maintenance/importLogs.php
mediawiki-1.15.1/maintenance/edit.php
mediawiki-1.15.1/maintenance/convertLinks.inc
www:~# mv mediawiki-1.15.1 /srv/www

Muutetaan oikeuksia

www:~# cd /srv/www
www:/srv/www# chown -R root:root mediawiki-1.15.1
www:/srv/www# chmod a+w /srv/www/mediawiki-1.15.1/config
www:/srv/www# 

Tehdään tietokanta

mysql -u root -pSala1234
CREATE DATABASE mediawiki;
GRANT ALL ON mediawiki.* TO mediawiki@localhost IDENTIFIED BY 'salasana';
exit;

Luodaan /etc/apache2/sites-available-kansioon tiedosto nimeltä mediawiki, jossa esitellään uusi virtual host.

www:~# cat /etc/apache2/sites-available/mediawiki
<VirtualHost *:80>
        ServerAdmin webmaster@testiverkko.info
        ServerName  wiki.testiverkko.info
        DocumentRoot /srv/www/mediawiki-1.15.1
        <Directory /srv/www/mediawiki-1.15.1>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Julkaistaan sivu ja käynnistetään apache uudestaan.

www:~# a2ensite mediawiki
Enabling site mediawiki.
Run '/etc/init.d/apache2 reload' to activate new configuration!
www:~# apache2ctl restart
www:~#

Ota selaimella yhteys osoitteeseen http://wiki.testiverkko.info ja suorita asennus annettujen ohjeiden avulla loppuun.

Asennus loppuu asennusohjeen mukaisesti seuraavaan käskyyn

www:~# mv /srv/www/mediawiki-1.15.1/config/LocalSettings.php /srv/www/mediawiki-1.15.1/
www:~# chmod a-rwx,u+rx /srv/www/mediawiki-1.15.1/LocalSettings.php
www:~# 



Sisällysluetteloon


WordPress

WordPress on LAMP-logiikalla toteutettu paljon käytetty avoimeen lähdekoodiin perustuva blogi-järjestelmä.

www:~# cd
www:~# wget http://wordpress.org/latest.tar.gz
--2009-05-04 19:47:37--  http://wordpress.org/latest.tar.gz
Selvitetään osoitetta wordpress.org... 72.233.56.138, 72.233.56.139
Yhdistetään palvelimeen wordpress.org|72.233.56.138|:80... yhdistetty.
HTTP-pyyntö lähetetty, odotetaan vastausta... 200 OK
Pituus: määrittelemätön [application/x-gzip]
Tallennetaan kohteeseen ”latest.tar.gz.1”

[                                      <=>                 ] 1 624 416    213K/s   in 8,2s    

2009-05-04 19:47:46 (194 KB/s) - ”latest.tar.gz.1” tallennettu [1624416]

www:~# tar -xzvf latest.tar.gz
----
wordpress/wp-content/plugins/
wordpress/wp-content/plugins/akismet/
wordpress/wp-content/plugins/akismet/akismet.gif
wordpress/wp-content/plugins/akismet/readme.txt
wordpress/wp-content/plugins/akismet/akismet.php
wordpress/wp-content/plugins/hello.php
www:~# mv wordpress /srv/www/
www:~# cp /srv/www/wordpress/wp-config-sample.php /srv/www/wordpress/wp-config.php
www:~# 

Lisätään suomi

www:~# cd
www:~# wget http://www.arkimedia.fi/lataukset/wordpress-27-lpack-fi.zip
--2009-05-04 20:02:23--  http://www.arkimedia.fi/lataukset/wordpress-27-lpack-fi.zip
Selvitetään osoitetta www.arkimedia.fi... 217.149.52.6
Yhdistetään palvelimeen www.arkimedia.fi|217.149.52.6|:80... yhdistetty.
HTTP-pyyntö lähetetty, odotetaan vastausta... 200 OK
Pituus: 92984 (91K) [application/zip]
Tallennetaan kohteeseen ”wordpress-27-lpack-fi.zip”

100%[=========================================================>] 92 984       178K/s   in 0,5s     

2009-05-04 20:02:24 (178 KB/s) - ”wordpress-27-lpack-fi.zip” tallennettu [92984/92984]

www:~# apt-get install unzip
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Ehdotetut paketit:
  zip
Seuraavat UUDET paketit asennetaan:
  unzip
0 päivitetty, 1 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 151kt.
Toiminnon jälkeen käytetään 299k t lisää levytilaa.
Nouda:1 http://ftp.fi.debian.org lenny/main unzip 5.52-12 [151kB]
Noudettiin 151kt ajassa 1s (137kt/s)
Selecting previously deselected package unzip.
(Reading database ... 25256 files and directories currently installed.)
Unpacking unzip (from .../unzip_5.52-12_i386.deb) ...
Processing triggers for man-db ...
Setting up unzip (5.52-12) ...
www:~# unzip wordpress-27-lpack-fi.zip 
Archive:  wordpress-27-lpack-fi.zip
  inflating: fi.mo                   
www:~# mv fi.mo /srv/www/wordpress/wp-content/languages
www:~# 

Tehdään tietokanta

mysql -u root -psalasana
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'salasana';
exit;

Muokkaa tiedostoa wp-config.php korvaamalla olevassa olevat rivit alla olevilla

www:~# pico /srv/www/wordpress/wp-config.php

// ** MySQL settings ** //
define('DB_NAME', 'wordpress');    // The name of the database
define('DB_USER', 'wordpress');     // Your MySQL username
define('DB_PASSWORD', 'salasana'); // ...and password
define('DB_HOST', 'localhost');    // 99% chance you won't need to change this value
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
 
// Change this to localize WordPress.  A corresponding MO file for the
// chosen language must be installed to wp-content/languages.
// For example, install de.mo to wp-content/languages and set WPLANG to 'de'
// to enable German language support.
define(’WPLANG’, ‘fi’);

Luodaan /etc/apache2/sites-available-kansioon tiedosto nimeltä wordpress

www:~# cat /etc/apache2/sites-available/wordpress
<VirtualHost *:80>
        ServerAdmin webmaster@testiverkko.info
        ServerName  wordpress.testiverkko.info
        DocumentRoot /srv/www/wordpress
        <Directory /srv/www/wordpress>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

Laita sivu näkyviin tekemällä linkin seuraavalla komennolla

 www:~# a2ensite wordpress

Käynnistä apache uudestaan

 www:~# /etc/init.d/apache2 restart

Ota selaimella yhteys osoitteeseen http://wordpress.testiverkko.info ja suorita asennus annettujen ohjeiden avulla loppuun.

Muista ottaa asennuksen loppuvaiheessa käyttäjätunnus ja salasana talteen!


Sisällysluetteloon


Sovellusten varmuuskopionti

Lähes jokaisen LAMP-sovelluksen varmuuskopioinnissa täytyy kopioida kaksi asiaa eli asennustiedostot ja varmuuskopiointi. Mediawiki varmistetaan esimerkiksi seuraavilla komentorivin komennoilla

apt-get install bzip2
mkdir /var/backup
tar -cjf /var/backup/Wiki-backup-files-"$(date +%y%m%d)".tar.bz2 -C / srv/www/mediawiki-1.15.1
mysqldump -u root -pSala1234 mediawiki | bzip2 > /var/backup/Wiki-backup-"$(date +%y%m%d)".sql.bz2

Luonnollisesti varmuuskopiointi kannattaa automatisoida eli lisätään crontabbiin seuraavat rivit

pico /etc/crontab

0 3 * * *	root	mysqldump -u root -pSala1234 mediawiki | bzip2 > /var/backup/Mediawiki-SQL-"$(date +\%y\%m\%d)".sql.bz2
0 3 * * *	root	tar -cjf /var/backup/Mediawiki-Files-"$(date +\%y\%m\%d)".tar.bz2 -C /srv/www/mediawiki-1.15.1


Käytännön esimerkki: Drupalin kloonaus

Ensimmäinen varmuuskopioidaan tietokanta ja tiedostot

mysqldump -u drupal -psalasana drupal | bzip2 > /var/backup/Drupal-SQL-"$(date +\%y\%m\%d)".sql.bz2
tar -cjf /var/backup/Drupal-Files-"$(date +\%y\%m\%d)".tar.bz2 -C /srv/www/ drupal-6.15

Tietokannan palautus

Tehdään uusi tietokanta
mysql -u root -pSala1234
CREATE DATABASE kloonidrupal;
GRANT ALL ON kloonidrupal.* TO drupalpalautus@localhost IDENTIFIED BY 'Eew0KeifshapooS9';
exit;
Uudelle tietokannalle sisältö
bunzip2 /var/backup/Drupal-SQL-100112.sql.bz2
mysql -u drupalpalautus -pEew0KeifshapooS9 kloonidrupal < /var/backup/Drupal-SQL-100112.sql

Tiedostojen palautus

Puretaan kansio
cd /var/backup
tar -xvvjf Drupal-Files-100112.tar.bz2
mv drupal-6.15 drupal-6.15-Klooni
mv drupal-6.15-Klooni /srv/www/

Drupalin asetukset

Tietokantamäärittely
cd /srv/www/drupal-6.15-Klooni/sites/default
pico settings.php
---------------------

$db_url = 'mysqli://drupal:salasana@localhost/drupal';

Muutos
$db_url = 'mysqli://drupalpalautus:Eew0KeifshapooS9@localhost/kloonidrupal';

Virtual Host -tiedosto!
cd /etc/apache2/sites-enabled/
pico drupal-6.15 
--------------
<VirtualHost *:80>
       ServerAdmin     webmaster@testiverkko.info
       ServerName      drupal.testiverkko.info 
       DocumentRoot    /srv/www/drupal-6.15-Klooni
       <Directory /srv/www/drupal-6.15-Klooni>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>
--------------
/etc/init.d/apache2 restart

Sisällysluetteloon


Henkilökohtaiset työkalut