WordPressin asentaminen (LEMP)

Tässä artikkelissa asennamme WordPress CMS-järjestelmän Web1 Cloudissa sijaitsevalle Ubuntu virtuaalikoneelle. Seurataksesi tätä artikkelia tarvitset virtuaalikoneen johon sinulla on root-tason käyttöoikeudet.

Kaappaa virtuaalikoneellesi 20 € edestä ylimääräisiä krediittejä koodilla:

WEB1FI

WordPress on ylivoimaisesti suosituin avoimen lähdekoodin sisällönhallintajärjestelmä Internetissä (42,8% markkinaosuus 1/2024). Sitä ajetaan useimmiten LAMP tai LEMP alustalla, eli Linuxin päällä pyörivän Apache tai Nginx www-palvelimen, PHP:n ja MySQL-palvelimen yhdistelmällä. Tässä artikkelissa käytetään Nginx, MariaDB ja PHP 8.3 yhdistelmää (LEMP).

Asennamme kaikki komponentit paikalliselle palvelimelle ja ajamme WordPress sivuston omalla ”wpuser” nimisellä käyttäjällä tämän omassa kotihakemistossa. Tällöin PHP-koodi suoritetaan käyttäjän omilla oikeuksilla ja WordPressin tiedostoihin on mahdollista jakaa käyttöoikeuksia ilman, että jakaa koko palvelimen pääkäyttäjän oikeudet samalla.

Artikkelissa oletetaan, että osaat yhdistää Linux palvelimelle SSH:lla, muokata tekstitiedostoja ja liikkua tiedostojärjestelmässä sulavasti. Tämän lisäksi sinulla on verkkotunnus jonka olet osoittanut virtuaalipalvelimesi ip-osoitteisiin.

Käyttöjärjestelmän valmistelu

Käyttöjärjestelmän päivitys

Palvelimen asennus on aina hyvä aloittaa varmistamalla, että käytössä oleva käyttöjärjestelmä on ajantasalla ajamalla oheiset komennot ennen muiden komponenttien asennusta.

# Päivitetään pakettilistaus ajantasalle
sudo apt update 

# Asennetaan päivitetyt paketit ja hyväksytään päivitys
sudo apt upgrade -y

Mikäli järjestelmä kysyy sinulta, että saako päivityksen yhteydessä käynnistää palveluja uudestaan, voit turvallisesti vastata ”kyllä”.

WP-CLI

WP-CLI on komentorivityökalu jota tulemme käyttämään WordPressin asennuksessa. Työkalu mahdollistaa myös erilaisten WordPress huoltotoimenpiteiden suorittamisen palvelimen komentoriviltä myöhemmin.

# Ladataan wp-cli sovellus palvelimelle
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

# Annetaan sovellukselle suoritusoikeus ja siirretään se kaikkien käyttäjätunnusten saataville /usr/local/bin hakemistoon
chmod +x wp-cli.phar

sudo mv wp-cli.phar /usr/local/bin/wp

Käyttäjän lisääminen (wpuser)

Lopuksi lisäämme vielä wpuser nimisen käyttäjän, joka tulee omistamaan wordpress tiedostot ja jonka oikeuksilla PHP-tiedostot tullaan suorittamaan.

Käyttäjä lisätään ilman salasanaa, jotta siihen kirjautuminen palvelimen ulkopuolelta ei ole mahdollista ilman lisätoimenpiteitä.

# Luodaan wpuser käyttäjä ilman salasanaa
sudo adduser wpuser --disabled-password

Voit jättää adduser komennon ”Full name” yms. kohdat tyhjäksi ja vastata lopuksi vain Y kun järjestelmä kysyy ovatko tiedot oikein.

Lopuksi luodaan vielä wpuser käyttäjän kotihakemistoon ”httpdocs” kansio johon WordPress tullaan asentamaan myöhemmin. Tämän lisäksi asetamme käyttäjän kotihakemistolle oikeudeksi 755 jotta www-palvelimelle voi lukea tiedostoja ilman ongelmia.

sudo -u wpuser mkdir /home/wpuser/httpdocs
sudo chmod 755 /home/wpuser

MySQL (MariaDB)

Palvelimen asennus

