WordPress ir pasaulē populārākā satura pārvaldības sistēma (CMS), ko izmanto aptuveni 43% visu mājas lapu. Lai gan WordPress var uzstādīt uz koplietošanas (shared) hostinga un ir ne mazums gatavu platformu, kas piedāvā WordPress hostingu ar vienu klikšķi, VPS (virtuālais privātais serveris) sniedz pilnu kontroli pār servera konfigurāciju, labāku veiktspēju, drošību un neatkarību no ārēju servisu darbības un kaimiņiem (citām lapām) uz servera.

Šajā pamācībā soli pa solim apskatīsim pilnu WordPress uzstādīšanas procesu uz VPS — no servera sagatavošanas līdz darbojošamai mājas lapai ar SSL sertifikātu.

1. Priekšnosacījumi

Pirms sākat, pārliecinieties, ka jums ir:

  • VPS serveris ar Ubuntu vai Debian operētājsistēmu
  • SSH piekļuve serverim (ar root vai sudo lietotāju)
  • Domēna vārds — piemēram, coding.lv
  • Piekļuve DNS iestatījumiem pie domēna reģistratora
  • Minimālās prasības: 1 GB RAM, 1 CPU kodols, diska vieta atkarībā galvenokārt no tā, cik daudz bilžu vai video vēlies ievietot mājas lapā, bet 20GB būtu pilnīgi pietiekami sākumam, vairumam VPS jau lētākajā plānā ir vairāk.

Ieteicamie VPS resursi

Apmeklējumi/mēn. RAM CPU Disks
Līdz 10 000 1 GB 1 kodols 20 GB SSD
10 000 – 50 000 2 GB 2 kodoli 40 GB SSD
50 000 – 200 000 4 GB 2–4 kodoli 80 GB SSD
200 000+ 8+ GB 4+ kodoli 160+ GB SSD

Populāri VPS pakalpojumu sniedzēji:

  • Hetzner — lieliska cenas un kvalitātes attiecība, serveri Eiropā
  • DigitalOcean — vienkārša saskarne, laba dokumentācija
  • Linode (Akamai) — uzticams, ilggadējs pakalpojumu sniedzējs
  • Vultr — daudz servera atrašanās vietu
  • OVH — lēti serveri Eiropā

2. DNS konfigurēšana

Pirms sākat servera uzstādīšanu, konfigurējiet DNS ierakstus pie sava domēna reģistratora. DNS izmaiņas var aizņemt līdz 24–48 stundām (bet parasti ātrāk), tāpēc šo soli veiciet pirmām kārtām.

Nepieciešamie DNS ieraksti

Tips Nosaukums Vērtība TTL
A @ 123.456.78.90 (jūsu servera IP) 3600
A www 123.456.78.90 (jūsu servera IP) 3600
AAAA @ jūsu IPv6 adrese (ja pieejama) 3600

A ieraksts ar nosaukumu @ norāda galveno domēnu (piem., coding.lv) uz jūsu servera IP adresi. Ieraksts ar www nodrošina, ka www.coding.lv arī norāda uz to pašu serveri. Ja vēlaties wordpress uzinstalēt uz apakšdomēna, piemēram blog.coding.lv, tad @ vietā liekam blog.

DNS pārbaude

Pēc ierakstu izveides pārbaudiet vai tie darbojas izmantojot vietni https://www.dnswatch.info/ vai arī komandrindā:

dig coding.lv +short
dig www.coding.lv +short

Abām komandām jāatgriež jūsu servera IP adrese. Ja tā nav, DNS ieraksti vēl nav izplatījušies — pagaidiet un mēģiniet vēlāk.

3. Servera sākotnējā sagatavošana

Pieslēdzieties serverim, parasti izveidojot VPS sākotnēji tiek piešķirts root (galvenā servera administratora, kuram atļauts viss) logins.

ssh root@123.456.78.90

Atjauniniet sistēmu

apt update && apt upgrade -y

Izveidojiet jaunu lietotāju

Nav ieteicams pastāvīgi strādāt kā root. Izveidojiet jaunu lietotāju ar sudo tiesībām:

