Linuxový webserver - kompletní popis instalace


V tomto článku detailně popíši, jak nainstalovat nejzákladnější součásti webového serveru, jakožto HTTP server, modul PHP a databázi MySQL.

Popíši konkrétní instalaci těch nejnovějších produktů:
    HTTP server Apache 2.0.52
    PHP 5.0.3
    MySQL 4.1.8

Instalace byla ověřena na Fedora Core 2, Fedora Core 3, SUSE Linux 9.1, ale v principu by měla být podobná na každém linuxu.

PHP 5.0.3 bude kompilováno s podporou bz2, cpdflib, ctype, curllib, dom, ftp, gd2, freetype2, gettext, libiconv, libxml, mbstring, mysql, openssl, pcre, posix, session, SimpleXML, SPL, SQLite, tokenizer, xml a zlib.

Apache 2.0.52 bude kompilován s podporou mod_access, mod_auth, mod_auth_digest, mod_deflate, mod_env, mod_headers, mod_setenvif, mod_ssl, mod_mime, mod_imap, mod_alias and mod_rewrite.

Kompilace (Open) SSL


Potřebná OpenSSL knihovna: openssl-0.9.7d.tar.gz
su
cd /usr/local/src
tar -xzf openssl-0.9.7d.tar.gz
cd openssl-0.9.7d
./config --prefix=/usr/local
make
make install

Nyní je nutné vytvořit privátní klíč a umístit jej do /home/ssl:
mkdir /home/ssl
cd /home/ssl
/usr/local/bin/openssl genrsa -des3 -rand
                       some_big_file_1:some_big_file_2
                       -out localhost.key 1024

Dále vytvoříme privátní klíč bez pass-phrase, je to sice méně bezpečné, ale umožní nám to bootovat server bez toho, aniž bychom museli pokaždé psát pass-phrase:
/usr/locl/bin/openssl rsa -in localhost.key
                          -out localhost.key.unsecure

Také vytvoříme "request file" pro certifikační autoritu k obdržení důvěryhodného SSL certifikátu (pokud je požadován) s názvem localhost.key.csr:
/usr/local/bin/openssl req -new 
                           -key localhost.key
                           -out localhost.key.csr

Mezitím, než se vyřeší všechny záležitosti s certifikační autoritou vytvoříme dočasný 30ti denní certifikát (self-signed, tj. podepíšeme si jej sami):
/usr/local/bin/openssl x509 -req -days 30
                                 -in localhost.key.csr
                                 -signkey localhost.key
                                 -out localhost.cert
chmod 400 localhost.cert
chmod 400 localhost.key
chmod 400 localhost.key.unsecure

Kompilace MySQL 4.1.8


Je potřeba: mysql-4.1.8.tar.gz, libtermcap-2.0.8-35.i386.rpm, libtermcap-devel-2.0.8-35.i386.rpm

MySQL 4.1.8 má úplně jiný komunikační protokol a asociované PHP mysqli funkce. Pokud Vaše skripty nebyly napsané pro MySQL 4.1, měli byste raději nainstalovat MySQL 4.0.22, abyste zůstali 100% kompatibilní. Parametry pro kompilaci MySQL 4.0.22 budou stejné, pouze odstraňte jeden parametr obsahující "mysqli" z PHP ./configure parametrů (uvedeno níže). Nicméně, pro programování nových aplikací se doporučuje MySQL 4.1.8.
cd /usr/local/src
tar -xzf mysql-4.1.8.tar.gz
cd mysql-4.1.8
./configure --prefix=/usr/local/mysql
            --unix-sock-path=/tmp/mysql.sock
            --with-charset=utf-8
make
make install

groupadd mysql
useradd -g mysql mysql
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
chgrp -R mysql .


Pokud by byl s čímkoliv problém, řešení většinou najdete v
/usr/local/mysql/var/<hostname>.err

Kompilace Apache 2.0.52


