tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Nopean WordPressin asennus virtuaaliserverille

PHP ja PHP-FPM

On useampikin tekniikka, jolla sivut rakennetaan. Yleisin on PHP. Siksi oikeastaan kaikki WordPressinkin tiedostot ovat php-loppuisia. PHP koostuu oman ytimensä lisäksi erilaisia moduuleista, joista jokainen tekee jonkun asian. Esimerkiksi niinkin perusasia kuin vaikka zip-paketin purkaminen vaatii oman php-moduulinsa. Yleensä niitä asennetaan vain tarpeeseen ja kun asennat minkä tahansa muun ohjelman serverille, joka osaa hyödyntää PHP:tä, niin samalla kerrotaan mitä moduulit on löydyttävä – tai sitten Ubuntun paketinhallinta hoitaa asian puolestasi.

Kun kävijä avaa WordPress-sivusi, niin serveri ajaa melkoisen määrän pieniä php-ohjelmia, rakentaa niistä sen mikä ymmärretään sivuna, lähettää lopputuloksen Nginxille, joka tarjoilee sen viimeikseksi kävijän selaimen välilehdelle. Tuossa on tuhottomasti erilaisia välivaiheita, joista jokainen vie aikaa. Nyt aletaan vihdoin ja viimein tekemään asioita, joiden tarkoitus on nopeuttaa.

Yksi sellainen PHP-FPM. Se tehostaa PHP:n prosesseja ja muistin käyttöä web-asioissa.

Asennetaan nippu pakollisia. Tämä asentaa tuoreimman version, joka on tätä kirjoitettaessa 7.4.


apt install php-fpm php-common php-mysql php-xmlrpc php-curl php-gd php-dev php-imap php-redis php-zip php-intl -y

Ja jotta maailma olisi helppo, niin osan joutuu asentamaan versionumerolla:


apt install php7.4-opcache php7.4-cli php7.4-xml php7.4-imagick php7.4-mbstring php7.4-soap

Nuokin olisi voinut asentaa samalla apt install komennolla, mutta laitoin ne erikseen siksi, että asia osuu ensimmäisen kerran aivosoluihin. Nimittäin sitten joskus kun päivität PHP:n uudempaan, niin versionumerolliset ovat sellaisia, jotka on päivitettävä erikseen. Et sinä sitä silloin enää muista, mutta sinulle saattaa jäädä kuitenkin muistiin merkki, että versionumeroilla oli jokin merkitys.

PHP-FPM

PHP-FPM on hieman työläs asettaa. Ensialkuun kannattaa tyytyä oletusarvoihin, mutta sitä on syytä hieman viilata myöhemmässä vaiheessa. Jos sinulla on enemmän liikennettä (lue: yli 1000 käyntiä päivässä aika ajoin yli 20 samanaikaista), niin se myöhemmin tulee vastaan aika äkkiä. Mikään ei mene rikki, vaikka et säätäisikään, mutta sivustosi alkavat hidastelemaan.

PHP-FPM:n säätämisestä löytyy EksisONEsta ohjeet. Vilkaise niitä myöhemmin, älä juuri nyt. Jos et ole kokeneempi virtuaaliserverien kanssa, niin pelästyt suotta. Asia ei nimittäin ole niin vaikea kuin miltä se ensimmäisellä lukemisella saattaisi vaikuttaa.

Yksi asetus kuitenkin muutetaan. Kopioidaan ensin alkuperäinen talteen:

mv /etc/php/7.4/fpm/php-fpm.conf /etc/php/7.4/fpm/php-fpm.conf.backup

Tehdään uusi:

nano /etc/php/7.4/fpm/php-fpm.conf

Kopioi sinne tämä:

Tallennetaan ctrl-X, y ja enter.

Muistin käyttö

PHP-FPM:n tapaa käsitellä ja käyttää muistia on syytä säätää jossain vaiheessa, mutta laitetaan alustavat asetukset kuntoon. Muutoin saattaa olla riskinä, että sivustosi kaatuu, jos saat kävijäryntäyksen. Nyt varmistetaan, että moisessa tilanteessa ainoastaan latausajat kasvavat. Silti on ymmärrettävä, että kävijämäärät rasittavat aina, oli sivut sitten virtuaaliserverillä tai webhotellissa, ja liika on aina liikaa. Siihen palvelunestohyökkäyksetkin perustuvat.