adduser webadmin
usermod -aG sudo webadmin

Konfigurējiet SSH drošību

Rediģējiet SSH konfigurāciju:

nano /etc/ssh/sshd_config

Ieteicamās izmaiņas:

# Aizliegt root pieteikšanos ar paroli
PermitRootLogin prohibit-password

# Atļaut tikai konkrētu lietotāju
AllowUsers webadmin

Pārstartējiet SSH:

systemctl restart sshd

Uzstādiet ugunsmūri

apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Šī konfigurācija atļauj tikai SSH (22), HTTP (80) un HTTPS (443) savienojumus.

4. Nginx instalēšana un konfigurēšana

Instalējiet Nginx

apt install nginx -y
systemctl enable nginx
systemctl start nginx

Pārbaudiet — atverot pārlūkprogrammā servera IP adresi, jāparādās Nginx sveiciena lapai.

Izveidojiet Nginx konfigurāciju jūsu domēnam

nano /etc/nginx/sites-available/coding.lv

Ievadiet šādu sākotnējo konfigurāciju (SSL pievienosim vēlāk):

server {
listen 80;
listen [::]:80;
server_name coding.lv www.coding.lv;
root /var/www/coding.lv;
index index.php index.html;

# Logošana
access_log /var/log/nginx/coding.lv.access.log;
error_log /var/log/nginx/coding.lv.error.log;

# Maksimālais augšupielādes izmērs
client_max_body_size 64M;

# Galvenā atrašanās vieta
location / {
try_files $uri $uri/ /index.php?$args;
}

# PHP apstrāde
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# Bloķēt piekļuvi slēptajiem failiem
location ~ /\. {
deny all;
}

# Bloķēt piekļuvi wp-config.php
location ~* /wp-config\.php {
deny all;
}

# Statisko failu kešošana
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|webp|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}

Aktivizējiet konfigurāciju

# Izveidojiet simbolisko saiti
ln -s /etc/nginx/sites-available/coding.lv /etc/nginx/sites-enabled/

# Noņemiet noklusējuma konfigurāciju
rm /etc/nginx/sites-enabled/default

# Pārbaudiet konfigurācijas sintaksi
nginx -t

# Pārstartējiet Nginx
systemctl reload nginx

Izveidojiet mājas lapas direktoriju

mkdir -p /var/www/coding.lv
chown -R www-data:www-data /var/www/coding.lv

5. PHP instalēšana un konfigurēšana

Instalējiet PHP un nepieciešamās paplašinājumus

WordPress prasa PHP ar vairākām paplašinājumiem:

apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring \
php8.3-xml php8.3-zip php8.3-intl php8.3-imagick php8.3-bcmath \
php8.3-soap php8.3-opcache php8.3-redis -y

Ja PHP 8.3 nav pieejams jūsu sistēmā, pievienojiet Ondrej PPA repozitoriju:

apt install software-properties-common -y
add-apt-repository ppa:ondrej/php -y
apt update

Debian gadījumā:

apt install apt-transport-https lsb-release ca-certificates curl -y
curl -sSL https://packages.sury.org/php/apt.gpg -o /usr/share/keyrings/deb.sury.org-php.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/sury-php.list
apt update

Konfigurējiet PHP

Rediģējiet PHP konfigurāciju:

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

Mainiet šādus iestatījumus:

; Maksimālais augšupielādes faila izmērs
upload_max_filesize = 64M

; Maksimālais POST pieprasījuma izmērs
post_max_size = 64M

; Maksimālais atmiņas limits
memory_limit = 256M

; Maksimālais izpildes laiks
max_execution_time = 300

; Maksimālais ievades mainīgo skaits
max_input_vars = 3000

; Laika josla
date.timezone = Europe/Riga

Konfigurējiet PHP-FPM

Optimizējiet PHP-FPM procesu pārvaldību:

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

Svarīgākie iestatījumi:

; Procesu pārvaldības režīms
pm = dynamic

; Maksimālais procesu skaits
pm.max_children = 10

; Sākotnējais procesu skaits
pm.start_servers = 3

; Minimālais gaidošo procesu skaits
pm.min_spare_servers = 2

