Guest User

Untitled

a guest
Feb 21st, 2026
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. #!/bin/bash
  2. # Скрипт первоначального получения SSL-сертификата Let's Encrypt.
  3. # Запускается ОДИН РАЗ на сервере перед первым деплоем.
  4. # После этого certbot-контейнер сам обновляет сертификат каждые 12 часов.
  5.  
  6. set -e
  7.  
  8. # Загружаем переменные из .env
  9. if [ -f .env ]; then
  10. set -a
  11. source .env
  12. set +a
  13. fi
  14.  
  15. DOMAIN="${SERVER_NAME}"
  16. EMAIL="${CERTBOT_EMAIL}"
  17.  
  18. if [ -z "$DOMAIN" ]; then
  19. echo "Ошибка: переменная SERVER_NAME не задана в .env"
  20. exit 1
  21. fi
  22.  
  23. if [ -z "$EMAIL" ]; then
  24. echo "Ошибка: переменная CERTBOT_EMAIL не задана в .env"
  25. exit 1
  26. fi
  27.  
  28. CERT_PATH="./certbot/conf/live/$DOMAIN"
  29.  
  30. # 1. Создаём директории
  31. mkdir -p "$CERT_PATH"
  32. mkdir -p "./certbot/www"
  33.  
  34. # 2. Создаём временный самоподписанный сертификат — чтобы nginx мог запуститься
  35. # до получения настоящего сертификата (nginx не стартует без cert-файлов)
  36. echo "### Создаём временный сертификат для $DOMAIN ..."
  37. openssl req -x509 -nodes -newkey rsa:2048 -days 1 \
  38. -keyout "$CERT_PATH/privkey.pem" \
  39. -out "$CERT_PATH/fullchain.pem" \
  40. -subj "/CN=$DOMAIN" 2>/dev/null
  41. cp "$CERT_PATH/fullchain.pem" "$CERT_PATH/chain.pem"
  42.  
  43. # 3. Запускаем только nginx (остальные контейнеры запустим после)
  44. echo "### Запускаем nginx ..."
  45. docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d nginx
  46. sleep 3
  47.  
  48. # 4. Удаляем временный сертификат — certbot создаст правильную структуру сам
  49. # (nginx уже запущен и держит сертификат в памяти, удаление файлов безопасно)
  50. rm -rf "./certbot/conf/live/$DOMAIN"
  51. rm -rf "./certbot/conf/archive/$DOMAIN"
  52. rm -f "./certbot/conf/renewal/$DOMAIN.conf"
  53.  
  54. # 5. Получаем настоящий сертификат от Let's Encrypt
  55. echo "### Получаем сертификат Let's Encrypt для $DOMAIN ..."
  56. docker compose -f docker-compose.yml -f docker-compose.prod.yml run --rm --entrypoint certbot certbot \
  57. certonly --webroot \
  58. --webroot-path=/var/www/certbot \
  59. --email "$EMAIL" \
  60. --agree-tos \
  61. --no-eff-email \
  62. --force-renewal \
  63. -d "$DOMAIN"
  64.  
  65. # 6. Перезагружаем nginx с настоящим сертификатом
  66. echo "### Перезагружаем nginx ..."
  67. docker compose -f docker-compose.yml -f docker-compose.prod.yml exec nginx nginx -s reload
  68.  
  69. echo ""
  70. echo "### Сертификат получен! Теперь запускай все контейнеры:"
  71. echo " docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d"
  72.  
Advertisement
Add Comment
Please, Sign In to add comment