09 cze

Instalowanie WordPress z LEMP na Ubuntu 16.04

Wprowadzenie

WordPress jest najpopularniejszym CMS (content management system/ system zarządzania treścią) w Internecie. Ten system pozwala na łatwe prowadzenie blogów i stron www z wykorzystaniem MySQL i przetwarzaniem danych przy pomocy PHP. WordPress był bardzo dobrze odebrany przez użytkowników i stał się doskonałym wyborem w zakresie instalowania i szybkiego działania stron www. Po skonfigurowaniu, praktycznie całe administrowanie może być wykonywane poprzez stronę www.

Skupimy się na instalacji WordPress na zestawie LEMP (Linux, Nginx, MySQL i PHP) na serwerze z systemem operacyjnym Ubuntu 16.04.

Zaczynamy

Będziesz potrzebował dostępu do serwera z systemem Ubuntu 16.04.

Przed rozpoczęciem powinieneś wykonać następujące kroki:

  • Stworzyć użytkownika sudo na swoim serwerze: Wszystkie opisane niżej czynności będziemy wykonywać przy wykorzystaniu użytkownika innego niż administrator z uprawnieniami (Wstępna konfiguracja Ubuntu 16.04)
  • Zainstalować zestaw LEMP: W celu poprawnego funkcjonowania WordPress potrzebuje serwera www, bazy danych oraz PHP. Skonfigurowanie zestawu LEMP (Linux, Nginx, MySQL i PHP) pozwoli na sprostanie tym wszystkim wymogom (Instalowanie LEMP na Ubuntu 16.04).
  • Zabezpieczenie strony poprzez: WordPress serwuje dynamiczną zawartość oraz obsługuje uwierzytelnienia i autoryzację. TLS/SSL jest technologią pozwalającą na szyfrowanie trafika ze swojej strony www tak, aby połączenie pozostawało bezpiecznym. Sposób konfiguracji SSL zależy od posiadanie przez Ciebie domeny na stronie www.
  • Jeżeli posiadasz domenę…najprostszym sposobem zabezpieczenia Twojej strony www jest wykorzystanie Let’s Encrypt, który zapewnia darmowe i zaufane certyfikaty (Instalowanie certyfikatu Lets Encrypt w systemie Ubuntu 16.04).
  • Jeżeli nie masz domeny… i jesteś pewny, że używasz tej konfiguracji wyłącznie w celach personalnych lub do testowania, możesz użyć certyfikatu z własnym podpisem. Pozwala to na wykorzystanie tego samego typu szyfrowania bez walidacji domeny.

Po wykonaniu powyższych kroków zaloguj się na swój serwer jako użytkownik sudo.

Stworzenie bazy danych MySQL oraz użytkownika dla WordPress

WordPress używa MySQL do zarządzania i przechowywania informacji dotyczących strony oraz użytkowników. Mamy już zainstalowany MySQL, ale musimy mieć też bazę danych i użytkownika dla WordPress.

Aby rozpocząć, zaloguj się do konta root (administracyjnego) MySQL poprzez następujące polecenie:
mysql -u root -p

Zostaniesz poproszony o hasło głównego konta MySQL ustawione w trakcie instalowania oprogramowania.

Najpierw utworzymy osobną bazę danych, kontrolowaną przez WordPress. Możesz ją nazwać jak chcesz, lecz w niniejszym artykule będziemy korzystać z nazwy wordpress. Bazę danych dla WordPress utworzymy wpisując:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Uwaga
Każde polecenie/zapytanie MySQL powinno kończyć się średnikiem (;). Upewnij się, że tak właśnie jest.
Teraz przyszedł czas na stworzenie konta użytkownika MySQL niezbędnego wyłącznie do pracy z naszą nową bazą danych. Z punktu widzenia zarządzania i bezpieczeństwa stworzenie jedno funkcjonalnych baz danych oraz kont jest doskonałym pomysłem. Użyjemy nazwy wordpressuser. Zawsze możesz użyć innej.

Stwórzmy konto, ustalmy hasło oraz dostęp do nowo stworzonej bazy danych. Możemy tego dokonać poprzez wprowadzenie następującego polecenia. Pamiętaj o wybraniu mocnego hasła:
GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'haslo';

Gratulacje! Teraz masz bazę danych oraz konto użytkownika przeznaczone specjalnie dla WordPress. Musimy opróżnić uprawnienia tak, aby aktualny MySQL rozpoznał wprowadzone zmiany:
FLUSH PRIVILEGES;

Wyjdź z MySQL wpisując:
EXIT;

Dostosowanie konfiguracji Nginx w celu prawidłowej obsługi WordPress

Teraz dokonamy kilka drobnych zmian w plikach bloku serwera Nginx.

