Установка Nginx из исходников и сторонними модулями на Debian/Ubuntu с нуля

Прочее /
Установка Nginx из исходников и сторонними модулями на Debian/Ubuntu с нуля
Собственно нередко возникает ситуация когда есть чистый VPS на Debian (Ubuntu), только-только поднят на сервере. И нужно установит на нем nginx со сторонними модулями. Разумеется простой командой не обойтись и нужно все собирать из исходников. Задача тривиальная, но каждый раз приходиться что-то подсматривать в интернете, что бы освежить память.

Шаг 0. Удаление Apache2
Не знаю почему, но в стандартном образе моего хостера уже установлен апач. Разумеется он нам не нужен, поэтому мы его удаляем:
Начинаем с удаления всех компонентов
apt-get purge apache2 apache2-utils apache2.2-bin apache2-common

Затем удаляем все, что не удалилось с помощью прошлой команды:
apt-get autoremove

Ищем файлы, который остались от apache2 (папки, которые не удалились, файлы и т.д.):
whereis apache2

В ответе получим список директорий (в нашем случае одну /etc/apache2). Зайдем в них и посмотрим, нет ли там чего-то важного. Если нет, то удаляем командой:
rm -rf /etc/apache2

Все. Мы полностью избавились от Apache2 и теперь можем приступить к установке Nginx

Шаг 1. Обновляем репозиторий и устанавливаем требуемые библиотеки
Для начала обновим репозиторий. На моих VPS'ках он полностью пустой, поэтому без этого шага невозможно ничего установить:
apt-get update

А затем устанавливает пакеты, необходимые для сборки nginx из исходников
install build-essential libpcre3-dev libcurl4-openssl-dev gcc


Шаг 2. Скачиваем исходник Nginx и требуемые модули
Переходим в директорию, куда необходимо скачать исходник. Я буду делать в директории root:
cd /root

Качаем последнюю стабильную ветку на текущий момент:
wget http://nginx.org/download/nginx-1.6.0.tar.gz

И распаковываем:
tar -zxvf nginx-1.6.0.tar.gz

Теперь нам нужно скачать дополнительные модули для nginx, которые мы собираемся подключать при сборке. Многие модули доступны «из коробки» и не нужно скачивать ничего дополнительно. Но мне нужен модуль ngx_http_dav_ext_module. Который можно скачать вот тут: github.com/arut/nginx-dav-ext-module
Распаковываем эти файлы в директории рядом:
/root/nginx/nginx-webdav-ext


Шаг 3. Собираем nginx из исходников
Переходим в папку с исходниками nginx:
cd /root/nginx-1.6.0

Создаем в ней файл conf.sh со следующим содержимым:
./configure --sbin-path=/usr/local/sbin \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--user=www-data \
--group=www-data \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_mp4_module \
--with-http_flv_module \
--with-http_dav_module \
--with-http_secure_link_module \
--add-module=/root/nginx/nginx-webdav-ext/

Это наш конфиг для сборки, тут указаны какие модули подключать и с какими параметрами будет работать nginx. Наш сторонний модуль подключается командой:
--add-module=/root/nginx/nginx-webdav-ext/

По аналогии мы можем подключить и другие модули, нужно лишь указать путь до папки, где они лежат.

Устанавливаем права на созданный conf.sh файл:
chmod +rwx conf.sh

И запускаем его:
./conf.sh

После этого останется только собрать исходники командой
make

Однако в процессе сборки у меня произошла ошибка:
/root/nginx/nginx-webdav-ext//ngx_http_dav_ext_module.c:43:19: fatal error: expat.h: No such file or directory
compilation terminated.
make[1]: *** [objs/addon/nginx-webdav-ext/ngx_http_dav_ext_module.o] Error 1
make[1]: Leaving directory `/root/nginx-1.6.0'
make: *** [install] Error 2

Которая указывает что у меня нет хватает файла expat.h

Поставить необходимую библиотеку можно командой:
apt-get install libexpat1-dev

И теперь собираем и устанавливаем исходники с помощью команд:
make
make install

Вот и все. Мы только что собрали nginx из исходников с подключенными сторонними модулями. Но это ещё не все — осталось пару шагов, что бы все работало как часики.

Шаг 4. Добавляем Nginx в автозагрузку
При каждом перезапуске системы нам нужно что бы nginx запускался автоматически. Ну и для удобства что бы были доступны команды /etc/init.d/nginx restart / start / stop.
Создаем файл:
editor /etc/init.d/nginx

Со следующим содержимым:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

И делаем его исполняемым:
chmod +x /etc/init.d/nginx

Пробуем запускать:
/etc/init.d/nginx start

Если в ответ видим: Starting nginx: nginx. Тогда все отлично. Все работает

Осталось добавить nginx в автозапуск командой:
/usr/sbin/update-rc.d -f nginx defaults

Пробуем ребутать впску и проверять поднялся ли nginx автоматически. Все должно работать как часики

Вам останется только настроит Nginx, но это уже материал для отдельной статьи.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.