Nyt joudut hieman laskemaan, mutta vain yhden jakolaskun verran.

Katsotaan paljonko muistia on käytössä:

free -hl

Katso paljonko sinulla on sarakkeessa free, minulla oli 131 MB. Pyöristän sen alaspäin 100 megaan, koska tarvitaan hieman pelivaraa, ja laitan muistiin. Mutta muutoin… serveri on vasta asetettu, ja aika paljon hyödyllisiä ohjelmia vielä puuttuu – eikä muistia ole vapaana kuin 130 megaa, ilman kävijöitä. Tämä on se syy miksi DigitalOceanin 5 taalaa kuussa maksava droplet on vain kokeilua varten.

Katsotaan paljonko eri prosessit vievät keskimäärin muistia:

ps --no-headers -o "rss,cmd" -C php-fpm7.4 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

Minulla tulos oli 38 MB.

Nyt tehdään jalolasku: jaetaan se muistimäärä, joka on vapaana (koska se voidaan uhrata kävijöille) sillä, paljonko yksi prosessi on keskimäärin vienyt (koska sen määrän yksi kävijä tarvitsee per pyyntö). eli 100/38=2,6 ~ 2. Nyt on luku, joka laitetaan siihen asetukseen, joka määrää miten PHP-FPM saa käyttää muistia webpalvelimen kanssa.

Tehdään taas varmuuskopio.

mv /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www.conf.backup

Tehdään uusi:

nano /etc/php/7.4/fpm/pool.d/www.conf

Jos otit DigitalOceanin pienimmän dropletin, niin käytä tätä. Muokkaa muutoin kohtaa pm.max.children laskusi mukaiseksi.

PHP

PHP tarvitsee myös pari muokkausta. Siirretään tässäkin ensin tiedosto php.ini varmuuskopioksi. Ylipäätään ini- ja conf-tiedostot ovat täynnä kommentteja, jotka selittävät perusteet jokaiseen asetukseen. Mahtava tietolähde, mutta hankaloittaa suuresti halutun muokattavan kohdan löytymistä. Jos jossain vaiheessa haluat tutustua tarkemmin mitä mikäkin tekee, niin tutki niitä backup-versiosta.

mv /etc/php/7.4/fpm/php.ini /etc/php/7.4/fpm/php.ini.backup

Luodaan php.ini uudestaan:

nano /etc/php/7.4/fpm/php.ini

Liitettäviä rivejä on yli 400, joten en liitä esimerkkiä tähän. Avaa se uuteen välilehteen ja kopio siitä.

Vinkki: Klikkaa koodi-ikkunan oikeassa kulmassa olevaa nappulaa Raw. Silloin koodi avataan omaan ikkunaan ja saat kopioitua sen helpoimmalla valitsemalla kaiken ctrl-A ja sitten kopioimalla ctrl-C

Etsi kohdat


upload_max_filesize = 64M
post_max_size = 128M

ja muuta niiden arvot samoiksi kuin mitä aiemmin laitoit Nginxin asetuksissa kohdassa client_max_body_size. Aidosti upload_max_filesize eli siirrettävän tiedoston maksimikoko pitäisi olla pienempi kuin post_max_size, joka pitää sisällään myös koko sen sivun muut asiat, johon siirretään – kuten vaikka WordPressin media-sivun. Ei tuo oikeasti ole niin iso asia, kunhan molemmat ovat vähintään samat kuin mitä laitoit Nginxiin.

Voit laittaa suuremmatkin, mutta silloin Nginx ei päästä siirtoa läpi. Jos laitat tähän Nginxiä pienemmät, niin serveri päästää isomman läpi, mutta se pysähtyy sitten sivustoilla.

Muista tallentaa.

Säädöt talteen

Tarkistetaan, että ei tullut kirjoitusvirheitä:

php-fpm7.4 -t

Jos sait ilmoituksen:

NOTICE: configuration file /etc/php/7.4/fpm/php-fpm.conf test is successful

niin kaikki on hyvin ja käynnistetään PHP-FPM uudestaan:

systemctl restart php7.4-fpm

Tälläkin kertaa on varmistettava, että PHP-FPM otetaan automaattisesti käyttöön, kun serveri käynnistetään:

systemctl enable php7.4-fpm