initial commit
This commit is contained in:
132
02/02-k-git-server-deploy.08.sh
Executable file
132
02/02-k-git-server-deploy.08.sh
Executable file
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 8: ПОЛУЧЕНИЕ SSL-СЕРТИФИКАТА
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 02-k-git-server-deploy.08.sh
|
||||
#
|
||||
# Получает SSL-сертификат от Let's Encrypt через Certbot
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 8: ПОЛУЧЕНИЕ SSL-СЕРТИФИКАТА"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.1 Установка Certbot
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Установка Certbot"
|
||||
|
||||
install_packages certbot python3-certbot-nginx
|
||||
|
||||
print_success "Certbot установлен"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.2 Проверка DNS
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка DNS"
|
||||
|
||||
if ! check_dns; then
|
||||
print_error "Домен $GIT_DOMAIN не резолвится. Невозможно получить сертификат."
|
||||
echo ""
|
||||
echo "Проверьте DNS A-запись для $GIT_DOMAIN"
|
||||
echo "Она должна указывать на внешний IP этого сервера"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.3 Проверка доступности порта 80
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка доступности"
|
||||
|
||||
print_info "Проверка доступности http://$GIT_DOMAIN..."
|
||||
if curl -sI "http://$GIT_DOMAIN" | head -1 | grep -q "200\|301\|302"; then
|
||||
print_success "Сервер доступен по HTTP"
|
||||
else
|
||||
print_warning "Не удалось проверить доступность. Продолжаем..."
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.4 Проверка существующего сертификата
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка сертификата"
|
||||
|
||||
CERT_PATH="/etc/letsencrypt/live/$GIT_DOMAIN/fullchain.pem"
|
||||
|
||||
if [[ -f "$CERT_PATH" ]]; then
|
||||
print_warning "SSL-сертификат уже существует"
|
||||
|
||||
# Показать информацию о сертификате
|
||||
EXPIRE_DATE=$(openssl x509 -enddate -noout -in "$CERT_PATH" 2>/dev/null | cut -d= -f2)
|
||||
print_info "Текущий сертификат истекает: $EXPIRE_DATE"
|
||||
|
||||
read -p "Получить новый сертификат? [y/N]: " RENEW
|
||||
if [[ ! "$RENEW" =~ ^[Yy]$ ]]; then
|
||||
print_info "Используется существующий сертификат"
|
||||
print_success "Шаг 8 завершён (пропуск)"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.5 Получение сертификата
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Получение сертификата"
|
||||
|
||||
print_info "Email для Let's Encrypt: $CERT_EMAIL"
|
||||
print_info "Домен: $GIT_DOMAIN"
|
||||
|
||||
# Используем webroot метод (более надёжный)
|
||||
if certbot certonly --webroot \
|
||||
-w /var/www/certbot \
|
||||
-d "$GIT_DOMAIN" \
|
||||
--email "$CERT_EMAIL" \
|
||||
--agree-tos \
|
||||
--no-eff-email \
|
||||
--non-interactive; then
|
||||
|
||||
print_success "SSL-сертификат получен"
|
||||
else
|
||||
print_error "Не удалось получить сертификат"
|
||||
echo ""
|
||||
echo "Возможные причины:"
|
||||
echo " 1. DNS A-запись не указывает на этот сервер"
|
||||
echo " 2. Порт 80 заблокирован firewall"
|
||||
echo " 3. Nginx не запущен или неправильно настроен"
|
||||
echo ""
|
||||
echo "Проверьте:"
|
||||
echo " dig $GIT_DOMAIN"
|
||||
echo " curl -I http://$GIT_DOMAIN"
|
||||
echo " systemctl status nginx"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.6 Настройка автообновления
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Настройка автообновления"
|
||||
|
||||
systemctl enable certbot.timer
|
||||
systemctl start certbot.timer
|
||||
|
||||
print_success "Автообновление сертификатов настроено"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.7 Проверка сертификата
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка сертификата"
|
||||
|
||||
if [[ -f "$CERT_PATH" ]]; then
|
||||
print_success "Сертификат установлен: $CERT_PATH"
|
||||
|
||||
# Показать детали
|
||||
openssl x509 -subject -issuer -dates -noout -in "$CERT_PATH" 2>/dev/null
|
||||
else
|
||||
print_error "Сертификат не найден"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_success "Шаг 8 завершён: SSL-сертификат получен"
|
||||
Reference in New Issue
Block a user