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