Files
configure_nginx_manager/wiki/LetsEncrypt_Workflow.md
Dmitriy Fofanov c6588a63ed
Синхронизация Wiki / Синхронизация Wiki (push) Successful in 2s
Релиз: архив исходников / Упаковка и публикация релиза (push) Failing after 2s
Update documentation for Let's Encrypt workflow and Nginx Proxy Manager integration
- Enhanced the Let's Encrypt Workflow documentation with detailed steps for creating and renewing wildcard SSL certificates using Nginx Proxy Manager.
- Added troubleshooting tips for API issues with reg.ru, including common errors and their resolutions.
- Expanded the Testing documentation to include comprehensive guides on using test certificates, automation scripts, and transitioning to production certificates.
- Revised Project Structure documentation to reflect the current organization of files and scripts.
- Improved clarity and formatting across all documentation sections for better readability and user guidance.
2026-02-25 01:51:45 +03:00

11 KiB
Raw Blame History

Алгоритм получения и продления сертификата

Эта страница описывает реальный алгоритм работы скрипта (по документации и текущему коду).

Получение сертификата (production / staging)

Команды:

  • production: --obtain
  • staging: --staging

Шаги:

  1. Проверка наличия certbot
  2. Формирование списка доменов для certbot:
    • всегда: <domain>
    • если wildcard=true: *.<domain>
  3. Запуск certbot certonly --manual --preferred-challenges dns
  4. Certbot вызывает hookи:
    • auth-hook: добавляет TXT запись _acme-challenge через API reg.ru
    • cleanup-hook: удаляет TXT запись
  5. После успеха сертификаты появляются в cert_dir/<domain>/:
    • privkey.pem, cert.pem, chain.pem, fullchain.pem
  6. (опционально) синхронизация в NPM
  7. (опционально) перезагрузка веб-сервиса (nginx/apache)

Про TXT для поддоменов

Если вы выпускаете сертификат для поддомена вида pages.github.example.com, TXT должен создаваться в зоне зарегистрированного домена example.com как:

  • _acme-challenge.pages.github.example.com

Скрипт учитывает это, выбирая зарегистрированный домен по списку доменов в конфиге.

Продление сертификата

Команда:

  • --renew

Скрипт запускает certbot renew для конкретного --cert-name <domain> и использует те же hookи (auth/cleanup) с корректным --config.

Авто-режим

Команда:

  • --auto

Логика по каждому домену из конфига:

  • если сертификата нет → получить новый
  • если срок меньше renewal_days → продлить
  • иначе → ничего не делать (опционально проверить наличие в NPM)

Возврат кода:

  • 0 — всё успешно
  • 1 — были ошибки

Где смотреть логи

  • Логи скрипта: путь log_file из конфига
  • Логи certbot: обычно /var/log/letsencrypt/letsencrypt.log
  • systemd: journalctl -u letsencrypt-regru -f

Appendix (migrated from docs/Создание и продление SSL сертификата.md)

Инструкция по созданию wildcard сертификата *.example.com в Nginx Proxy Manager и настройке автоматического продления SSL


Шаг 1. Подготовка

  • Убедитесь, что Nginx Proxy Manager (NPM) установлен и доступен по адресу http://192.0.2.1:81/
  • У вас есть доступ к DNS-записям домена example.com в панели управления reg.ru или у другого регистратора

Шаг 2. Создание Wildcard SSL сертификата в Nginx Proxy Manager

  1. Войдите в админку Nginx Proxy Manager по адресу http://192.0.2.1:81/

  2. Перейдите в раздел SSL Certificates → нажмите кнопку Add SSL Certificate

  3. Выберите пункт Let's Encrypt

  4. Заполните поля:

    • Domain Names:
      Введите *.example.com — для wildcard сертификата
      Также рекомендуется добавить основной домен example.com (через запятую или в новом поле)
    • Email Address:
      Укажите ваш Email для уведомлений от Let's Encrypt (обязательно)
    • HTTP Challenge:
      Оставьте проверку HTTP, если NPM доступен из интернета по порту 80 и 443, или настройте DNS Challenge если поддерживается вашим DNS
  5. Отметьте галочку "Agree to the Let's Encrypt Terms of Service"

  6. Нажмите Save

  • NPM начнёт процесс получения сертификата с проверкой домена.
  • При успешном запросе сертификата вы увидите новый сертификат в списке.

