ublog

acme.sh && nginx на сервері Debian

other [17]linux [14]

Вітаю!

сьогодні у нас логічне продовження посту https://blog.clever-games.win/post/31
автоматизовуємо генерування сертифікатів від letsencrypt
updated


розпочнемо
заглянемо в документацію https://github.com/Neilpang/acme.sh

встановлення відбувається так
git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install

на всякий випадок встановимо ще дещо необхідне, і тицнемо встановлення ще раз
apt-get install socat
./acme.sh --install

далі створимо окремим файлом під назвою acme_http частину конфіга nginx
location ~ ^/(.well-known/acme-challenge/.*)$ {
  proxy_pass http://127.0.0.1:9999/$1;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

і так, я знаю що можна написати цей location і без "^...$", проте мені лінь поправляти
працює -- отже не лайно :)

підключаємо цей кусок конфіга у всіх server всіх субдоменів в конфігу nginx наступним чином
include acme_http;

підключати можна і де слухаємо 80 порт, і 443 (якщо ми оновляємо існуючий сертифікат без змін)

якщо ми ще й додаємо новий субдомен до ряду існуючих, можна прописати так
server{
  listen 80;
  server_name new.domain.win;
  include acme_http;
}

у моєму випадку (лінюся поправляти конфіги, тому зберігаю сертифікати туди ж, де лежать старі, згенеровані за допомогою certbot)
генерування відбувається таким чином
./acme.sh --issue --standalone --httpport 9999 -d clever-games.win -d blog.clever-games.win -d new.clever-games.win -d www.clever-games.win --certpath /etc/letsencrypt/live/clever-games.win/cert.pem --keypath /etc/letsencrypt/live/clever-games.win/privkey.pem --fullchainpath /etc/letsencrypt/live/clever-games.win/fullchain.pem;

для примусового генерування сертифікату раніше ніж через 60 днів до команди вище потрібно додати
 --force

напишемо скрипт для того щоб за допомогою crontab генерувати сертифікати заново щотижня
clevergames.sh
#!/bin/bash

./acme.sh --issue --standalone --httpport 9999 -d clever-games.win -d blog.clever-games.win -d new.clever-games.win -d www.clever-games.win --certpath /etc/letsencrypt/live/clever-games.win/cert.pem --keypath /etc/letsencrypt/live/clever-games.win/privkey.pem --fullchainpath /etc/letsencrypt/live/clever-games.win/fullchain.pem --force;

service nginx force-reload

для запуску скрипта від sudo --
sudo vim /etc/sudoers

додамо строчку (тут у нас erlang -- імя користувача)
erlang ALL=(root) NOPASSWD: /home/acme.sh/clevergames.sh

застосуємо зміни
sudo /etc/init.d/sudo restart

змінимо власника та встановимо права 755 на файл
sudo chown erlang:erlang -R /home/acme.sh
sudo chmod 0755 /home/acme.sh/clevergames.sh

створимо cron-завдання
sudo crontab -u root -e

і далі
5 0 * * 6 "sudo /home/acme.sh/clevergames.sh"

запуск з консолі для перевірки генерації сертифіката
sudo /home/acme.sh/clevergames.sh

от і все :)