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):
Po instalacji, uruchom PuTTY, wprowadź adres IP swojego serwera i wciśnij przycisk Open:
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:
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ć):
Drugi krok to podanie nazwy strony, adresu e-mail administratora oraz danych do logowania do panelu strony:
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.