WordPress vaatii toimiakseen MySQL tietokannan, joten aloitamme komponenttien asentamisen siitä. Ubuntu Linux jakelussa on helposti saatavilla sekä Oraclen MySQL-Server sekä avoimen lähdekoodin MariaDB. Tässä artikkelissa valitsimme MariaDB:n tietokantamoottoriksi, mutta halutessasi voit myös käyttää Oraclen tai muiden valmistajien MySQL-palvelimia.

MariaDB:n LTS-versio on saatavilla suoraan Ubuntun virallisesta pakettijakelusta.

#Asenna MariaDB palvelin ja komentorivityökalut
sudo apt install mariadb-server mariadb-client

Tämän jälkeen tietokantapalvelin on jo käyttövalmis ja voimme siirtyä tietokannan ja tietokantakäyttäjien luomiseen. Suosittelemme kuitenkin tutustumaan myöhemmin artikkeliimme MySQL palvelimen asetuksista ja tietoturvasta

Tietokannan ja käyttäjien luominen

Kun tietokantapalvelin on onnistuneesti asennettu, on aika luoda tietokanta sekä tietokantakäyttäjä joita WordPress asennuksemme tulee käyttämään.

Yhdistä tietokantaan oheiselle komennolla:

vteronen@wp-demo:~$ sudo mysql -u root

Komento yhdistää sinut MySQL-Shelliin jossa voit ajaa komentoja tietokantapalvelimelle. Aloitetaan luomalla tietokanta WordPress sivustoa varten

CREATE DATABASE wordpressdb;

Tuloste

MariaDB [(none)]> CREATE DATABASE wordpressdb;
Query OK, 1 row affected (0.000 sec)

Tämän jälkeen meidän tulee vielä luoda tietokantakäyttäjä

# HUOM. aseta kohtaan <salasana> itse keksimäsi salasana '' merkkien väliin ja muista ottaa se itsellesi talteen
# Esimerkiksi '74ZOezNFMToh'

CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '<salasana>';

Tuloste

MariaDB [(none)]> CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '74ZOezNFMToh';
Query OK, 0 rows affected (0.003 sec)

Sekä antaa uudelle ”wp_user” käyttäjälle oikeus wordpressdb tietokantaan

GRANT ALL ON wordpressdb.* TO 'wp_user'@'localhost';

Tuloste

MariaDB [(none)]> GRANT ALL ON wordpressdb.* TO 'wp_user'@'localhost';
Query OK, 0 rows affected (0.003 sec)

Tämän jälkeen voit ladata käyttöoikeustaulun uudelleen ja sulkea tietokantayhteyden

FLUSH PRIVILEGES;

quit;

PHP

Repositaryn lisääminen

Ubuntu 22.04 tarjoaa oletuksena PHP:n 8.1 versiota osana jakelua. Haluamme kuitenkin käyttää uudempaa 8.3 versiota, koska siihen sisältyy uusia ominaisuuksia ja se on pidemmälle tuettu kehittäjän puolesta, kuin Ubuntun tarjoama 8.1 versio.

Asentaaksemme muita versioita Ubuntun oletusversion lisäksi, meidän tulee lisätä ulkopuolinen PPA josta löytyy useita eri PHP-versioita. Debian kehittäjä Ondrej Suryn ylläpitämä PPA on yksi suosituimmista ja helpoimmista tavoista asentaa eri PHP-versioita useisiin eri käyttöjärjestelmiin.

sudo add-apt-repository ppa:ondrej/php # Paina Enter kysyttäessä

sudo apt update

PHP-Pakettien asennus

WordPress on PHP pohjainen web-sovellus ja tulemme käyttämään nginx-www palvelinta. Tästä johtuen haluamme asentaa PHP:n komentoriviversion (php-cli) lisäksi myös php-fpm:n sekä WordPressin vaatimat moduulit.

# Asenna tarvittavat PHP 8.3 ja sen WordPressin vaatimat PHP-moduulit
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-{bz2,curl,mbstring,intl,gd,mysql}

PHP Asetusten muokkaus WordPressille sopiviksi

PHP on nyt asennettu palvelimelle, mutta sen asetuksia on hyvä muokata ennen WordPressin käyttöönottoa, jotta emme törmää muisti- tai tiedostokokojen rajoituksiin.

sudo vi /etc/php/8.3/fpm/php.ini

Etsi tiedostosta seuraavat asetukset ja muokkaa niitä oheisiksi (suluissa PHP 8.3 oletusarvo)

/etc/php/8.3/fpm/php.ini

