Apache + ZendServer CE + MySQL + NGINX, автоматизируем

26 Дек
2011

Зная постов много на эту тему, но автоматики еще нигде не встречал.

Все началось с того что я никак не мог найти нормальный мануал, все мануалы немного устарели, пришлось по крупицам собирать, брал все новое, брал как бы сказать недавно зарелизеное.

Итак вроде бы тривиальная задача поставить LAMP + NGINX.
Что у нас есть Debian 6 (squeeze) и bash scripts и руки.


  1. Предварительная настройка Debian;
  2. Установка Apache;
  3. Установка Nginx;
  4. Установка MySQL;
  5. Установка ZendCE;
  6. Настройка Apache;
  7. Настройка Nginx.


1. Предварительная настройка Debian



При попытки обновить репозиторий я столкнулся с проблемый, некоторые Package.zip немогли скачаться, что-то случилось с офиц репозитарием Debian’a. Нашел отличные зеркало.

deb linux.nsu.ru/debian squeeze main contrib non-free

deb-src linux.nsu.ru/debian squeeze main contrib non-free

#echo 'deb-src linux.nsu.ru/debian squeeze main contrib non-free' >> /etc/apt/sources.list

#echo 'deb linux.nsu.ru/debian squeeze main contrib non-free' >> /etc/apt/sources.list


Также установил mc, хотя я им мало пользуюсь, но люблю его редактор mcedit и пару его функций. Также можно поставить systat — для просмотра состояния системы, tmpreaper — удаление устаревших файлов (аналог tmpwatch).

#apt-get install mc sysstat tmpreaper


2. Установка Apache



Всеми любимый монстр apache.

#apt-get install apache2


3. Установка NGINX



Добавим репозитории nginx.

#echo 'deb nginx.org/packages/debian/ squeeze nginx'>>/etc/apt/sources.list
#echo 'deb-src nginx.org/packages/debian/ squeeze nginx'>>/etc/apt/sources.list

#apt-get install nginx


4. Установка MySQL

#apt-get install mysql-server mysql-client


Настроим политику безопасности MySQL, запустим утилитку с коробки и просто ответим на все вопросы

#mysql_secure_installation


5. Установка ZendCE

Добавим репозиторий и установим ключик.

#echo 'deb repos.zend.com/zend-server/deb server non-free'>>/etc/apt/sources.list
#wget repos.zend.com/zend.key -O- |apt-key add -


Установим либо Zend CE с php5.2 или c 5.3, подробно о установки и выборе пакета можно узнать здесь.

#apt-get install zend-server-ce-php-5.2


или

#apt-get install zend-server-ce-php-5.3


Установим пароль на GUI Zend CE.

#/usr/local/zend/bin/gui_passwd.sh


И перезапустим Zend CE

#/usr/local/zend/bin/zendctl.sh restart

Теперь Веб Морда доступна по адресу xxx.xxx.xxx.xxx:10081/ZendServer/Login.

6. Настройка Apache



В принципе apache уже работает можете зайти на свой адрес и проверить, выдаст он стандартную страницу приветствия. Все публичные файлы лежат в /var/www/. Но мне больше нравиться когда все хосты расположены в папках пользователей. Начинаем:

Создаем пользователя, лучше всего создавать пользователя с именем доменного имени например: доменное имя test.kz пользователь test_kz, точку в имени не используем так как debian ругается, и так:

#adduser test_kz


Задаем пароль и отвечаем на вопросы.

Теперь нужно создать директории log и www в директории пользователя.

#mkdir /home/test_kz/www

#mkdir /home/test_kz/log


Создаем index.html.

#echo ' SITE IS WORKS' >> /home/test_kz/www/index.html


меняем owner’a директории.

#chown -R test_kz:www-data /home/test_kz/


Меняем права доступа.

#chmod ug+rX /home/test_kz/


