Files
gitserver/02/02-k-git-server-deploy.09.sh
2026-02-19 20:05:04 +03:00

149 lines
5.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#===============================================================================
# ШАГ 9: АКТИВАЦИЯ HTTPS В NGINX
#===============================================================================
# Запуск: sudo bash 02-k-git-server-deploy.09.sh
#
# Заменяет HTTP конфигурацию на HTTPS с редиректом
#===============================================================================
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh"
init_log
check_root
print_header "ШАГ 9: АКТИВАЦИЯ HTTPS В NGINX"
#-------------------------------------------------------------------------------
# 9.1 Проверка сертификата
#-------------------------------------------------------------------------------
print_subheader "Проверка сертификата"
CERT_PATH="/etc/letsencrypt/live/$GIT_DOMAIN/fullchain.pem"
KEY_PATH="/etc/letsencrypt/live/$GIT_DOMAIN/privkey.pem"
if [[ ! -f "$CERT_PATH" ]] || [[ ! -f "$KEY_PATH" ]]; then
print_error "SSL-сертификат не найден!"
print_info "Сначала выполните шаг 08: bash 02-k-git-server-deploy.08.sh"
exit 1
fi
print_success "SSL-сертификат найден"
#-------------------------------------------------------------------------------
# 9.2 Создание HTTPS конфигурации
#-------------------------------------------------------------------------------
print_subheader "Создание HTTPS конфигурации"
# Backup текущей конфигурации
cp /etc/nginx/sites-available/gitea /etc/nginx/sites-available/gitea.http-only.bak
cat > /etc/nginx/sites-available/gitea << EOF
# Gitea Full Configuration (HTTP + HTTPS)
# HTTP -> HTTPS redirect
server {
listen 80;
listen [::]:80;
server_name $GIT_DOMAIN;
# Для Let's Encrypt challenge (важно для обновления сертификатов)
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# Редирект всего остального на HTTPS
location / {
return 301 https://\$server_name\$request_uri;
}
}
# HTTPS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name $GIT_DOMAIN;
# SSL сертификаты
ssl_certificate $CERT_PATH;
ssl_certificate_key $KEY_PATH;
# SSL настройки (современные стандарты)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
# Заголовки безопасности
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
# Проксирование в Gitea
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
# Таймауты для git операций
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
# Размер для больших push
client_max_body_size 100M;
}
# Логи
access_log /var/log/nginx/gitea.access.log;
error_log /var/log/nginx/gitea.error.log;
}
EOF
print_success "HTTPS конфигурация создана"
#-------------------------------------------------------------------------------
# 9.3 Проверка конфигурации
#-------------------------------------------------------------------------------
print_subheader "Проверка конфигурации"
if check_nginx_config; then
print_success "Конфигурация валидна"
else
print_error "Ошибка в конфигурации Nginx"
echo ""
echo "Восстановление HTTP-only конфигурации..."
mv /etc/nginx/sites-available/gitea.http-only.bak /etc/nginx/sites-available/gitea
exit 1
fi
#-------------------------------------------------------------------------------
# 9.4 Перезагрузка Nginx
#-------------------------------------------------------------------------------
print_subheader "Перезагрузка Nginx"
systemctl reload nginx
print_success "Nginx перезагружен"
#-------------------------------------------------------------------------------
# 9.5 Проверка HTTPS
#-------------------------------------------------------------------------------
print_subheader "Проверка HTTPS"
print_info "Проверка https://$GIT_DOMAIN..."
sleep 2
if curl -sI "https://$GIT_DOMAIN" | head -1 | grep -q "200\|301\|302"; then
print_success "HTTPS работает"
else
print_warning "Не удалось проверить HTTPS. Проверьте вручную."
fi
print_info "Веб-интерфейс доступен на: https://$GIT_DOMAIN"
print_success "Шаг 9 завершён: HTTPS активирован"