memory_limit = 256M ## (Oletus 128M)
post_max_size = 128M ## (Oletus 8M)
upload_max_filesize = 128M ## (Oletus 2M)

# Poista oheisen rivin edestä kommenttimerkki ; ja lisää haluamasi aikavyöhyke
date.timezone = Europe/Helsinki

Tämän jälkeen voit tallentaa muutokset ja sulkea tekstieditorin.

PHP-FPM asetusten muokkaus

Koska wordpress tiedostojen omistaja tulee olemaan wpuser käyttäjä, haluamme suorittaa PHP-tiedostot tämän käyttäjän käyttöoikeuksilla sen sijaan, että käyttäisimme ”www-data” oletuskäyttäjää. Muuttaaksemme käyttäjää, meidän tulee muokata vielä php-fpm asetustiedostoista www-oletuspoolin asetuksia.

sudo vi /etc/php/8.3/fpm.pool.d/www.conf

/etc/php/8.3/fpm/pool.d/www.conf

# Etsi kohta
user = www-data
group = www-data

# muokkaa rivit muotoon
user = wpuser
group = wpuser

Tämän jälkeen voit tallentaa muutokset ja sulkea tekstieditorin.

Muutosten voimaan tulemiseksi, sinun tulee vielä käynnistää PHP-FPM prosessi uudelleen oheiselle komennolla.

sudo systemctl restart php8.3-fpm

Nginx

Nginx asentaminen

Lopuksi tarvitaan vielä www-palvelin joka vastaa sivujen näyttämisestä käyttäjille. Nginx on suosittu vaihtoehto WordPress sivustojen kanssa sen nopeudesta ja monipuolisuudesta johtuen. Apache www-palvelimeen verrattuna Nginx:n oleellinen ero on, että .htaccess tiedostoja ei huomioida, vaan rewrite ja muut asetukset tulee tehdä suoraan nginx-asetustiedostoihin.

sudo apt install nginx

Nginx on oletusasetuksiltaan melko hyvässä tilassa ja sivuston perustoimintaa ajatellen ei siksi olekkaan tarpeellista tehdä muuta kuin luoda uusi vhost-asetustiedosto /etc/nginx/sites-available/ hakemistoon.

Jos haluat tutustua nginx asetuksiin paremmin, kannattaa sinun tutustua toiseen oppaaseemme <<LINKKI TÄHÄN>> jossa käydään nginx asetuksia laajemmin läpi ja muokataan mm. SSL-salaukseen liittyviä asetuksia.

WordPress vhostin luominen

Aloitetaan luomalla kokonaan uusi tiedosto /etc/nginx/sites-available/ hakemiston alle.

sudo vi /etc/nginx/sites-available/wpdemo.web1.fi

Tiedostonimessä kannattaa käyttää muotoa verkkotunnus.tld jotta sinun on tulevaisuudessa helppo tunnistaa mihin verkkotunnukseen sivusto liittyy.

/etc/nginx/sites-available/wpdemo.web1.fi

