This commit is contained in:
user 2025-07-05 20:42:58 +03:00
parent 597066b28a
commit 4ec12873bd
2 changed files with 280 additions and 0 deletions

76
check_app_status.sh Normal file
View File

@ -0,0 +1,76 @@
#!/bin/bash
# Проверка статуса приложения и настройка домена
echo "🔍 ДИАГНОСТИКА ПРИЛОЖЕНИЯ И ДОМЕНА"
DOMAIN="my-public-node-3.projscale.dev"
echo ""
echo "=== 1. СТАТУС КОНТЕЙНЕРОВ ==="
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "=== 2. ПРОВЕРКА ПОРТОВ ПРИЛОЖЕНИЯ ==="
for port in 3000 5000; do
if timeout 5 curl -s http://localhost:$port/api/health > /dev/null 2>&1; then
echo "✅ Port $port: РАБОТАЕТ"
else
echo "❌ Port $port: НЕ РАБОТАЕТ"
fi
done
echo ""
echo "=== 3. ЛОГИ ПРИЛОЖЕНИЯ ==="
APP_CONTAINER=$(docker ps --format "{{.Names}}" | grep -E "(app|uploader)" | head -1)
if [ -n "$APP_CONTAINER" ]; then
echo "📄 Логи $APP_CONTAINER (последние 10 строк):"
docker logs --tail=10 "$APP_CONTAINER" 2>&1
else
echo "❌ Контейнер приложения не найден"
fi
echo ""
echo "=== 4. ПРОВЕРКА NGINX ДЛЯ ДОМЕНА ==="
echo "🌐 Домен: $DOMAIN"
# Проверка текущей конфигурации nginx
echo "Текущая конфигурация server_name:"
sudo grep -E "server_name|listen" /etc/nginx/sites-enabled/default
echo ""
echo "=== 5. ТЕСТ СОЕДИНЕНИЯ ПО ДОМЕНУ ==="
# HTTP тест
if timeout 10 curl -I http://$DOMAIN/health 2>/dev/null | head -1; then
echo "✅ HTTP работает"
else
echo "❌ HTTP не работает"
fi
# HTTPS тест
if timeout 10 curl -k -I https://$DOMAIN/health 2>/dev/null | head -1; then
echo "✅ HTTPS работает"
else
echo "❌ HTTPS не работает (SSL не настроен)"
fi
echo ""
echo "=== 6. РЕКОМЕНДАЦИИ ==="
# Проверка что приложение работает
LOCAL_WORKS=$(curl -s --max-time 5 http://localhost:3000/api/health > /dev/null 2>&1 && echo "yes" || echo "no")
if [ "$LOCAL_WORKS" = "yes" ]; then
echo "✅ Приложение работает локально"
echo "🔧 Нужно настроить SSL для домена $DOMAIN"
echo ""
echo "Выполните:"
echo "sudo ./setup_ssl_for_domain.sh"
else
echo "❌ Приложение не работает локально"
echo "🔧 Сначала нужно исправить приложение"
echo ""
echo "Выполните:"
echo "docker-compose -f deployment/docker-compose.production.yml restart app"
echo "docker logs \$(docker ps --format \"{{.Names}}\" | grep app | head -1)"
fi

204
setup_ssl_for_domain.sh Normal file
View File

@ -0,0 +1,204 @@
#!/bin/bash
# Настройка SSL для конкретного домена my-public-node-3.projscale.dev
set -e
DOMAIN="my-public-node-3.projscale.dev"
echo "🔒 НАСТРОЙКА SSL ДЛЯ $DOMAIN"
# Проверка что приложение работает
echo ""
echo "=== 1. ПРОВЕРКА ПРИЛОЖЕНИЯ ==="
if timeout 5 curl -s http://localhost:3000/api/health > /dev/null 2>&1; then
echo "✅ Приложение работает на порту 3000"
else
echo "❌ Приложение НЕ работает на порту 3000!"
echo "Сначала исправьте приложение:"
echo "docker-compose -f deployment/docker-compose.production.yml restart app"
exit 1
fi
# Создание конфигурации для домена (без SSL)
echo ""
echo "=== 2. НАСТРОЙКА NGINX ДЛЯ ДОМЕНА ==="
sudo tee /etc/nginx/sites-available/default > /dev/null << 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;
}
location /api/ {
proxy_pass http://127.0.0.1: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;
}
location /health {
proxy_pass http://127.0.0.1:3000/api/health;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
}
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;
}
}
EOF
# Тестирование и перезагрузка nginx
echo "🧪 Тестирование nginx..."
if sudo nginx -t; then
sudo systemctl reload nginx
echo "✅ Nginx перезагружен"
else
echo "❌ Ошибка nginx!"
exit 1
fi
# Создание директории для Let's Encrypt
sudo mkdir -p /var/www/html/.well-known/acme-challenge/
sudo chown -R www-data:www-data /var/www/html/
# Получение SSL сертификата
echo ""
echo "=== 3. ПОЛУЧЕНИЕ SSL СЕРТИФИКАТА ==="
echo "🔒 Получение сертификата для $DOMAIN..."
if sudo certbot certonly --webroot \
-w /var/www/html \
--non-interactive \
--agree-tos \
--email admin@$DOMAIN \
--domains $DOMAIN; then
echo "✅ SSL сертификат получен!"
else
echo "❌ Ошибка получения SSL!"
echo "Проверьте что домен $DOMAIN направлен на этот сервер"
exit 1
fi
# Создание HTTPS конфигурации
echo ""
echo "=== 4. НАСТРОЙКА HTTPS ==="
sudo tee /etc/nginx/sites-available/default > /dev/null << EOF
# HTTP -> HTTPS redirect
server {
listen 80;
server_name $DOMAIN;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
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_prefer_server_ciphers off;
ssl_session_cache shared:SSL: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;
client_max_body_size 100M;
location /api/ {
proxy_pass http://127.0.0.1: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;
}
location /health {
proxy_pass http://127.0.0.1:3000/api/health;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
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 https;
}
}
EOF
# Финальное тестирование
echo "🧪 Финальное тестирование nginx..."
if sudo nginx -t; then
sudo systemctl reload nginx
echo "✅ HTTPS настроен!"
else
echo "❌ Ошибка HTTPS конфигурации!"
exit 1
fi
# Настройка автообновления
echo ""
echo "=== 5. АВТООБНОВЛЕНИЕ ==="
sudo tee /etc/cron.d/certbot-renew > /dev/null << EOF
0 12 * * * root certbot renew --quiet --nginx --post-hook "systemctl reload nginx"
EOF
echo "✅ Автообновление настроено"
# Тестирование
echo ""
echo "=== 6. ФИНАЛЬНОЕ ТЕСТИРОВАНИЕ ==="
sleep 5
echo "🧪 Тестирование HTTPS..."
if timeout 10 curl -s https://$DOMAIN/health > /dev/null 2>&1; then
echo "✅ HTTPS работает: https://$DOMAIN/health"
else
echo "⚠️ HTTPS может быть недоступен (подождите несколько минут)"
fi
if timeout 10 curl -s https://$DOMAIN/api/health > /dev/null 2>&1; then
echo "✅ API работает: https://$DOMAIN/api/health"
else
echo "⚠️ API может быть недоступен"
fi
echo ""
echo "🎉 SSL НАСТРОЕН ДЛЯ $DOMAIN!"
echo ""
echo "🌐 Ваш сайт:"
echo "https://$DOMAIN"
echo "https://$DOMAIN/api/health"