LAMP

Webový server LAMP (Linux, Apache, MySQL | MariaDB, PHP)

Instalace

Pro snadnou instalaci na operačním systému Windows je možné použít aplikace EasyPHP nebo WampServer (umožňuje jednoduše přepínat mezi více verzemi PHP a MySQL). Pro Mac OS X je možné použít MAMP nebo Kalabox (podpora Pantheon).

Multiplatformním řešením pak může být např. i XAMPP (po instalaci "bitnami Drupal" umí i Drush):

  • DocumentRoot
    • c:\XAMPP\apache\conf\httpd.conf
    • c:\XAMPP\apache\conf\extra\httpd-ssl.conf
  • Virtual hosts
    • stackoverflow.com/questions/1408/make-xampp-apache-serve-file-outside-of-htdocs

Tipy pro vlastní instalaci:

Linux

Textový režim:

  1. Spusťte přikaz sudo apt-get install php5-common php5-gd php5-suhosin mysql-server phpmyadmin php-apc
    • Při instalaci je nutné zvolit heslo uživatele root pro přístup k MySQL databázi a typ serveru např. Apache2.

Aplikace Synaptic:

  1. Zvolte příkaz Akce, Vybrat balíky podle účelu, LAMP server
    • Při instalaci je nutné zvolit heslo uživatele root pro přístup k MySQL databázi
  2. Nainstalujte phpmyadmin (případně rychlejší Adminer – správa databáze pomocí jednoho PHP souboru)
    • Při instalaci je nutné zvolit typ serveru např. Apache2

Apache

.htaccess

Dodatečný konfigurační soubor webovém serveru Apache, který může být umístěn v libovolném adresáři webu. Direktivy uvedené v souboru .htaccess se vztahují na tento adresář a všechny jeho podadresáře.

Příklad nastavení PHP hodnot:

<IfModule mod_php5.c>
  php_value memory_limit 256M
  php_value max_execution_time 600
  opcache.enable = 1
</IfModule>

Příklad nastavení kódování iso-8859-2 všem souborům s příponou .html:

AddCharset iso-8859-2 .html

Příklad nastavení kódování iso-8859-2 souboru example.html:

<Files "example.html">
  AddCharset iso-8859-2 .html
</Files>

Příklad přesměrování z http na https:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Příklad nastavení výchozích souborů:

DirectoryIndex index.html index.php default.htm myfile.php myfile.html

Příklady zabránění neoprávněnému externímu používání obrázků (snížení datového toku):

# Prevent Image Bandwidth Theft
SetEnvIf Referer mysite\.com localreferer
<FilesMatch \.(jpe?g|gif|bmp|png)$>
  Order deny,allow
  Deny from all
  Allow from env=localreferer
</FilesMatch>
# Prevent Image Bandwidth Theft
SetEnvIfNoCase Referer "^http://www.mysite.com/" localreferer=1
SetEnvIfNoCase Referer "^http://www.mysite.com$" localreferer=1
SetEnvIfNoCase Referer "^http://mysite.com/" localreferer=1
SetEnvIfNoCase Referer "^http://mysite.com$" localreferer=1
SetEnvIfNoCase Referer "^$" localreferer=1
<FilesMatch \.(jpe?g|gif|bmp|png)$>
  Order Allow,Deny
  Allow from env=localreferer
</FilesMatch>
# Prevent Image Bandwidth Theft
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_REFERER} !^http://(.+)?mysite.com/ [NC]
  RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
  RewriteCond %{HTTP_REFERER} !^$
  RewriteRule .*.(jpe?g|gif|bmp|png)$ – [F]
</IfModule>
mod_autoindex

Umožňuje upravit seznam adresářů a souborů generovaný serverem. Např.:

AddDescription "(CSS soubor)" *.css
AddDescription "(PHP soubor)" *.php
IndexOptions FancyIndexing
IndexOptions FoldersFirst
IndexOptions IgnoreCase
IndexOptions ScanHTMLTitles
HTTP autentizace
  1. Vytvořte si PHP skript, kterým si vygenerujete volitelné heslo:
    <?php
      $password = 'heslo';
      echo crypt($password);
    ?>
  2. V kořeni webu vytvořte soubor .htpasswd do kterého vložte zvolené uživatelské jméno a výše vygenerované heslo oddělené dvojtečkou např.:

    uzivatel:ZVIfharZvwbME
  3. Do souboru .htaccess umístěného v kořeni webu vložte:

    # HTTP authentication
    AuthType Basic
    AuthBasicProvider file
    AuthUserFile /cesta/k/vasi/domene/.htpasswd
    AuthName "Autorizace moje-domena.cz"
    Require valid-user

    (AuthUserFile cestu je možné získa např. pomocí phpinfo(): DOCUMENT_ROOT)

  4. K obsahu webu se nyní dostane už jen 'uzivatel', který zná 'heslo'.
  5. Přesunutím .htaccess souboru s výše uvedeným obsahem z kořene webu do jiného podadresáře je možné autentizaci omezit na konkrétní podadresář.
  6. Direktivou <Files> v .htaccessu je dále možné určit soubory na které se má autentizace vztahovat atd.
  7. V PHP se k přihlášenému uživateli dostanete pomocí proměnné:
    $_SERVER['REDIRECT_REMOTE_USER']
  8. Odhlášení vyžaduje ukončení webového prohlížeče (zavřít všechny záložka a okna).

Moduly

  • povolení mod_rewrite (čistá URL):
    sudo a2enmod rewrite

     V nastavení apache povolte používání souboru .htaccess!

  • zakázání mod_rewrite
    sudo a2dismod rewrite
  • povolení SSL (https)
    sudo a2enmod ssl
    sudo a2ensite default-ssl # vytvori symlink do sites-enabled
    
    • v souboru /etc/apache2/sites-available/default-sslupravte cesty pro konktrétní SSL certifikát serveru
      SSLCertificateFile /etc/ssl/certs/myweb.cz.crt
      SSLCertificateKeyFile /etc/ssl/private/myweb.cz.key

Výchozí nastavení

V souboru /etc/apache2/apache2.conf

  • v sekci <Directory /var/www>
  • smažte slovo Indexes
  • restartujte Apache2 /etc/init.d/apache2 restart

Soubor /etc/apache2/sites-available/default:

  • AllowOverride All: povolí použití souboru .htaccess
  • AllowOverride none: zakáže použití souboru .htaccess
  • -FollowSymLinks: zakáže symbolické odkazy z webu
  • -Indexes: zakáže výpis obsahu adresáře
  • allow from: omezení přístupu

V sekci <Directory /var/www/> nastavte (vložte IP Vašeho počítače):

AllowOverride All
allow from 127.0.0.1 172.11.2.92

Restart web serveru:

sudo /etc/init.d/apache2 restart

Soubor /etc/apache2/apache2.conf:

  • ServerSignature On: povolí identifikaci serveru při výpisu souborů, na chybových stránkách atd.
  • ServerTokens Prod: nastavení obsahu identifikace serveru (Major|Minor|Min|Prod|OS|Full)
Mac

V souboru /private/etc/apache2/httpd.conf (/Applications/MAMP/conf/apache/httpd.conf) odkomentujte řádek:

LoadModule php5_module libexec/apache2/libphp5.so

Pokud nepoužíváte např. MAMP je možné Apache spustit v System Preferences, Sharing (Předvolby systému, Sdílení) zatržením volby Web Sharing (Sdílení webu). Odkaz Your computer's website spustí webový prohlížeč a zobrazí výchozí webovou stránku webserveru /Library/WebServer/Documents/.

PHP

php.ini

  • ini_set('max_execution_time', 600);
  • <IfModule mod_php5.c>
      php_value post_max_size 5M
      php_value upload_max_filesize 5M
      php_value memory_limit 256M
      php_value max_execution_time 600
      php_value max_input_time 259200
      php_value session.gc_maxlifetime 1200
    </IfModule>
Mac

V terminálu vytvořte soubor /private/etc/php.ini zkopírováním předpřipraveného souboru:

cd /private/etc
sudo cp php.ini.default php.ini

Případně upravte přímo příslušný soubor používané verze PHP např.:

  • /Applications/MAMP/bin/php/php5.4.4/conf/php.ini
Linux

Soubor php.ini se nachází v /etc/php5/apache2/php.ini

Nastavení php.ini

memory_limit = 128M
post_max_size = 64M
upload_max_filesize = 32M
apc.rfc1867 = 1 ;Drupal 7
mbstring.http_input = pass ;Commerce Kickstart
mbstring.http_output = pass ;Commerce Kickstart

Hlášení chyb

error_reporting = E_ALL

