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

148
02/02-k-git-server-deploy.09.sh Executable file
View File

@@ -0,0 +1,148 @@
#!/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 активирован"