Je potřeba: httpd-2.0.52.tar.gz, libxml2-devel-2.6.7-28.i586.rpm, zlib-devel-1.2.1-70.i586.rpm, readline-devel-4.3-306.i586.rpm
cd /usr/local/src
tar -zxvf httpd-2.0.52.tar.gz
cd httpd-2.0.52
./configure --prefix=/usr/local/apache2
            --enable-so
            --enable-auth-digest
            --enable-rewrite
            --enable-setenvif
            --enable-mime
            --enable-deflate
            --enable-ssl
            --with-ssl=/usr/local
            --enable-headers
make
make install

Dále upravíme konfigurační soubor /usr/local/apache2/conf/httpd.conf. Budeme předpokládat, že Váš web root je /home/www:
DocumentRoot "/home/www"

Přidáme podporu pro PHP 5 (jako modul):
LoadModule php5_module modules/libphp5.so
DirectoryIndex index.html index.htm index.php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Dále povolíme/vytvoříme základní mod_rewrite pravidla:
<Directory "/home/www">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Odepřeme klientům přístup k .htaccess:
<Files ~ "^.ht">
    Order allow,deny
    Deny from all
</Files>

Dále, pokud používáme SSL (na standardním portu 443), musíme upravit soubor /usr/local/apache2/conf/ssl.conf následovně (stačí přepsat původní obsah souboru následujícím):
Listen 443
<VirtualHost _default_:443>
    ServerName localhost
    SSLEngine on
    SSLCertificateFile /home/ssl/localhost.cert
    SSLCertificateKeyFile /home/ssl/localhost.key.unsecure
</VirtualHost>


Kompilace PHP 5.0.3:


Je potřeba: php-5.0.3.tar.bz2, curl-7.12.1.tar.gz, libiconv-1.9.1.tar.gz, jpegsrc.v6b.tar.gz, libpng-1.2.7.tar.gz, clibpdf202r1.tar.gz, freetype-2.1.9.tar.bz2

      Kompilace libiconv:
    cd /usr/local/src
    tar -xzf libiconv-1.9.1.tar.gz
    cd libiconv-1.9.1
    ./configure --prefix=/usr/local
    make
    make install

      Kompilace libjpeg:
    cd /usr/local/src
    tar -xzf jpegsrc.v6b.tar.gz
    cd jpeg-6b
    ./configure --prefix=/usr/local
    make
    make install
    make install-lib

      Kompilace libpng:
    cd /usr/local/src
    tar -xzf libpng-1.2.7.tar.gz
    cd libpng-1.2.7
    cp scripts/makefile.linux makefile
    make
    make install

      Kompilace cpdflib:
    cd /usr/local/src
    tar -xzf clibpdf202r1.tar.gz
    cd ClibPDF/source
    cp Makefile.Linux makefile
    make
    make install

      Kompilace curl:
    cd /usr/local/src
    tar -xzf curl-7.12.1.tar.gz
    cd curl-7.12.1
    ./configure --prefix=/usr/local
    make
    make install

      Kompilace freetype 2:
    cd /usr/local/src
    tar -xjf freetype-2.1.9.tar.bz2
    cd freetype-2.1.9
    ./configure --prefix=/usr/local
    make
    make install


Nyní už zkompilujeme PHP, s podporou MySQL, iconv, curl, zlib, modules:
cd /usr/local/src
tar -xjf php-5.0.3.tar.bz2
cd php-5.0.3
./configure --with-apxs2=/usr/local/apache2/bin/apxs
            --with-mysql=/usr/local/mysql
            --with-mysqli=/usr/local/mysql/bin/mysql_config
            --with-mysql-sock=/tmp/mysql.sock
            --with-sqlite
            --enable-sqlite-utf8
            --with-zlib
            --with-zlib-dir
            --with-bz2
            --with-gd
            --enable-gd
            --enable-gd-native-ttf
            --with-jpeg-dir=/usr/local
            --with-png-dir=/usr/local
            --with-ttf
            --with-freetype-dir=/usr/local
            --with-iconv=/usr/local
            --with-curl=/usr/local
            --enable-track-vars
            --with-gettext
            --with-config-file-path=/usr/local/apache2/conf
            --enable-trans-id
            --enable-ftp
            --with-cpdflib=/usr/local
            --enable-mbstring
            --with-openssl=/usr/local