Otwórz domyślny plik bloku serwera z uprawnieniami sudo w celu rozpoczęcia:
sudo nano /etc/nginx/sites-available/default

W głównym bloku server musimy dodać kilka bloków location.

Zaczynamy od stworzenia dokładnie dopasowywanych bloków lokalizacji dla żądań /favicon.ico oraz /robots.txt, z których obydwa nie wymagają logowania.

Użyjemy zwykłej lokalizacji aby dopasować wszelkie żądania dotyczące plików statycznych. Ponownie wyłączymy rejestrację dla tych zapytań i oznaczymy je jako wysoko buferowane, ponieważ są zazwyczaj kosztownymi zasobami. Możesz dostosować wspomnianą listę statycznych plików, żeby nie przechowywać żadnych innych rozszerzeń plików, których może używać Twoja witryna:

/etc/nginx/sites-available/default
server {
    . . .

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
    . . .
}

W środku istniejącego bloku location / musimy dostosować listę try_files aby zamienić błąd 404 jako opcję domyślną. Sterowanie jest przekazywane do pliku index.php z argumentami żądania.

Powinno to wyglądać mniej więcej następująco:

/etc/nginx/sites-available/default
server {
    . . .
    location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php$is_args$args;
    }
    . . .
}

Po zakończeniu, zapisz i zamknij plik.

Teraz możemy sprawdzić konfigurację w zakresie błędów składniowych wpisując:
sudo nginx -t

Jeżeli żadne błędy nie zostały zauważone, uruchom ponownie Nginx wpisując:
sudo systemctl reload nginx

Instalowanie dodatkowych wtyczek i rozszerzeń PHP

Kiedy instalowaliśmy zestaw LEMP – na ten moment potrzebowaliśmy tak na prawdę minimalny zestaw wtyczek żeby nawiązać komunikację pomiędzy PHP i MySQL. WordPress i jego wtyczki  wymagają od nas instalacji dodatkowych rozszerzeń.

Możemy pobrać i zainstalować niezbędne popularne wtyczki PHP dla naszego WordPress za pomocą podanych poleceń:
sudo apt-get update
sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

Uwaga:
Każda wtyczka do WordPress ma swoje wymagania do oprogramowania serwera. Niektóre z nich będą potrzebowali instalacji dodatkowych rozszerzeń. Przeczytaj dokumentację wtyczki aby odnaleźć wymagania techniczne. Standardowo można zainstalować wymagane wtyczki przy pomocy apt-get.

Jak tylko skończysz instalację wtyczek, zresetuj proces PHP-FPM żeby PHP uruchomił nowo zainstalowane wtyczki:
sudo systemctl restart php7.0-fpm

Pobieranie WordPress

Teraz, kiedy oprogramowanie serwera zostało skonfigurowane, możemy pobrać i skonfigurować WordPress. Biorąc pod uwagę kwestie bezpieczeństwa zalecamy pobranie najnowszej wersji WordPress z ich strony.

Zmień w katalog z możliwością wielokrotnego zapisywania, a następnie pobierz skompresowaną wersję wpisując:
cd /tmp
curl -O https://wordpress.org/latest.tar.gz

Rozpakuj skompresowane pliki w celu utworzenia struktury katalogów WordPress:
tar xzvf latest.tar.gz

Przesuńmy chwilowo te pliki do naszego głównego dokumentu. Zanim to zrobimy, możemy skopiować przykładowy plik konfiguracyjny do pliku, który WordPress faktycznie odczytuje:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

Możemy również utworzyć folder upgrade po to, aby WordPress nie spotkał się z problemem uprawnień do folderów podczas aktualizacji swojego oprogramowania:
mkdir /tmp/wordpress/wp-content/upgrade

Teraz możemy skopiować całą zawartość katalogu do naszego dokument root. Użyjmy flagi -a, aby upewnić się, że nasze uprawnienia są zachowane. Użyjmy kropki na końcu naszego źródłowego katalogu w celu wskazania, że wszystko w katalogu powinno zostać skopiowane, w tym wszelkie ukryte pliki:
sudo cp -a /tmp/wordpress/. /var/www/html

Konfigurowanie katalogu WordPress

Przed dokonaniem konfiguracji WordPress przy pomocy strony internetowej, musimy dostosować kilka rzeczy w katalogu WordPress.

Regulowanie kwestii uprawnień

Jedną z rzeczy, które należy zrobić jest utworzenie stosownych uprawnień do plików oraz uregulowanie kwestii własnościowych. Musimy mieć możliwość zapisywać do tych plików jako zwykły użytkownik, potrzebujemy też serwera www, żeby móc uzyskać dostęp oraz dostosować niektóre pliki i katalogi w celu poprawnego funkcjonowania.