server {
    listen 80;
    listen [::]:80;

    server_name wpdemo.web1.fi; ## Huom vaihda tähän sivustosi verkkotunnus
    root /home/wpuser/httpdocs; ## Osoita root-hakemistoksi aikaisemmassa vaiheessa luomasi käyttäjän kotihakemisto

    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Muokattuasi asetustiedosto omien tarpeidesi mukaiseksi sinun tulee vielä kertoa Nginxille, että sen tulee käyttää uutta tiedostoa ja ladata se uudelleen, jotta vhost asetukset tulevat voimaan

# Luodaan symbolinen linkki joka kertoo Nginxille, että vhost-asetuksemme tulee ladata käyttöön
sudo ln -s /etc/nginx/sites-available/wpdemo.web1.fi /etc/nginx/sites-enabled/

# Käynnistetään nginx uudelleen jolloin uusi asetustiedosto tulee voimaan
sudo systemctl restart nginx

SSL-sertifikaatin asentaminen

Nykypäivän Internetissä kaikki odottavat liikenteensä olevan automaattisesti suojattua ja nykyaikaiset selaimet usein varoittavatkin sivustoista jotka eivät käytä https protokollaa.

Tässä artikkelissa käytämme Let’s Encryptin myöntämää ilmaista SSL sertifikaattia ja Certbot työkalua sertifikaatin käyttöönottoon. Aloitetaan asentamalla certbot työkalu sekä sen nginx-lisäosa joka osaa automaattisesti tunnistaa aikaisemmin luomamme nginx-asetustiedoston ja siinä mainitut verkkotunnukset.

sudo apt install certbot python3-certbot-nginx

Tämän jälkeen riittää, että suoritamme certbot ohjelman joka osaa automaattisesti ottaa huomioon aikasemmin luomamme Nginx vhostin.

sudo certbot

Vastattuasi ohjelman kysymyksiin, on sivustollasi valmiiksi asennettu SSL-Sertifikaatti joka uusiutuu automaattisesti niin kauan kuin verkkotunnuksesi on osoitettuna palvelimelle.

Nginx testaaminen

Alustamme on nyt käyttövalmis ja voimme testata sen toimintaa luomalla yksinkertaisen php-tiedoston joka näyttää ympäristön tietoja.

sudo -u wpuser vi /home/wpuser/httpdocs/phpinfo.php

Lisää uuteen tiedostoon oheinen rivi ja tallenna tiedosto.

/home/wpuser/httpdocs/phpinfo.php

<?php phpinfo();  ?>

Tämän jälkeen voimme avata verkko-osoitteen https://verkkotunnuksemme.tld/phpinfo.php

Muista poistaa testitiedostomme todettuasi palvelimen toiminta. phpinfo kertoo paljon tietoa palvelimen asetuksista ja saatavilla olevista moduuleista, joten sitä ei ole hyvä jättää julkisesti saataville.

rm /home/wpuser/httpdocs/phpinfo.php

WordPress asennus

Lopuksi asennamme WordPressin käyttämällä wp-cli työkalua ja WordPressin omaa asennusvelhoa

  1. Ladataan uusin WordPress wpuser käyttäjän httpdocs kansioon
sudo -u wpuser wp core download --path=/home/wpuser/httpdocs

2. Avataan WordPressin oma asetusvelho verkkoselaimeen avaamalla verkko-osoitteemme.
Esimerkin tapauksessa https://wpdemo.web1.fi

Wordpress asennusvelho - Kielen valinta

3. Syötetään asennusvelhon vaatimat tietokanta-asetukset sen mukaisesti mitä aikaisemmassa ”MySQL (MariaDB)” vaiheessa on itse asetettu

Wordpress asennusvelho - Tietokanta-asetukset

4. Sekä sivuston perusasetukset ja ensimmäisen käyttäjän tiedot.

Wordpress asennusvelho - Käyttäjän luominen

WordPress sivustosi on nyt asennettu onnistuneesti omalle virtuaalipalvelimellesi! Voit aloittaa sivuston muokkaamisen itsellesi sopivaksi tai tutustua seuraaviin jatko-artikkeleihin joiden avulla sivuston tietoturvaa ja nopeutta on mahdollista virittää paremmaksi.

Yhteenveto edistyneille käyttäjille

Ohessa yhteenveto käytetyistä komennoista ja asetuksista edistyneille käyttäjille.

Käyttöjärjestelmän valmistelu

# Päivitä käyttöjärjestelmä
sudo apt update && sudo apt upgrade -y

# Lataa WP-CLI, Anna käyttöoikeudet & lisää globaalisti käyttäjien saataville /usr/local/bin hakemistoon
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

# Lisää wpuser käyttäjä, luo httpdocs kansio sekä aseta käyttäjähakemiston oikeudet
sudo adduser wpuser --disabled-password
sudo -u wpuser mkdir /home/wpuser/httpdocs
sudo chmod 755 /home/wpuser

MySQL palvelimen asennus

#Asenna MariaDB palvelin ja komentorivityökalut
sudo apt install mariadb-server mariadb-client

# Kirjaudu MySQL Shelliin
sudo mysql -u root

# Luo tietokanta
CREATE DATABASE wordpressdb;

# Luo käyttäjätunnus (muista valita itsellesi uniikki salasana)
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '<salasana>';

# Anna käyttäjätunnukselle oikeudet tietokantaan
GRANT ALL ON wordpressdb.* TO 'wp_user'@'localhost';

# Päivitä käyttöoikeudet ja poistu MySQL Shellistä
FLUSH PRIVILEGES;
quit;

PHP-FPM

# Lisätään Ondrej Suryn PPA Repository
sudo add-apt-repository ppa:ondrej/php # Paina Enter kysyttäessä
sudo apt update

# Asenna tarvittavat PHP 8.3 paketit 
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-{bz2,curl,mbstring,intl,gd,mysql}

## Muokkaa asetustiedostoa /etc/php/8.3/fpm/php.ini 
# Etsi tiedostosta seuraavat asetukset ja aseta oheiset arvot (suluissa 8.3 oletusarvo) 
memory_limit = 256M ## (Oletus 128M)
post_max_size = 128M ## (Oletus 8M)
upload_max_filesize = 128M ## (Oletus 2M)

# Poista oheisen rivin edestä kommenttimerkki ; ja lisää haluamasi aikavyöhyke
date.timezone = Europe/Helsinki

## Muokkaa asetustiedostoa /etc/php/8.3/fpm/pool.d/www.conf
# Etsi tiedostosta seuraavat asetukset ja aseta oheiset arvot
user = wpuser
group = wpuser

#Käynnistä PHP-FPM uudelleen muokattuasi tiedostoja
sudo systemctl restart php8.3-fpm

Nginx

sudo apt install nginx

# Luo vhost tiedosto /etc/nginx/sites-available/verkkotunnuksesi.tld 
## kopioi tiedoston sisältö kohdasta "Wordpress vhostin luominen"

# Luodaan symbolinen linkki joka kertoo Nginxille, että vhost-asetuksemme tulee ladata käyttöön
sudo ln -s /etc/nginx/sites-available/wpdemo.web1.fi /etc/nginx/sites-enabled/

# Käynnistetään nginx uudelleen jolloin uusi asetustiedosto tulee voimaan
sudo systemctl restart nginx

# Asenna Certbot ja Certbot-nginx-lisäosa
sudo apt install certbot python3-certbot-nginx

# Hae sertifikaatti Certbotilla
sudo certbot

WordPress

# Lataa uusin wordpress asennuspaketti
sudo -u wpuser wp core download --path=/home/wpuser/httpdocs

## Avaa verkkotunnuksesi osoite esim. https://wpdemo.web1.fi ja vastaa asennusvelhon kysymyksiin

Yleisimmät virhetilanteet

Virhe SSL-Sertifikaatin hakemisessa

Yleisin virhe SSL-sertifikaatin noutamisessa Certbotilla liittyy siihen, että verkkotunnusta ei ole osoitettu palvelimesi ipv4 ja/tai ipv6 osoitetta kohti ja Certbot ei tästä johtuen pysty varmentamaan, että sinulla on oikeus hakea verkkotunnuksellesi SSL-sertifikaattia

Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
  Domain: <verkkotunnus.tld>
  Type:   dns
  Detail: no valid A records found for <verkkotunnus.tld>; no valid AAAA records found for <verkkotunnus.tld>

Mikäli saat oheisen virheviestin yrittäessäsi noutaa Certbotilla sertifikaattia, tulee sinun tarkistaa että verkkotunnuksesi DNS-tietueet osoittavat palvelimesi ipv4 (A-Tietue) ja ipv6 (AAAA-Tietue) osoitteisiin, ennenkuin suorittaa komennon uudelleen.

Kuinka palautan MySQL salasanan?

Mikäli et huomannut ottaa MySQL-käyttäjätunnuksen salasanaa ylös asennuksen aikana tai olet muuten kadottanut sen, voit asettaa käyttäjälle uuden salasanan helposti oheisilla komennoilla.

#Käynnistä MySQL-Shell
sudo mysql -u root

# Aseta käyttäjälle uusi salasana (muista vaihtaa <uusi_salasana> kohtaan itse keksimäsi salasana
ALTER USER 'wp_user'@'localhost' IDENTIFIED BY '<uusi_salasana>';

# Lataa käyttöoikeudet uudelleen
FLUSH PRIVILEGES;

# Poistu MySQL Shellistä
quit;

Miten palautan WordPress salasanan

Mikäli olet kadottanut WordPress käyttäjätunnuksen tai salasanan, voit käyttää oheisia komentoja käyttäjätunnuksen tarkistamiseen tai käyttäjän salasanan nollaamiseksi

# Käyttäjätunnusten listaaminen
sudo -u wpuser wp user list --path=/home/wpuser/httpdocs
# Salasanan nollaaminen käyttäjälle
sudo -u wpuser wp user update <tunnus> --user_pass=<uusi_salasana> --path=/home/wpuser/httpdocs