Далее идем будем настраивать виртуальные хосты. Идем в директорию /etc/apache2/sites-available/

#cd /etc/apache2/sites-available/


делаем копию дефолтной настройки виртуального хоста, имя виртуального хоста для test.kz обзываем также.

#cp default test.kz


Подправляем его, меняя лишь DocumentRoot и добавляя ServerName, ServerAlias если надо, и путь к логам хоста.

<VirtualHost *:80>
ServerAdmin admin@test.kz
ServerName test.kz
ServerAlias www.test.kz

DocumentRoot /home/test_kz/www/
<Directory />
Options FollowSymLinks
AllowOverride None

<Directory /home/test_kz/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all


ErrorLog /home/test_kz/log/error.log

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

CustomLog /home/test_kz/log/access.log combined



Теперь надо создать симлинк для этого хоста в папку /etc/apache2/sites-enabled.

Я пользуюсь утилиткой a2ensite, параметром передаем путь к конфигу, в нашем случае /etc/apache2/sites-available/test.kz

#a2ensite /etc/apache2/sites-available/test.kz


Утилитка просто создать симлинк в директории /etc/apache2/sites-enabled и попросит вас перезагрузить конфиги, еще и скажет как это сделать.

#/etc/init.d/apache reload


Если все путем, то перейдя по адресу test.kz (в моем случае) мы увидим сообщение SITE IS WORK.

Backend-FrontEnd побыстрее будет чем просто голый апач. Сразу же посадим apache на порт 8080.

#mcedit /etc/apache2/ports.conf


NameVirtualHost *:8080
Listen 8080


А также наш виртуальный хост.

#mcedit /etc/apache2/sistes-available/test.kz


<VirtualHost *:8080>


И закоментим все в файле /etc/apache2/sites-available/default.

Теперь можно создать пользователя mysql и базу данных для этого хоста.

Сделать это можно по разному, но я предпочитаю через sql скриптик. Создаем файл для скрипта.

#touch /tmp/create_db_test_kz.sql


Редактируем его.

#mcedit /tmp/create_db_test_kz.sql


Добавляем следующие строчки изменяя лишь имя пользователя и имя базы данных.

CREATE USER ‘имя пользователя’@’localhost’ IDENTIFIED BY ‘password’;
GRANT USAGE ON *.* TO ‘имя пользователя’@’localhost’ IDENTIFIED BY ‘password’;
CREATE DATABASE IF NOT EXISTS `имя базы данных`;
GRANT ALL PRIVILEGES ON `имя базы данных`.* TO ‘имя пользователя’@’localhost’;
flush privileges;

Что мы сделали.

  • 1 строчка создает пользователя
  • 2 строчка разрешает подключаться к mysql с паролем password
  • 3 строчка создает базу данных
  • 4 строчка назначает права пользователя для созданной базы данных, в моем случае, он может делать все что угодно
  • 5 строчка закрепление привилегий


Удаляем файл.

#rm /tmp/create_db_test_kz.sql


7.Настройка Nginx



Тут прийдеться попотеть, все конфиги я тщательно собирал по крупицам со многих сайтов, после каждой добавленой строчки проверял сервер под нагрузкой утилиткой ab, предварительно выложив контент, проверял на wordpress

Например:

#ab -n 200 -c 4 test.kz/


Эта строчка означает делаем 200 запросов в 4 потока к test.kz/

Итак сначало займемся /etc/nginx/nginx.conf.

user nginx;
worker_processes 5; #сколько дубликатов nginx

error_log /var/log/nginx/error.log warn; # логи ошибок только warning
pid /var/run/nginx.pid;
worker_rlimit_nofile 8192; # Изменяет ограничение на максимальное число открытых файлов (RLIMIT_NOFILE) для рабочих процессов. Используется для увеличения ограничения без перезапуска основного процесса.

