Linux palvelimen optimointi käänteisproxyn avulla

Tehtävä: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-9-ja-10-syksylla-2013

“h7:
– Asenna WordPress ja tee siihen esimerkkisisältöä
– Mittaa WP:n tehoa. Vertaile etusivun ja alasivujen nopeutta siihen, että tallennat saman sisällön staattiseksi. Analysoi mittaustulokset.
– Asenna käänteisproxy. Kokeile, että dynaamiset ominaisuudet, kuten kommenttien jättö, toimivat edelleen. Mittaa ja analysoi tulokset. Vertaa tilanteeseen ilman käänteisproxya.”

Aloitan tehtävän tekemisen tilanteesta missä olen asentanut LAMP ympäristön ja wordpressin tietokoneelleni, ohjeita näiden tekemiseen löydät seuraavista:

LAMP: https://henrimikkonen44.wordpress.com/2013/09/27/linux-xubuntu-ja-lampn-asennus/

WordPress: https://henrimikkonen44.wordpress.com/2013/10/04/wordpressin-asentaminen-linux-xubuntu-palvelimelle/

Palvelimen kuormittamista ab:lla eli apache benchmark ohjelmalla.Minun ei tarvinnut asentaa ab:ta sillä se on ilmeissti tullut apache asennuksen mukana. Kuormitan wordpress sivustoja jotka käyttää mysql tietokantaa joten se on luultavasti huomattavasti hitaampi kuin staattinen sivu missä ei ole lainkaan mysql tietokantahakuja.

ajoin seuraavan komennon:

$ ab -n 100 -c 100 http://localhost/~henri/wordpress/

Sain seuraavan laiset tulokset:

“Percentage of the requests served within a certain time (ms)
50%   1613

100%   2916 (longest request)”

50% pyynöistä palveltiin noin puolestatoista sekunnissa ja pisimpään palvelimella kesti noin kolme sekunttia.

Eli jo melko pitkä aika kärsimättömille nykynopeuksiin tottuneille ihmisille. Vertaukseksi kopion saman sivun toiseen hakemistoon jotta pääsen hakemaan sivua ilman mysql tietokanta liitoksia. Menin osoitteeseen http://localhost/~henri/wordpress/ ja valitsin firefoxin yläkulmasta File -> Save page as ja navigoin public_html kansiooni ja tallensin sen nimellä wptest.html.

Ajoin nyt tälle staattiselle sivulle saman testin:

$ ab -n100 -c100 http://localhost/~henri/wptest/

tulokset:

Percentage of the requests served within a certain time (ms)
50%      5

100%      6 (longest request)

Eli 50% pyynnöistä palveltiin jopa 5 millisekunnissa ja hitainkin vain yhden millisekuntin erolla. Se on jo varsin nopea vastausaika.

Seuraavaksi asennamme palvelimelle käänteisproxyn jotta saisimme  mysql tietokantaa käyttävän wordpress sivuston vastaamaan pyyntöihin huomattavasti nopeammin.

$ sudo apt-get install varnish

Tämän jälkeen laitamme proxyn ottamaan vastaan kaikki pyynnöt porttiin 80 ja vaihdamme apachalle uuden portin. Ensin apachalle uusi porttinumero:

$ sudoedit /etc/apache2/ports.conf

muutamme kohtiin NameVirtualHost ja Listen numerot 8080 ja tallennamme tiedoston:

NameVirtualHost *:8080
Listen 8080

$ sudo service apache2 restart

Sitten muutamme varnishin kuuntelemaan porttia 80:

$ sudoedit /etc/default/varnish

## Alternative 2, Configuration with VCL
#
# Listen on port 6081, administration on localhost:6082, and forward to
# one content server selected by the vcl file, based on the request.  Use a 1GB
# fixed-size cache file.
#
DAEMON_OPTS=”-a :80 \

Tallennus ja varnishin uudelleen käynnistys

$ sudo service restart varnish restart

Kokeilin vielä että kommentointi ja muut dynaamiset toiminnot toimivat:

postintest

Nyt on tarvittavat asetukset tehty ja voimme testata uudelleen kuormittaa wordpress sivustoa:

$ ab -n 100 -c 100 http://localhost/~henri/wordpress/

Tulokset:

Percentage of the requests served within a certain time (ms)

50%      8

100%     10 (longest request)

Puolet pyynnöistä sai vastauksen noin 8 millisekunnissa ja pisinkin sai jo 10 millisekunnissa. Eli vastaukset tulivat huomattavasti nopeammin käänteisporxyn kanssa.

