Установка 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 комментариев