Kontrola nastavení

  1. V adresáři webserveru (linux: /var/www/, mac: /Library/WebServer/Documents/) vytvořte soubor info.php s obsahem:
    <?php print_r (phpinfo()); ?>
  2. Do adresního řádku prohlížeče napište: http://localhost/info.php

Rozšíření

  • PHP Suhosin – rozšířená ochrana instalace PHP např. ochrana podtečení, omezení maximální délky a počet proměnných (POST, GET). V /etc/php5/apach2/conf.d(/etc/php5/conf.d/suhosin.ini) je možné změnit výchozí nastavení PHP Suhosin doplněním požadovaných položek např.:
    suhosin.request.max_vars = 512
    suhosin.post.max_vars = 512
    suhosin.request.max_value_length = 90000
    suhosin.post.max_value_length = 90000
    
  • APC – zvyšuje výkon PHP
    • V /etc/php5/apache2/conf.d/apc.iniupravte nastavení např.:
      extension=apc.so
      apc.shm_size = 48

Databáze

MariaDB

Rychlejší verze MySQL

MySQL

Změna hesla:

/usr/bin/mysqladmin -u root password 'nove-heslo'

Restart mysql:

sudo /etc/init.d/mysql restart

V některých případech je vhodné zvýšit hodnotu max_allowed_packet z 1 MB na 32 MB:

  • V XAMP změňte v xampp\mysql\bin\my.ini hodnotu max_allowed_packet = 32M
  • V MAMP vytvořte v Applications/MAMP/conf/ soubor my.cnf obsahující:
  • # The MySQL server
    [mysqld]
    max_allowed_packet = 32M
    
    • nebo můžete využít předpřipravené soubory v Applications/MAMP/Library/support-files
      • požadovaný soubor např. my-small.cnf zkopírujte do Applications/MAMP/conf/, přejmenujte na my.cnf a restartujte Apache
  • Pokud není možné MySQL Server spustit:
    1. Vypněte MAMP
    2. V terminálu zadejte příkaz killall -9 mysqld
    3. Spusťte MAMP

DNS záznamy

Soubor hosts (bez přípony) umožňuje přenastavit DNS záznamy na klientském počítači.

Umístění souboru:

  • GNU/Linux: /etc/hosts
  • Mac OS: /private/etc/hosts
  • Windows 8, 7, 2000, XP a Vista: c:\windows\system32\drivers\etc\hosts
  • Windows 95 a 98: c:\windows\hosts

Příklad souboru hosts:

# komentar
127.0.0.1         localhost
192.168.10.10     moje-pc.cz www.moje-pc.cz
# test.cz
217.11.149.212    test.cz
217.11.149.212    www.test.cz
217.11.149.212    mysql.test.cz

Po uložení souboru restartujte síťové nastavení: sudo /etc/init.d/networking restart.

Poznámky:

  • IP adresa a doménový název musí být oddělen minimálně jednou mezerou.
  • Po zadání adresy http://www.test.cz se obsah webu www.test.cz načte ze serveru, jehož IP adresa je 217.11.149.212 i přesto, že doména test.cz vůbec nemusí být zaregistrovaná.
  • Aplikace phpMyAdmin je dostupná na adrese http://mysql.test.cz

U některých antivirových nebo antispywarových programů je nutné změnu souboru hosts povolit.

Virtual Host

Vytváření virtual hostů usnadňuje např. skript virtualhost.sh nebo Hosts.prefpane enlightened

  • skript je třeba nastavit jako spustitelný a upravit dle potřeb např.
    • DOC_ROOT_PREFIX="/Users/user/www"
    • ALWAYS_CREATE_LOGS:="no"
  • pro jednodušší spouštění je vhodné do PATH přidat cestu k adresáři, kde skript leží
    • export PATH="$PATH:~/bin/virtualhost"

