Přehled
V následujícím příspěvku se budeme zabývat scénářem, kdy nainstalujeme WordPress se vzdálenou databází na Debian. Jinými slovy, budeme mít prostředí, kde budeme mít dva samostatné servery, jeden bude mít pouze instalaci WordPressu (to znamená, že bude hostovat pouze web) a druhý bude mít pouze databázi (fungovat pouze jako databázový server) .
Existuje mnoho výhodných důvodů, proč je tento druh prostředí nastaven – jedním je snadná údržba webových stránek a databáze, zvýšení výkonu (myšleno wordpress, protože není závislý na jednom serveru, zabere mnohem méně zdrojů).
Ale nevýhodou je – protože máme nyní dva servery, údržba serveru se zvýší.
Toto nastavení bude nakonfigurováno na dvou serverech Debianu (oba ve stejné síti/stejné LAN).
Zásobník bude LEMP – webový server Nginx, server PHP a MariaDB.
Konfigurace databázového serveru
Nejprve se zaměříme na databázový server:
1. Nainstalujte server MariaDB
sudo apt install mariadb-server
Spusťte mysql_secure_installation
sudo mysql_secure_installation
2. Upravte konfigurační soubor databáze a změňte parametr bind-address a zadejte soukromou adresu vašeho databázového serveru:
Soubor k úpravě:
sudo /etc/mysql/mariadb.conf.d/50-server.cnf
Řádek k úpravě – adresa vazby =127.0.0.1
bind-address =192.168.56.252
Uložte a ukončete, restartujte a povolte službu mariadb.
sudo systemctl restart mariadb.service sudo systemctl enabled mariadb.service
Chcete-li zjistit IP adresu vašeho databázového serveru, spusťte příkaz – ip a.
3. Vytvořte databázi, uživatele a nastavte oprávnění (informace v příkazech slouží jako příklad)
sudo mysql -u root -p CREATE DATABASE wptest; GRANT ALL ON wptest.* TO 'wpadmin'@'192.168.56.251' IDENTIFIED BY 'StrongPassword'; FLUSH PRIVILEGES; exit
V databázi je nutné vytvořit vzdáleného uživatele, neboli uživatelský účet, který naše instalace WordPressu použije pro připojení k databázi. Je nutné, abyste předem znali IP adresu WordPress serveru a specifikovali ji/svázali ji se vzdáleným uživatelským účtem.
Konfigurace brány firewall
Pokud máte na databázovém serveru spuštěný firewall, je nutné otevřít port 3306, abyste mohli přijmout připojení z webového serveru a získat přístup k databázi. Pro jistotu je dobré nakonfigurovat pravidla tak, aby akceptovala pouze připojení pouze z našeho webového serveru.
Konfigurace brány firewall UFW
sudo ufw allow from 192.168.56.251 to any port 3306
Konfigurace IPTABLES
iptables -I INPUT -p tcp -s 192.168.56.251 --dport 3306 -j ACCEPT
Konfigurace webového serveru
1. Nainstalujte webový server Nginx s dalšími nezbytnými php knihovnami pro běh WordPressu a komunikaci s databázovým serverem a klientem mysql/mariadb.
sudo apt install nginx php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl sudo apt install mariadb-client
Připojení k databázovému serveru můžeme otestovat, pokud z našeho webového serveru spustíme tento příkaz (v podstatě se vzdáleně přihlásíme do databáze):
sudo mysql -u remote-admin -h 192.168.56.252 -p
2. Nainstalujte WordPress, nakonfigurujte jej a nakonfigurujte Nginx. Zde nyní nakonfigurujeme pouze tu část WordPressu, kam potřebujeme přidat adresu našeho vzdáleného databázového serveru. Pokud potřebujete podrobné kroky, jak nainstalovat WordPress a nakonfigurovat Nginx, pokyny naleznete v tomto příspěvku.
cd /var/www/html/wordpress/ sudo mv wp-config-sample.php wp-config.php sudo nano wp-config.php
Na řádku databáze nahraďte localhost adresou IP vašeho databázového serveru. Podívejte se na obrázek níže jako příklad:
3. Vytvořte soubor Nginx conf a odeberte výchozí soubor:
sudo nano /etc/nginx/sites-available/wordpress.conf sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/
Nginx conf, který můžete použít, můžete najít ve stejném příspěvku, který jsme zmínili dříve.
sudo rm /etc/nginx/sites-available/default sudo rm /etc/nignx/sites-enabled/default
Po této konfiguraci byste nyní měli být schopni spustit WordPress, přistupovat k jeho vzdálené databázi a dokončit instalaci WordPressu.
A nyní byste měli mít spuštěný web WordPress se samostatným webovým a databázovým serverem. Zde můžete přestat, pokud jste s nastavením spokojeni. Toto byly nezbytné kroky k instalaci WordPressu se vzdálenou databází a v tomto okamžiku by mělo být vše v provozu. V opačném případě pokračujte v další a poslední kapitole, jak zabezpečit a zašifrovat databázové připojení a provoz mezi webem a databázovým serverem a učinit nastavení bezpečnější.
Zabezpečte a zašifrujte připojení k databázi pomocí SSL (volitelné, ale doporučené)
Je to také dobrá bezpečnostní praxe a další vrstva zabezpečení pro zabezpečení a šifrování provozu mezi webem a databázovým serverem. Důvodem je to, že pokud není zabezpečený a šifrovaný a pokud se nějakým způsobem útočník nabourá do vaší privátní podsítě (privátní sítě LAN, kde se nacházejí servery) nebo webového serveru, může útočník zachytit a odposlouchávat provoz (monitorovat jej a získat data), což může vést k narušení a hacknutí vašeho webu a serverů.
Certifikát databázového serveru
1. Na obou serverech (webovém i databázovém) si vytvořte dočasný adresář pro uložení certifikátů (příklad ssl nebo certs) ve svém domovském adresáři pro příklad nebo někde, kde je pro vás snadné je uložit – jako příklad vytvoříme adresář certs v našem domovském adresáři:
cd mkdir certs
Nejprve začneme s databázovým serverem, takže se přepněte do nového adresáře certs, který jsme právě vytvořili:
cd certs
2. Na databázovém serveru vygenerujeme klíč CA, certifikát a soukromý klíč. Postupujte podle pokynů a na výzvu odpovídajícím způsobem odpovězte. Jako referenci můžete použít obrázky níže. Jedna věc, na kterou je třeba dávat pozor, je výzva Common name (což je docela důležité). Ptá se na název databázového serveru. Zde byste měli přidat IP adresu serveru (jako máme my) nebo název domény serveru, pokud máte nebo název hostitele. Informace se musí shodovat, protože vytvoříme certifikáty serveru a klientské klíče, aby se shodovaly.:
sudo openssl genrsa 4096 > ca-key.pem sudo openssl req -new -x509 -nodes -days 1825 -key ca-key.pem -out cacert.pem
V druhém příkazu atribut -days 1825 odkazuje, že vytvořený certifikát bude platný 5 let (1825 dní). Dny si můžete nastavit, jak chcete nebo potřebujete.
3. Dále je třeba vytvořit soukromý klíč RSA a podepsat certifikát:
sudo openssl rsa -in server-key.pem -out server-key.pem
sudo openssl req -newkey rsa:4096 -days 1825 -nodes -keyout server-key.pem -out server-req.pem
sudo openssl x509 -req -in server-req.pem -days 1825 -CA cacert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Nyní můžeme certifikáty přesunout na trvalé místo:
sudo mkdir /etc/mysql/ssl sudo mv *.* /etc/mysql/ssl cd /etc/mysql/ssl
Certifikát webového serveru
4. Vygenerujte klientský certifikát. Výzvy budou stejné jako pro databázový server, ale na otázku Common Name zadejte podrobnosti o webovém serveru, kde je nainstalován Wodpress (jako je IP adresa webového serveru). Napište RSA a podepište certifikát:
sudo openssl req -newkey rsa:2048 -days 1825 -nodes -keyout client-key.pem -out client-req.pem sudo openssl rsa -in client-key.pem -out client-key.pem sudo openssl x509 -req -in client-req.pem -days 1825 -CA cacert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Konfigurace SSL pro oba servery
Nastavení databázového serveru
1. Dalším krokem je konfigurace našich serverů pro použití námi vytvořených certifikátů a povolení SSL spojení mezi webem a databázovým serverem. Nejprve upravte konfiguraci na serveru MariaDB:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
A najděte následující řádky, odkomentujte je přidejte přepište řádky, které odpovídají adresářům a souborům našich certifikátů, které jsme vytvořili:
ssl-ca=/etc/mysql/ssl/cacert.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
Uložte soubor a ukončete.
2. Nyní se přihlaste na MariDB jako root a spusťte následující dotazy, abyste na serveru povolili připojení z webového serveru pouze pomocí SSL:
sudo mysql -u root -p GRANT ALL PRIVILEGES ON wptest.* TO 'wpadmin'@'192.168.56.251' REQUIRE SSL; FLUSH PRIVILEGES; exit
Restartujte databázový server:
sudo systemctl restart mariadb.service
Nastavení webového serveru
3. Zatímco jste stále v adresáři /etc/mysql/ssl (nebo se přesuňte sem), pomocí nástroje scp zkopírujte klientské certifikáty na webový server (webového uživatele a IP adresu nahraďte skutečným uživatelským jménem a IP adresou vašeho webový server):
scp cacert.pem client-cert.pem client-key.pem [email protected]:~/certs
Nyní se přepněte/přihlaste na webový server a přesuňte také certifikáty někam natrvalo (stejně jako na databázový server):
sudo mkdir /etc/mysql/ssl cd certs sudo mv /certs/*.* /etc/mysql/ssl
Upravte konfigurační soubor pro klienta MariaDB, který jsme nainstalovali v prvním kroku. Má stejné umístění jako server:
sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
A najděte stejný řádek SSL (měl by být v sekci [mysql]) jako u databázového serveru a nechte je odpovídat umístění a názvům souborů certifikátů, které jsme přidali do adresáře /etc/mysql/ssl:
[mysql] ssl-ca=/etc/mysql/ssl/cacert.pem ssl-cert=/etc/mysql/ssl/client-cert.pem ssl-key=/etc/mysql/ssl/client-key.pem
Uložte soubor, ukončete.
Můžete vyzkoušet, zda připojení funguje pomocí vzdáleného přihlášení:
mysql -u wpadmin -h 192.168.56.252 -p
4. Poslední soubor k úpravě je opět wp-config.php. Potřebujeme tam také konfigurační řádek SSL:
sudo nano /var/www/html/wordpress/wp-config.php
a přidejte řádek před řádek s názvem databáze:
define( ‘MYSQL_CLIENT_FLAGS’, MYSQLI_CLIENT_SSL);
Viz obrázek:
Restartujte webový server Nginx a dokončete instalaci WordPress z webového prohlížeče. Mělo by to být v provozu.
Shrnutí
Abychom tento článek shrnuli, probrali jsme kroky, jak nainstalovat WordPress se vzdálenou databází. Také jsme se zabývali procesem, jak zabezpečit spojení mezi dvěma servery (pokud jste předtím sami nezažili certifikáty s vlastním podpisem a jak s nimi pracovat, můžete krok přeskočit, jak je uvedeno výše, není to nutné, pouze doporučení) . Samotný základní proces, jak nainstalovat WordPress se vzdálenou databází, není tak obtížný a poskytuje několik výhod, jednou z nich je výkon a údržba webového serveru může být nyní poněkud jednodušší a zkrátit prostoje, když je potřeba údržba.