make
make install
cp php.ini-dist /usr/local/apache2/conf/php.ini

Dále upravíme konfigurační soubor /usr/local/apache2/conf/php.ini a také zajistíme základní PHP bezpečnost:
mysql.default_socket = /tmp/mysql.sock
short_open_tag = Off
register_globals = Off
allow_url_fopen = Off

Vytvoření skriptu "web" pro automatický start webového serveru po nabootování (skript je pak nutné umístit tam, kde se bude při startu systému spouštět - na Fedora Core to je např.: /etc/init.d/):

/etc/init.d/web:

#!/bin/sh

case "$1" in
start)
  /usr/local/apache2/bin/apachectl start
  /usr/local/mysql/share/mysql/mysql.server start
  ;;
  stop)
  /usr/local/apache2/bin/apachectl stop
  /usr/local/mysql/share/mysql/mysql.server stop
  ;;
  restart)
  /usr/local/apache2/bin/apachectl restart
  /usr/local/mysql/share/mysql/mysql.server restart ;;
esac

Dále je nutné, aby měl soubor skriptu právo na spuštění:
chmod u+x /etc/init.d/web

Nějakou konfigurační utilitou (system-config-services, YaST) nastavte, aby se service "web" spoustela v run levelu 3 a 5.

Tak, a teď ještě nainstalujeme phpMyAdmin do /home/www/db , abychom mohli pohodlně spravovat MySQL databázi (stačí pak v browseru napsat http://localhost/db/).

Instalace phpMyAdmin


Je potřeba: phpMyAdmin-2.6.0-pl3.tar.bz2
mkdir /home/www
cd /home/www
tar -xjf /usr/local/src/phpMyAdmin-2.6.0-pl3.tar.bz2
ln -s phpMyAdmin-2.6.0-pl3 db

Konfigurace phpMyAdmin (soubor /home/www/db/config.inc.php):
// URL to phpMyAdmin
$cfg['PmaAbsoluteUri']='http://localhost/db/';

//connection settings
$cfg['Servers'][$i]['connect_type']='socket';
$cfg['Servers'][$i]['extension']='mysqli';

// user na password
$cfg['Servers'][$i]['auth_type']='config';
$cfg['Servers'][$i]['user']='root';
$cfg['Servers'][$i]['password']='';

// PMA settings
$cfg['Servers'][$i]['pmadb']='phpmyadmin';
$cfg['Servers'][$i]['bookmarktable']='pma_bookmark';
$cfg['Servers'][$i]['relation']='pma_relation';
$cfg['Servers'][$i]['table_info']='pma_table_info';
$cfg['Servers'][$i]['table_coords']='pma_table_coords';
$cfg['Servers'][$i]['pdf_pages']='pma_pdf_pages';
$cfg['Servers'][$i]['column_info']='pma_column_info';
$cfg['Servers'][$i]['history']='pma_history';
$cfg['Servers'][$i]['verbose_check']=FALSE;

// persistent connections
$cfg['PersistentConnections']=TRUE;

// do not display logo on the left
$cfg['LeftDisplayLogo']=FALSE;

// show MySQL and PHP info
$cfg['ShowMysqlInfo']=TRUE;
$cfg['ShowMysqlVars']=TRUE;
$cfg['ShowPhpInfo']=TRUE;

// show BLOBs
$cfg['ShowBlob']=TRUE

Jako poslední krok, použijte phpMyAdmin SQL window ke spuštění skriptu /home/www/db/scripts/create_tables_mysql_4_1_2+.sql aby vytvořil PMA tabulky (požaduje phpMyAdmin).