V této sekci si popíšeme jak v Ubuntu nastavit vlastní Linux Apache MySQL PHP server.
Na domácím PC je nejjednodušší způsob pomocí Synapticu:
Nabídka Akce -> Označit balíčky podle účelu... -> vybrat LAMP server
a potvrdit změny.
Tím se k instalaci označí všechny potřebné součásti celého balíku aplikací.
Na opravdovém serveru se instaluje čisté ubuntu-minimal, nebo využijeme služeb www.virtualmaster.cz a jejich předinstalovaného řešení.
Když máme všechny součásti nainstalovány, můžeme se vrhnout na jejich nastavování.
Apache je webový server. Řečeno zjednodušeně, slouží tedy k zobrazování webových stránek umístěných lokálně (na našem počítači).
Využijeme hlavně při vývoji / testování HTML webu. A v kombinaci s PHP serverem k zobrazování (spouštění) PHP stránek.
PHP je jazyk, jehož instrukce se, na rozdíl od JavaScriptu, vykonávají na straně serveru. Tedy u nás.
Výchozí složka pro soubory našich webových stránek je v Ubuntu /var/www/
Protože do této složky nemá práva zápisu nikdo, kromě uživatele root a práce s ní by tak byla zbytečně komplikovaná, pokusíme se si práci ulehčit. Zařídit to jde několika způsoby.
Nastavení subdomény pro každý projekt
Zkombinoval jsem postupy z thinkingnectar.com, simplehelp.net a Kludge-o-matic.
Pro každou subdoménu musíme vytvořit soubor ~/Projekty/web/subdomena.conf
obsahující:
<VirtualHost *:80>
DocumentRoot /home/meridius/Projekty/web/subdomena/
ServerName subdomena.localhost
<Directory /home/meridius/Projekty/web/subdomena/>
Options Indexes FollowSymLinks MultiViews +Includes
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Vytvoříme složku subdomény
mkdir ~/Projekty/web/subdomena/
Apache k této složce musí mít přístupová práva, viz úprava souboru /etc/apache2/envvars
v dalším způsobu nastavení.
Nalinkujeme konfigurační soubor subdomény
sudo ln -s ~/Projekty/web/subdomena.conf /etc/apache2/sites-available/subdomena.conf
sudo ln -s ~/Projekty/web/subdomena.conf /etc/apache2/sites-enabled/subdomena.conf
Po vytvoření konfiguračního souboru domény ~/Projekty/web/subdomena.conf
by se na vytvoření linků měl dát použít i příkaz a2ensite
. Zatím ale nevím jak.
V systému si vytvoříme virtuální subdoménu
Do souboru /etc/hosts
přidáme
127.0.0.1 subdomena.localhost
A restartujeme Apache
sudo /etc/init.d/apache2 restart
Nyní můžeme na subdoménu přistupovat ze http://subdomena.localhost.
Pokud bude Apache protestovat, že
apache2: Could not reliably determine the server's fully qualified domain name, using <IP adresa> for ServerName
vyřešíme to přidáním FQDN (nebo jen jména?) do souboru /etc/apache2/httpd.conf
ServerName localhost
Práce v jedné doméně a podsložkách
Řekneme Apachi, že složka, kde má "webové" soubory hledat je jinde. Nejlépe někde v našem domovském adresáři.
Velmi dobrý návod je na Kludge-o-matic. Ve zkratce:
Při tomto postupu se využívá příkaz Alias, který Apache při dotazu http://localhost/mujweb
přesměruje do složky ~/Projekty/web/mujweb/
Efektu docílíme vytvořením zmíněné struktury složek, kde mujweb/
je složka jednoho z mnoha webů, které budou všechny umístěny ve složce web/
Dále potřebujeme vytvořit konfigurační soubor, který Apachi řekne, kde má složku webu hledat. Tento soubor pojmenujeme nejlépe názvem webu, např. mujweb.conf
a umístíme jej do složky ~/Projekty/web/
mujweb.conf
Alias /mujweb /home/meridius/Projekty/web/mujweb
<Directory /home/meridius/Projekty/web/mujweb>
Options Indexes FollowSymLinks
DirectoryIndex seznam.php
</Directory>
Všimněte si, že cesty jsou zadány absolutně, jinak nebude konfigurace fungovat!
První parametr za Alias
je to, co budeme zadávat za http://localhost/
Parametr za DirectoryIndex
si můžeme volit, pokud náš web nemá standardní index.html
.
Nyní ve složce /etc/apache2/conf.d/
na tento soubor vytvoříme symbolický odkaz.
sudo ln -s ~/scripts/mujweb.conf /etc/apache2/conf.d/mujweb.conf
Tak máme vše důležité v domovském adresáři a v případě přeinstalace systému můžeme být klidní, stačí obnovit odkaz.
Teď potřebujeme ještě Apachi do naší složky povolit přístup.
Uděláme to úpravou souboru /etc/apache2/envvars
.
sudo cp /etc/apache2/envvars /etc/apache2/envvars.old
sudo mv /etc/apache2/envvars /etc/apache2/envvars.bak
sudo sh -c "sed -e 's/www-data/'`whoami`'/' /etc/apache2/envvars.bak > /etc/apache2/envvars"
! Tato akce však vystavuje naše data určitému nebezpečí, protože proces apache poběží pod naším uživatelem. Pokud by se tak někomu podařilo získat kontrolu nad Apachem a našel by v něm způsob, jak se dostat z definovaných adresářů, dokázal by si získat přístup ke všem našim souborům!
A nakonec Apache restartujeme, aby si načetl nová nastavení.
sudo /etc/init.d/apache2 restart
Kdykoliv pak budeme chtít přidat další složku s jiným webem, stačí vytvořit ji, vytvořit její .conf soubor a symbolický odkaz na něj.
Úprava přístupu se složce /var/www/
Konfigurace pro produktivní server
Zjednodušení linků pomocí .htaccess
Složité (nezapamatovatelné) odkazy se dají celkem snadno zjednodušit přidáním .htaccess souboru do složky, kde chceme dále linky zjednodušovat. Obsah tohoto souboru pak bude podobný následujícímu.
<IfModule mod_rewrite.c>
RewriteEngine On
## DONT TOUCH ANYTHING ##
# Only with survey code
# http://server.fr/123456
RewriteRule ^([0-9]+)/*$ index.php?sid=$1 [L,QSA]
# Survey code + Lang : http://server.fr/123456/lang-fr
RewriteRule ^([0-9]+)/lang-([^/]*)/*$ index.php?sid=$1&lang=$2 [L,QSA]
# Survey code + Lang + Token : http://server.fr/123456/lang-fr/tk-sdlfkjozeiru
RewriteRule ^([0-9]+)/lang-([^/]*)/tk-([^/]*)/*$ index.php?sid=$1&lang=$2&token=$3 [L,QSA]
# Survey code + Token : http://server.fr/123456/tk-sdlfkjozeiru
RewriteRule ^([0-9]+)/tk-([^/]*)/*$ index.php?sid=$1&token=$2 [L,QSA]
# vlastni presmerovani
RewriteRule ^mana[zg]er http://asdf.cz/pruzkumy/72167/lang-cs [NC]
RewriteRule ^zamestnanec http://asdf.cz/pruzkumy/86673/lang-cs [NC]
</IfModule>
Fungují zde regexy, tak se můžete vyřádit.
Způsob je dobře popsán na http://corz.org/serv/tricks/htaccess2.php
Hezké cesty (aktivace mod_rewrite)
Naliknování modulu
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/rewrite.load rewrite.load
Povolení modulu v konfiguraci webu
Editovat konfigurační soubor webu v /etc/apache2/sites-enabled/
a části Directory
upravit položku AllowOverride none
na AllowOverride all
Restart Appache
sudo service apache2 restart
Dobrý databázový server se vždy hodí.
Ke GUI administraci databáze můžeme následně použít například phpMyAdmin.
Nebo Adminer.
sudo aptitude install phpmyadmin
Během instalace se objeví sada dialogů ve kterých zvolíme apache2
jako výchozí web server a heslo uživatele root
pro přístup do rozhraní phpMyAdmina.
Pokud při zobrazování stránek nebude PHP hlásit chyby, musí se upravit /etc/php5/apache2/php.ini
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = On
html_errors = On