; Maksimālais gaidošo procesu skaits
pm.max_spare_servers = 5

; Cik pieprasījumu process apstrādā pirms restarta
pm.max_requests = 500

Pārstartējiet PHP-FPM

systemctl restart php8.3-fpm
systemctl enable php8.3-fpm

PHP pārbaude

Izveidojiet pārbaudes failu:

echo "<?php phpinfo(); ?>" > /var/www/coding.lv/info.php

Atveriet pārlūkprogrammā https://coding.lv/info.php — jāparādās PHP informācijas lapai. Pēc pārbaudes izdzēsiet šo failu:

rm /var/www/coding.lv/info.php

6. MariaDB (MySQL) instalēšana un konfigurēšana

Instalējiet MariaDB

apt install mariadb-server mariadb-client -y
systemctl enable mariadb
systemctl start mariadb

Drošības konfigurācija

Palaidiet drošības skriptu:

mysql_secure_installation

Atbildiet uz jautājumiem:

  • Enter current password for root — nospiediet Enter (paroles vēl nav)
  • Switch to unix_socket authentication — Y
  • Change the root password — Y (iestatiet stipru paroli)
  • Remove anonymous users — Y
  • Disallow root login remotely — Y
  • Remove test database — Y
  • Reload privilege tables — Y

Izveidojiet datubāzi un lietotāju WordPress

Piesakieties MariaDB:

mysql -u root -p

Izpildiet šīs SQL komandas (aizstājiet stipra_parole_123 ar savu paroli):

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'stipra_parole_123';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Pierakstiet šos datus — tie būs nepieciešami WordPress instalācijā:

  • Datubāzes nosaukums: wordpress
  • Lietotājs: wpuser
  • Parole: jūsu izvēlētā parole
  • Serveris: localhost

7. WordPress lejupielāde un uzstādīšana

Lejupielādējiet WordPress

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz

Pārvietojiet failus

cp -a /tmp/wordpress/. /var/www/coding.lv/
chown -R www-data:www-data /var/www/coding.lv
chmod -R 755 /var/www/coding.lv

Konfigurējiet wp-config.php

Izveidojiet konfigurācijas failu no parauga:

cd /var/www/coding.lv
cp wp-config-sample.php wp-config.php
nano wp-config.php

Atrodiet un mainiet datubāzes iestatījumus:

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'stipra_parole_123' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );

Drošības atslēgas

Aizstājiet noklusējuma drošības atslēgas ar unikālām. Ģenerējiet tās šeit:

https://api.wordpress.org/secret-key/1.1/salt/

Kopējiet rezultātu un aizstājiet atbilstošās rindas wp-config.php failā.

Papildu iestatījumi wp-config.php

Pievienojiet šīs rindas pirms komentāra /* That's all, stop editing! */:

/* Failu sistēmas metode */
define( 'FS_METHOD', 'direct' );

/* Atmiņas limits */
define( 'WP_MEMORY_LIMIT', '256M' );

/* Automātiskās saglabāšanas intervāls (sekundēs) */
define( 'AUTOSAVE_INTERVAL', 120 );

/* Ierobežot rakstu versiju skaitu */
define( 'WP_POST_REVISIONS', 5 );

/* Atkritumu tukšošana (dienas) */
define( 'EMPTY_TRASH_DAYS', 14 );

