Konfigurace LEMP serveru na Linuxu OpenSUSE
Úvod
Svůj minulý a zároveň první článek jsem zacílil na čerstvé ubunťáky, kteří zatoužili po větší kontrole nad systémem. Tento článek bude o krok dál, náš webový server poskládáme z čistě open source softwaru. Zkratka LEMP zastává Linux, Nginx, MySQL a PHP.
Použitý software
OpenSUSE
OpenSUSE je robustní distribuce, která je oblíbena jak mezi nováčky tak i mezi experty (třeba vývojáři kernelu). Vyvíjí ji komunita a přispívá do ní firma SUSE, která na této komunitní verzi staví komerční verzi SUSE Linux Enterprise. Až tento systém prozkoumám hlouběji, těšte se na samostatný článek.
Nginx
Nginx (vyslovováno Engine x) je rostoucí, momentálně třetí nejpoužívanější softwarový web server. Chlubí se zvládnutím větší zátěže oproti Apachi a vyřešením zranitelných míst. Je multiplatformní, primárně pro unix-like systémy a pod licencí BSD.
MariaDB
MariaDB je v podstatě klon MySQL pocházející ze stejných mozkoven. MySQL bylo prodáno Oraclu, ale Oracle dlouhodobě ignoroval upozornění komunity na bezpečnostní rizika a proto stejný vývojářský team vytvořil open source řešení, které je schopno nahradit MySQL. Přes drobné výhody nehledejte zde i u nginxu nějaké ohromné benefity, prostě to děláme jinak z přesvědčení ve správnost využití open source.
PHP, python, perl
PHP, tak zde je to jasné, ale co má znamenat Python nebo Perl? Webové
aplikace můžeme psát ve spoustě jazyků a to včetně Pythonu nebo Perlu.
Nemusíte se bát, tento článek bude o PHP. Využití Pythonu na webu je
ultrageekovina level výlet do slunce
Nginx
V distribuci OpenSUSE je obsažen Apache. Pokud ho používáte, tak ho stopněte:
systemctl stop apache2.service
a poté v každém případě vypněte.
systemctl disable apache2.service
Teď nainstalujeme nginx
zypper in nginx
Nginx stejně jako Apache startuje při zapnutí systému. Teď ho ale zapneme ručně.
systemctl start nginx.service systemctl enable nginx.service
Ve výchozím stavu je server jen pro localhost. Pokud k němu chceme přistupovat zvenčí, tak musíme nastavit firewall. Otevřeme konfigurační soubor
gedit /etc/sysconfig/SuSEfirewall2
A do prázdných uvozovek doplníme
FW_CONFIGURATIONS_EXT="apache2"
Restartujeme
systemctl restart SuSEfirewall2.service
A odzkoušíme
gedit /srv/www/htdocs/test.html
<html> <head> <title>nginx</title> </head> <body> <h1>It works!</h1> </body> </html>
Teď mrkněte buď na localhost/test.html nebo <vaše ip>/test.html

