Настройка apache 2 + nginx + php 5 + MySQL + memcached + eaccelerator + sphinx в Ubuntu

Опубликовано admin в Пнд, 11/04/2011 - 16:48
Итак сегодня я раскажу вам как поднять Веб сервер на маломощном компьютере или VDS / VPS

Мной был взят сервер VDS в конфигурации CPU 480 MHz, RAM 256 Mb, HDD 8 Gb (Ubuntu Server 9.04).

Делаем начальные действия необходимые нам для дальнейшей работы:

выставим пароль root и зайдем под ним
sudo passwd root
su


обновим информацию о пакетах, и обновим систему
aptitude update
aptitude upgrade


доставим wget если ставились в минималке
aptitude install wget make


поставим webmin дабы было удобнее приглядывать за сервером (после установки он доступен по адресу https://ваш адрес:10000)

 (версию подставляйте свежую на момент своих действий)
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.490_all.debdpkg -i webmin_1.490_all.deb
aptitude -f install


Поставим SSH если он ещё не установлен
aptitude install ssh openssh-server


Доставим g++ он пригодится в дальнейшем:

aptitude install g++ 


С подготовительной частью закончили, ставим веб сервер.

Установка apache2 + phph5 + mysql + phpmyadmin одной строкой:

aptitude install mysql-server mysql-client libmysqlclient15-dev apache2 apache2-doc \
apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear \
php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql \
php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl phpmyadmin


По ходу установки вводим пароль пользователя сервера Mysql (root):

New password for the MySQL «root» user: < — yourrootsqlpassword ВАШ ПАРОЛЬ
Repeat password for the MySQL «root» user: < — yourrootsqlpassword ЕЩЕ РАЗ ВАШ ПАРОЛЬ

Разрешаем модули апача:
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include


правим конфиг сайта по умолчанию, и далее от него и отталкиваемся при создании виртуалхостов:
nano /etc/apache2/sites-available/default (все стираем и делаем так, ну и всетки думаем что делаем, ибо под вашу задачу могут быть отличия)
(порт 81 это не ошибка, так и должно быть, ибо слушать 80й порт у нас будет nginx, и в апачь передавать только запросы на динамику(php и др)):

<VirtualHost *:81>
	ServerAdmin webmaster@твой_сайт

	DocumentRoot /var/www/твой_сайт
	<Directory />
		Options FollowSymLinks
		AllowOverride All
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride All
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>


Делаем ссылку на наш файл в папке /etc/apache2/sites-enabled/

правим в двух местах nano /etc/apache2/apache2.conf

MaxClients          20


Ставим nginx + apache2-mod-rpaf


wget http://ftp.de.debian.org/debian/pool/main/n/nginx/nginx_0.7.62-1_i386.deb
dpkg -i nginx_*
aptitude install libapache2-mod-rpaf


nano /etc/apache2/ports.conf

NameVirtualHost *:81
Listen 81


Далее настраиваем виртуальный хост apache.
Копируем дефолтный конфиг: (и правим его под свой домен)

cd /etc/apache2/sites-available
cp ./default /etc/apache2/sites-enabled/example.com


Настраиваем gzip сжатие для nginx. И сам nginx (worker_processes 1; ставим равному количеству ядер в процессоре). Открываем конфиг:

nano /usr/local/etc/nginx/nginx.conf

все стираем и делаем так:

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 64;
    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;


    gzip                on;
    gzip_proxied        any;
    gzip_min_length     1100;
    gzip_http_version   1.0;
    gzip_buffers        4 8k;
    gzip_comp_level     9;
    gzip_types          text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;


    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


Для нашего виртуалхоста создаем новый конфиг:

nano /etc/nginx/sites-enabled/example.com


server {
listen 80;
server_name example.com;
access_log /var/log/nginx.access_log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /var/www/test.gigma.ru/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:81/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
} 


С такими настройками nginx у нас отдаёт всю статику (картинки, видиое, музыку, css, ява скрипты и др.), а апачь трудиться только над выполнением php.

Устанавливаем memcached:

aptitude install memcached


Устанавливаем eAccelerator.
Так же тянем php5-dev, т.к. нам понадобится утилита phpize.

aptitude install php5-dev 
aptitude install make
cd /tmp/ 
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 
tar xvjf eaccelerator-0.9.5.3.tar.bz2 
cd eaccelerator-0.9.5.3 
phpize 
./configure --enable-eaccelerator=shared 
make 
make install


Создаем папку кеша:

mkdir -p /var/cache/eaccelerator 
chmod 0777 /var/cache/eaccelerator


Редактируем конфиг PHP:

nano /etc/php5/apache2/php.ini

Добавляем строки в самом верху:

[PHP]

; eAccelerator configuration
; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension
; If you are using a thread safe build of PHP you must use
; zend_extension_ts instead of zend_extension
extension                       = "eaccelerator.so"
eaccelerator.shm_size           = "16"
eaccelerator.cache_dir          = "/var/cache/eaccelerator"
eaccelerator.enable             = "1"
eaccelerator.optimizer          = "1"
eaccelerator.check_mtime        = "1"
eaccelerator.debug              = "0"
eaccelerator.filter             = ""
eaccelerator.shm_max            = "0"
eaccelerator.shm_ttl            = "0"
eaccelerator.shm_prune_period   = "0"
eaccelerator.shm_only           = "0"
eaccelerator.compress           = "1"
eaccelerator.compress_level     = "9"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"


Перезапускаем сервисы:

service apache2 restart
service nginx restart
service memcached restart


Вуаля у нас супершустрый сервер который кушает 90мб оперативной памяти.

Для тех кому нужен sphinx (free open-source SQL full-text search engine)

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
tar –xzvf sphinx-0.9.8.tar.gz
cd sphinx-0.9.8
./configure
make
make install
mkdir -p /var/db/sphinx/log
chmod -R 777 /var/db/
mkdir -p /usr/local/SphinxIndex
chmod -R 777 /usr/local/SphinxIndex/

и правим конфиг под свои нужды:
nano /usr/local/etc/sphinx.conf


Вроде ничего незабыл…



Источник: http://rubuntu.ru/blog/server/435/nastrojka-apache-2-nginx-php-5-mysql-memcached-eaccelerator-sphinx-v-ubuntu.html