Zaczniemy z przypisania prawa własności użytkownika do wszystkich plików w naszym katalogu dokumentów. W naszym przypadku użyjemy sammy w jakości nazwy użytkownika, ale należy to zmienić w celu dopasowania niezależnie od tego, jak użytkownik sudo jest nazywany. Własność grupy przypiszemy do grupy www-data:
sudo chown -R sammy:www-data /var/www/html

Następnie ustawimy setgid w każdym z katalogów w ramach dokumentu root. W wyniku w ramach tych katalogów zostaną stworzone nowe pliki dziedziczące grupę nadrzędnego katalogu (który właśnie ustawiliśmy na www-data) zamiast tworzenia podstawowej grupy użytkownika. Dzięki temu upewnimy się, że przy tworzeniu pliku w katalogu w wierszu poleceń serwer www wciąż będzie miał własność grupową nad nim.

Możemy ustawić setgid w każdym katalogu w instalacji WordPressa wpisując:
sudo find /var/www/html -type d -exec chmod g+s {} \;

Dostosujemy jeszcze kilka innych uprawnień. Po pierwsze, damy grupowy pisemny dostęp do katalogu wp-content dzięki czemu interfejs www będzie mógł dokonywać zmian tematycznych oraz wtyczek:
sudo chmod g+w /var/www/html/wp-content

Powyższe pozwoli na zapewnienie pisemnego dostępu serwera www do całej treści w ramach tych dwóch katalogów:
sudo chmod -R g+w /var/www/html/wp-content/themes
sudo chmod -R g+w /var/www/html/wp-content/plugins

Niektóre wtyczki i procedury mogą wymagać dodatkowych poprawek.

Ustawienie konfiguracyjnego pliku WordPress

Musimy dokonać kilku zmian w głównym konfiguracyjnym pliku WordPress.

Pierwszą rzeczą, którą powinniśmy zrobić po otworzeniu pliku, jest ustawienie kilku tajnych kluczy w celu zapewnienia bezpieczeństwa w trakcie instalacji. Nie musimy niczego wymyślać ponieważ WordPress zapewnia bezpieczny generator dla tych wartości. Jest on wykorzystywany wyłącznie wewnętrznie, więc nie niesie to żadnego zagrożenia złożoności i bezpieczeństwu tych wartości.

W celu otrzymania bezpiecznych wartości z generatora tajnego klucza WordPress wpisz:
curl -s https://api.wordpress.org/secret-key/1.1/salt/

Otrzymasz unikalne wartości wyglądające mniej więcej następująco:

Uwaga
Ważnym jest aby prosić o unikalne wartości za każdym razem. NIE kopiuj wartości przedstawionych poniżej!

