This commit is contained in:
parent
597066b28a
commit
4ec12873bd
|
|
@ -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
|
||||||
|
|
@ -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"
|
||||||
Loading…
Reference in New Issue