Ubuntu – Serwer WWW w pigułce

www_u_p1

Hej:) Dziś trochę dłuższy poradnik, dotyczący instalacji serwera dla stron internetowych w pigułce. Jest to pewnego rodzaju podsumowanie do wcześniejszych poradników łączący w sobie jeden duży i obszerny opis wraz z gotowymi konfiguracjami serwera WWW.

W przygotowanie wszystkiego włożyłem bardzo dużo czasu, wbrew pozorom nie jest to taka łatwa sprawa – aby wszystko działało, było praktyczne i niezawodne ponadto zachowując w miarę świeże pakiety oraz dobre konfiguracje.

Od środka działa Apache2 z obsługą PHP5-FPM za pomocą modułu MPM-WORKER, komunikuje się z punktem wymiany socketowym z PHP. Od frontu stoi NGINX służący jako system “przepisywania” w locie kodu dzięki Pagespeedowi oraz innym modułom opisanym w tym poradniku. NGINX ponadto skonfigurowany jest jako cache – gromadzi statyczne elementy w swojej pamięci aby jeszcze bardziej przyśpieszyć i zredukować spowolnienia w ładowaniu obsługujących stron internetowych.

NGINX’a kompilujesz z “moich” źródeł – uniwersalne dla Debiana 8 oraz Ubuntu.  Dysponuje wersją powyżej 1.9.5 – w domyślnie włączoną opcją protokołu http/2 – po więcej info: https://www.nginx.com/blog/how-nginx-plans-to-support-http2/

Jako bazę danych postanowiłem opisać trzy warianty, dlaczego ? Może dlatego że nie każdy chce mieć MarieDB czy MySQL’a – osobiście jestem wierny MariaDB ale to najmniejszego znaczenia nie ma w tym przypadku – może jedynie przekładać się to w ewentualnej wydajności (na + dla alternatyw MySQL’a)

Jako PHP postanowiłem opisać dwa warianty, dla tych co nie potrzebują najnowszych zawsze wersji oraz dla tych którzy lubią mieć w miarę świeże pakiety  w systemie. Wersje są dwie, bezpośrednio z repozytoriów dystrybucji oraz przygotowaną przez społeczność Ubuntu; nie zabrakło oczywiście modułów IonCube oraz Opcache.

Jako “Gratis” dołączony jest Varnish – jest on oczywiście z gotową konfiguracją – dlaczego jako opcja ? Z wielu aspektów, np. niektóre CMSy nie potrafią poprawnie działać, chociaż mój konfig przygotowany jest pod Drupala, Wordpresa itp.

Warto wspomnieć o FTP – przygotowałem fajny konfig do vsftpd dzięki czemu otrzymujemy szyfrowane połączenie między serwerem oraz klientem – opcję zawsze można wyłączyć.

Kilka technicznych informacji:

Dostęp do PhpMyAdmina : http://IP:9977 (ominięcie cache i  Varnisha)
Apache/2  port: : http://IP:8080
NGINX port : http://IP:80

Opcja Varnish:
Dostęp do PhpMyAdmina : http://IP:9977 (ominięcie cache i  Varnisha)
Apache port: : http://IP:8080
Varnish port: http://IP:80
NGINX port : http://IP:88

Połączenia HTTPS nie są kierowane przez Varnisha.

Najpotrzebniejsze ścieżki do plików konfiguracyjnych:

Apache2: 

  • /etc/apache2/apache2.conf
  • /etc/apache2/sites-available/000-default.conf
  • /etc/apache2/ports.conf
  • /etc/apache2/sites-enabled/pma.conf

NGINX:

  • /etc/nginx/nginx.conf
  • /etc/nginx/conf.d/default.conf

Varnish:

  • /etc/varnish/default.vcl
  • /lib/systemd/system/varnish.service

vSFTPd

  • /etc/vsftpd.conf

PHP5:

  • /etc/php5/fpm/php.ini

MySQL

  • /etc/mysql/my.cnf

 

1. Wstępna konfiguracja

