Путь юниксоида

Блог посвященный UNIX-подобным операционным системам.

Установка и настройка LNMP на CentOS, Debian и Gentoo

12 Июня 2013, 16:15, Ср | Комментарии

nginx to CentOS, Debian and Gentoo

Это руководство открывает серию материалов по установке известных систем управления содержимым (CMS) на веб-сервер nginx. В отдельную статью необходимо выделить общую часть, которая будет одинаковой для всех CMS, написанных на PHP (грубо говоря мы сделаем тот же LAMP, только вместо громоздкого и неповоротливого веб-сервера Apache у нас будет nginx). Задача данного руководства – установка веб-сервера nginx, системы управления базами данных MySQL и менеджера процессов FastCGI (FPM), а также их настройка.

* Конфигурация и установка отдельных CMS будут описаны в дополнительных материалах.

Установка и запуск nginx, MySQL, PHP-FPM (Linux, nginx, MySQL, PHP - LNMP)

Все приведенные ниже инструкции сначала были выполнены.
Небольшие пояснения:
- символ # (решётка) - означает выполнение команды от root (суперпользователя)
- cat /path/to/some.file - означает что ниже приведено полное содержимое файла some.file, расположенного в каталоге /path/to
- nano /path/to/some.file - означает что надо отредактировать часть файла как указанно
- в процессе установки MySQL будет произведена предварительная настройка и задан пароль root.

Gentoo:

1
2
# echo "dev-lang/php gd gd2 curl simplexml tokenizer dom tidy sqlite xml fpm cgi" >> /etc/portage/package.use
# emerge php nginx mysql

Вначале необходимо произвести начальную настройку MySQL:

1
# emerge --config dev-db/mysql

Debian:

1
2
3
4
# cat /etc/apt/sources.list.d/nginx.list
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx
# wget http://nginx.org/keys/nginx_signing.key && cat nginx_signing.key | apt-key add -
1
# apt-get install nginx php5-cli php5-common php5-fpm fcgiwrap mysql-server php5-mysql php5-gd

CentOS. Тут надо заметить, что в своих репозиториях CentOS нет nginx, поэтому добавим репозиторий:

1
2
3
4
5
6
7
# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
# yum update
1
# yum install nginx mysql mysql-server php-fpm php-cli php-mysql php-gd

Настроить MySQL:

1
2
# service mysql start
# /usr/bin/mysql_secure_installation

Управление сервисами MySQL, nginx, PHP-FPM и добавление их в автозагрузку:
Gentoo:

1
2
3
4
5
6
7
# /etc/init.d/nginx start
# /etc/init.d/mysql start
# /etc/init.d/php-fpm start

# rc-update add nginx default
# rc-update add mysql default
# rc-update add php-fpm default

Debian:

1
2
3
4
5
6
7
# /etc/init.d/nginx start
# /etc/init.d/mysql start
# /etc/init.d/php5-fpm start

# update-rc.d nginx defaults
# update-rc.d mysql defaults
# update-rc.d php5-fpm defaults

CentOS:

1
2
3
4
5
6
7
# service mysqld start
# service nginx start
# service php-fpm start

# chkconfig --levels 235 mysqld on
# chkconfig --levels 235 nginx on
# chkconfig --levels 235 php-fpm on

Сразу после установки nginx понимает только статические файлы, не исполняемые на сервере, и, если установка прошла успешно, запустив его можно проверить отображение «Welcome to nginx!» на localhost (127.0.0.1):

Welcome to nginx!

Впрочем может быть и так:

403 Forbidden

Это означает, что сервер не настроен.

Настройки по умолчанию подходят для большинства случаев и не требуют больших изменений на данном этапе. В различных дистрибутивах Linux настройки и месторасположение конфигурационных файлов могут различаться (также это замечание относится к использованию пакетов, установленных из репозиториев, отличных от основного), здесь всё зависит от поддерживающего пакет мейнтейнера.

Неизменным остаётся расположение файла настроек /etc/nginx/nginx.conf. Конфигурации сайтов, дополнительные параметры добавляются в него через опцию include. В Debian например сейчас конфигурации сайтов добавляются в стиле Apache (добавление конфигурации созданием симлинков):

1
2
3
4
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
...

В официальных репозиториях этого нововведения нет и конфигурации сайтов добавляются следующим образов:

1
2
3
...
include /etc/nginx/conf.d/*.conf;
...

То есть любой файл из каталога /etc/nginx/conf.d/ с расширением .conf будет добавлен. Если каталог /etc/nginx/conf.d - отсутствует, создайте его:

1
# mkdir /etc/nginx/conf.d

В include как правило присутствует конфигурация сайта по умолчанию, который как раз и выводит надпись «Welcome to nginx!» при обращении к localhost (127.0.0.1):

- Debian/Ubuntu - /etc/nginx/sites-enabled/default - Gentoo/CentOS - /etc/nginx/conf.d/default - Больше этот файл не нужен - удалите его.

Права на каталог сайтов

Создаем (если не существует) каталог для сайтов и устанавливаем права:

1
2
3
# mkdir -p /var/www/localhost
# chmod -R a-rwx,u+rwX,g+rX /var/www
# chown www-data:www-data -R /var/www

Владельцем каталога сайтов должен быть пользователь, от имени которого запущен и работает вэб-сервер. В Debian и Ubuntu это www‑data, в Gentoo, CentOS - пользователь nginx. В конфигурации за это отвечает директива user (nginx.conf):

1
2
3
user  www-data;
worker_processes  4;
...

При переносе сайта, а также чтобы был доступ к содержимому сайта у пользователей, входящих в группу www‑data необходимы корректные права на содержимое. Права на каталоги 775, на файлы 664:

1
2
# find /var/www -type d -exec chmod 775 {} +
# find /var/www -type f -exec chmod 664 {} +

И добавить себя в группу www‑data или nginx в зависимости от дистрибутива:

1
# usermod -a -G www-data username

Стандартная конфигурация nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Документация http://nginx.org/ru/docs/ngx_core_module.html
# Пользователь от которого работает вэб-сервер
# user nginx;
user www-data;
# Количество рабочих процессов = количество ядер*2 /рекомендуется
worker_processes 4;
pid /var/run/nginx.pid;

events {
   # Максимальное число соединений, которое одновременно
   # может открыть рабочий процесс
   worker_connections 768;
}

http {
   # Используем sendfile, но осторожно, если надо отдавать большие файлы,
   # то sendfile случается вредит
   sendfile on;
   # Ограничиваем размер сегмента отправляемой за одну блокируемую отдачу
   sendfile_max_chunk  128k;
   # Буфер отдачи который используется для обрабатываемых данных
   postpone_output  1460;
   # Размер хеша для доменных имен.
   server_names_hash_bucket_size 64;
   # Размер данных принимаемых post запросом
   client_max_body_size 15m;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;
   types_hash_max_size 2048;
   # Не говорим врагу версию nginx
   server_tokens off;
   include /etc/nginx/mime.types;
   default_type application/octet-stream;
   # Настройки логирования
   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;
   # Настройки компрессии
   gzip on;
   gzip_disable "msie6";
   gzip_vary on;
   gzip_proxied any;
   gzip_comp_level 6;
   gzip_buffers 16 8k;
   gzip_http_version 1.1;
   gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

   include /etc/nginx/conf.d/*.conf;
}

Подключение процесс менеджера PHP-FPM к веб-серверу

* Важно - дополнительные пояснения - FastCGI (PHP FPM) для nginx
* Связку nginx и PHP-FPM настраиваем на работу через unix сокет

Создадим новую конфигурацию для localhost:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# nano /etc/nginx/conf.d/localhost.conf
server {
   server_name localhost;
   # listen 192.168.0.120:80;
   listen 127.0.0.1:80;
   root /var/www/localhost;
   index index.php;

   location ~ [^/]\.php(/|$) {
      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      if (!-f $document_root$fastcgi_script_name) {
         return 404;
      }
      # fastcgi_pass 127.0.0.1:9000;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      include fastcgi_params;
   }
}

и тестовый php-файл в корне

1
2
3
4
# nano /var/www/localhost/index.php
<?php
phpinfo();
?>

Отредактируем конфигурацию PHP-FPM:

Gentoo:

1
# nano /etc/php/fpm-php5.4/php-fpm.conf

Debian:

1
# nano /etc/php5/fpm/pool.d/www.conf

CentOS:

1
# nano /etc/php-fpm.d/www.conf

Отредактируем в этом файле следующие переменные, listen:

1
2
3
4
5
...
; Note: This value is mandatory.
; listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock
...

user, group:
* В CentOS и Gentoo - nginx, Debian/Ubuntu - www‑data

1
2
3
4
5
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

* в этом файле комментариями является любой текст после символа ; (точка с запятой).

После чего перегружаем nginx и PHP-FPM.

Открываем браузер и заходим на localhost, в результате мы должны увидеть тестовую страницу PHP:

nginx phpinfo

Версия nginx на момент написания - стабильная - nginx/1.4.1, но это в репозитории самого nginx, в репозиториях дистрибутивов версии более ранние, и поэтому могут возникнуть небольшие нестыковки, например в openSUSE 12.3 - версия nginx/1.2.9 и это руководство почти полностью подходит, но необходимо использовать /etc/nginx/fastcgi_params отсюда.

Полезные ссылки:

nginx: http://nginx.org/ru/
nginx Wiki: http://wiki.nginx.org/nginxRu
PHP: http://www.php.net/
PHP-FPM: http://php-fpm.org/
MySQL: http://www.mysql.com/

Автор статьи zenon, и изначально он выкладывал её здесь. У себя я публикую статью с разрешения автора и с сохранением авторства.

Комментарии