WordPressin asentaminen Linux Xubuntu palvelimelle

Tehtävä: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-9-ja-10-syksylla-2013

“h6:
– Asenna WordPress (alkaen tilanteesta, jossa LAMP on asennettu)
– Kirjoita esimerkkisisältöä

Tee ja raportoi kolme seuraavista:
– Ota järkevät URLit (permalinks) käyttöön
– Vaihda teema
– Varmuuskopioi sisältö
– Tee WordPressiin oma teema
– Asenna Drupal ja kokeile sitä
– Tee WordPressiin oma plugin
– Vuokraa virtuaalipalvelin ja kokeile sitä”

– Asenna WordPress (alkaen tilanteesta, jossa LAMP on asennettu)

Olen siis nyt asentanut LAMP ympäristön tietokoneelleni, jota siis käytän localhost palvelimena. Aloitan tekemällä wordpressille oman tietokannan, kirjautumalla mysqln sisään ja luomalla sinne uuden tietokannan. Jonka jälkeen kirjaudun uutena käyttäjänä sisään ja tarkistan että se toimii.

$ mysql -u root -p

mysql> create database wordpress;

mysql> grant all on wordpress.* to wordpress@localhost identified by ‘s4l4juttu’;

mysql> exit:

$ mysql -u wordpress -p

mysql>  show databases;

mysql> use wordpress;

pääsen käyttämään wordpress käyttäjänä wordpress tietokantaa, joten tietokannan ja käyttäjän luominen onnistui.

Seuraavaksi siirryin osoitteeseen http://codex.wordpress.org/Installing_WordPress josta latasin wordpressin linkistä: http://wordpress.org/latest.tar.gz ja purin sen public_html hakemistoon ja poistin tar paketin.

$ wget http://wordpress.org/latest.tar.gz

$ tar -xf latest.tar.gz

$ rm latest.tar.gz

Tämän jälkeen siirryin osoitteeseen http://localhost/~henri/wordpress/ josta alkoi asennus wizardi. Asennus wizardi vaati wp-config.php tiedoston tekemistä /home/henri/public_html/wordpress kansioon joten loin hakemistoon tiedoston.

$ nano wp-config.php

Tämän jälkeen sain suoritettua asennuksen loppuun. Näin wordpress on asennettu localhost palvelimelleni.

esmrkkisislto

– Ota järkevät URLit (permalinks) käyttöön

Valitsen asetuksista -> Settings -> Permalinks ja täppä http://localhost/~henri/wordpress/2013/10/04/sample-post/

permalinks

Tämän jälkeen wordpress hakemistoon pitää vielä tehdä tiedosto .htaccess ja asaettaa apachelle asetus jotta se toimii.

$ nano .htaccess

ja tiedostoon seuraavat rivit:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /~henri/wordpress/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /~henri/wordpress/index.php [L]

$ sudo a2enmod rewrite

$ sudo service apache2 restart

Ja näin permalinkit toimii:

permalinksworks

– Vaihda teema

Siirryin kohteeseen oikeaan kansioon mihin teemat ladataan ja latasin mieleiseni teeman ja purin paketin kansioon. Tämän jälkeen vielä poistin zip paketin minkä juuri purin.

$ cd /home/henri/public_html/wordpress/wp-content/themes

$ wget http://wordpress.org/themes/download/customizr.3.0.13.zip

$ unzip customizr.3.0.13.zip

$ rm customizr.3.0.13.zip

Siirryin wordpressin hallinta paneeliin ja vaihdoin juuri lataamani ja purkamani teeman.

teemanvaihto

newtheme

Kerrassaan upea!

– Varmuuskopioi sisältö

Menin Tools välilehteen ja valitsin Export josta taas valitsin all content täpän ja download export. Koneelleni tallentui XML tiedoston jonka voin importata toiseen wordpress asennukseen.

Tämän jälkeen halusin testata varmuuskopiota. Jotta varmuuskopioinnin tuonti toimisi, piti wordpressiin asentaa importer niminen ohjelma, latasin zipin oikeaan hakemistoon ja purin sen sinne.

$ cd /henri/public_html/wordpress/wordpress/wp-content/plugins

$ wget http://downloads.wordpress.org/plugin/wordpress-importer.0.6.1.zip

$ unzip wordpress-importer.0.6.1.zip

Imporeter plugin ei kuitenkaa pysty toimimaan ennenkuin olen asettanut wp-content hakemistolle oikeat oikeudet käyttäjille:

$ cd /home/henri/public_html/wordpress

$ chmod o+wr wp-content