8. SSL sertifikāta uzstādīšana (Let's Encrypt)

SSL sertifikāts nodrošina šifrētu savienojumu (HTTPS) starp serveri un apmeklētāju. Let's Encrypt piedāvā bezmaksas SSL sertifikātus.

Instalējiet Certbot

apt install certbot python3-certbot-nginx -y

Iegūstiet sertifikātu

Pārliecinieties, ka DNS ieraksti jau norāda uz serveri, tad palaidiet:

certbot --nginx -d coding.lv -d www.coding.lv

Certbot jautās:

  • E-pasta adresi — norādiet derīgu adresi sertifikāta paziņojumiem
  • Piekrišanu noteikumiem — piekrītiet (A)
  • Vai pāradresēt HTTP uz HTTPS — izvēlieties 2 (Redirect) — ieteicams

Certbot automātiski:

  1. Iegūs SSL sertifikātu
  2. Modificēs Nginx konfigurāciju, pievienojot SSL iestatījumus
  3. Iestatīs HTTP → HTTPS pāradresēšanu

Automātiska sertifikāta atjaunināšana

Let's Encrypt sertifikāti ir derīgi 90 dienas. Certbot automātiski iestata atjaunināšanas uzdevumu, bet pārbaudiet to:

certbot renew --dry-run

Ja tests ir veiksmīgs, sertifikāts automātiski atjaunosies pirms termiņa beigām.

Pilnā Nginx konfigurācija ar SSL

Pēc Certbot darbības jūsu Nginx konfigurācija izskatīsies apmēram šādi:

server {
listen 80;
listen [::]:80;
server_name coding.lv www.coding.lv;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name coding.lv www.coding.lv;
root /var/www/coding.lv;
index index.php index.html;

# SSL sertifikāti (Certbot iestatīti)
ssl_certificate /etc/letsencrypt/live/coding.lv/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/coding.lv/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

# Drošības galvenes
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# Logošana
access_log /var/log/nginx/coding.lv.access.log;
error_log /var/log/nginx/coding.lv.error.log;

client_max_body_size 64M;

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

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}

location ~ /\. {
deny all;
}

location ~* /wp-config\.php {
deny all;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|webp|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}

# Bloķēt piekļuvi wp-includes
location ~* /wp-includes/.*\.php$ {
deny all;
}

# Bloķēt piekļuvi uploads PHP failiem
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
}

9. WordPress instalācijas pabeigšana

Atveriet pārlūkprogrammā https://coding.lv — jāparādās WordPress instalācijas vednim.

  1. Izvēlieties valodu — Latviešu
  2. Ievadiet mājas lapas nosaukumu
  3. Izveidojiet administratora kontu — lietotājvārds, e-pasts, stipra parole
  4. Nelietojiet "admin" kā lietotājvārdu — tas ir pirmais, ko uzbrucēji mēģina
  5. Noklikšķiniet "Instalēt WordPress"

Piesakieties administrācijas panelī: https://coding.lv/wp-admin

10. WordPress drošības uzlabojumi

Failu atļaujas

Iestatiet pareizas failu atļaujas:

# Direktorijas — 755
find /var/www/coding.lv -type d -exec chmod 755 {} \;

# Faili — 644
find /var/www/coding.lv -type f -exec chmod 644 {} \;

# wp-config.php — stingrākas atļaujas
chmod 600 /var/www/coding.lv/wp-config.php

Aizliegt PHP izpildi uploads mapē

Izveidojiet failu /var/www/coding.lv/wp-content/uploads/.htaccess vai pārliecinieties, ka Nginx konfigurācijā ir attiecīgais bloks (jau pievienots iepriekš).

Ieteicamie drošības spraudņi

Spraudnis Funkcija
Wordfence Ugunsmūris, ļaunprogrammatūras skenēšana, pieteikšanās aizsardzība
Limit Login Attempts Ierobežo neveiksmīgus pieteikšanās mēģinājumus
Two Factor Divfaktoru autentifikācija
UpdraftPlus Automātiska dublēšana uz mākonī

Papildu drošības iestatījumi wp-config.php

/* Aizliegt failu rediģēšanu no admin paneļa */
define( 'DISALLOW_FILE_EDIT', true );

/* Piespiest SSL administrācijai */
define( 'FORCE_SSL_ADMIN', true );

11. Veiktspējas optimizācija

Nginx FastCGI kešošana

Pievienojiet FastCGI kešu, lai Nginx saglabātu PHP atbilžu kopijas un atdotu tās bez PHP apstrādes. Pievienojiet pirms server bloka:

fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Un server blokā, PHP location sadaļā pievienojiet:

fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;

Gzip saspiešana

Rediģējiet /etc/nginx/nginx.conf un pievienojiet http blokā:

gzip on;
gzip_vary on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;

PHP OPcache

Pārbaudiet, vai OPcache ir ieslēgts:

