Встановлення та налаштування сertbot для роботи з OpenResty
Шлях покращення продуктивності магазину на Magento 2 привів мене до веб-серверу OpenResty. Що воно таке? Це повноцінний сервер веб-додатків, який об’єднує веб-сервер nginx з мовою програмування Lua. Іншими словами покращенний nginx, який у своїй інсталяції навіть має відповідний бінарник. Але тут таки і проблема, менеджер пакетів apt в Debian не бачить встановленого nginx, але має його в залежностях наприклад для системи отримання SSL-сертифікатів certbot (точніше для додаткового функціоналу у вигляді python-certbot-nginx). При спробі встановлювати або оновлювати certbot, система буде намагатись встановити оригінальний nginx з репозиторію, чого б нам зовсім не хотілось. Офіційно, якщо шо, OpenResty не підтримується certbot-ом, але ми спробуємо розрулити ситуацію. Go.
Cпочатку встановимо certbot без встановлення nginx. Ідея проста - спочатку створюємо фейковий пакет nginx і прописуємо йому версію, якої оригінальний пакет не досягне ще досить довго. Встановлюємо фейковий nginx і при подальших спробах його оновити будемо отримувати повідомлення, що найновіша версія вже встановлена. Вуаля.
Для створення фейкових пакетів використовуємо equivs.
apt install equivs
Тепер створюємо шаблон для фейкового пакету:
equivs-control nginx
В поточній директорії повинен з’явитись файл nginx, який після редагування набуде наступного виду (зайві рядки можна залишити закоментованими або ж видалити):
Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: nginx
Version: 9.99
Maintainer: Your Name <yourname@example.com>
Architecture: all
Description: A fake package that doesn't really install NGINX.
Звертаю увагу на версію 9.99 завдяки якій і буде відбуватись магія з ігноруванням оновлень.
Після цього створюємо пакет
equivs-build nginx
Тепер встановлюємо наш фейковий nginx
dpkg -i nginx_9.99_all.deb
Нарешті спробуємо встановити certbot
apt install certbot python-certbot-nginx
Якщо на попередніх етапах все зроблено вірно, то інсталяція завершиться успішно, додаткову установку nginx буде проігноровано.
Далі ви ймовірно захочете оновити або отримати ssl-сертифікати (тут написано як це зробити), але отримаєте помилку nginx restart failed. Це тому, що certbot-у невідомо, де шукати nginx і його конфігураційні файли. Виправити це доволі легко в файлі /etc/letsencrypt/cli.ini
#nginx-server-root = /usr/local/openresty/nginx/conf
nginx-ctl = /usr/local/openresty/nginx/sbin/nginx
В моєму випадку конфіги залишилися в типовій директорії /etc/nginx, тому я закоментував nginx-server-root, але може бути інакше, тому зважайте на це.
Після цього можна оновлювати сертифікати (хоча ви і надалі будете отримувати попередження, що OpenResty офіційно не підтримується розробником).
Посилання
- https://community.letsencrypt.org/t/certbot-insists-on-installing-apts-nginx-over-my-custom-built-one/120642/12
- https://shallowsky.com/blog/linux/install/blocking-deb-dependencies.html
- https://nicola.entidi.com/post/configuring-certbot-nginx-for-openresty/
- https://unsplash.com/photos/hummingbird-perching-on-branch-QifvZqd5akk?utm_content=creditShareLink&utm_medium=referral&utm_source=unsplash