Nastavení lokálního počítače pro více doménových jmen:

  1. Do souboru hosts (umístění viz výše) vložte IP adresu a požadovaná doménová jména např.:
    • # Virtual Host
      127.0.0.1 www.domain.cz
      127.0.0.1 dev.test.loc
  2. Do souboru httpd.conf (umístění viz výše) vložte společnou konfiguraci obsahující alespoň cestu k souborům (%0 nemažte) např.:
    • # Virtual Host
      NameVirtualHost 127.0.0.1
      <VirtualHost 127.0.0.1>
        VirtualDocumentRoot "/var/www/%0"
      </VirtualHost>
      • příklad zástupných znaků:
        %0 : the whole name [www.my.test.com]
        %1 : the first part [www]
        %2 : the second part [my]
        %3 : the third part [test]
        %-1 : the last part [com]
        %-3 : the third to last part [my]
        %2+ : the second and all subsequent parts [my.test.com]
        %3+ : the third and all subsequent parts [test.com]
    • vyžadujete-li samostatné nastavení, můžete konfiguraci rozdělit (odpovídá výše uvedenému zápisu se zástupným znakem %0) např.
    • # Virtual Host
      NameVirtualHost *
      <VirtualHost *>
        ServerName localhost
        DocumentRoot "/var/www"
      </VirtualHost>
      <VirtualHost *>
        ServerName www.domain.cz
        DocumentRoot "/var/www/www.domain.cz"
      </VirtualHost>
      <VirtualHost *>
        ServerName dev.test.loc
        DocumentRoot "/var/www/dev.test.loc"
      </VirtualHost>

SSH

SSH (Secure Shell) je protokol umožňující bezpečené přihlášení na vzdálený počítač (server).

Přihlášení (jako host může být použita IP adresa nebo název domény):

ssh username@host
  • Přihlášení bez psaní uživatelského jména a hesla vyžaduje veřejný a privátní klíč
  • ssh host

Odpojení (návrat do lokálního počítače):

exit

SSH klienti a nástroje:

  • Macintosh OSX
    • sshfs (úplná integrace do aplikace Finder)
      • vyžaduje instalaci FUSE for OS X -> SSHFS (FUSE for OS X -> NTFS-3G umožňuje zápis na NTFS disky)
    • Fugu
    • Son of Fugu
    • SSH Agent
    • SSHKeychain
  • Unix/Linux
    • Nix’s Web-based SSH client
    • rssh
    • SecPanel
    • zssh
  • Windows
    • PuTTY
    • DataFreeway
    • XShell (Free for home and school use)

Wordpress

config.php

  • define('WP_MEMORY_LIMIT', '64M');

Drupal

sites/default/settings.php

  • ini_set('memory_limit', '256M');
    ini_set('max_execution_time', '600');

Drush

Připojení vzdáleného adresáře webhostingu

Požadavky:

  • Vyžaduje SFTP na webhostingu. enlightened
  • Volitelně SSH klíč (bez SSH klíče je nutné vždy zadávat heslo).
  • Na Mac OS je nutné nainstalovat FUSE for OS X -> SSHFS (FUSE for OS X -> NTFS-3G umožňuje zápis na NTFS disky).

Připojení:

  1. Spusťte terminál.
  2. Vytvořte si libovolný adresář:
    • mkdir ssh_fs_m​ount
  3. Připojte vzdálenou složku (vyžaduje heslo nebo SSH klíč):
    • (sshfs sftpusername@hostname:/path/to/webhosting/directory /local/directory)
    • sshfs user@ip-adress:/ ssh_fs_mount

Odpojení:

  1. K odpojení příslušného lokálního adresáře zadejte v terminálu jeden z níže uvedených příkazů:
    • fusermount -u ssh_fs_mount
    • fusermount -uf ssh_fs_mount
    • umount ssh_fs_mount
    • umount -f ssh_fs_mount

SFTP server

Vyžaduje lokální uživatelský účet.

  1. Nainstalujte balíček scponly
    • sudo aptitude install scponly
  2. Zobrazte si cestu k shellu scponlyc
    • whereis scponlyc
  3. Spusťte předpřipravený skript (uživatel: sftpuser, domovský adresář: /home/sftpuser, shell: /usr/sbin/scponlyc)
    • cd /usr/share/doc/scponly/setup_chroot;
      sudo gunzip setup_chroot.sh.gz;
      sudo chmod +x setup_chroot.sh;
      sudo ./setup_chroot.sh
  4. (Nastavte suid bit)
    • chmod u+s /usr/sbin/scponlyc
  5. Ve /var/vytvořte symlink www odkazující do /home/sftpuser/var/www/.
  6. Uživateli sftpuser zařaďte do skupiny www-data.
  7. Nastavte příslušná oprávnění souborů a adresářů.

FTP server

