new file: main_dc/certbot/documentation/docs.md

add cerbot documentation
This commit is contained in:
2025-12-03 06:55:31 +05:00
parent ff81cf165b
commit 49136e6529
+273
View File
@@ -0,0 +1,273 @@
# Документация по сервису 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 г.
---
*Документация будет обновляться при добавлении новых доменов или изменении архитектуры системы.*