Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Скрипт первоначального получения SSL-сертификата Let's Encrypt.
- # Запускается ОДИН РАЗ на сервере перед первым деплоем.
- # После этого certbot-контейнер сам обновляет сертификат каждые 12 часов.
- set -e
- # Загружаем переменные из .env
- if [ -f .env ]; then
- set -a
- source .env
- set +a
- fi
- DOMAIN="${SERVER_NAME}"
- EMAIL="${CERTBOT_EMAIL}"
- if [ -z "$DOMAIN" ]; then
- echo "Ошибка: переменная SERVER_NAME не задана в .env"
- exit 1
- fi
- if [ -z "$EMAIL" ]; then
- echo "Ошибка: переменная CERTBOT_EMAIL не задана в .env"
- exit 1
- fi
- CERT_PATH="./certbot/conf/live/$DOMAIN"
- # 1. Создаём директории
- mkdir -p "$CERT_PATH"
- mkdir -p "./certbot/www"
- # 2. Создаём временный самоподписанный сертификат — чтобы nginx мог запуститься
- # до получения настоящего сертификата (nginx не стартует без cert-файлов)
- echo "### Создаём временный сертификат для $DOMAIN ..."
- openssl req -x509 -nodes -newkey rsa:2048 -days 1 \
- -keyout "$CERT_PATH/privkey.pem" \
- -out "$CERT_PATH/fullchain.pem" \
- -subj "/CN=$DOMAIN" 2>/dev/null
- cp "$CERT_PATH/fullchain.pem" "$CERT_PATH/chain.pem"
- # 3. Запускаем только nginx (остальные контейнеры запустим после)
- echo "### Запускаем nginx ..."
- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d nginx
- sleep 3
- # 4. Удаляем временный сертификат — certbot создаст правильную структуру сам
- # (nginx уже запущен и держит сертификат в памяти, удаление файлов безопасно)
- rm -rf "./certbot/conf/live/$DOMAIN"
- rm -rf "./certbot/conf/archive/$DOMAIN"
- rm -f "./certbot/conf/renewal/$DOMAIN.conf"
- # 5. Получаем настоящий сертификат от Let's Encrypt
- echo "### Получаем сертификат Let's Encrypt для $DOMAIN ..."
- docker compose -f docker-compose.yml -f docker-compose.prod.yml run --rm --entrypoint certbot certbot \
- certonly --webroot \
- --webroot-path=/var/www/certbot \
- --email "$EMAIL" \
- --agree-tos \
- --no-eff-email \
- --force-renewal \
- -d "$DOMAIN"
- # 6. Перезагружаем nginx с настоящим сертификатом
- echo "### Перезагружаем nginx ..."
- docker compose -f docker-compose.yml -f docker-compose.prod.yml exec nginx nginx -s reload
- echo ""
- echo "### Сертификат получен! Теперь запускай все контейнеры:"
- echo " docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d"
Advertisement
Add Comment
Please, Sign In to add comment