Zásobník softwaru LEMP je skupina softwaru s otevřeným zdrojovým kódem, který se instaluje společně, aby umožnil serveru hostovat webové stránky a aplikace. Je to zkratka pro L inux, E Server Nginx, M ySQL (pomocí MariaDB) a P HP.
V této příručce nainstalujete zásobník LEMP na server založený na Fedoře 32. Nainstalujeme také phpMyAdmin, Redis, Opcache a Let's Encrypt SSL.
Předpoklady
Server se systémem Fedora 32.
Uživatel sudo bez oprávnění root.
Ujistěte se, že je vše aktualizováno.
$ sudo dnf upgrade
Několik balíčků, které váš systém potřebuje.
$ sudo dnf install wget curl nano -y
Některé z těchto balíčků již mohou být ve vašem systému nainstalovány.
Zakázat SELinux.
$ sudo setenforce 0
Konfigurovat bránu firewall
Prvním krokem je konfigurace firewallu. Server Fedora je dodáván s předinstalovaným firewallem Firewalld.
Zkontrolujte, zda je spuštěna brána firewall.
$ sudo firewall-cmd --state
Měli byste získat následující výstup.
running
Nastavte výchozí zónu brány firewall na veřejnou.
$ sudo firewall-cmd --set-default-zone=public
Zkontrolujte aktuální povolené služby/porty.
$ sudo firewall-cmd --zone=public --permanent --list-services
Měl by ukazovat následující výstup.
dhcpv6-client mdns ssh
Povolit porty HTTP a HTTPS.
$ sudo firewall-cmd --zone=public --permanent --add-service=http $ sudo firewall-cmd --zone=public --permanent --add-service=https
Znovu zkontrolujte stav brány firewall.
$ sudo firewall-cmd --zone=public --permanent --list-services
Měli byste vidět podobný výstup.
dhcpv6-client http https mdns ssh
Znovu načtěte bránu firewall.
$ sudo systemctl reload firewalld
Instalovat PHP
Fedora 32 se standardně dodává s PHP 7.4, ale abychom měli aktualizované úložiště PHP, přidáme úložiště REMI.
Nainstalujte si úložiště REMI, což je oficiální úložiště Fedory pro instalaci balíčků PHP.
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Povolte remi
úložiště a deaktivujte remi-modular
úložiště. To umožňuje úložiště potřebné k instalaci balíčků PHP 7.4.
$ sudo dnf config-manager --set-enabled remi $ sudo dnf config-manager --set-disabled remi-modular
Nainstalujte PHP 7.4 spolu s některými dalšími balíčky.
$ sudo dnf install -y php-cli php-fpm php-mysqlnd
Zkontrolujte, zda PHP funguje správně.
$ php --version
Měli byste vidět podobný výstup.
PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
Instalovat MariaDB
MariaDB je náhradní náhrada za MySQL, což znamená, že příkazy ke spuštění a ovládání MariaDB jsou stejné jako příkazy pro MySQL.
Fedora 32 je standardně dodávána s MariaDB 10.4, což je nejnovější stabilní verze, která je nyní k dispozici, takže ji budeme používat.
Chcete-li nainstalovat MariaDB, zadejte následující příkaz.
$ sudo dnf install mariadb-server -y
Zkontrolujte, zda je MariaDB správně nainstalována.
$ mysql --version
Měli byste vidět následující výstup.
mysql Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using EditLine wrapper
Povolte a spusťte službu MariaDB.
$ sudo systemctl enable mariadb $ sudo systemctl start mariadb
Spuštěním následujícího příkazu provedete výchozí konfiguraci, jako je zadání hesla uživatele root, odebrání anonymních uživatelů, zakázání vzdáleného přihlášení uživatele root a zrušení testovacích tabulek.
$ sudo mysql_secure_installation
S MariaDB 10.4 budete nyní dotázáni, zda chcete použít heslo root nebo unix_socket zapojit. unix_socket plugin vám umožňuje přihlásit se do MariaDB pomocí vašich uživatelských údajů pro Linux. Je považováno za bezpečnější, ačkoli budete potřebovat tradiční uživatelské jméno/heslo, abyste mohli používat aplikace třetích stran, jako je phpMyAdmin. V tomto tutoriálu se budeme držet používání unix_socket pluginu. Stále můžete používat phpMyAdmin prostřednictvím libovolného uživatele, kterého vytvoříte pro své databáze.
Stisknutím klávesy Enter vyberete výchozí možnost (ta, která je velká, v tomto případě Y).
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] [ANSWER n]
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] [PRESS ENTER]
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] [PRESS ENTER]
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] [PRESS ENTER]
\- Dropping test database...
... Success!
\- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] [PRESS ENTER]
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
A je to. Až se příště budete chtít přihlásit do MySQL, použijte následující příkaz
$ sudo mysql
Po zobrazení výzvy zadejte heslo uživatele root.
Nainstalovat Redis
Fedora 32 obsahuje v5.0.8 balíčku Redis, ale úložiště Remi, které jsme dříve nainstalovali pro PHP, s sebou nese nejnovější verzi Redis (v6.0.1) v době psaní tohoto návodu.
Pomocí následujícího příkazu nainstalujte Redis a odpovídající rozšíření PHP Redis.
$ sudo dnf install redis php-redis
Povolte službu Redis.
$ sudo systemctl enable --now redis
Konfigurace serveru Redis
Proveďme některé základní konfigurace na serveru Redis.
Otevřete soubor /etc/redis.conf
s editorem Nano.
$ sudo nano /etc/redis.conf
Pokud chcete, aby se vzdálení klienti připojovali k vaší instanci Redis, najděte řádek bind 127.0.0.1
a změňte jej na následující.
bind 0.0.0.0
Můžete také změnit výchozí port, na kterém Redis naslouchá, z 6379 na hodnotu dle vašeho výběru.
port 3458
Chcete-li nakonfigurovat Redis jako server mezipaměti, nastavte následující hodnoty.
maxmemory 256mb
maxmemory-policy allkeys-lru
To říká Redis, aby odstranil jakýkoli klíč pomocí algoritmu LRU, když je dosaženo maximální paměti 256 MB. Hodnotu paměti můžete nastavit podle svých požadavků a serveru, který používáte.
Můžete nastavit heslo tak, aby se každý klient, který potřebuje Redis, musel nejprve ověřit. Chcete-li to provést, nastavte heslo pomocí následující směrnice.
requirepass <AuthPassword>
Další příkazy ke změně naleznete v konfiguračním souboru. Až budete hotovi, stiskněte Ctrl + X a zadejte Y až budete vyzváni k uložení souboru.
Chcete-li použít změny, restartujte server Redis.
$ sudo systemctl restart redis
Budeme také muset přidat pravidlo do našeho Firewallu, aby Redis mohl fungovat.
$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp $ sudo firewall-cmd --reload
Budete muset změnit hodnotu ve výše uvedeném příkazu tak, aby odpovídala portu, který jste vybrali v konfiguračním souboru výše.
Instalovat Nginx
Fedora 32 se standardně dodává s nejnovější stabilní verzí Nginx. (1.18.0).
Nainstalujte Nginx.
$ sudo dnf install nginx -y
Zkontrolujte, zda funguje správně.
$ nginx -v
V závislosti na verzi Nginx, kterou jste se rozhodli nainstalovat, byste měli vidět následující výstup.
nginx version: nginx/1.18.0
Spusťte a povolte Nginx.
$ sudo systemctl start nginx $ sudo systemctl enable nginx
Otevřete IP adresu svého serveru v prohlížeči a zobrazí se následující stránka. Znamená to, že Nginx funguje správně.
Nakonfigurujte Nginx
Nastavte adresáře, ve kterých budou serverové bloky sídlit.
$ sudo mkdir /etc/nginx/sites-available $ sudo mkdir /etc/nginx/sites-enabled
Vytvořte adresář, kde bude váš web žít.
$ sudo mkdir /var/www/example.com/html -p
Pomocí -p direktiva vytváří nadřazené adresáře, které dříve neexistovaly.
Spusťte následující příkaz pro přidání konfiguračního souboru pro váš web.
$ sudo nano /etc/nginx/sites-available/example.com.conf
Vložte následující kód do editoru.
server {
listen *:80;
server_name example.com;
root /var/www/example.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
Stiskněte Ctrl + X zavřete editor a stiskněte Y až budete vyzváni k uložení souboru.
Tento soubor předpokládá, že budeme hostit example.com
v adresáři /var/www/html
. Pokud nebudete používat žádnou doménu a konfigurujete svůj server tak, aby byl přístupný pouze přes IP adresu/localhost, budete muset odstranit odpovídající nastavení blokování serveru z nginx.conf
jinak to bude mít problémy s blokem serveru, který vytvoříte.
Tento konfigurační soubor aktivujte jeho propojením s sites-enabled
adresář.
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Otevřete /etc/nginx/nginx.conf
soubor pro úpravy.
$ sudo nano /etc/nginx/nginx.conf
Vložte následující řádky za řádek include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Změňte hodnotu types_hash_max_size
od 2048 do 4096.
types_hash_max_size 4096;
Stiskněte Ctrl + X zavřete editor a stiskněte Y po zobrazení výzvy k uložení souboru. Otestujte konfiguraci Nginx.
$ sudo nginx -t
Měli byste vidět následující výstup indikující, že vaše konfigurace je správná.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Znovu načtěte službu Nginx.
$ sudo systemctl reload nginx
Konfigurace PHP-FPM
Otevřete soubor /etc/php-fpm.d/www.conf
.
$ sudo nano /etc/php-fpm.d/www.conf
Musíme nastavit unixového uživatele/skupinu PHP procesů na nginx . Najděte user=apache
a group=apache
řádků v souboru a změňte je na nginx.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.
Restartujte proces PHP-fpm.
$ sudo systemctl restart php-fpm
Chcete-li otestovat nastavení PHP, vytvořte soubor test.php
v html
složka.
$ sudo nano /var/www/example.com/html/test.php
Přidejte do něj následující obsah a uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.
<?php phpinfo();
Spusťte http://<yourserverip>/test.php
ve vašem webovém prohlížeči a měli byste vidět následující.
Instalovat phpMyAdmin
Remi Repository obsahuje nejnovější phpMyAdmin, takže jej můžeme jednoduše nainstalovat pomocí následujícího příkazu.
$ sudo dnf install phpmyadmin
Nainstaluje se do /usr/share/phpMyAdmin
adresář.
Nakonfigurujte phpMyAdmin
Aby webový server Nginx správně našel a obsluhoval soubory phpMyAdmin, budeme muset vytvořit symbolický odkaz z jeho skutečného umístění na kořenový adresář dokumentů Nginx.
Chcete-li to provést, spusťte následující příkaz.
$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin
Vaše instalace phpMyAdmin je funkční. Chcete-li se k němu dostat, stačí otevřít http://example.com/phpmyadmin .
Pokud se zobrazí chyby php session, spusťte následující příkaz a udělte správná oprávnění adresáři PHP Session. Zkontrolujte cestu relace z test.php
soubor, který jsme vytvořili dříve. Pro nás je to na /var/lib/php/session
.
$ sudo chown -R nginx:nginx /var/lib/php/session
Ve výchozím nastavení by se toto výchozí umístění mělo změnit, protože je to nejběžnější umístění, které může hacker najít vaši instalaci phpMyAdmin. Chcete-li to provést, spusťte následující příkaz.
$ sudo mv phpmyadmin sm123
V podstatě jsme přesunuli umístění našeho phpMyAdmina na sm123
složka. Pro přístup k němu nyní budete muset otevřít http://example.com/sm123 ve vašem prohlížeči.
Protože zde používáme unix_authentication s MySQL, není zde žádný uživatel root, který by se mohl přihlásit přes phpMyAdmin. Nejprve budete muset vytvořit uživatele MySQL a dát mu oprávnění k databázím, abyste mohli používat phpMyAdmin.
Konfigurace Opcache
Instalace phpMyAdmin z úložiště Remi nainstaluje také Opcache. V případě, že jste nenainstalovali phpMyAdmin a nechcete, můžete jednoduše nainstalovat Opcache pomocí následujícího příkazu.
$ sudo dnf install php-opcache
Ověřte, že byl nainstalován.
$ php -v PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
Chcete-li změnit nastavení Opcache, otevřete soubor /etc/php.d/10-opcache.ini
.
$ sudo nano /etc/php.d/10-opcache.ini
Následující nastavení by vám mělo pomoci začít s používáním Opcache a obecně se doporučuje jako dobrý výkon. Konfiguraci můžete povolit zrušením komentáře odstraněním ;
před ním.
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.
Chcete-li použít nastavení, restartujte server.
$ sudo systemctl reload nginx
Instalovat SSL přes Let's Encrypt
SSL se stalo nezbytnou součástí každé webové stránky. Zde nainstalujeme SSL pomocí služby Let's Encrypt.
Nejprve si nainstalujte nástroj Certbot.
$ sudo dnf install certbot-nginx
Vygenerujte certifikáty.
$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com
Vytváříme certifikáty pro oba – náš hlavní web a doménu phpMyAdmin.
Pokud je to vaše první spuštění certbota ve vašem systému, budete požádáni o e-mailovou adresu a souhlas s podmínkami služby. Budete také dotázáni, zda souhlasíte se sdílením dat s nadací EFF, kterým můžete říci ne. Poté bude certbot komunikovat se servery Let's Encrypt a spustí výzvu k ověření vašich domén.
Pokud to bude úspěšné, budete dotázáni, jak zacházet s přesměrováním HTTPS.
Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Vyberte svou volbu a stiskněte enter. Vaše certifikáty budou vytvořeny a vaše konfigurace Nginx bude aktualizována pomocí nastavení SSL.
Vaše certifikáty jsou připraveny a nyní můžete otevřít svůj web na adrese https://example.com
Konfigurace automatického obnovení SSL
Toto je poslední krok před ukončením tohoto tutoriálu. K obnovení SSL použijeme cron.
Potřebujeme přidat záznam do Cronu pomocí editoru Crontab. Chcete-li otevřít editor crontab, spusťte následující příkaz.
$ EDITOR=nano sudo crontab -e
EDITOR=nano
před příkazem zajišťuje, že crontab za nás otevře editor Nano, protože Fedora ve výchozím nastavení preferuje editor VIM.
Vložte následující řádek do spodní části.
. . .
25 2 * * * /usr/bin/certbot renew --quiet
25 2 * * *
část tohoto řádku znamená „spusťte následující příkaz ve 2:25 každý den“. Můžete si vybrat kdykoli.
Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.
renew
příkaz pro Certbot zkontroluje všechny certifikáty nainstalované v systému a aktualizuje všechny, u kterých je nastavena doba platnosti za méně než třicet dní. --quiet
říká Certbotu, aby nevydával informace nebo nečekal na vstup uživatele.
Tento příkaz bude spouštěn denně.
Závěr
To je vše k tomuto tutoriálu. Nastavení LEMP je dokončeno a můžete začít vytvářet a hostovat své webové stránky a aplikace.