WordPress kojarzy się przede wszystkim z prostym hostingiem, na którym instalację można przeprowadzić kilkoma kliknięciami. Nic jednak nie stoi na przeszkodzie, aby uruchomić go na własnym VPS-ie lub serwerze dedykowanym. Daje to większą kontrolę nad konfiguracją, wydajnością i bezpieczeństwem, ale oznacza też, że sami odpowiadamy za administrację serwerem.

W tym poradniku dowiesz się jak krok po kroku uruchomić stronę WordPress na serwerze z Ubuntu, Nginx, PHP i MySQL.

VPS, serwer dedykowany czy zwykły hosting?

Na klasycznym hostingu współdzielonym większością rzeczy zajmuje się firma hostingowa. Otrzymujesz panel administracyjny, gotowy serwer WWW, PHP, bazę danych, certyfikat SSL, a często nawet instalator WordPressa.

VPS, czyli Virtual Private Server, daje znacznie większą swobodę. Do dyspozycji jest wirtualny serwer z własnym systemem operacyjnym i dostępem administratora. Możesz zdecydować, jaki system zainstalujesz, jak skonfigurujesz PHP czy bazę danych i jakie dodatkowe usługi będą działały na serwerze.

Serwer dedykowany działa podobnie z punktu widzenia konfiguracji systemu, ale zamiast części fizycznej maszyny otrzymujesz cały fizyczne serwer do własnej dyspozycji.

Dla niewielkiej strony WordPress VPS jest zazwyczaj wystarczający. Serwer dedykowany zaczyna mieć sens przy dużym ruchu, wielu witrynach albo dodatkowych usługach wymagających sporych zasobów.

Hosting współdzielony VPS Serwer dedykowany
Koszt Niski Średni Wysoki
Łatwość obsługi Bardzo łatwa Wymaga wiedzy administracyjnej Wymaga dużej wiedzy technicznej
Wydajność Dobra dla małych i średnich stron Bardzo dobra, z gwarantowanymi zasobami Najwyższa, cały serwer do dyspozycji
Możliwość konfiguracji Ograniczona Bardzo duża Pełna
Bezpieczeństwo i aktualizacje Głównie po stronie dostawcy Głównie po stronie użytkownika Po stronie użytkownika
Skalowanie Zwykle przez zmianę pakietu Łatwe zwiększanie zasobów Trudniejsze i droższe
Najlepsze zastosowanie Blogi, strony firmowe, małe sklepy Większe strony, WooCommerce, kilka serwisów Duże serwisy i projekty o wysokim ruchu
Główna zaleta ✅ prostota i cena ✅ dobry stosunek ceny do możliwości ✅ pełna kontrola
Główna wada ❌ mała kontrola ❌ konieczność administracji ❌ wysoki koszt

Czego potrzebujemy?

W poradniku zakładamy, że masz:

  • VPS lub serwer dedykowany z Ubuntu 24.04 LTS
  • dostęp do serwera przez SSH
  • domenę internetową
  • możliwość zmiany rekordów DNS domeny

Jako środowisko dla WordPressa wykorzystamy Nginx, PHP 8.4 oraz MySQL.

Aktualnie WordPress rekomenduje PHP 8.3 lub nowsze, MySQL 8.0+ oraz obsługę HTTPS. Zarówno Nginx, jak i Apache są oficjalnie wskazywane jako odpowiednie serwery WWW.

1. Połączenie się z serwerem

Pierwszym krokiem jest połączenie z serwerem za pomocą klienta SSH. Dla Windows polecamy PuTTY, jest to najpopularniejszy i zarazem najprostszy klient SSH dla systemu Windows. Pobierzesz go ze strony https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html (pobierz instalator MSI odpowiedni dla architektury Twojego komputera - najpewniej będzie to 64-bit x86):

Pobranie programu PuTTY

Po instalacji, uruchom PuTTY, wprowadź adres IP swojego serwera i wciśnij przycisk Open:

