Files
tp/main_dc/certbot/documentation/docs.md
T
2025-12-03 06:55:31 +05:00

273 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Документация по сервису Certbot
*Последнее обновление: 3 декабря 2025 г.*
## Обзор
Сервис Certbot предназначен для автоматического получения и обновления SSL/TLS сертификатов Let's Encrypt для нескольких доменов в Docker-окружении. Сервис использует webroot-метод для подтверждения владения доменами и работает как автономный контейнер в составе Docker Compose стека.
## Архитектура
### Основные компоненты
1. **Контейнер Certbot** (`certbot/certbot` образ)
2. **Конфигурационные файлы**:
- `certbot.ini` - основные настройки Certbot
- `init-certbot.sh` - скрипт инициализации и запуска
- `checkRenewCerts.sh` - скрипт проверки и обновления сертификатов
- Индивидуальные скрипты обновления для каждого домена
3. **Cron-задачи** для автоматического обновления
4. **Volumes** для хранения сертификатов и данных
### Поддерживаемые домены
Текущий список обслуживаемых доменов (декабрь 2025):
| Домен | Переменная окружения | Назначение |
|-------|---------------------|------------|
| `yalarba.ru` | `DOMAINS_yalarba` | Основной туристический портал |
| `valitovgaziz.ru` | `DOMAINS_valitovgaziz` | Персональный сайт |
| `easysite102.ru` | `DOMAINS_easysite102` | Сайт туроператора |
| `бегущийбашкир.рф` (IDN) | `DOMAINS_begushiybashkir` | Спортивный портал (кириллица) |
| `begushiybashkir.ru` | `DOMAINS_begushiybashkir_latin` | Спортивный портал (латиница) |
## Конфигурация
### Файлы конфигурации
#### `certbot.ini`
```ini
# Режим staging (используется для тестирования)
staging = False # Для продакшена установить False
# Контактная информация
email = valitovgaziz@yandex.ru
# Согласие с условиями
agree-tos = True
# Неинтерактивный режим для автоматизации
non-interactive = True
# Путь для webroot-аутентификации
webroot-path = /var/www/certbot
# Настройки криптографии
key-type = ecdsa # Использовать ECDSA ключи
elliptic-curve = secp384r1 # Кривая для ECDSA
```
#### `docker-compose.yml` (фрагмент для certbot)
```yaml
certbot:
build:
context: ./certbot
dockerfile: Dockerfile
container_name: certbot
volumes:
- ./certbot/config:/etc/letsencrypt/config
- certbot_data:/etc/letsencrypt
- certbot_www:/var/www/certbot
env_file:
- .env
environment:
- EMAIL=${EMAIL}
- DOMAINS=${ALL_DOMAINS}
- STAGING=0
restart: unless-stopped
healthcheck:
test:
[
"CMD-SHELL",
"test -f /etc/letsencrypt/live/$$(echo $${DOMAINS} | cut -d',' -f1)/fullchain.pem || exit 1",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
### Переменные окружения
Необходимые переменные в `.env` файле:
```bash
# Общие настройки
EMAIL=valitovgaziz@yandex.ru
# Списки доменов (через запятую)
DOMAINS_yalarba=yalarba.ru,www.yalarba.ru
DOMAINS_valitovgaziz=valitovgaziz.ru,www.valitovgaziz.ru
DOMAINS_easysite102=easysite102.ru,www.easysite102.ru
DOMAINS_begushiybashkir=бегущийбашкир.рф,www.бегущийбашкир.рф
DOMAINS_begushiybashkir_latin=begushiybashkir.ru,www.begushiybashkir.ru
# Агрегированный список для инициализации
ALL_DOMAINS=yalarba.ru,valitovgaziz.ru,easysite102.ru,бегущийбашкир.рф,begushiybashkir.ru
```
## Рабочий процесс
### 1. Инициализация (`init-certbot.sh`)
При запуске контейнера выполняются следующие шаги:
1. Проверка наличия сертификатов для каждого домена
2. Получение недостающих сертификатов через webroot-метод
3. Активация cron-демона
4. Настройка ежедневной проверки сертификатов
5. Запуск бесконечного процесса для поддержания работы контейнера
### 2. Ежедневная проверка (`checkRenewCerts.sh`)
Каждый день в 00:00 выполняется проверка всех сертификатов:
1. Проверяется срок действия каждого сертификата
2. Если до истечения осталось ≤ 2 дней, запускается процесс обновления
3. Используется индивидуальный скрипт для каждого домена
### 3. Обновление сертификатов
Индивидуальные скрипты обновления:
- `renewYalarbaCert.sh` - для yalarba.ru
- `renewValitovGazizCert.sh` - для valitovgaziz.ru
- `renewEasysite102.sh` - для easysite102.ru
- `renewBegushiyBashkir.sh` - для бегущийбашкир.рф
- `renewBegushiyBashkirLatin.sh` - для begushiybashkir.ru
## Мониторинг и логи
### Health Checks
- Certbot: проверка наличия файла `fullchain.pem` для первого домена
- Логи доступны через `docker logs certbot`
### Структура каталогов
```
/etc/letsencrypt/
├── live/
│ ├── yalarba.ru/
│ │ ├── cert.pem
│ │ ├── chain.pem
│ │ ├── fullchain.pem
│ │ └── privkey.pem
│ ├── valitovgaziz.ru/
│ └── ...
├── archive/ # Архивные версии сертификатов
└── renewal/ # Конфигурации обновления
```
## Расширение системы
### Добавление нового домена
1. **Добавить переменную окружения** в `.env` файл:
```bash
DOMAINS_newdomain=newdomain.ru,www.newdomain.ru
```
2. **Обновить список всех доменов**:
```bash
ALL_DOMAINS=existing.domains,newdomain.ru
```
3. **Создать скрипт обновления** (`renewNewdomainCert.sh`):
```bash
#!/bin/sh
echo "Получаем новые сертификаты для ${DOMAINS_newdomain}"
certbot certonly --webroot \
--config /etc/letsencrypt/config/certbot.ini \
-w /var/www/certbot \
-d ${DOMAINS_newdomain}
```
4. **Обновить `init-certbot.sh`**:
```bash
# Проверяем наличие сертификатов для newdomain.ru
if [ ! -d "/etc/letsencrypt/live/newdomain.ru" ]; then
echo "Получаем новые сертификаты newdomain.ru ..."
certbot certonly --webroot \
--config /etc/letsencrypt/config/certbot.ini \
-w /var/www/certbot \
-d ${DOMAINS_newdomain}
fi
```
5. **Обновить `checkRenewCerts.sh`**:
Добавить новую функцию проверки и вызов в `main()`.
6. **Настроить nginx** для использования нового сертификата.
## Устранение неполадок
### Общие проблемы
1. **Ошибки при получении сертификатов**
- Проверить доступность доменов из контейнера
- Убедиться, что nginx обслуживает `.well-known/acme-challenge/`
2. **Сертификаты не обновляются**
- Проверить логи cron: `docker exec certbot cat /var/log/cron`
- Убедиться, что скрипты имеют права на выполнение
3. **Health check падает**
- Проверить наличие сертификатов в `/etc/letsencrypt/live/`
- Убедиться, что volumes правильно подключены
### Команды для диагностики
```bash
# Проверить статус контейнера
docker-compose ps certbot
# Посмотреть логи
docker logs certbot
# Проверить cron задачи
docker exec certbot crontab -l
# Проверить срок действия сертификата
docker exec certbot openssl x509 -in /etc/letsencrypt/live/yalarba.ru/cert.pem -noout -dates
# Запустить проверку вручную
docker exec certbot /opt/checkRenewCerts.sh
```
## Безопасность
### Рекомендации
1. **Приватные ключи**: Хранятся в volume `certbot_data`, доступ только для certbot и nginx
2. **Staging режим**: Для тестирования установить `staging = True` в `certbot.ini`
3. **Ротация ключей**: Используется ECDSA с кривой secp384r1 для лучшей безопасности
4. **Ограничение доступа**: Контейнер не имеет открытых портов
### Резервное копирование
Рекомендуется регулярное копирование volume `certbot_data`:
```bash
# Создание бэкапа
docker run --rm -v certbot_data:/data -v $(pwd):/backup alpine tar czf /backup/certbot_backup_$(date +%Y%m%d).tar.gz -C /data .
```
## Часто задаваемые вопросы
**Q: Как часто обновляются сертификаты?**
A: Проверка выполняется ежедневно, обновление - за 2 дня до истечения срока.
**Q: Что делать при добавлении поддомена?**
A: Добавить поддомен в соответствующую переменную `DOMAINS_*` и перезапустить контейнер.
**Q: Как перейти с staging на production?**
A: Установить `staging = False` в `certbot.ini` и перезапустить контейнер.
**Q: Как проверить работу cron?**
A: `docker exec certbot crontab -l` покажет активные задачи.
## Контакты и поддержка
- Ответственный за обслуживание: Valitov Gaziz
- Email: valitovgaziz@yandex.ru
- Дата последнего обновления документации: 3 декабря 2025 г.
---
*Документация будет обновляться при добавлении новых доменов или изменении архитектуры системы.*