Lokální uživatelský účet není podmínkou. Balíček GAdmin-ProFTPD se mi neosvědčil, proto používám raději ruční konfiguraci.

  1. Nainstalujte balíček proftpd
    sudo apt-get install proftpd
  2. Nastavení /etc/proftpd/proftpd.conf:
    # obecna nastaveni
    Include                 /etc/proftpd/modules.conf
    IdentLookups		off
    UseReverseDNS		off # zrychluje prihlaseni
    ServerName		"Moje FTP" # nazev pocitace v siti
    DeferWelcome		on # potlacit uvitani
    ServerIdent		off
    ListOptions		"-l"
    ListOptions		"+R" strict # pouze zakladni vypis
    #DefaultRoot		/var/www/ftp # vychozi adresar
    DefaultRoot		~ # uzavreni uzivatele v home adresaru (pozor hardlinky jsou povoleny)
    RequireValidShell	off # nevyzaduje shell
    RootLogin		off
    AllowOverride		on # povoli zapis
    AuthOrder		mod_auth_unix.c mod_auth_file.c # systemove ucty nebo virtualni ucty
    AuthUserFile            /etc/proftpd/ftpd.passwd # cesta k souboru s virtualnimi uzivateli
    AuthGroupFile           /etc/proftpd/ftpd.group # cesta k souboru virtualnimi skupinami
    
    # nastaveni vztahujici se pouze k danemu adresari
    <Directory /var/www/ftp>
        HideNoAccess	on
        GroupOwner		www-data
    </Directory>
    
    # zpozdeni
    <IfModule mod_delay.c>
        DelayEngine		off
    </IfModule>
    
    # ftps
    Include			/etc/proftpd/tls.conf
    
    <Limit LOGIN>
        <IfModule mod_tls.c>
    	AllowUser	student01 student02 student03 
        </IfModule>
        DenyAll
    </Limit>
    
    # PAM overeni
    <ifModule mod_auth_pam.c>
        AuthPAM off
    </IfModule>
    
  3. Nastavení /etc/proftpd/modules.conf:
    • #LoadModule mod_ctrls_admin.c
      #LoadModule mod_radius.c
      #LoadModule mod_quotatab.c
      #LoadModule mod_quotatab_file.c
      #LoadModule mod_quotatab_radius.c
      #LoadModule mod_wrap.c
      #LoadModule mod_rewrite.c
      #LoadModule mod_ban.c
      #LoadModule mod_wrap2_sql.c
      #LoadModule mod_dynmasq.c
      
  4. Nastavení /etc/proftpd/tls.conf:
    • TLSEngine			on
      TLSLog				/var/log/proftpd/tls.log
      TLSProtocol			SSLv23 TLSv1
      TLSRSACertificateFile           /etc/ssl/certs/ssl-cert-snakeoil.pem
      TLSRSACertificateKeyFile        /etc/ssl/private/ssl-cert-snakeoil.key
      #TLSRSACertificateFile		/etc/ssl/certs/muj-web.cz.crt
      #TLSRSACertificateKeyFile	/etc/ssl/private/muj-web.cz.key
      #TLSCACertificateFile		/etc/ssl/certs/cacert_my.crt
      #TLSOptions			NoCertRequest
      TLSVerifyClient			off
      TLSRequired			on
      
  5. Uživatelé
    • vytvoření skupiny user
      sudo groupadd user
      
    • vytvoření uživatele user
      sudo useradd -g user -G www-data -d /dev/null -s /dev/null -p heslo user
    • změna hesla uživatele
      sudo passwd user
  6. Virtuální účty (https://kyup.com/tutorials/install-configure-proftpd):
    • vytvoření virtuálního uživatele (nebude mít přístup k shellu)
    • ftpasswd --passwd --name=user --home=/default/user/folder --shell=/bin/false --uid=33 --gid=33
    • vytvoření virtuální skupiny
    • ftpasswd --group --gid=33 --name=www-data
    • (soubory se vytvoří v aktuálním adresáři tj. je vohdné být v /etc/proftpd/)
  7. Upravte nastavení adresáře /var/www/ftp např.
    • sudo chown -R user:www-data /var/www/ftp
  8. Ovládání FTP serveru (start, stop, restart)
    1. sudo /etc/init.d/proftpd restart
    • nebo:
    1. service proftpd​ restart

Pošta

Funkční pošta na localhostu:


Upload progressEnabled (PECL uploadprogress)

  • Installing PECL UploadProgress on a server:
  • sudo apt-get install make php5-dev
  • sudo pecl install uploadprogress
  • echo -e "extension=uploadprogress.so" > /etc/php5/apache2/conf.d/uploadprogress.ini
  • sudo service apache2 reload