Sisällysluettelo |
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 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 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 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
http://www.acme.com/software/micro_httpd/ http://www.acme.com/software/mini_httpd/
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 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änää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
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.
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 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 on lähes vastaava kuin MySQL, mutta sisältää tiettyjä eroavaisuuksia. Olen itse siirtynyt käyttämään PostgreSQL:ää parempien työkalujen (alla) ja valmiin IPv6-tuen vuoksi.
http://www.phppgadmin.org/ http://www.pgadmin.org/
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 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
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.
Nimipalvelimella on keskeinen rooli WWW-järjestelmissä, sillä se toimittaa selaimelle osoiterivin nimeä vastaavan IP-osoitteen. Selain ottaa yhteyttä IP-osoitteeseen kertoen HTTP-pyynnössä kohdenimen palvelimelle. Palvelin päättää, että mihin kansioon selaimen pyyntö ohjataan.
DNSMasq on erittäin pieni ja helposti konfiguroitava DNS- ja DHCP-palvelin. DNSMasq ei ole varsinaisesti DNS-palvelin, sillä se välittää pyynnöt vain eteenpäin. Myös paikallisten A-tietueiden luominen onnistuu eli paikallisia nimi-osoite-määrityksiä voidaan tehdä. Vahvuus yksinkertaisuus!
Linux Server - Verkkopalvelut -kurssilla keskityttiin nimipalvelimeen Bind, joka on eräs parhaimmista saatavilla olevista nimipalvelimista. Tämän kurssin aikana emme tarvitse niin massiivista ohjelmaa niin valtavalla määrällä ominaisuuksia, sillä vastaisuudessa nimipalvelimen rooli on tärkeä, muttei vaativa.
Tarvittavan ohjelman asennus tehdään seuraavalla komennolla
apt-get install dnsmasq
Muutokset tehdään tiedostoon /etc/dnsmasq.conf ja ohjelma käynnistetään uudelleen komennolla
invoke-rc.d dnsmasq restart
Käytämme DNSMasq-palvelinohjelmaa paikallisena nimipalvelimena, jolloin voimme lisätä itse haluamiamme nimiä. Ohjataan ensimmäisenä dns-koneen kyselyt omaan osoitteseen.
dns:/etc# mv resolv.conf resolv.conf.kauhava dns:/etc# echo "nameserver 127.0.0.1" > resolv.conf dns:/etc# cat resolv.conf.kauhava domain syo.fi search syo.fi nameserver 213.250.105.4 nameserver 213.250.106.6
Muokataan nimipalvelun toimintaa seuraavan esimerkin kaltaiseksi.
dns:/etc# cat dnsmasq.conf # Configuration file for dnsmasq. resolv-file=/etc/resolv.conf.kauhava # Apache address=/apache.testiverkko.info/213.250.105.84 ptr-record=84.105.250.213.in-addr.arpa,apache.testiverkko.info address=/apache.testiverkko.info/fc00::a00:27ff:fe74:b3fa ptr-record=a.f.3.b.4.7.e.f.f.f.7.2.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.f.ip6.arpa,apache.testiverkko.info #Lighty address=/lighty.testiverkko.info/213.250.105.69 ptr-record=69.105.250.213.in-addr.arpa,lighty.testiverkko.info address=/lighty.testiverkko.info/fc00::a00:27ff:fed7:a694 ptr-record=4.9.6.a.7.d.e.f.f.f.7.2.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.f.ip6.arpa,lighty.testiverkko.info
Käynnistetään palvelu uudestaan
dns:/etc# invoke-rc.d dnsmasq restart Restarting DNS forwarder and DHCP server: dnsmasq. dns:/etc#
Ohjataan koneet käyttämään edellä muokattua palvelua. Määritellään ensiksi koneille nimet, jonka jälkeen käytettävä nimipalvelin.
apache:~# cd /etc/ apache:/etc# cat hostname apache apache:/etc# cat hosts 127.0.0.1 localhost 127.0.1.1 apache.testiverkko.info apache # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts apache:/etc# cat mailname apache.testiverkko.info apache:/etc# cat resolv.conf nameserver fe80::a00:27ff:fe12:690f%eth0 apache:/etc#
Ennen käyttöä kannattaa varmistaa dhcp:n ollessa käytössä, ettei dhcp muuta resolv.conf-tiedoston sisältöä. Tavallisesti käytössä on tosin kiinteät osoitteet, jolloin seuraavaa ei tarvitse tehdä.
apache:/etc# ifdown eth0 apache:/etc# cd dhcp3/ apache:/etc/dhcp3# cat dhclient.conf ---- request subnet-mask, broadcast-address, time-offset, routers, # domain-name, domain-name-servers, domain-search, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes; ---- apache:/etc# ifup eth0
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.
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] .......
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 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 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 esitellään DNS-palvelimelle nimi, jonka jälkeen osoitteen webmail.testiverkko.info pitäisi ohjautua oikein. Alla aiheesta esimerkki.
dns:/etc# cat dnsmasq.conf ---- # Apache address=/apache.testiverkko.info/213.250.105.84 address=/webmail.testiverkko.info/213.250.105.84 ptr-record=84.105.250.213.in-addr.arpa,apache.testiverkko.info address=/apache.testiverkko.info/fc00::a00:27ff:fe74:b3fa address=/webmail.testiverkko.info/fc00::a00:27ff:fe74:b3fa ptr-record=a.f.3.b.4.7.e.f.f.f.7.2.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.f.ip6.arpa,apache.testiverkko.info ---- dns:/etc# invoke-rc.d dnsmasq restart Restarting DNS forwarder and DHCP server: dnsmasq. dns:/etc#
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/caTestataan 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
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 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änää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.
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# cp /etc/phpmyadmin/apache.conf conf.d/ apache:/etc/apache2# apache2ctl restart apache:/etc/apache2#
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.
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#
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;
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 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
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: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:~#
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 esitellään edellä olleiden esimerkkien mukaisesti DNS-palvelimelle nimiesittely.
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 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:~$ createdb testikanta
postgres@lighty:~$ psql 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=# CREATE USER testaaja WITH PASSWORD 'password';
CREATE ROLE
testikanta=# GRANT ALL PRIVILEGES ON DATABASE testikanta to testaaja;
GRANT
testikanta-# \q
postgres@lighty:~$ exit
lighty:~# adduser testaaja
Adding user `testaaja' ...
Adding new group `testaaja' (1001) ...
Adding new user `testaaja' (1001) 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:~# su - testaaja
testaaja@lighty:~$ psql -d testikanta -U testaaja
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=> \h
testikanta=>
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:~#
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.14.tar.gz tar -xzvf drupal-6.14.tar.gz mv drupal-6.14 /srv/www/
Haetaan kielitiedosto
cd /srv/www/drupal-6.14 wget http://ftp.drupal.org/files/projects/fi-6.x-1.0.tar.gz tar -xzvf fi-6.x-1.0.tar.gz rm fi-6.x-1.0.tar.gz
Vaihdetaan omistus root-käyttäjään
cd /srv/www chown -R root.root drupal-6.14
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.14
pico /etc/apache2/sites-available/drupal-6.14
ja kopioidaan siihen alla oleva sisältö.
<VirtualHost *:80> ServerAdmin webmaster@testiverkko.info ServerName www.testiverkko.info DocumentRoot /srv/www/drupal-6.14 <Directory /srv/www/drupal-6.14> 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.14
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.14/sites/default/default.settings.php /srv/www/drupal-6.14/sites/default/settings.php chmod a+rwx /srv/www/drupal-6.14/sites/default/settings.php mkdir /srv/www/drupal-6.14/sites/default/files chmod a+rwx /srv/www/drupal-6.14/sites/default/files
Muutetaan oikeudet asennusprosessissa tulleesta vaatimuksesta
chmod a-rwx /srv/www/drupal-6.14/sites/default/settings.php chmod a+rx /srv/www/drupal-6.14/sites/default/settings.php chown www-data:www-data /srv/www/drupal-6.14/sites/default/files chmod a-rwx /srv/www/drupal-6.14/sites/default/files chmod u+rwx /srv/www/drupal-6.14/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 -O - -q http://www.testiverkko.info/cron.php > /dev/null" > drupal-cron
Luodaan tietokantaja ja käyttäjä
lighty:~# su - postgres postgres@lighty:~$ createuser --pwprompt --encrypted --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.10/"
}
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.10/ lighty:/srv/www/drupal-6.10# cp sites/default/default.settings.php sites/default/settings.php lighty:/srv/www/drupal-6.10# chmod a+rwx /srv/www/drupal-6.10/sites/default/settings.php lighty:/srv/www/drupal-6.10# mkdir sites/default/files lighty:/srv/www/drupal-6.10# chmod a+rwx sites/default/files lighty:/srv/www/drupal-6.10#
Muutetaan oikeudet asennusprosessissa tulleesta vaatimuksesta
lighty:/srv/www/drupal-6.10# chmod a-rwx,a+rx sites/default/settings.php lighty:/srv/www/drupal-6.10# chown www-data:www-data sites/default/files lighty:/srv/www/drupal-6.10# chmod a-rwx,u+rwx sites/default/files lighty:/srv/www/drupal-6.10#
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 -O - -q http://drupal.testiverkko.info/cron.php > /dev/null" > drupal-cron
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/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 -O - -q http://moodle.testiverkko.info/admin/cron.php > /dev/null" > moodle-cron
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.14/mediawiki-1.14.0.tar.gz --2009-05-04 19:23:07-- http://download.wikimedia.org/mediawiki/1.14/mediawiki-1.14.0.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.14.0.tar.gz” 62% [===================================> ] 6 292 815 213K/s eta 19s ---- www:~# tar -xzvf mediawiki-1.14.0.tar.gz ---- mediawiki-1.14.0/maintenance/importImages.inc.php mediawiki-1.14.0/maintenance/dumpUploads.php mediawiki-1.14.0/maintenance/dumpHTML.php mediawiki-1.14.0/maintenance/sql.php mediawiki-1.14.0/maintenance/importLogs.php mediawiki-1.14.0/maintenance/edit.php mediawiki-1.14.0/maintenance/convertLinks.inc www:~# mv mediawiki-1.14.0 /srv/www
Muutetaan oikeuksia
www:~# cd /srv/www www:/srv/www# chown -R root:root mediawiki-1.14.0 www:/srv/www# chmod a+w /srv/www/mediawiki-1.14.0/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.14.0 <Directory /srv/www/mediawiki-1.14.0> 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.14.0/config/LocalSettings.php /srv/www/mediawiki-1.14.0/ www:~# chmod a-rwx,u+rx /srv/www/mediawiki-1.14.0/LocalSettings.php www:~#
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!
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.14.0 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 0 * * * root tar -cjf /var/backup/Wiki-backup-files-"$(date +\%y\%m\%d)".tar.bz2 -C / srv/www/mediawiki-1.14.0 > /dev/null 0 0 * * * root mysqldump -u root -pSala1234 mediawiki | bzip2 > /var/backup/Wiki-backup-"$(date +\%y\%m\%d)".sql.bz2 > /dev/null