nano /etc/php/8.3/fpm/conf.d/10-opcache.ini

Ieteicamie iestatījumi:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.save_comments=1

Ieteicamie veiktspējas spraudņi

12. Automātiskā servera dublēšana

Papildus WordPress spraudņiem, veidojiet arī servera līmeņa dublējumkopijas:

nano /opt/backup-wordpress.sh

#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/opt/backups"
mkdir -p $BACKUP_DIR

# WordPress failu dublējums
tar -czf $BACKUP_DIR/wp-files-$DATE.tar.gz /var/www/coding.lv

# Datubāzes dublējums
mysqldump -u wpuser -p'stipra_parole_123' wordpress | gzip > $BACKUP_DIR/wp-db-$DATE.sql.gz

# Dzēst vecākus par 14 dienām
find $BACKUP_DIR -name "wp-*" -mtime +14 -delete

echo "WordPress backup pabeigts: $DATE"

chmod +x /opt/backup-wordpress.sh

Pievienojiet cron uzdevumu (katru dienu plkst. 3:00):

crontab -e

0 3 * * * /opt/backup-wordpress.sh >> /opt/backups/backup.log 2>&1

13. WordPress atjaunināšana

Regulāri atjauniniet WordPress kodolu, tēmas un spraudņus:

Izmantojot WP-CLI

WP-CLI ir komandrindas rīks WordPress pārvaldībai. Instalējiet to:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

Noderīgas WP-CLI komandas:

Komanda Apraksts
wp core update Atjaunina WordPress kodolu
wp plugin update --all Atjaunina visus spraudņus
wp theme update --all Atjaunina visas tēmas
wp db optimize Optimizē datubāzi
wp cache flush Iztīra kešu
wp plugin list Parāda instalēto spraudņu sarakstu
wp user list Parāda lietotāju sarakstu

Svarīgi: WP-CLI komandas jāizpilda kā www-data lietotājs:

sudo -u www-data wp core update --path=/var/www/coding.lv

14. Biežāk pieļautās kļūdas

  • Servera palaišana kā root — PHP-FPM jādarbojas kā www-data, nevis root
  • Nepareizas failu atļaujas — pārāk atļaujoši iestatījumi (777) ir drošības risks
  • Nav SSL sertifikāta — gan drošības, gan SEO iemeslu dēļ HTTPS ir obligāts
  • Nav dublējumkopiju — viena kļūda vai uzbrukums var izdzēst visu
  • Neaktuāli spraudņi — novecojuši spraudņi ir galvenais uzbrukumu vektors
  • Pārāk daudz spraudņu — katrs spraudnis palēnina lapu. Izmantojiet tikai nepieciešamos
  • Nav konfigurēts ugunsmūris — atstāj serveri neaizsargātu
  • Vājas paroles — WordPress admin un datubāzes paroles jābūt stiprām un unikālām
  • Nav mainīts SSH ports — noklusējuma 22. ports ir biežs automātisku uzbrukumu mērķis

Kopsavilkums

WordPress uzstādīšana uz VPS prasa vairāk darba nekā koplietojamais hostings, bet sniedz pilnu kontroli un labāku veiktspēju. Galvenie soļi:

  1. Konfigurējiet DNS — norādiet domēnu uz servera IP
  2. Sagatavojiet serveri — atjauniniet sistēmu, izveidojiet lietotāju, konfigurējiet ugunsmūri
  3. Instalējiet Nginx — tīmekļa serveris ar optimālu konfigurāciju
  4. Instalējiet PHP — ar visām nepieciešamajām paplašinājumiem
  5. Instalējiet MariaDB — izveidojiet datubāzi un lietotāju
  6. Lejupielādējiet WordPress — konfigurējiet wp-config.php
  7. Instalējiet SSL sertifikātu — ar Let's Encrypt un Certbot
  8. Pabeigiet instalāciju — caur pārlūkprogrammu
  9. Nodrošiniet drošību — failu atļaujas, drošības spraudņi, regulāri atjauninājumi
  10. Optimizējiet veiktspēju — kešošana, Gzip, OPcache

Noderīgas saites:

Laboja mad, labots 7x