From 17bd14383b1ffcd511969190ec85439d2ff4ed34 Mon Sep 17 00:00:00 2001 From: "Andrey K. Choi" Date: Sun, 2 Nov 2025 14:56:47 +0900 Subject: [PATCH] nginx test scripts --- Makefile | 6 + docker-compose.prod.yml | 4 +- scripts/check-nginx.sh | 216 +++++++++++++++++++++++++++++++++++ scripts/nginx-quick-check.sh | 63 ++++++++++ 4 files changed, 287 insertions(+), 2 deletions(-) create mode 100755 scripts/check-nginx.sh create mode 100755 scripts/nginx-quick-check.sh diff --git a/Makefile b/Makefile index 54f0ef2..a636932 100644 --- a/Makefile +++ b/Makefile @@ -184,6 +184,12 @@ restore: ## Восстановить из бэкапа # === Testing and Quality === +check-nginx: ## Быстрая проверка nginx + @./scripts/nginx-quick-check.sh + +check-nginx-full: ## Полная диагностика nginx + @./scripts/check-nginx.sh + test: ## Запуск тестов @echo "🧪 Запуск тестов..." @$(DOCKER_COMPOSE) exec web python manage.py test diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 19eec15..d79e66f 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -3,7 +3,7 @@ services: web: environment: - DJANGO_DEBUG=False - - DJANGO_SECURE_SSL_REDIRECT=True + - DJANGO_SECURE_SSL_REDIRECT=False - DJANGO_SECURE_HSTS_SECONDS=31536000 - DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=True - DJANGO_SECURE_HSTS_PRELOAD=True @@ -13,7 +13,7 @@ services: frontend: environment: - NODE_ENV=production - - NEXT_PUBLIC_API_URL=https://links.shareon.kr + - NEXT_PUBLIC_API_URL=http://links.shareon.kr restart: unless-stopped db: diff --git a/scripts/check-nginx.sh b/scripts/check-nginx.sh new file mode 100755 index 0000000..8a2f095 --- /dev/null +++ b/scripts/check-nginx.sh @@ -0,0 +1,216 @@ +#!/bin/bash +# scripts/check-nginx.sh - Проверка настроек nginx для CatLink + +set -e + +echo "🔍 Проверка настроек nginx для CatLink" +echo "======================================" + +# Цвета для вывода +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Функция для проверки с цветным выводом +check_status() { + if [ $? -eq 0 ]; then + echo -e "${GREEN}✅ $1${NC}" + return 0 + else + echo -e "${RED}❌ $1${NC}" + return 1 + fi +} + +echo "" +echo -e "${BLUE}1. Проверка установки nginx${NC}" +echo "------------------------" + +# Проверка установки nginx +if command -v nginx &> /dev/null; then + echo -e "${GREEN}✅ nginx установлен: $(nginx -v 2>&1)${NC}" +else + echo -e "${RED}❌ nginx не установлен${NC}" + exit 1 +fi + +# Проверка статуса nginx +echo "" +echo -e "${BLUE}2. Проверка статуса службы nginx${NC}" +echo "-------------------------------" + +systemctl is-active nginx &> /dev/null +check_status "nginx активен" + +systemctl is-enabled nginx &> /dev/null +check_status "nginx включен в автозагрузку" + +echo "" +echo -e "${BLUE}3. Проверка конфигурации nginx${NC}" +echo "--------------------------------" + +# Проверка синтаксиса конфигурации +sudo nginx -t &> /dev/null +check_status "Синтаксис конфигурации nginx корректен" + +# Проверка наличия конфигурации для CatLink +if [ -f "/etc/nginx/sites-available/links" ]; then + echo -e "${GREEN}✅ Конфигурация CatLink найдена: /etc/nginx/sites-available/links${NC}" +else + echo -e "${RED}❌ Конфигурация CatLink не найдена${NC}" +fi + +if [ -L "/etc/nginx/sites-enabled/links" ]; then + echo -e "${GREEN}✅ Конфигурация CatLink активна: /etc/nginx/sites-enabled/links${NC}" +else + echo -e "${RED}❌ Конфигурация CatLink не активна${NC}" +fi + +echo "" +echo -e "${BLUE}4. Проверка портов${NC}" +echo "----------------" + +# Проверка прослушиваемых портов +if ss -tlnp | grep -q ":80.*nginx" 2>/dev/null; then + echo -e "${GREEN}✅ nginx слушает порт 80${NC}" +else + echo -e "${RED}❌ nginx НЕ слушает порт 80${NC}" +fi + +if ss -tlnp | grep -q ":443.*nginx" 2>/dev/null; then + echo -e "${GREEN}✅ nginx слушает порт 443 (SSL)${NC}" +else + echo -e "${YELLOW}⚠️ nginx НЕ слушает порт 443 (SSL не настроен)${NC}" +fi + +echo "" +echo -e "${BLUE}5. Проверка доступности backend сервисов${NC}" +echo "---------------------------------------" + +# Проверка доступности backend на порту 8000 +if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/api/ | grep -q "200\|404\|403"; then + echo -e "${GREEN}✅ Backend доступен на localhost:8000${NC}" +else + echo -e "${RED}❌ Backend НЕ доступен на localhost:8000${NC}" +fi + +# Проверка доступности frontend на порту 3000 +if curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/ | grep -q "200\|404"; then + echo -e "${GREEN}✅ Frontend доступен на localhost:3000${NC}" +else + echo -e "${RED}❌ Frontend НЕ доступен на localhost:3000${NC}" +fi + +echo "" +echo -e "${BLUE}6. Проверка доступности через nginx${NC}" +echo "-----------------------------------" + +# Проверка главной страницы +if curl -s -o /dev/null -w "%{http_code}" http://localhost/ | grep -q "200"; then + echo -e "${GREEN}✅ Главная страница доступна через nginx${NC}" +else + echo -e "${RED}❌ Главная страница НЕ доступна через nginx${NC}" +fi + +# Проверка API через nginx +if curl -s -o /dev/null -w "%{http_code}" http://localhost/api/ | grep -q "200\|404\|403"; then + echo -e "${GREEN}✅ API доступно через nginx${NC}" +else + echo -e "${RED}❌ API НЕ доступно через nginx${NC}" +fi + +# Проверка admin через nginx +if curl -s -o /dev/null -w "%{http_code}" http://localhost/admin/ | grep -q "200\|302"; then + echo -e "${GREEN}✅ Admin доступен через nginx${NC}" +else + echo -e "${RED}❌ Admin НЕ доступен через nginx${NC}" +fi + +echo "" +echo -e "${BLUE}7. Проверка доменных имен${NC}" +echo "--------------------------" + +# Проверка доступности по доменному имени +if curl -s -o /dev/null -w "%{http_code}" http://links.shareon.kr/ | grep -q "200"; then + echo -e "${GREEN}✅ Сайт доступен по домену links.shareon.kr${NC}" +else + echo -e "${YELLOW}⚠️ Сайт НЕ доступен по домену links.shareon.kr (проверьте DNS)${NC}" +fi + +if curl -s -o /dev/null -w "%{http_code}" http://sharon.kr/ | grep -q "200"; then + echo -e "${GREEN}✅ Сайт доступен по домену sharon.kr${NC}" +else + echo -e "${YELLOW}⚠️ Сайт НЕ доступен по домену sharon.kr (проверьте DNS)${NC}" +fi + +echo "" +echo -e "${BLUE}8. Проверка SSL сертификатов${NC}" +echo "----------------------------" + +# Проверка SSL сертификатов +if [ -d "/etc/letsencrypt/live/links.shareon.kr" ]; then + echo -e "${GREEN}✅ SSL сертификат для links.shareon.kr найден${NC}" + + # Проверка срока действия сертификата + if openssl x509 -in /etc/letsencrypt/live/links.shareon.kr/cert.pem -noout -checkend 604800 &> /dev/null; then + echo -e "${GREEN}✅ SSL сертификат действителен более 7 дней${NC}" + else + echo -e "${YELLOW}⚠️ SSL сертификат истекает менее чем через 7 дней${NC}" + fi +else + echo -e "${YELLOW}⚠️ SSL сертификат не найден${NC}" +fi + +echo "" +echo -e "${BLUE}9. Анализ конфигурации CatLink${NC}" +echo "-------------------------------" + +if [ -f "/etc/nginx/sites-available/links" ]; then + echo "📄 Содержимое конфигурации nginx для CatLink:" + echo "==============================================" + cat /etc/nginx/sites-available/links +else + echo -e "${RED}❌ Конфигурация не найдена${NC}" +fi + +echo "" +echo -e "${BLUE}10. Проверка логов nginx${NC}" +echo "------------------------" + +echo "📊 Последние 5 строк из access.log:" +sudo tail -5 /var/log/nginx/access.log 2>/dev/null || echo "Лог недоступен" + +echo "" +echo "📊 Последние 5 строк из error.log:" +sudo tail -5 /var/log/nginx/error.log 2>/dev/null || echo "Лог недоступен" + +echo "" +echo -e "${BLUE}11. Рекомендации${NC}" +echo "---------------" + +if ! systemctl is-active nginx &> /dev/null; then + echo -e "${YELLOW}💡 Запустите nginx: sudo systemctl start nginx${NC}" +fi + +if [ ! -f "/etc/nginx/sites-available/links" ]; then + echo -e "${YELLOW}💡 Создайте конфигурацию: ./scripts/setup-nginx.sh${NC}" +fi + +if [ ! -d "/etc/letsencrypt/live/links.shareon.kr" ]; then + echo -e "${YELLOW}💡 Получите SSL сертификат: make ssl-cert${NC}" +fi + +if ! curl -s -o /dev/null http://localhost:3000/; then + echo -e "${YELLOW}💡 Запустите контейнеры: make up-prod${NC}" +fi + +echo "" +echo -e "${GREEN}🎉 Проверка nginx завершена!${NC}" +echo "" +echo -e "${BLUE}Для получения помощи:${NC}" +echo "• Перезапуск nginx: sudo systemctl restart nginx" +echo "• Проверка конфигурации: sudo nginx -t" +echo "• Просмотр логов: sudo journalctl -u nginx -f" +echo "• Настройка CatLink: ./scripts/setup-nginx.sh" \ No newline at end of file diff --git a/scripts/nginx-quick-check.sh b/scripts/nginx-quick-check.sh new file mode 100755 index 0000000..690f706 --- /dev/null +++ b/scripts/nginx-quick-check.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# scripts/nginx-quick-check.sh - Быстрая проверка nginx + +echo "🚀 Быстрая проверка nginx для CatLink" +echo "====================================" + +# Цвета +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' + +# Проверка nginx +if systemctl is-active nginx &>/dev/null; then + echo -e "${GREEN}✅ nginx работает${NC}" +else + echo -e "${RED}❌ nginx не работает${NC}" +fi + +# Проверка конфигурации +if sudo nginx -t &>/dev/null; then + echo -e "${GREEN}✅ Конфигурация nginx корректна${NC}" +else + echo -e "${RED}❌ Ошибка в конфигурации nginx${NC}" +fi + +# Проверка портов +if ss -tlnp | grep -q ":80.*nginx"; then + echo -e "${GREEN}✅ Порт 80 прослушивается${NC}" +else + echo -e "${RED}❌ Порт 80 не прослушивается${NC}" +fi + +# Проверка backend +if curl -s http://localhost:8000/api/ &>/dev/null; then + echo -e "${GREEN}✅ Backend (8000) доступен${NC}" +else + echo -e "${RED}❌ Backend (8000) недоступен${NC}" +fi + +# Проверка frontend +if curl -s http://localhost:3000/ &>/dev/null; then + echo -e "${GREEN}✅ Frontend (3000) доступен${NC}" +else + echo -e "${RED}❌ Frontend (3000) недоступен${NC}" +fi + +# Проверка через nginx +if curl -s http://localhost/ &>/dev/null; then + echo -e "${GREEN}✅ Nginx проксирование работает${NC}" +else + echo -e "${RED}❌ Nginx проксирование не работает${NC}" +fi + +# Проверка домена +if curl -s http://links.shareon.kr/ &>/dev/null; then + echo -e "${GREEN}✅ Домен links.shareon.kr доступен${NC}" +else + echo -e "${YELLOW}⚠️ Домен links.shareon.kr недоступен${NC}" +fi + +echo "" +echo "Для подробной диагностики запустите: ./scripts/check-nginx.sh" \ No newline at end of file