Všimněte si, že bez index.html nebo index.htm se nám nevypíší soubory v adresáři, ale dostaneme 403 a dokonce 403 dostaneme i v případě, kdy budeme mít index.php. To teď bohužel nemůžeme otestovat, ale můžeme to spravit.
gedit /etc/nginx/nginx.conf
V http > server > location / přidáme za index.htm ještě index.php
location / { root /srv/www/htdocs/; index index.html index.htm index.php; }
Ovládání serveru
start
systemctl start nginx.service
stop
systemctl stop nginx.service
restart
systemctl restart nginx.service
Podrobnější nastavení nginx
Otevřeme konfigurační soubor
gedit /etc/nginx/nginx.conf
Na prvním řádku povolíme používat server pod uživatelem nginx, pokud necháme zakomentované tak poběží server pod uživatelem root.
user nginx;
Další řádek worker_processes určuje kolika procesy má server běžet. Každý proces může v jednu chvíli vyřídit tolik požadavků, kolik je definováno ve worker_connections. Celkový maximální počet možných připojení tedy zjistíme worker_processes * worker_connections. Tento parametr můžeme navýšit pokud chceme využít více jader procesoru. Já si pro testovací účely nechám 1.
worker_processes 1;
Hlouběji v konfiguračním souboru http > server můžeme nastavit port nebo přesměrování na statickou stránku v případě určité chyby. Nás bude teď zajímat blok location ~ \.php$ {… ten nastavíme následovně
location ~ \.php$ { root /srv/www/htdocs/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Tím jsme definovali informaci pro virtual host. Restartujeme server. Kompletní dokumentaci najdete na http://wiki.nginx.org/
MariaDB
Instalace
zypper in mariadb
První zapnutí a povolení
systemctl start mysql.service systemctl enable mysql.service
Po instalaci nebude nastaveno rootovské heslo. To dodatečně nastavíme pomocí
mysql_secure_installation
Mimo jiné budeme vyzváni k potvrzení dalších důležitých nastavení, třeba k povolení přístupu zvenčí. Pokud jste někdy zkoušeli pracovat s databází v desktopové aplikaci, tak jste nejspíše narazili na odepření přístupu. Ačkoliv na webu databáze funguje, mimo localhost se k ní připojit nedá. Tak to můžete změnit právě zde. Varování: toto není bezpečné, dělá se to jinak.
PHP
Instalace
zypper in php5-fpm
Před spuštěním musíme udělat pár úprav.
mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf gedit /etc/php5/fpm/php-fpm.conf
Změníme nobody na nginx
user = nginx group = nginx gedit /etc/php5//fpm/php-fpm.conf
odkomentujeme error_log a změníme hodnotu na /var/log/php-fpm.log
error_log = /var/log/php-fpm.log
Ve výchozí instalaci není php.ini proto ho musíme překopírovat
cp /etc/php5/cli/php.ini /etc/php5/fpm/
Nyní v php.ini najdeme cgi.fix_pathinfo, odkomentujeme a změníme hodnotu na 0
gedit /etc/php5/cli/php.ini cgi.fix_pathinfo=0
Zapneme PHP a restartujeme nginx
systemctl start php-fpm.service systemctl enable php-fpm.service systemctl restart nginx.service
odzkoušíme
gedit /srv/www/htdocs/testphp.php
<?php phpinfo();

Pro větší pohodlí nastavíme volná práva pro náš webový root
chmod 777 -R /srv/www/htdocs/
Podrobnější nastavení PHP
Instalace všech rozšíření
zypper in php*
Instalace jen mysql (+mysqli + pdo) ovladače
zypper in php-mysql
pretty url
Zde se nechám rád poučit zkušenějšími, nginx nemá dodatečný konfigurační soubor .htaccess jako Apache. Vše je pevně zapsáno v hlavním konfiguráku. Script, na který chceme aplikovat efekt hezkých url, natvrdo zapíšeme sem.
gedit /etc/nginx/nginx.conf
location / { root /srv/www/htdocs/; try_files $uri $uri/ /prettyurl.php?$uri&$args; index index.html index.htm index.php; } location ~ \.php$ { root /srv/www/htdocs/; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Pokud se pretty url v nginxu dají nastavit pouze tímto způsobem, může to způsobit problémy u webů s horším návrhem. Například jak by na tomto fungoval phpfusion si nedovedu představit, zato redakčňák v MVC od Davida, kde se spouští jen index.php, by s tím neměl problém.

Celý /etc/nginx/nginx.conf je pro kontrolu v příloze.
PhpMyAdmin
Instalace
zypper in phpmyadmin
Já dávám opět přednost Admineru.
Takže, server nám běží, všichni jsou spokojeni a vše je super. Doufám, že bude mít někdo zajímavý problém nebo nápad k řešení. Pokud jste se dostali až sem, tak děkuji za pozornost.
Poznámka
Všechny příkazy vyjma manipulace se soubory v adresářích, které vlastníme nebo ke kterým máme práva, vyžadují rootovské potvrzení "sudo". Pokud používáte prostředí gnome, tak gedit s rootovskými právy spustíte jako "gnomesu gedit".
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkamiStaženo 1330x (978 B)