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

продовження попереднього поста
автоматизовуємо генерування сертифікатів від letsencrypt

спочатку встановимо дещо необхідне

apt-get install socat

далі заглянемо в документацію https://github.com/acmesh-official/acme.sh

встановлення відбувається так (рекомендується не під root)

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@gmail.com

далі створимо окремим файлом під назвою acme_http частину конфіга nginx

$ sudo vim /etc/nginx/acme_http

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 --server letsencrypt;

для примусового генерування сертифікату раніше ніж через 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 --server letsencrypt --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

Посилання

https://github.com/acmesh-official/acme.sh