пятница, 8 марта 2013 г.

Nginx + php5-fpm + mysql на Ubuntu Server 12.10 (NLPM)

Добрый день.

Решил попробовать настроить nginx + php5-fpm + mysql на Ubuntu Server 12.10 (NLPM).

Как же быстренько нам обзавестись таким сервером?

1. Поднимаем права до root:
$ sudo su
что бы каждый раз не вводить sudo перед каждой командой.

2. Установка nginx
Тут ничего сложного:
# apt-get install nginx
В данный момент в репах Ubuntu лежит версия nginx-1.2.1.

3. Установка php5-fpm
и прочих плюшек.
# apt-get install php5-cli \ # работа с php5 из терминала
php5-common \ # документация и примеры
php5-mysql \ # работа php4 с mysql
php5-suhosin \ # модули для вызова suhosin функций
php5-gd \ # для работы с изображениями
php5-fpm \ # php Реализация FastCGI
php5-cgi \ # реализация CGI
php-pear \ # репозиторий приложений и модулей php
php5-mcrypt \#
-y # соглашаемся со всем.

Сразу же необходимо устранить уязвимость PHP:
# nano /etc/php5/fpm/php.ini

Ищем строку:
;cgi.fix_pathinfo = 1

и изменяем ее до такого вида:
cgi.fix_pathinfo = 0

Изменим конфиг php5-fpm, что бы он слушал 9000 порт (пригодится нам дальше, можете выбрать любой другой порт).

# nano /etc/php5/fpm/pool.d/www.conf
Ищем строку listen = /var/run/php5-fpm.sock
и приводим к виду:
listen = 127.0.0.1:9000

Сохраняем изменения и перезапускаем php5-fpm:
# /etc/init.d/php5-fpm restart

4. Создадим пользователя для работы с виртуальным хостом.
Так как я собираюсь установить на все это дело Wordpress в будущем, то создадим пользователя с именем wp:
# useradd wp -b /home/ -m \ # Создадим каталог, если его нет
-U \ # Создадим группу с таким же именем, как имя юзера
-s /bin/false # Делаем так, что бы у данного пользователя не было консоли.

При создании данного пользователя. так же создалась одноименная группа wp.
Зададим пароль для нового пользователя:
# passwd wp
вводим дважды придуманный пароль.

Создадим необходимые, для работы WEB сайта, директории:
# mkdir -p \ # создать недостающие родительские каталоги, для каждого каталога
-m 755 \ # зададим права доступа для созданных каталогов
/home/wp/www
# mkdir -p -m 754 /home/wp/logs

Предоставляем пользовалею wp права на них:
# chown -R wp: /home/wp/www/
# chown -R wp: /home/wp/logs/

Предоставим nginx доступ в домашнюю директорию пользователя wp, добавив пользователя www-data в группу wp:
# usermod -a \ # добавить пользователя в дополнительную группу
-G wp www-data # имя групп(ы) в которые добавить


5. Создадим виртуальный хост nginx
Создадим виртуальный хост wp.org:
# nano /etc/nginx/conf.d/wp.org.conf

С содержимым:
(приводятся только базовые настройки, если нужны плюшки, гугл в помощь)
server {
    listen 80;
    root /home/wp/www;
    
    access_log    /home/wp/logs/nginx.access.log;

    server_name wp.org www.wp.org;

    location / {
        index index.php index.html index.htm;
    }
   
    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        include            fastcgi_params;
    }
}

Перезапустим nginx, чтобы изменения вступили в силу:
# /etc/init.d/nginx restart

6. Установка mysql.
# apt-get install mysql-server mysql-client
При установке введите пароль для root пользователя MySQL.

7. Тестируем работоспособность.
Создадим тестовый файл, чтобы проверить работоспособность PHP5:
# nano /home/wp/www/test.php

С содержимым:
<?php phpinfo();?>

ВАЖНО! так как я все это делаю на виртуальной машине, то мне необходимо с хост машины подключиться к домену wp.org, но так как я буду обращаться к реальному адресу wp.org. то нужно сделать небольшое изменение в хост системе.
Так как в данный момент моя хост система это Windows, то делаем так:

Открываем файл:
C:\Windows\System32\drivers\etc\hosts
и добавляем такие строки:

<IP-адрес виртуальной машины> wp.org
<IP-адрес виртуальной машины> www.wp.org

Теперь открываем свой любимый браузер и переходим по адресу:
wp.org/test.php
и видим радостную картину:

1 комментарий:

  1. прелесть fpm в том, что он может работать под разными пользователями для каждого вхоста. поэтому лучше не добавлять пользователя wp в группу www-data, а запускать pool от wp

    так же если fpm на том же сервере что и фронтенд, то лучше использовать сокет, как и указано в конфиге по-умолчанию.

    ОтветитьУдалить