Шаг 3. Настройка автоматического продления

  • Nginx Proxy Manager автоматически заботится о продлении сертификатов Let's Encrypt.
  • Для этого сервер должен быть доступен из интернета по портам 80 и 443, и DNS-записи правильно указывать на ваш сервер.
  • NPM периодически (обычно за 30 дней до окончания) запрашивает обновление сертификата.
  • В случае использования DNS Challenge необходимо чтобы в NPM была настроена интеграция с DNS провайдером (если поддерживается).

Шаг 4. Использование wildcard сертификата в Proxy Hosts

  1. Перейдите в Proxy Hosts → Создайте или отредактируйте запись прокси

  2. В поле Domain Names укажите нужный поддомен из example.com, например:
    api.example.com или www.example.com

  3. В разделе SSL выберите ваш wildcard сертификат *.example.com, который вы получили на шаге 2

  4. Включите опции:

    • Use SSL
    • Force SSL
    • HSTS (при необходимости)
  5. Сохраните изменения.


Шаг 5. Проверка

  1. Проверьте, что для всех поддоменов используется единый сертификат
  2. Посетите https://api.example.com или другие поддомены из браузера
  3. Убедитесь, что сертификат валиден, не просрочен и выдан на *.example.com
  4. Проверяйте в разделе SSL Certificates статус продления сертификата

Дополнительно

  • Если Let's Encrypt не может выполнить HTTP Challenge из-за закрытого порта, настройте DNS Challenge (может потребоваться ключ API DNS провайдера)
  • Для безопасности и уведомлений держите Email в актуальном состоянии
  • Проверяйте логи Nginx Proxy Manager для выявления ошибок продления

Итог

Nginx Proxy Manager позволяет легко получать и автоматически обновлять wildcard SSL сертификаты для домена *.example.com с помощью Let's Encrypt.
Главное — правильно настроить DNS записи и обеспечить интернет доступ на HTTP/HTTPS порты.
Далее используйте один глобальный сертификат для всех ваших поддоменов через настройки Proxy Hosts.


Appendix (migrated from docs/Add Let's Encrypt Certificate для провайдера reg.ru.md)

Инструкция по созданию Let's Encrypt сертификата с DNS Challenge для провайдера reg.ru в Nginx Proxy Manager


Предпосылки

  • Доступ к Nginx Proxy Manager (NPM)
  • Доступ к аккаунту reg.ru с правами управления DNS-записями
  • API-ключ для управления DNS в reg.ru (если есть автоматическая интеграция)
  • Нужно получить сертификат для *.example.com (wildcard сертификат)

Шаг 1. Получение API-ключа для reg.ru

  1. Войдите в панель управления reg.ru
  2. Перейдите в раздел управления API (если поддерживается)
  3. Создайте или найдите API-ключ с правом редактирования DNS записей
  4. Сохраните API-ключ и секрет (Client ID и API Token)

Шаг 2. Настройка Nginx Proxy Manager для использования DNS Challenge reg.ru

  1. В админке NPM перейдите в SSL Certificates → Add SSL Certificate
  2. Выберите Let's Encrypt -> DNS Challenge
  3. В поле Provider выберите reg_ru или custom (если провайдера нет, потребуется писать скрипт)
  4. В поля API впишите необходимые параметры:
    • Client ID
    • API Token
  5. В поле Domain Names укажите:
    *.example.com (для wildcard сертификата)
    и основной домен example.com
  6. Включите остальные опции (Terms of Service, Email)
  7. Нажмите Save для запроса сертификата
  8. NPM автоматически добавит DNS TXT-записи для подтверждения владения доменом через API reg.ru

Шаг 3. Проверка и автоматическое продление

  • После успешного создания сертификата NPM будет автоматически обновлять его через DNS Challenge.
  • Для успешного продления важно, чтобы API-ключ был действующим, а NPM имел доступ к DNS управлению.

Если в NPM нет готовой интеграции с reg.ru

  • Используйте внешний скрипт для обновления TXT записей DNS в reg.ru, настраиваемый в NPM через Custom DNS Provider.
  • Нужна настройка curl-запросов к API reg.ru для добавления/удаления TXT записей.

Итог

Для wildcard сертификатов Let's Encrypt у reg.ru необходимо использовать DNS Challenge, используя API провайдера для автоматического управления DNS записями.
В Nginx Proxy Manager настройте DNS Challenge с учётом особенностей reg.ru для бесшовного получения и продления сертификатов.