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
- 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
3. Syötetään asennusvelhon vaatimat tietokanta-asetukset sen mukaisesti mitä aikaisemmassa ”MySQL (MariaDB)” vaiheessa on itse asetettu
4. Sekä sivuston perusasetukset ja ensimmäisen käyttäjän tiedot.
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.
- Nginx asetukset
- MySQL palvelimen asetukset, tietoturva ja suorituskyky
- Cloudflare CDN (linkki tulossa)
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