
Збираємо NGINX з вихідних файлів в Ubuntu
25.03.2021 16:33 | Інше
OS: Ubuntu 18.04
Фактично, встановити nginx можна за допомогою двох рядків:
sudo apt update
sudo apt install nginx
що, власне, я колись і зробив на своєму робочому столі. А ось на лептопі вирішив поекспериментувати.
Збірка та інсталяція
Для початку оновимо списки пакетів і репозиторіїв:
sudo apt-get update
Наступний крок - завантаження віхідних файлів nginx. Для цього заходимо на сайт nginx у секцію download, оскільки я буду інсталювати сервер на ноутбук (читайте, локальну машину), я завантажу Mainline version, в інших випадках надав би перевагу Stable). Тиснемо на посилання правою клавішею миші, копіюємо посилання та зберігаємо у будь-яку теку (поточна версія nginx-1.19.8, у Вас версія може відрізнятися):
wget http://nginx.org/download/nginx-1.19.8.tar.gz
та розпакуваємо (в ту ж теку):
tar -zxvf nginx-1.19.8.tar.gz
Після цього ми повинні побачити директорію з вихідними файлами:
$ ll
drwxr-xr-x 8 serhii75 serhii75 4096 бер 9 17:27 nginx-1.19.8/
-rw-rw-r-- 1 serhii75 serhii75 1060155 бер 9 17:32 nginx-1.19.8.tar.gz
Команди будемо запускати від імені root, тож виконаємо:
sudo su
Переходимо в nginx-1.19.8 (знову ж таки у Вас може бути інша версія) і спробуємо сконфігурувати збірку:
# cd nginx-1.19.8/
nginx-1.19.8# ./configure
Якщо отримали помилку про те, що компілятор С не знайдений:
./configure: error: C compiler cc is not found
...запустіть команду:
# sudo apt-get install build-essential
Хоча з проблемою вище в цей раз не стикався, але отримав іншу помилку:
./configure: error: the HTTP rewrite module requires the PCRE library.
Тобто відсутня бібліотека для регулярних виразів (Perl Compatible Regular Expressions). Насправді, запускаючи ./configure
, ми побачили чого не вистачає. Що ж, встановимо необхідну бібліотеку:
sudo apt-get install libpcre3 libpcre3-dev
...а також бібліотеки для компрессії і ssl:
sudo ap-get zlib1g zlib1g-dev libssl-dev
Знову запускаємо ./configure
і на цей раз ніяких помилок не повинно бути. Подивитися усі можливі опції конфігурації можна так:
# ./configure --help
Переглянути ж детальну інформацію щодо кожної опції можна тут. Ми додамо кілька з них:
- --sbin-path=путь - задає ім'я файлу, який використовується для запуску / зупинки сервісу nginx
- --conf-path=путь -задає ім'я конфігураційного файлу nginx.conf
- --error-log-path=путь -задає ім'я основного файлу помилок, попереджень і діагностики
- --http-log-path=путь - задає ім'я основного файлу реєстрації запитів HTTP-сервера
- --with-pcre - дозволяє використання бібліотеки PCRE
- --pid-path=путь - задає ім'я файлу nginx.pid, в якому буде зберігатися номер головного процесу
- --with-http_ssl_module - дозволяє збірку модуля для роботи HTTP-сервера по протоколу HTTPS
В підсумку команда виглядатиме так:
# ./configure --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module
Запускаємо, і після завершення можемо компілювати:
# make
Після того, як компіляція буде завершена, інсталюємо:
# make install
Перевіряємо, чи пройшла успішно установка (після виконання команди побачимо приблизно наступне):
# nginx -V
nginx version: nginx/1.19.8
built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
built with OpenSSL 1.1.1 11 Sep 2018
TLS SNI support enabled
configure arguments: --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module
Запускаємо nginx:
# nginx
Перевіряємо, чи запущений процес:
# ps aux | grep nginx
root 8186 0.0 0.0 32960 808 ? Ss 21:45 0:00 nginx: master process nginx
nobody 8187 0.0 0.0 37780 3572 ? S 21:45 0:00 nginx: worker process
root 8198 0.0 0.0 15936 1016 pts/0 S+ 21:45 0:00 grep --color=auto nginx
І, якщо перевіримо в браузері набравши localhost, то побачимо "Welcom to nginx!".
Створюємо системний сервіс
Сервіс дозволить не тільки запускати і зупиняти nginx, але так само стартувати nginx при завантаженні / перезавантаженні системи. Йдемо сюда, і переходимо по посиланню NGINX Systemd service file в секції Systemd. Як і сказано в інструкції, створюємо файл:
nano /lib/systemd/system/nginx.service
І копіюємо в нього вміст з посилання вище.
Важливо: зверніть увагу, що ми змінили рядок з PIDFile
, прописавши шлях, який вказували при конфігуруванні. Матимемо такий файл:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Запускаємо nginx:
systemctl start nginx
І перевіряємо чи є процес:
# ps aux | grep nginx
root 9564 0.0 0.0 32960 804 ? Ss 22:07 0:00 nginx: master process /usr/sbin/nginx
nobody 9565 0.0 0.0 37780 3556 ? S 22:07 0:00 nginx: worker process
root 9568 0.0 0.0 15936 992 pts/0 S+ 22:07 0:00 grep --color=auto nginx
Судячи з відповіді все в порядку. Оскільки тепер у нас є сервіс, ми можемо подивитися статус nginx, використовуючи команду:
# systemctl status nginx
що дасть нам більше інформації:
# systemctl status nginx
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2021-03-25 22:07:33 EET; 11min ago
Process: 9563 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 9562 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Main PID: 9564 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
├─9564 nginx: master process /usr/sbin/nginx
└─9565 nginx: worker process
бер 25 22:07:33 serhii75-laptop systemd[1]: Starting The NGINX HTTP and reverse proxy server...
бер 25 22:07:33 serhii75-laptop nginx[9562]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
бер 25 22:07:33 serhii75-laptop nginx[9562]: nginx: configuration file /etc/nginx/nginx.conf test is successful
бер 25 22:07:33 serhii75-laptop systemd[1]: Started The NGINX HTTP and reverse proxy server.
На даний момент, після перезавантаження машини, nginx не буде запущений, що, очевидно, погано для веб-сервера. Тому зробимо так, щоб nginx "заводився" після ребуту.
Зупинимо сервіс:
# systemctl stop nginx
І виконаємо:
systemctl enable nginx
Після чого повинні побачити запис про те, що було створено символічне посилання:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
Перезавантажуємо лептоп, відкриваємо консоль і перевіряємо чи запущений nginx:
$ sudo systemctl status nginx
[sudo] password for serhii75:
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-03-25 22:37:50 EET; 35s ago
Process: 2006 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 1991 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Main PID: 2010 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
├─2010 nginx: master process /usr/sbin/nginx
└─2011 nginx: worker process
бер 25 22:37:50 serhii75-laptop systemd[1]: Starting The NGINX HTTP and reverse proxy server...
бер 25 22:37:50 serhii75-laptop nginx[1991]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
бер 25 22:37:50 serhii75-laptop nginx[1991]: nginx: configuration file /etc/nginx/nginx.conf test is successful
бер 25 22:37:50 serhii75-laptop systemd[1]: Started The NGINX HTTP and reverse proxy server.
Примітка: оскільки ми тепер не під root-ом, знадобиться додавати sudo
перед командою.
Працює! Що й треба було.
На цьому на сьогодні все. Успіхів!