SSL / TLS
SSL / TLS
HTTPS обязателен для:
- Telegram Bot webhook (требует HTTPS)
- Защиты персональных данных пользователей (152-ФЗ)
- HSTS в браузере
Вариант 1: Let’s Encrypt + certbot (рекомендуется)
Установка certbot
sudo apt install -y certbotПолучение сертификата (standalone, до запуска nginx)
Используется для первоначального получения сертификата, когда nginx ещё не запущен:
# Остановить nginx если запущенdocker compose -f /opt/terma-grand/repo/docker-compose.prod.yml stop proxy 2>/dev/null || true
# Получить сертификатsudo certbot certonly \ --standalone \ --preferred-challenges http \ -d termagrand.ru \ -d www.termagrand.ru \ --email admin@termagrand.ru \ --agree-tos \ --no-eff-email
# Сертификаты будут в:# /etc/letsencrypt/live/termagrand.ru/fullchain.pem# /etc/letsencrypt/live/termagrand.ru/privkey.pemПолучение сертификата (webroot, когда nginx уже работает)
sudo certbot certonly \ --webroot \ --webroot-path /var/www/certbot \ -d termagrand.ru \ -d www.termagrand.ru \ --email admin@termagrand.ru \ --agree-tos \ --no-eff-emailСоздать директорию:
sudo mkdir -p /var/www/certbotЗапуск proxy с SSL
После получения сертификата — запустить proxy-контейнер:
docker compose -f /opt/terma-grand/repo/docker-compose.prod.yml up -d proxynginx читает /etc/letsencrypt через volume-mount (настроено в docker-compose.prod.yml).
Автоматическое обновление сертификата
# Проверить обновление (dry-run)sudo certbot renew --dry-run
# Добавить в crontabcrontab -e# Обновление 2 раза в день (стандартная рекомендация certbot)0 12 * * * sudo certbot renew --quiet && docker compose \ -f /opt/terma-grand/repo/docker-compose.prod.yml exec proxy nginx -s reloadВариант 2: Yandex Certificate Manager
Альтернатива Let’s Encrypt — управляемые сертификаты Yandex Cloud.
Подходит если используете:
- Yandex Application Load Balancer (ALB)
- Yandex API Gateway
Для схемы с VM + Docker Compose — предпочтителен Let’s Encrypt.
Через YC CLI (для ALB)
# Создать managed-сертификатyc certificate-manager certificate request \ --name terma-grand-cert \ --domains termagrand.ru,www.termagrand.ru \ --challenge dns
# Получить CNAME для DNS-валидацииyc certificate-manager certificate get terma-grand-cert \ --full | grep challengeПроверка SSL
# Проверить цепочку сертификатовcurl -vI https://termagrand.ru/api/health 2>&1 | grep -E "SSL|TLS|certificate|issuer"
# Через opensslecho | openssl s_client -connect termagrand.ru:443 -servername termagrand.ru 2>/dev/null \ | openssl x509 -noout -dates