Ja tämän jälkeen pystyin tuomaan hetki sitten tekemäni varmuuskopion takaisin wordpressiin.

Linux Xubuntu ja LAMP:n asennus

Tehtävä: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-9-ja-10-syksylla-2013

“h5.

– Asenna ja testaa LAMP
– Aiheuta vähintään 3 virhettä ja analysoi lokista
– Tee nimipohjainen virtuaalipalvelin, joissa toimii myös http://www.&#8221;

Käytän tässä tehtävässä Linux Xubuntu 12.04 versiota.

LAMP:n asennus

Aloitin asentamalla apache palvelinohjelman ja testaamalla sen menemällä osoittoiseen localhost

$ sudo apt-get update

$ sudo apt-get install apache2

apache toimi. Seuraavaksi laitoin käyttäjä hakemiston toimimaan ja tein kotisivu hakemiston ja testi sivut.

$ sudo a2enmod userdir

$ sudo service apache2 restart

$ mkdir public_html

$ cd public_html

$ nano index.html

Seuraavaksi asensin PHP:n ja asetin käyttäjä hakemistoon oikeudet tehdä php sivuja. Käynnistin palvelimen uudestaan.

$ sudo apt-get install php5 libapache2-mod-php5

$ sudoedit /etc/apache2/mods-available/php5.conf

kommentoin seuraavat rivit pois conf tiedostosta:

<IfModule mod_userdir.c>
<Directory /home/*/public_html>
#php_admin_value engine Off
</Directory>
</IfModule>
</IfModule>

$ sudo service apache2 restart

Muutin index.html tiedoston php tiedostoksi ja laitoin testipätkän php koodia.

$ mv index.html index.php

$ nano index.php

Seuraavat rivit php tiedostoon:

<?php

echo "Hi, I'm a PHP script!";

?>

Testasin sivuja ja ne toimivat.

Seuraavaksi asensin mysql:n ja myphpadminin:

$ sudo apt-get install mysql-server phpmyadmin

Asennuksen jälkeen menin osoitteeseen http://localhost/phpmyadmin/ ja pääsin kirjautumaan sisään luomallani root käyttäjällä. Loin käyttäjän ja tietokannan ja annoin molemmille nimeksi hats. Kirjauduin hats käyttäjällä tietokantaan ja tein sinne pöydän hats mihin laitoin kaksi riviä: id ( auto_increment, primary_key) ja name ( varchar, 100). Lisäsin pöytään kaksi riviä: bluehat ja redhat. seuraavaksi menin muokkaamaan luomaani index.php tiedostoa public_html hakemistoon. Laitoin seuraavan pätkän tiedostoon:

<?php
/* database.php – Use mysql database from php
* (c) 200309 Tero.Karvinen <at-sign> iki.fi, adapted from php.net
* See http://iki.fi/karvinen Linux Apache MySQL PHP tutorial. */

/* Connect to database */
$link = mysql_connect(“localhost”, “hats”, “salasana”)
or die(“Could not connect : ” . mysql_error());
print “Connected successfully”;
mysql_select_db(“hats”) or die(“Could not select database”);

/* Perform SQL query */
$query = “SELECT * FROM hats”;
$result = mysql_query($query)
or die(“Query failed : ” . mysql_error());

/* Print results in HTML */
print “<table>\n”;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print “\t<tr>\n”;
foreach ($line as $col_value) {
print “\t\t<td>$col_value</td>\n”;
}
print “\t</tr>\n”;
}
print “</table>\n”;
mysql_free_result($result);

/* Close connection */
mysql_close($link);
?>

Ja tallensin tiedoston. Seuraavaksi menin osoitteeseen http://localhost/~xubuntu/ ja sain seuraavan näkymän

phpjamysql

LAMP ympäristö on nyt asennettu ja testattu toimivaksi.

Virheiden analysointia

otin viimeisimmät rivit /var/log/apache2/error.log tiedostosta

$ tail -F /var/log/apache2/error.log

[Fri Sep 27 11:28:04 2013] [error] [client 127.0.0.1] File does not exist: /var/www/myphpadmin = tiedostoa ei ole olemassa eli osoite on kirjoitettu väärin, oikea osoite olisi /var/www/phpmyadmin

[Fri Sep 27 11:04:02 2013] [error] [client 127.0.0.1] File does not exist: /home/xubuntu/public_html = käyttäjä yrittää mennä hakemistoon mitä ei ole vielä luotu, asia korjautuu tekemällä public_html hakemiston käyttäjälle komenoilla:

$ cd

$ mkdir public_html

Could not select database = olin kirjoittanut index.php tiedostoon väärän tietokannan nimen, korjasin sen laittamalla oikean nimen eli hats kohtaan: mysql_select_db(“hats”)

Nimipohjaisen virtuaalipalvelimen tekeminen

Scan of the month 15 selvittäminen

tehtävä: http://old.honeynet.org/scans/scan15/

latasin levykuvan osoitteesta http://old.honeynet.org/scans/scan15/honeynet.tar.gz jonka jälkeen purin paketin komenolla

$ tar xf honeynet.tar.gz

paketitssa oli valmiiksi tehty kansio mihin se purki levykuvan siirryin kansioon ja  asensin tämän jälkeen myös sleuthkitin, jonka avulla pääsemme palauttamaan levykuvasta poistetut tiedostot.

$ cd honeynet

$ sudo apt-get install sleuthkit

Tämän jälkeen tein poistetuille ja levykuvassa jäljelle oleville tiedostoille omat kansiot ja latasin tiedostot levykuvasta kansioihin

$ mkdir deleted

$ mkdir allocated

$ tsk_recover honeypot.hda8.dd deleted

$ tsk_recover -a honeypot.hda8.dd allocated

Metapakettejen tekemistä Linux Xubuntulla

Tehtävä: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-9-ja-10-syksylla-2013

“h4:
– Tee oma rakkaimmat ohjelmasi asentava apt-get komento
– Tee oma rakkaimmat ohjelmasi asentava metapaketti
– Paketoi skripti”

Käytän tässä tehtävässä Linux Xubuntu 12.04 versiota ja HP-Compaq-8200-Elite-CMT-PC tietokonetta.

Ensiksi tein omat rakkaimmat ohjelmat asentavan komennon ja testasin että ne käynnistyvät:

$ sudo apt-get update && sudo apt-get install blender inkscape gimp

$ gimp

$ blender

$ inkscpae

kaikki ohjelmat ansentuivat ja käynnistyivät moitteetta. Seuraavaksi rupesin tekemään metapakettia joka asentaa itsestään lempiohjelmani.

Tein aluksi kansion metapaketilleni ja asensin tarvittavan ohjelman metapakettien tekemiseen.

$ mkdir henryspackage

$ sudo apt-get -y install equivs

Tämän jälkeen tein pohjatiedoston johon muutin omat tarvittavat tiedot metapaketilleni.

$ equivs-control henryspackage.cfg

$ nano henryspackage.cfg

### Commented entries have reasonable defaults.
### Uncomment to edit them.
# Source: <source package name; defaults to package name>
Section: misc
Priority: optional
# Homepage: <enter URL here; no default>
Standards-Version: 3.9.2

Package: henrys-favorites
Version: 1.0
Maintainer: Henri Mikkonen <mikkonen44@gmail.com>
Depends: blender, inkscape, gimp

Description: my favorite programs to create some magickal graphics

Tämän jälkeen rakensin metapaketin ja asensin Lintianin jotta voin tarkistaa sen virheettömyyden.

$ equivs-build henryspackage.cfg
$ sudo apt-get install lintian

$ lintian henrys-favorites_1.0_all.deb

Paketti rakentui, eikä siitä löytynyt virheitä. Seuraavaksi asensin gdebitin ja testasin pakettia.

$ sudo apt-get install gdebi

$ sudo gdebi -n henrys-favorites_1.0_all.deb

ohjelmat asentuivat ja käynnistyivät kun testasin niitä terminaalista

$ gimp

$ blender

$ inkscape

Tietokoneen kuormitusta ja tulosten tarkastelua Linux Xubuntulla

harjoitus: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-9-ja-10-syksylla-2013

Tässä harjoituksessa käytän Linux Xubuntu 12.04 versiota ja HP-Compaq-8200-Elite-CMT-PC  tietokonetta.

Aloitin tekemällä pakettilistan päivityksen ja asentamalla munin ja stress ohjelmat:

$ sudo apt-get update

$ sudo apt-get install munin stress

Tämän jälkeen huomasin siirtymällä osoitteeseen file:///var/cache/munin/www/localdomain/localhost.localdomain/index.html ettei munin toiminut joten suoritin päivityksen ja käynnistin tietokoneen uudelleen.

$ sudo apt-get dist-upgrade

Tietokoneen uudelleenkäynnistyksen jälkeen laitoin stress ohjelman päälle ja huomasin munin ohjelman toimivan:

$ stress –cpu 8 –io 4 –vm 2 –vm-bytes 128M

katson top komennolla miten stress kuormittaa tietokonetta:

stress

