Збираємо NGINX з вихідних файлів в Ubuntu

Збираємо NGINX з вихідних файлів в Ubuntu

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 перед командою.

 

Працює! Що й треба було.

На цьому на сьогодні все. Успіхів!