new shs
This commit is contained in:
parent
c8e1d5046c
commit
3ca560c3e2
75
README.md
75
README.md
|
|
@ -16,13 +16,36 @@ chmod +x universal_installer.sh
|
||||||
sudo ./universal_installer.sh
|
sudo ./universal_installer.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 🌐 Настройка домена и HTTPS
|
||||||
|
|
||||||
|
После установки настройте домен и SSL сертификат:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Исправить nginx (если есть ошибки)
|
||||||
|
chmod +x fix_nginx_now.sh
|
||||||
|
sudo ./fix_nginx_now.sh
|
||||||
|
|
||||||
|
# 2. Настроить домен и SSL
|
||||||
|
chmod +x scripts/setup_domain_ssl.sh
|
||||||
|
sudo ./scripts/setup_domain_ssl.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Требования для SSL:**
|
||||||
|
- Домен должен быть направлен на IP сервера (A-запись в DNS)
|
||||||
|
- Порты 80 и 443 должны быть открыты
|
||||||
|
- Сервер должен быть доступен из интернета
|
||||||
|
|
||||||
## 📁 Структура проекта
|
## 📁 Структура проекта
|
||||||
|
|
||||||
```
|
```
|
||||||
my-uploader-bot/
|
my-uploader-bot/
|
||||||
├── universal_installer.sh # 🚀 Основной установщик
|
├── universal_installer.sh # 🚀 Основной установщик
|
||||||
|
├── fix_nginx_now.sh # 🔧 Быстрое исправление nginx
|
||||||
├── app/ # 💻 Код приложения
|
├── app/ # 💻 Код приложения
|
||||||
├── scripts/ # 🛠️ Утилиты и скрипты
|
├── scripts/ # 🛠️ Утилиты и скрипты
|
||||||
|
│ ├── setup_domain_ssl.sh # 🌐 Настройка домена и SSL
|
||||||
|
│ ├── diagnose.sh # 🔍 Диагностика проблем
|
||||||
|
│ └── ...
|
||||||
├── deployment/ # 📦 Файлы развертывания
|
├── deployment/ # 📦 Файлы развертывания
|
||||||
├── docs/ # 📚 Документация
|
├── docs/ # 📚 Документация
|
||||||
└── ...
|
└── ...
|
||||||
|
|
@ -35,6 +58,7 @@ my-uploader-bot/
|
||||||
- `env.example` - Пример переменных окружения
|
- `env.example` - Пример переменных окружения
|
||||||
|
|
||||||
### 🛠️ scripts/
|
### 🛠️ scripts/
|
||||||
|
- `setup_domain_ssl.sh` - Настройка домена и SSL
|
||||||
- `diagnose.sh` - Диагностика проблем
|
- `diagnose.sh` - Диагностика проблем
|
||||||
- `quick_check.sh` - Быстрая проверка статуса
|
- `quick_check.sh` - Быстрая проверка статуса
|
||||||
- `setup_*.sh` - Скрипты настройки компонентов
|
- `setup_*.sh` - Скрипты настройки компонентов
|
||||||
|
|
@ -56,10 +80,14 @@ my-uploader-bot/
|
||||||
|
|
||||||
## 🌐 После установки
|
## 🌐 После установки
|
||||||
|
|
||||||
Сервер будет доступен на:
|
### HTTP доступ:
|
||||||
- `http://YOUR_SERVER_IP/api/health` - API health check
|
- `http://YOUR_SERVER_IP/api/health` - API health check
|
||||||
- `http://YOUR_SERVER_IP/health` - Альтернативный health check
|
- `http://YOUR_SERVER_IP/health` - Альтернативный health check
|
||||||
|
|
||||||
|
### HTTPS доступ (после настройки домена):
|
||||||
|
- `https://your-domain.com/api/health` - API health check
|
||||||
|
- `https://your-domain.com/health` - Альтернативный health check
|
||||||
|
|
||||||
## 🛠️ Управление
|
## 🛠️ Управление
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
@ -69,8 +97,11 @@ sudo systemctl status mynetwork
|
||||||
# Перезапуск
|
# Перезапуск
|
||||||
sudo systemctl restart mynetwork
|
sudo systemctl restart mynetwork
|
||||||
|
|
||||||
# Логи
|
# Логи приложения
|
||||||
docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
||||||
|
|
||||||
|
# Логи nginx
|
||||||
|
sudo journalctl -u nginx -f
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🔍 Диагностика
|
## 🔍 Диагностика
|
||||||
|
|
@ -83,6 +114,25 @@ docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
||||||
|
|
||||||
# Полная диагностика
|
# Полная диагностика
|
||||||
./scripts/full_diagnosis.sh
|
./scripts/full_diagnosis.sh
|
||||||
|
|
||||||
|
# Исправление nginx
|
||||||
|
sudo ./fix_nginx_now.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔒 SSL и безопасность
|
||||||
|
|
||||||
|
После настройки SSL:
|
||||||
|
- Автоматическое перенаправление HTTP → HTTPS
|
||||||
|
- Автообновление сертификатов Let's Encrypt
|
||||||
|
- Безопасные заголовки HTTP
|
||||||
|
- Современные SSL протоколы
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверка сертификата
|
||||||
|
sudo certbot certificates
|
||||||
|
|
||||||
|
# Тест обновления
|
||||||
|
sudo certbot renew --dry-run
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📋 Поддерживаемые системы
|
## 📋 Поддерживаемые системы
|
||||||
|
|
@ -91,6 +141,24 @@ docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
||||||
- ✅ Debian 11+
|
- ✅ Debian 11+
|
||||||
- ✅ CentOS 8+ (адаптация)
|
- ✅ CentOS 8+ (адаптация)
|
||||||
|
|
||||||
|
## 🚨 Решение проблем
|
||||||
|
|
||||||
|
### Nginx ошибки:
|
||||||
|
```bash
|
||||||
|
sudo ./fix_nginx_now.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Контейнеры перезапускаются:
|
||||||
|
```bash
|
||||||
|
docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
||||||
|
./scripts/diagnose.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### SSL не работает:
|
||||||
|
- Проверьте DNS записи
|
||||||
|
- Убедитесь что порты 80/443 открыты
|
||||||
|
- Проверьте файрвол: `sudo ufw status`
|
||||||
|
|
||||||
## 🆘 Поддержка
|
## 🆘 Поддержка
|
||||||
|
|
||||||
Скрипт автоматически:
|
Скрипт автоматически:
|
||||||
|
|
@ -98,4 +166,5 @@ docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
||||||
- Адаптируется к разным именам контейнеров
|
- Адаптируется к разным именам контейнеров
|
||||||
- Работает с разными compose файлами
|
- Работает с разными compose файлами
|
||||||
- Создает резервные копии конфигураций
|
- Создает резервные копии конфигураций
|
||||||
- Показывает детальную диагностику при ошибках
|
- Показывает детальную диагностику при ошибках
|
||||||
|
- Настраивает SSL с автообновлением
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Быстрое исправление nginx конфигурации
|
||||||
|
# Исправляет ошибку "proxy_pass cannot have URI part in location given by regular expression"
|
||||||
|
|
||||||
|
echo "🔧 Исправление nginx конфигурации..."
|
||||||
|
|
||||||
|
# Резервная копия
|
||||||
|
sudo cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.backup.$(date +%s)
|
||||||
|
|
||||||
|
# Создание корректной конфигурации
|
||||||
|
sudo tee /etc/nginx/sites-available/default > /dev/null << 'EOF'
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
# Максимальный размер загружаемых файлов
|
||||||
|
client_max_body_size 100M;
|
||||||
|
|
||||||
|
# API проксирование (исправлено)
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://localhost:3000/api/;
|
||||||
|
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;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_send_timeout 60s;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
proxy_buffering off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Health check
|
||||||
|
location /health {
|
||||||
|
proxy_pass http://localhost:3000/api/health;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Альтернативные порты
|
||||||
|
location /api5000/ {
|
||||||
|
proxy_pass http://localhost:5000/;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
# WebSocket поддержка
|
||||||
|
location /ws/ {
|
||||||
|
proxy_pass http://localhost:3000/ws/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Основная страница
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost: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;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gzip сжатие
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_min_length 1024;
|
||||||
|
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Тестирование конфигурации
|
||||||
|
echo "🧪 Тестирование nginx..."
|
||||||
|
if sudo nginx -t; then
|
||||||
|
echo "✅ Конфигурация корректна"
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
echo "✅ Nginx перезагружен"
|
||||||
|
else
|
||||||
|
echo "❌ Ошибка в конфигурации!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🌐 Тестирование соединений:"
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
# Тест nginx proxy
|
||||||
|
if timeout 5 curl -s http://localhost/health > /dev/null 2>&1; then
|
||||||
|
echo "✅ nginx proxy (/health) - РАБОТАЕТ"
|
||||||
|
else
|
||||||
|
echo "❌ nginx proxy (/health) - НЕ РАБОТАЕТ"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if timeout 5 curl -s http://localhost/api/health > /dev/null 2>&1; then
|
||||||
|
echo "✅ nginx proxy (/api/health) - РАБОТАЕТ"
|
||||||
|
else
|
||||||
|
echo "❌ nginx proxy (/api/health) - НЕ РАБОТАЕТ"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Nginx исправлен! Теперь можно настроить домен и SSL:"
|
||||||
|
echo "sudo ./scripts/setup_domain_ssl.sh"
|
||||||
|
|
@ -0,0 +1,349 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# MY Network Domain & SSL Setup Script
|
||||||
|
# Настройка домена и SSL сертификата для MY Network
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "🌐 MY NETWORK DOMAIN & SSL SETUP"
|
||||||
|
echo "Настройка домена и HTTPS сертификата"
|
||||||
|
echo "=================================================="
|
||||||
|
|
||||||
|
# Проверка что скрипт запущен от root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "❌ Скрипт должен быть запущен от root (sudo)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Запрос домена
|
||||||
|
echo ""
|
||||||
|
echo "=== 1. НАСТРОЙКА ДОМЕНА ==="
|
||||||
|
read -p "🌐 Введите ваш домен (например: mynetwork.example.com): " DOMAIN
|
||||||
|
|
||||||
|
if [ -z "$DOMAIN" ]; then
|
||||||
|
echo "❌ Домен не может быть пустым!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Домен: $DOMAIN"
|
||||||
|
|
||||||
|
# Проверка DNS
|
||||||
|
echo ""
|
||||||
|
echo "=== 2. ПРОВЕРКА DNS ==="
|
||||||
|
echo "🔍 Проверяю DNS записи для $DOMAIN..."
|
||||||
|
|
||||||
|
DOMAIN_IP=$(dig +short $DOMAIN 2>/dev/null || echo "")
|
||||||
|
SERVER_IP=$(curl -s ifconfig.me 2>/dev/null || echo "")
|
||||||
|
|
||||||
|
echo "Домен $DOMAIN указывает на: $DOMAIN_IP"
|
||||||
|
echo "IP сервера: $SERVER_IP"
|
||||||
|
|
||||||
|
if [ "$DOMAIN_IP" != "$SERVER_IP" ]; then
|
||||||
|
echo "⚠️ ВНИМАНИЕ: DNS записи не совпадают!"
|
||||||
|
echo "Убедитесь что A-запись домена $DOMAIN указывает на $SERVER_IP"
|
||||||
|
read -p "Продолжить настройку? (y/N): " CONTINUE
|
||||||
|
if [ "$CONTINUE" != "y" ] && [ "$CONTINUE" != "Y" ]; then
|
||||||
|
echo "❌ Настройка отменена"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "✅ DNS записи корректны"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Установка Certbot
|
||||||
|
echo ""
|
||||||
|
echo "=== 3. УСТАНОВКА CERTBOT ==="
|
||||||
|
echo "📦 Установка Certbot для Let's Encrypt..."
|
||||||
|
|
||||||
|
apt update
|
||||||
|
apt install -y snapd
|
||||||
|
snap install core; snap refresh core
|
||||||
|
snap install --classic certbot
|
||||||
|
ln -sf /snap/bin/certbot /usr/bin/certbot
|
||||||
|
|
||||||
|
echo "✅ Certbot установлен"
|
||||||
|
|
||||||
|
# Исправление nginx конфигурации
|
||||||
|
echo ""
|
||||||
|
echo "=== 4. ИСПРАВЛЕНИЕ NGINX КОНФИГУРАЦИИ ==="
|
||||||
|
echo "🔧 Создание корректной nginx конфигурации..."
|
||||||
|
|
||||||
|
# Резервная копия
|
||||||
|
cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.backup.$(date +%s)
|
||||||
|
|
||||||
|
cat > /etc/nginx/sites-available/default << EOF
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $DOMAIN;
|
||||||
|
|
||||||
|
# Максимальный размер загружаемых файлов
|
||||||
|
client_max_body_size 100M;
|
||||||
|
|
||||||
|
# Let's Encrypt challenge
|
||||||
|
location /.well-known/acme-challenge/ {
|
||||||
|
root /var/www/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Redirect to HTTPS (будет добавлено после получения сертификата)
|
||||||
|
location / {
|
||||||
|
return 301 https://\$server_name\$request_uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Временная конфигурация для получения сертификата
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $DOMAIN;
|
||||||
|
|
||||||
|
location /.well-known/acme-challenge/ {
|
||||||
|
root /var/www/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# API проксирование (временно для тестирования)
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://localhost:3000/api/;
|
||||||
|
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;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_send_timeout 60s;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
proxy_buffering off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Health check
|
||||||
|
location /health {
|
||||||
|
proxy_pass http://localhost:3000/api/health;
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fallback на приложение
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost: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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Тестирование конфигурации
|
||||||
|
echo "🧪 Тестирование nginx конфигурации..."
|
||||||
|
nginx -t
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ Nginx конфигурация корректна"
|
||||||
|
systemctl reload nginx
|
||||||
|
else
|
||||||
|
echo "❌ Ошибка в nginx конфигурации!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Создание директории для Let's Encrypt
|
||||||
|
mkdir -p /var/www/html/.well-known/acme-challenge/
|
||||||
|
chown -R www-data:www-data /var/www/html/
|
||||||
|
|
||||||
|
# Получение SSL сертификата
|
||||||
|
echo ""
|
||||||
|
echo "=== 5. ПОЛУЧЕНИЕ SSL СЕРТИФИКАТА ==="
|
||||||
|
echo "🔒 Получение Let's Encrypt сертификата для $DOMAIN..."
|
||||||
|
|
||||||
|
# Остановка nginx для standalone режима
|
||||||
|
systemctl stop nginx
|
||||||
|
|
||||||
|
# Получение сертификата
|
||||||
|
certbot certonly --standalone \
|
||||||
|
--non-interactive \
|
||||||
|
--agree-tos \
|
||||||
|
--email admin@$DOMAIN \
|
||||||
|
--domains $DOMAIN
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ SSL сертификат получен успешно"
|
||||||
|
else
|
||||||
|
echo "❌ Ошибка получения SSL сертификата!"
|
||||||
|
systemctl start nginx
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Создание финальной HTTPS конфигурации
|
||||||
|
echo ""
|
||||||
|
echo "=== 6. НАСТРОЙКА HTTPS ==="
|
||||||
|
echo "🔒 Создание HTTPS конфигурации..."
|
||||||
|
|
||||||
|
cat > /etc/nginx/sites-available/default << EOF
|
||||||
|
# HTTP -> HTTPS redirect
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $DOMAIN;
|
||||||
|
|
||||||
|
# Let's Encrypt challenge
|
||||||
|
location /.well-known/acme-challenge/ {
|
||||||
|
root /var/www/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Redirect all other traffic to HTTPS
|
||||||
|
location / {
|
||||||
|
return 301 https://\$server_name\$request_uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# HTTPS server
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name $DOMAIN;
|
||||||
|
|
||||||
|
# SSL Configuration
|
||||||
|
ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
|
||||||
|
|
||||||
|
# SSL Security
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
|
||||||
|
ssl_prefer_server_ciphers off;
|
||||||
|
ssl_session_cache shared:SSL:10m;
|
||||||
|
ssl_session_timeout 10m;
|
||||||
|
|
||||||
|
# Security headers
|
||||||
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||||
|
add_header X-Frame-Options DENY always;
|
||||||
|
add_header X-Content-Type-Options nosniff always;
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
|
||||||
|
# Максимальный размер загружаемых файлов
|
||||||
|
client_max_body_size 100M;
|
||||||
|
|
||||||
|
# API проксирование
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://localhost:3000/api/;
|
||||||
|
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 https;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_send_timeout 60s;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
proxy_buffering off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Health check
|
||||||
|
location /health {
|
||||||
|
proxy_pass http://localhost:3000/api/health;
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto https;
|
||||||
|
}
|
||||||
|
|
||||||
|
# WebSocket поддержка (если нужна)
|
||||||
|
location /ws/ {
|
||||||
|
proxy_pass http://localhost:3000/ws/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto https;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Статические файлы (если есть web2-client)
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ @app;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fallback на приложение
|
||||||
|
location @app {
|
||||||
|
proxy_pass http://localhost: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 https;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gzip сжатие
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_min_length 1024;
|
||||||
|
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Тестирование финальной конфигурации
|
||||||
|
echo "🧪 Тестирование HTTPS конфигурации..."
|
||||||
|
nginx -t
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ HTTPS конфигурация корректна"
|
||||||
|
systemctl start nginx
|
||||||
|
systemctl reload nginx
|
||||||
|
else
|
||||||
|
echo "❌ Ошибка в HTTPS конфигурации!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Настройка автообновления сертификата
|
||||||
|
echo ""
|
||||||
|
echo "=== 7. АВТООБНОВЛЕНИЕ СЕРТИФИКАТА ==="
|
||||||
|
echo "🔄 Настройка автообновления SSL сертификата..."
|
||||||
|
|
||||||
|
# Создание скрипта обновления
|
||||||
|
cat > /etc/cron.d/certbot-renew << EOF
|
||||||
|
# Автообновление Let's Encrypt сертификатов
|
||||||
|
0 12 * * * root certbot renew --quiet --nginx --post-hook "systemctl reload nginx"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "✅ Автообновление настроено"
|
||||||
|
|
||||||
|
# Финальное тестирование
|
||||||
|
echo ""
|
||||||
|
echo "=== 8. ФИНАЛЬНОЕ ТЕСТИРОВАНИЕ ==="
|
||||||
|
echo "🧪 Тестирование HTTPS соединения..."
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Тест HTTPS
|
||||||
|
if curl -s --max-time 10 https://$DOMAIN/health > /dev/null 2>&1; then
|
||||||
|
echo "✅ HTTPS работает: https://$DOMAIN/health"
|
||||||
|
else
|
||||||
|
echo "⚠️ HTTPS может быть недоступен (проверьте DNS и файрвол)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Тест API
|
||||||
|
if curl -s --max-time 10 https://$DOMAIN/api/health > /dev/null 2>&1; then
|
||||||
|
echo "✅ API работает: https://$DOMAIN/api/health"
|
||||||
|
else
|
||||||
|
echo "⚠️ API может быть недоступен"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=================================================="
|
||||||
|
echo "🎉 НАСТРОЙКА ДОМЕНА И SSL ЗАВЕРШЕНА!"
|
||||||
|
echo "=================================================="
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🌐 ВАШ САЙТ ДОСТУПЕН ПО АДРЕСУ:"
|
||||||
|
echo "https://$DOMAIN"
|
||||||
|
echo "https://$DOMAIN/api/health"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔒 SSL ИНФОРМАЦИЯ:"
|
||||||
|
echo "Сертификат: /etc/letsencrypt/live/$DOMAIN/fullchain.pem"
|
||||||
|
echo "Ключ: /etc/letsencrypt/live/$DOMAIN/privkey.pem"
|
||||||
|
echo "Автообновление: настроено (ежедневно в 12:00)"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🛠️ УПРАВЛЕНИЕ:"
|
||||||
|
echo "Проверка сертификата: certbot certificates"
|
||||||
|
echo "Ручное обновление: certbot renew --nginx"
|
||||||
|
echo "Тест обновления: certbot renew --dry-run"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔍 ПРОВЕРКА СТАТУСА:"
|
||||||
|
echo "curl -I https://$DOMAIN/health"
|
||||||
|
echo "curl -I https://$DOMAIN/api/health"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ MY Network готов к работе по HTTPS!"
|
||||||
Loading…
Reference in New Issue