stress kuormittaa paljon tietokoneen prosessoria lähes 100% , mutta ei niinkään muistia tai kovalevyä.

Ansensin koneelle iotop ohjelman ja katsoin mitkä ohjelmat kuormittavat kovalevyä:

$ sudo apt-get install iotop

$ sudo iotop -ao

iotop

Kovalevyä ei näyttänyt kuormittuvan kovinkaan paljon, lähinnä firefox kirjoitti joitakin tietoja levylle.

Seuraavaksi tarkastelin millaista tietoa munin oli saanut kerättyä tietokoneen prosessorin käytöstä

cpu-day

Munin tuottama kuvasta voisi päätellä että tietokoneen prosessorilla menee paljon aikaa kovalevyn odottamiseen, käyttöjärjestelmän ylläpitoon ja käyttäjän ohjelmien ajamiseen.

Tutkin myös hieman tietokoneen lokeja, otin rivit auth.log tiedostosta sijainnista: /var/log/auth.log olin hetki sitten testannut kirjautua ssh:lla omalle tietokoneelle ja otin seuraavat rivit analysointiin.

Sep  6 14:15:52 henryyd-HP-Compaq-8200-Elite-CMT-PC sshd[7720]: pam_unix(sshd:session): session opened for user henryyd by (uid=0)
Sep  6 14:15:59 henryyd-HP-Compaq-8200-Elite-CMT-PC sshd[7857]: Received disconnect from 127.0.0.1: 11: disconnected by user
Sep  6 14:15:59 henryyd-HP-Compaq-8200-Elite-CMT-PC sshd[7720]: pam_unix(sshd:session): session closed for user henryyd

Sep  6 14:15:52 (päivämäärä ja kellon aika)

henryyd-HP-Compaq-8200-Elite-CMT-PC (tietokoneen nimi)

sshd (yhteyden vastaan ottava ohjelman nimi)

[7720] (prosessin numero)

pam_unix(sshd:session) (autentikointi moduuli joka avaa sshd istunnon)

session opened for user henryyd (istunto avattu käyttäjälle henryyd)

Received disconnect from 127.0.0.1: 11: disconnected by user (vastaanotettu yhteyden sulkeminen eli käyttäjä on kirjoittanut exit)

Linux Xubuntun asentaminen työasemaksi

Tehtävä: http://terokarvinen.com/2013/linux-koe-tyoasemat-ja-tietoverkot-34-kevaalla-2013

Aloitin Linux Xubuntu 12.04 kokeilemisesta. Laitoin CDn levyasemaan ja koneen käynnistyessä valitsin Try Xubuntu. Koska kyseessä on koulun tietokone, en voinut asentaa käyttöjärjestelmää. 

Laitoin liverompulla pyörivälle tietokoneelle uuden salasanan, ja asetin näppäimistökartan suomenkielelle komennoilla:

$ passwd

$ setxkbmap fi

Päivitin Linuxiin saatavilla olevien ohjelmien versiot ja asensin pyydetyt ohjelmat:

$ sudo apt-get update

$ sudo apt-get install openoffice.org

$ sudo apt-get install gedit

$ sudo apt-get install inkscape

 

Seuraavaksi tein käyttäjät tietokoneelle ja asetin heille vahvat salasanat ja kuvaavat käyttäjätunnukset jotka tallensin omaan kotikansiooni tekstitiedostona. Suojasin myös tekstitiedoston ulkopuolisilta:

$ nano users.txt

$ sudo adduser mmaitoparta

$ sudo adduser aanderson

$ sudo adduser toljynen

$ sudo adduser aaijala

$ chmod og-rwx users.txt

Tämän jälkeen asensin koneelle SSH:n ja apachen. Asetin käyttäjille oikeuden testata sivujaan selaimessa. Tein myös käyttäjien kotihakemistoon esimerkkisivut, ja samalla tulin testanneeksi ssh yhteyden:

$ sudo apt-get install ssh

$ sudo apt-get install apache2

$ sudo a2enmod userdir

$ sudo /etc/init.d/apache2 restart

$ ssh aanderson@localhost

$ mkdir public_html

$ cd public_html

$ nano index.html

Testasin apachen toimivaksi menemällä selaimella osoitteeseen http://localhost/~aanderson

Viimeiseksi tein Ärmylle hello worldin shell scriptillä

$ ssh aaijala@localhost

$ nano helloworld.sh

seuraavat rivit tekstitiedostoon:

#!/bin/bash

echo “Hello, World!”

 

$ chmod +x helloworld.sh

$ ./helloworld.sh