events {
worker_connections 4096; #Общее максимальное количество обслуживаемых клиентов
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"'; # меняем формат логов

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;

client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

gzip_static on;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_comp_level 9;
gzip_types text/plain text/css text/xml application/x-javascript application/xml application/xhtml+xml;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

output_buffers 1 32k;
postpone_output 1460;

sendfile on; #Он позволяет отправить данные в сеть, минуя этап их копирования в адресное пространство приложения. Во многих случаях это существенно повышает производительность сервера, так что параметр sendfile лучше всегда включать.
tcp_nopush on;
tcp_nodelay on;

server_names_hash_bucket_size 128;

keepalive_timeout 75 20; отвечает за максимальное время поддержания keepalive-соединения

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


Далее настаиваем виртуальный хост созадем и правим файл /etc/nginx/sites.available/test.kz

server {

listen 80; # слушаем 80 порт
server_name test.kz; #имя сервера

access_log /home/test_kz/log/nginx.access.log main;#куда складываем ацесслоги

#Проксируем все запросы попадающие в корневую папку апачу

location / {
proxy_pass 127.0.0.1:8080;
proxy_redirect off;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 10m;
client_body_buffer_size 128k;
client_body_in_file_only on;
client_body_temp_path /tmp/client_body_temp 1 2;

proxy_connect_timeout 70;
proxy_send_timeout 90;
proxy_read_timeout 90;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

proxy_temp_path /tmp/proxy_temp;

root /home/test_kz/www;
index index.php;
}

location = /robots.txt { access_log off; log_not_found off; } # не ведем ацесслогов на файл robots.txt
location = /favicon.ico { access_log off; log_not_found off; }# не ведем ацесслогов на favicon.ico
location ~ /\. { access_log off; log_not_found off; deny all; }

error_page 404 /404.html;

location /404.html {
root /home/test_kz/www;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}

# Весь динамический контент передеаем апачу

location ~ \.php($|\/) {
proxy_pass 127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}

# Статикой будет занимац nginx

location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
access_log off;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
root /home/test_kz/www;
expires max;
}

#Видео проксируем апачу
location ~ \.flv$ {
proxy_pass 127.0.0.1:8080;
}

}


Создаем симлинк в директорию /etc/nginx/sites-enabled/

#ln - s /etc/nginx/sites-available/test.kz /etc/nginx/sites-enabled/


Ребутим все

#/etc/init.d/apache2 restart

#/etc/init.d/nginx restart

#/etc/init.d/apache2 zend-server restart

#/etc/init.d/mysql restart

Набираем в браузере адрес и любуемся


Я тут подумал почему бы не сделать эти все настройки автоматичскими, кароче наваял я тут 2 скрипта, в дальнейшем надеюсь их развивать.

Первый скрипт в диалоговой форме делает все что я описал, внимание, проверка была только на debian 6 (squeeze) и на debian 5 (lenny), подробности дистибутива в скрипте, также я использовал там функцию которая выводит цветные сообщения для наглядности, а так скрипт очень простой, на мысль создания этого скрипта меня натолкнул BitrixEnv для Linux, по идее взял бы его и не парился, но нет такого скрипта для debian, есть для cent-os,redhat,opensuse,fedora. Собственно сам скрипт, комментариями скрипт обогащен

install_lenny.sh.gz version 1.0.0

install_squeeze.sh.gz version 1.0.0

Второй скрипт создает файлы виртуального хоста с дефолтными настройками в nginx и в apache, все в диалоговой форме

create_site_lenny.sh.gz version 1.0.0

create_site_squeeze.sh.gz version 1.0.0

Ссылки

Просмотр http заголовков

Не оффициальные репозитории debian

Генератор репозиториев для Debian

Vsftpd

Огромное спасибо этой статье

Листинг всех директив nginx

Директивы HttpCoreModule nginx

Примеры конфигурации nginx

Учим bash

Статья будет дополняться, скприпты улучшаться, читаем, тестим, указываем на грешки
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх