initial commit

This commit is contained in:
unknown
2026-02-19 20:05:04 +03:00
parent 1ee67d8159
commit 05097d5dda
32 changed files with 4413 additions and 3 deletions

132
02/02-k-git-server-deploy.08.sh Executable file
View 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-сертификат получен"