Łączenie z serwerem przez PuTTY

Jeżeli natomiast korzystasz z systemu Linux lub MacOS, klienta SSH masz już wbudowanego i wystarczy, że otworzysz konsolę/terminal i wprowadzisz komendę (zamień oczywiście adres IP z poniższego przykładu na adres Twojego serwera):

ssh 142.250.130.102

W zależności od dostawcy VPS-a możemy otrzymać konto root albo zwykłego użytkownika z możliwością wykonywania poleceń przez sudo. W kolejnych poleceniach do wykonania na serwerze używamy zapisu z sudo które powinny być uruchamiane z poziomu zwykłego użytkownika, jeżeli jednak posiadasz dostęp do użytkownika root, możesz pominąć sudo z początku polecenia i wykonać je z poziomu użytkownika root.

Przed przystąpieniem do dalszych działań warto zaktualizować oprogramowanie na serwerze:

sudo apt update
sudo apt upgrade -y

Regularne aktualizowanie systemu jest później jednym z podstawowych obowiązków administratora własnego serwera.

2. Instalacja Nginx

Nginx będzie odpowiadał za odbieranie zapytań HTTP i HTTPS oraz przekazywanie plików PHP do php-fpm.

Zainstalujesz go poleceniem:

sudo apt install nginx -y

Jeżeli Twój serwer posiada zainstalowany firewall, musisz go odpowiednio skonfigurować, aby umożliwić ruch na odpowiednich portach. To czy na Twoim serwerze działa firewall sprawdzisz za pomocą polecenia:

systemctl status ufw

W odpowiedzi na powyższe polecenie zobaczysz informacje o pracującym firewallu lub komunikat w stylu Unit ufw.service could not be found, który oznacza, że na serwerze nie ma firewalla i możesz pominąć kolejny krok polegający na jego konfiguracji.

Konfiguracja firewall (jeżeli Twój serwer go używa):

sudo ufw allow 'Nginx Full'

Jeżeli wszystko działa prawidłowo, po wpisaniu adresu IP serwera w przeglądarce powinna pojawić się domyślna strona Nginx.

3. Instalacja PHP

Sam Nginx nie potrafi wykonywać kodu PHP. Potrzebujemy php-fpm oraz kilku rozszerzeń wykorzystywanych przez WordPressa i jego wtyczki.

sudo apt install php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-soap php-xml php-zip -y

Wersję PHP możemy sprawdzić poleceniem:

php -v

W konsoli powinieneś zobaczyć wynik podobny do poniższego:

Wynik polecenia php -v

4. Instalacja MySQL

WordPress przechowuje w bazie między innymi treść wpisów, ustawienia strony, informacje o użytkownikach oraz konfigurację wtyczek.

Zainstaluj bazę MySQL na serwerze:

sudo apt install mysql-server -y

5. Konfiguracja MySQL dla WordPressa

Uruchom konsolę MySQL:

sudo mysql

Następnie utwórz nową bazę danych:

CREATE
DATABASE wordpress;

Stwórz również osobnego użytkownika. Zamiast BARDZO_MOCNE_HASLO podaj własne hasło:

CREATE
USER 'wordpress'@'localhost' IDENTIFIED BY 'BARDZO_MOCNE_HASLO';

Nadaj użytkownikowi dostęp tylko do bazy WordPressa:

GRANT
ALL
PRIVILEGES
ON
wordpress
.
*
TO
'wordpress'@'localhost';
FLUSH
PRIVILEGES;

Z konsoli MySQL wyjdziesz poleceniem:

EXIT;

Nie ma potrzeby udostępniania bazy MySQL w internecie. WordPress i baza danych działają na tej samej maszynie, dlatego mogą komunikować się lokalnie.

6. Pobranie WordPressa

Przejdź do katalogu tymczasowego:

cd /tmp