Odpowiedź
define('AUTH_KEY',         '1jl/vqfs<XhdXoAPz9 NIE KOPIUJ TYCH WARTOSCI c_j{iwqD^<+c9.k<J@4H');
define('SECURE_AUTH_KEY',  'E2N-h2]Dcvp+aS/p7X NIE KOPIUJ TYCH WARTOSCI {Ka(f;rv?Pxf})CgLi-3');
define('LOGGED_IN_KEY',    'W(50,{W^,OPB%PB<JF NIE KOPIUJ TYCH WARTOSCI 2;y&,2m%3]R6DUth[;88');
define('NONCE_KEY',        'll,4UC)7ua+8<!4VM+ NIE KOPIUJ TYCH WARTOSCI #`DXF+[$atzM7 o^-C7g');
define('AUTH_SALT',        'koMrurzOA+|L_lG}kf NIE KOPIUJ TYCH WARTOSCI  07VC*Lj*lD&?3w!BT#-');
define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY NIE KOPIUJ TYCH WARTOSCI C-?y+K0DK_+F|0h{!_xY');
define('LOGGED_IN_SALT',   'i^/G2W7!-1H2OQ+t$3 NIE KOPIUJ TYCH WARTOSCI t6**bRVFSD[Hi])-qS`|');
define('NONCE_SALT',       'Q6]U:K?j4L%Z]}h^q7 NIE KOPIUJ TYCH WARTOSCI 1% ^qUswWgn+6&xqHN&%');

Są to wiersze konfiguracyjne, które możemy wkleić bezpośrednio do pliku konfiguracyjnego w celu ustawienia bezpiecznych kluczy. Skopiuj otrzymane dane wyjściowe.

Otwórz konfiguracyjny plik WordPress:
nano /var/www/html/wp-config.php

Znajdź sekcję zawierającą fikcyjne wartości dla tych ustawień. Powinno to wyglądać mniej więcej następująco:

/var/www/html/wp-config.php
. . .

define('AUTH_KEY',         'wklej swoje unikatowe znaczenie');
define('SECURE_AUTH_KEY',  'wklej swoje unikatowe znaczenie');
define('LOGGED_IN_KEY',    'wklej swoje unikatowe znaczenie');
define('NONCE_KEY',        'wklej swoje unikatowe znaczenie');
define('AUTH_SALT',        'wklej swoje unikatowe znaczenie');
define('SECURE_AUTH_SALT', 'wklej swoje unikatowe znaczenie');
define('LOGGED_IN_SALT',   'wklej swoje unikatowe znaczenie');
define('NONCE_SALT',       'wklej swoje unikatowe znaczenie');

. . .

Usuń te wiersze i wstaw wartości skopiowane z wiersza poleceń:

/var/www/html/wp-config.php
. . .

define('AUTH_KEY',         'skopiowana wartość');
define('SECURE_AUTH_KEY',  'skopiowana wartość');
define('LOGGED_IN_KEY',    'skopiowana wartość');
define('NONCE_KEY',        'skopiowana wartość');
define('AUTH_SALT',        'skopiowana wartość');
define('SECURE_AUTH_SALT', 'skopiowana wartość');
define('LOGGED_IN_SALT',   'skopiowana wartość');
define('NONCE_SALT',       'skopiowana wartość');

. . .

Następnie musimy zmodyfikować niektóre ustawienia połączeń bazy danych na początku pliku. Dostosuj nazwę bazy danych, użytkownika bazy danych oraz odpowiednie hasło skonfigurowane w ramach MySQL.

Następnie powinniśmy ustawić metodę, której WordPress będzie używać do wpisywania do systemu plików. Z uwagi na fakt, że daliśmy zgodę serwera www na pisanie tam, gdzie trzeba, możemy jawnie ustawić metodę systemu plików jako „bezpośrednią”. Nieuzgodnienie tego z naszymi bieżącymi ustawieniami skutkuje żądaniem WordPress poświadczeń FTP w trakcie wykonywania pewnych czynności.

To ustawienie można dodać poniżej ustawień połączeń bazy danych, lub gdziekolwiek indziej w pliku:

/var/www/html/wp-config.php
. . .

define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', 'haslo');

. . .

define('FS_METHOD', 'direct');

Po zakończeniu zapisz i zamknij plik.

Zakończenie instalacji poprzez interfejs www

Teraz możemy zakończyć instalację poprzez interfejs www.

W przeglądarce internetowej przejdź do swojej domeny lub publicznego adresu IP:
http://domena_czy_adres_IP

Wybierz język:
language_selection[1]

Teraz możesz przejść do głównej strony konfiguracji.

Wybierz nazwę dla strony WordPress oraz nazwę użytkownika (w celach bezpieczeństwa nie zalecamy używania nazw typu „admin”). Dobre hasło zostanie wygenerowane automatycznie. Zachowaj hasło lub wybierz inne równie bezpiecznie.

Wprowadź adres swojej poczty elektronicznej, a następnie wybierz, jeżeli chcesz zablokować indeksowanie witryny poprzez mechanizmy wyszukiwania:
setup_installation[1]

Po kliknięciu, zostaniesz przekierowany do strony wymagającej zalogowanie się:
login_prompt[1]

Po zalogowaniu się zostaniesz przekierowany do administracyjnej tablicy WordPress:
admin_screen[1]

Aktualizacja WordPress

Jak tylko pojawi się nowa wersja systemu WordPress nie będziesz miał możliwości aktualizacji systemu CMS z obecnymi uprawnieniami.
Uprawnienia, które wybraliśmy, zapewniają dobry balans pomiędzy bezpieczeństwem a użytecznością na 99% czasu pomiędzy aktualizacjami. Jednak są one zbyt wysokie dla programu do automatycznego instalowania aktualizacji.

Jak tylko będzie dostępna aktualizacja WordPress zaloguj się na serwer użotkownikiem z uprawnieniami sudo i udostępnij na chwilę serwerowi www dostęp do całego Document Root:
sudo chown -R www-data /var/www/html

Wróć do panelu administracyjnego WordPressu i uruchom myszką aktualizację.
Jak tylko proces aktualizacji się skończy, przywróć uprawnienia do poprzedniej wersji:
sudo chown -R sammy /var/www/html

To powinno być wymagane tylko w przypadku instalowania aktualizacji WordPress.

Podsumowanie

Gratulacje! WordPress jest zainstalowany i gotowy do wykorzystania. Następujące działania mają na celu wybór ustawień permalink`ów (znajdziesz je w Settings > Permalinks) lub nowych motywów (w Appearance > Themes). Jeżeli używasz WordPress po raz pierwszy, zbadaj interfejs w celu zapoznania się z nowym CMS.

Udostępnij