letsencrypt lexicon in docker - How To obtain SSL via cron for namecheap

Уже многие знают о вайлдкард, и многие используют бесплатные вайлдкард
сертификаты. Но есть пару вещей, с которыми жизнь ещё проще. Одна из них
Lexicon - штука объеденяющая многие хостинг
и днс провайдеры для единообразного управления ими. Обычно, в целях автоматизации
получения сертификатов.

Ссылки

Следуя ридми из letsencrypt-lexicon докера можно настроить всё что нужно просто изменив
параметры переменных окружения. У меня потребность в использовании простого и
известного способа получения вайлдкард ссл сертификатов для namecheap

Example Namecheap

Конечно, я не вписал токены как надо, и получил такую замечательную ошибку
error example

как видно, тут нет ничего о том, что я забыл вписать токены или ещё что-то…

И так, нам нужны токены = API Access

Read manaul

To enable API access, follow these steps on the appropriate environment:

  1. Login to your Namecheap account.
  2. Go to the Profile > Tools menu.
  3. Scroll down to the Business & Dev Tools section. Click MANAGE, next to Namecheap API Access.
  4. Toggle ON/OFF, read our Terms of Service, enter your account password.

After enabling API access, you will be allotted an APIUsername and APIKey. Your access to the API is authenticated using these elements.

And restrictions

OR

  • have at least 20 domains in your account;
  • have at least $50 on your account balance;
  • have at least $50 spent within last 2 years.

namecheap profile
namecheap profile

И так, мы видим ряд приятных ограничений, кроме того, мне пришлось просить
поддержку ускорить процесс (я прождал пару выходных), мне повезло, и я прошёл по
какому-то из пунктов.

И ещё, я пользовался этим делом на свой страх и риск, получив эти токены, софтина
легко может всё сломать (настройки днс, почта и т.д.), но, у меня обошлось без проблем

Создаём файлы для запуска команд

Я не хотел сильно рисковать, и настроил первым делом тестовый аккаунт летсенкрипт
(не сендбокс API чипы - оно категорически не подойдёт для получения сертификатов)
вам это не нужно будет, но с исторической точки зрения, вот файл ./test-run.sh:

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash
set -e
docker run --rm -it \
-v ${PWD}/test-data:/data \
-e STAGING=true \
-e EMAIL=my-secret-email+test-acc-1@gmail.com \
-e LEXICON_NAMECHEAP_USERNAME=tomfun \
-e LEXICON_NAMECHEAP_TOKEN=201927quien5Afei2vaem8choh0ooFah \
tomfun/lexicon-dehydrated-namecheap:latest \
$@

а вот для реальной жизни вам понадобится run.sh:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
set -e
docker run --rm -i \
-v ${PWD}/data:/data \
-e EMAIL=my-secret-email+test-acc-1@gmail.com \
-e LEXICON_NAMECHEAP_USERNAME=tomfun \
-e LEXICON_NAMECHEAP_TOKEN=201927quien5Afei2vaem8choh0ooFah \
tomfun/lexicon-dehydrated-namecheap:latest \
$@

как видно, создовать эти файлы и не нужно, можно просто помнить на память токен
и каждый раз вводить его ;)

Домены для получения сертификатов

для дегидрата нормой является файл, это очень удобно, ведь его можно сшаблонизировать
но я не стал этим заморачиваться, хотя есть и готовые сборки
у меня это выглядит так data/domains.txt:

1
tomfun.co *.tomfun.co

– одна строка = один сертификат (мне просто один нужен, можно добавить строчку
с другим доменом). Если вы хотите тестовые сертификаты, то путь
test-data/domains.txt содержит то же самое у меня

Получим новый аккаунт на letsencrypt через модный dehydrated

Конечно, я хотел использоваться старые сертификаты, и есть тулза для конвертации
но там есть некоторые сложности, и вообще, нафиг старые ключи, просто создадим акк

Register letsencrypt account, accept license/use terms

1
./run.sh /dehydrated --register --accept-terms

Получение новых сертификатов

неожиданно, но вот так:

1
./run.sh

Обновить сертификаты

а это правда неожиданно, но

1
./run.sh
Crontab

Как то так sudo crontab -e

1
0 0 * * 6 cd /archive/additional-space/letsencrypt && ./run.sh >> /secret-path/letsencrypt/log.log

Спасибо замечательному сайту для нубов вроде меня, которые не шарят как конфигурить крон
(не проверял, но верю)

Итого мы получили невероятно простой способ получения ССЛ вайлд кард сертификатов
(и обычных тоже) не через связку с нжинксом (веб рут и прочие режимы) а полнеценный
надёжный стендэлоун режим, как и сказано было раньше, простым добавлением новой строки
в известный файл, мы получаем новый сертификат по новому пути.
Почему не использовать готовые связки? - Ну, таким связкам надо давать
привелигированные права, а это решение простое как двери, и может запускаться на машине
за глубоким NATом, не имея прямого доступа к веб серверу.

docker всему голова!

P.S.

Ставьте лайки

Образ мне нужен был из-за банальной мелочи: оказывается, нужно поставить
дополнительные питоновские зависимости, иначе не взлетит, как мы видели, ошибки
тут user friendly