Pobierz najnowszą wersję WordPressa:

curl -O https://wordpress.org/latest.tar.gz

Rozpakuj archiwum:

tar -xzf latest.tar.gz

Załóżmy, że Twoja strona będzie działała pod domeną moja-strona.pl. Stwórz dla niej katalog:

sudo mkdir -p /var/www/moja-strona.pl

Następnie skopiuj pliki WordPressa:

sudo cp -a wordpress/. /var/www/moja-strona.pl/

Nadaj plikom właściciela używanego przez Nginx i PHP:

sudo chown -R www-data:www-data /var/www/moja-strona.pl

7. Konfiguracja WordPressa

Przejdź do katalogu strony:

cd /var/www/moja-strona.pl

Utwórz konfigurację na podstawie przykładowego pliku:

sudo cp wp-config-sample.php wp-config.php

Otwórz go w edytorze:

sudo nano wp-config.php

Odnajdź następujące wartości:

define( 'DB_NAME', 'database_name_here' );
define( 'DB_USER', 'username_here' );
define( 'DB_PASSWORD', 'password_here' );
define( 'DB_HOST', 'localhost' );

i podmień je na dane utworzone wcześniej:

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wordpress' );
define( 'DB_PASSWORD', 'BARDZO_MOCNE_HASLO' );
define( 'DB_HOST', 'localhost' );

W pliku wp-config.php znajdują się również klucze bezpieczeństwa WordPressa. Warto zastąpić wartości przykładowe losowymi kluczami wygenerowanymi specjalnie dla Twojej instalacji.

8. Konfiguracja Nginx dla domeny

Utwórz nową konfigurację:

sudo nano /etc/nginx/sites-available/moja-strona.pl

Wklej:

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

    server_name moja-strona.pl www.moja-strona.pl;

    root /var/www/moja-strona.pl;
    index index.php index.html;

    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.4-fpm.sock;
    }

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

Jeżeli na serwerze działa inna wersja PHP, ścieżka do socketu php-fpm może być inna niż podawana powyżej /run/php/php8.4-fpm.sock. Możesz sprawdzić wersje php poleceniem:

ls /run/php/

Włącz konfigurację strony:

sudo ln -s /etc/nginx/sites-available/moja-strona.pl /etc/nginx/sites-enabled/

Sprawdź, czy konfiguracja Nginx nie zawiera błędów:

sudo nginx -t

Jeżeli zobaczysz komunikat:

syntax is ok
test is successful

możesz przeładować konfigurację:

sudo systemctl reload nginx

9. Zmiana ustawień DNS domeny

Teraz domena musi wskazywać na adres IP Twojego VPS-a. W panelu operatora DNS ustaw rekord A dla domeny:

moja-strona.pl → adres IP serwera

Dla www możesz utworzyć drugi rekord A albo rekord CNAME wskazujący na domenę główną.

Zmiany DNS nie zawsze są widoczne natychmiast. Czasami trzeba odczekać kilkanaście minut lub nawet kilka godzin. Do pierwszych testów strony zalecamy użyć trybu Incognito w przeglądarce, tam zmiana w domenie będzie szybciej widoczna.

10. Włączenie HTTPS

Strony WordPress powinny działać przez HTTPS. Najprostszym sposobem uzyskania bezpłatnego certyfikatu TLS jest Let’s Encrypt i narzędzie Certbot. Jedną z oficjalnie zalecanych metod instalacji Certbota na Ubuntu jest użycie pakietu Snap:

sudo snap install --classic certbot

Utwórz dowiązanie:

sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Następnie uruchom:

sudo certbot --nginx -d moja-strona.pl -d www.moja-strona.pl

Certbot pobierze certyfikat Let’s Encrypt i może automatycznie zmodyfikować konfigurację Nginx tak, aby strona działała przez HTTPS.

Po wszystkim warto sprawdzić mechanizm automatycznego odnawiania:

sudo certbot renew --dry-run

Certbot wykorzystuje mechanizm automatycznego odnawiania certyfikatów, więc po prawidłowej konfiguracji nie trzeba co kilka miesięcy instalować certyfikatu ręcznie.

11. Kończymy instalację WordPressa

Teraz możesz otworzyć adres strony w przeglądarce. Powinien pojawić się instalator WordPressa. W pierwszym kroku zostaniesz poproszony o wybranie języka strony oraz panel administratora (można go potem zmienić):

Instalator Wordpress - krok 1

Drugi krok to podanie nazwy strony, adresu e-mail administratora oraz danych do logowania do panelu strony:

Instalator Wordpress - krok 2

Po zakończeniu instalacji panel administracyjny będzie dostępny pod adresem https://moja-strona.pl/wp-admin/.

12. Co zrobić po uruchomieniu strony?

Sama instalacja WordPressa to dopiero początek. W przypadku własnego VPS-a nie masz zazwyczaj administratora hostingu, który automatycznie zadba o cały serwer. Musisz przede wszystkim regularnie aktualizować system Ubuntu, WordPressa, motyw oraz wtyczki. Dobrą praktyką jest korzystanie z logowania SSH za pomocą kluczy zamiast hasła oraz ograniczenie dostępu do konta root.

Warto również wykonywać kopie zapasowe. Backup powinien obejmować zarówno katalog z plikami WordPressa, jak i bazę MySQL. Co ważne, kopii nie należy przechowywać wyłącznie na tym samym VPS-ie. Awaria dysku lub całego serwera mogłaby wtedy usunąć jednocześnie stronę i jej backup.

13. Monitoruj działanie strony

Posiadając własny serwer, sam odpowiadasz również za wykrywanie jego awarii. Problemem może być nie tylko całkowite wyłączenie VPS-a. Strona może przestać odpowiadać po aktualizacji, zabraknie miejsca na dysku, php-fpm może przestać działać albo baza danych może odrzucać połączenia. Ręczne sprawdzanie strony kilka razy dziennie nie ma większego sensu. Znacznie lepszym rozwiązaniem jest automatyczny monitoring strony, który regularnie wykonuje testy i wysyła powiadomienie, gdy witryna przestanie odpowiadać.

W Ping.pl możesz uruchomić monitoring strony opartej o WordPress wykonywany automatycznie przez całą dobę. Dzięki temu o problemie ze stroną dowiesz się od razu, a nie dopiero wtedy, gdy zgłosi go użytkownik lub klient. Monitoring warto skonfigurować dopiero po zakończeniu instalacji i sprawdzeniu, że właściwa domena działa poprawnie przez HTTPS.

Typowe problemy podczas instalacji

502 Bad Gateway

Najczęściej oznacza, że Nginx nie może połączyć się z php-fpm. W pierwszej kolejności sprawdź wersję PHP jaką posiadasz oraz status usługi php-fpm:

php -v
systemctl status php8.4-fpm

Jeżeli posiadasz inną wersję PHP niż php8.4-fpm to odpowiednio zmodyfikuj polecenie. Sprawdź również konfigurację Nginx, czy wskazany jest działający socket php-fpm:

fastcgi_pass unix:/run/php/php8.4-fpm.sock;

Error establishing a database connection

WordPress nie może połączyć się z bazą. Sprawdź poprawność danych w wp-config.php, przede wszystkim:

DB_NAME
DB_USER
DB_PASSWORD
DB_HOST

Możesz również zweryfikować status MySQL i spróbować zrestartować usługę bazy danych:

systemctl status mysql
systemctl restart mysql

403 Forbidden

W przypadku błędu 403 warto sprawdzić właściciela i uprawnienia plików:

ls -la /var/www/moja-strona.pl

W naszej konfiguracji pliki powinny należeć do użytkownika www-data. Sprawdź rozdział 6. Pobieramy WordPressa.