adduser www ## USTAW SOBIE HASLO WWW - FTP, I USER
mkdir /home/www/public_html ; chown -R www:www-data /home/www/* ; chmod -R 775 /home/www/
mkdir -p /home/www/logs
apt-get update; apt-get install curl apt-transport-https software-properties-common  -y
sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
rm /etc/apt/sources.list ; wget http://pliki.linuxiarz.pl/10-2015/sources_15-04 -O /etc/apt/sources.list

2. Instalacja serwera WWW (Backend – Apache2)

apt-get update
apt-get install apache2 apache2-mpm-worker libapache2-mod-fastcgi vsftpd  nano wget curl imagemagick unzip sendmail software-properties-common libvpx1 fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.1-0 libperl5.20 libtiff5 libxpm4 libxslt1.1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal -y  --force-yes

2.1 Konfiguracja Apache2

rm /etc/apache2/mods-enabled/fastcgi.conf ; wget http://pliki.linuxiarz.pl/09-2015/fastcgi.conf -O /etc/apache2/mods-enabled/fastcgi.conf
rm /etc/apache2/sites-available/* ; wget http://pliki.linuxiarz.pl/09-2015/000-default.conf -O /etc/apache2/sites-available/000-default.conf
rm /etc/apache2/apache2.conf ; wget http://pliki.linuxiarz.pl/10-2015/apache2.conf -O /etc/apache2/apache2.conf
rm /etc/apache2/ports.conf ; wget http://pliki.linuxiarz.pl/09-2015/ports.conf -O /etc/apache2/ports.conf
wget http://pliki.linuxiarz.pl/09-2015/pma.conf -O /etc/apache2/sites-enabled/pma.conf
a2enmod actions rewrite alias deflate headers
echo '<?php phpinfo(); ?>' >> /home/www/public_html/info.php
rm /etc/apache2/mods-available/autoindex.conf ; wget http://pliki.linuxiarz.pl/10-2015/autoindex.conf -O /etc/apache2/mods-available/autoindex.conf
systemctl stop apache2

3. Bazy danych – do wyboru

3.1 PerconaDB

sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
sudo echo "deb http://repo.percona.com/apt "$(lsb_release -sc)" main" | sudo tee /etc/apt/sources.list.d/percona.list 
sudo apt-get update; apt-get install percona-server-server-5.6 -y --force-yes

3.2 MariaDB

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb [arch=amd64,i386] http://mariadb.kisiek.net/repo/10.1/ubuntu vivid main'
sudo apt-get update
sudo apt-get install mariadb-server
systemctl restart mysql

3.3 MySQL

sudo apt-get install mysql-server

3.4 Moja konfiguracja i wstępna optymalizacja (działa na MariaDB i PerconaDB)

rm /etc/mysql/my.cnf; wget http://pliki.linuxiarz.pl/08-2015/my.cnf -O /etc/mysql/my.cnf

4. Kompilacja i konfiguracja Reverse proxy NGINX – do wyboru wersja 1.9.6 oraz 1.9.7

apt-get update; apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl libcurl4-openssl-dev libossp-uuid-dev nano curl git autotools-dev debhelper dh-systemd libexpat-dev libgd-dev libgeoip-dev libluajit-5.1-dev liblua5.1-0-dev libmhash-dev libpam0g-dev libperl-dev libxslt1-dev po-debconf libssl-dev -y
wget http://repo.linuxiarz.pl/NGINX-1.9.11-custom.tar.gz
## WIECEJ WERSJI -> http://repo.linuxiarz.pl
tar xvf  NGINX-1.9.* ; cd nginx-1.9.* ; dpkg-buildpackage -b
cd ..
dpkg -i nginx-common_1.9.*.deb nginx_1.9.*.deb nginx-extras_1.9.*.deb
rm  /etc/nginx/conf.d/* ; rm  /etc/nginx/sit*/* 
wget http://pliki.linuxiarz.pl/11-2015/ngx_mem.conf -O /etc/nginx/conf.d/default.conf

4.1 Opcjonalny certyfikat SSL

openssl genrsa -out /etc/nginx/privkey.pem 2048
openssl req -new -x509 -key /etc/nginx/privkey.pem -out /etc/nginx/cacert.pem -days 1095

5. Instalacja PHP5-FPM wraz z dodatkami (do wyboru)
5.1 Zawsze najnowsze: (w chwili pisania 5.6.14)

sudo add-apt-repository ppa:ondrej/php5-5.6
sudo apt-get update
sudo apt-get install php5-fpm php5 php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl -y  --force-yes

5.2 Bezpośrednio z dystrybucji: (w chwili pisania 5.6.4)

sudo apt-get update; sudo apt-get install php5-fpm php5 php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl -y --force-yes

5.3 Konfiguracja PHP

rm /etc/php5/fpm/php.ini; wget http://pliki.linuxiarz.pl/08-2015/php5/php.ini -O /etc/php5/fpm/php.ini 
wget http://pliki.linuxiarz.pl/08-2015/php5/opcache.so -O /etc/php5/opcache.so 
wget http://pliki.linuxiarz.pl/08-2015/php5/ioncube_loader_lin_5.6.so -O /etc/php5/ioncube_loader_lin_5.6.so

6. Instalacja phpMyAdmin

apt-get install phpmyadmin -y 
rm /etc/apache2/conf-enabled/phpmyadmin.conf 
rm /etc/phpmyadmin/apache.conf 
a2dismod php5 
systemctl restart apache2 

7. Konfiguracja serwera FTP (FTP PRZEZ TLS)

rm /etc/vsftpd.conf
wget http://pliki.linuxiarz.pl/08-2015/ftp/vsftpd.conf -O /etc/vsftpd.conf; touch /etc/vsftpd.chroot_list
wget http://pliki.linuxiarz.pl/08-2015/ftp/private.zip; unzip private.zip; mv private/* /etc/ssl/private; rm private.zip

8. Instalacja serwera Memcached

apt-get install memcached
rm /etc/memcached.conf
wget http://pliki.linuxiarz.pl/11-2015/memcached.conf -O /etc/memcached.conf 
rm /etc/nginx/conf.d/*
wget http://pliki.linuxiarz.pl/11-2015/ngx_mem.conf -O /etc/nginx/conf.d/default.conf

9. Opcjonalna instalacja Varnish Cache Server

curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.1" >> /etc/apt/sources.list.d/varnish-cache.list
apt-get update ; apt-get install varnish -y
rm /lib/systemd/system/varnish.service ; wget http://pliki.linuxiarz.pl/10-2015/varnish.service -O /lib/systemd/system/varnish.service
rm /etc/varnish/default.vcl ; wget http://pliki.linuxiarz.pl/10-2015/default.vcl -O /etc/varnish/default.vcl
rm /etc/nginx/conf.d/* ; wget http://pliki.linuxiarz.pl/11-2015/ngx_rev_mem.conf -O /etc/nginx/conf.d/default.conf
systemctl daemon-reload
systemctl restart nginx
systemctl restart varnish

10. Restart usług

systemctl restart vsftpd
systemctl restart apache2
systemctl restart mysql
systemctl restart nginx
systemctl restart php5-fpm
systemctl restart memcached

 

11. Uruchamianie przy starcie systemu

update-rc.d nginx defaults
update-rc.d varnish defaults
crontab -l | { cat; echo "@reboot systemctl start varnish"; } | crontab -
update-rc.d apache2 defaults
update-rc.d mysql defaults
update-rc.d memcached defaults