new shs
This commit is contained in:
parent
c8e1d5046c
commit
3ca560c3e2
73
README.md
73
README.md
|
|
@ -16,13 +16,36 @@ chmod +x 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/
|
||||
├── universal_installer.sh # 🚀 Основной установщик
|
||||
├── fix_nginx_now.sh # 🔧 Быстрое исправление nginx
|
||||
├── app/ # 💻 Код приложения
|
||||
├── scripts/ # 🛠️ Утилиты и скрипты
|
||||
│ ├── setup_domain_ssl.sh # 🌐 Настройка домена и SSL
|
||||
│ ├── diagnose.sh # 🔍 Диагностика проблем
|
||||
│ └── ...
|
||||
├── deployment/ # 📦 Файлы развертывания
|
||||
├── docs/ # 📚 Документация
|
||||
└── ...
|
||||
|
|
@ -35,6 +58,7 @@ my-uploader-bot/
|
|||
- `env.example` - Пример переменных окружения
|
||||
|
||||
### 🛠️ scripts/
|
||||
- `setup_domain_ssl.sh` - Настройка домена и SSL
|
||||
- `diagnose.sh` - Диагностика проблем
|
||||
- `quick_check.sh` - Быстрая проверка статуса
|
||||
- `setup_*.sh` - Скрипты настройки компонентов
|
||||
|
|
@ -56,10 +80,14 @@ my-uploader-bot/
|
|||
|
||||
## 🌐 После установки
|
||||
|
||||
Сервер будет доступен на:
|
||||
### HTTP доступ:
|
||||
- `http://YOUR_SERVER_IP/api/health` - API 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
|
||||
|
|
@ -69,8 +97,11 @@ sudo systemctl status mynetwork
|
|||
# Перезапуск
|
||||
sudo systemctl restart mynetwork
|
||||
|
||||
# Логи
|
||||
# Логи приложения
|
||||
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
|
||||
|
||||
# Исправление 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+
|
||||
- ✅ 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`
|
||||
|
||||
## 🆘 Поддержка
|
||||
|
||||
Скрипт автоматически:
|
||||
|
|
@ -99,3 +167,4 @@ docker logs $(docker ps --format "{{.Names}}" | grep app | head -1)
|
|||
- Работает с разными 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