Compare commits

...

2 Commits

Author SHA1 Message Date
9b31fcf193 🔧 Добавлен скрипт исправления продакшена
Some checks failed
continuous-integration/drone/push Build is failing
 Новый функционал:
- scripts/fix-production-env.sh - автоматическое исправление .env для продакшена
- make fix-production - команда для быстрого исправления

🎯 Что исправляет:
- DJANGO_DEBUG=False (вместо True)
- NEXT_PUBLIC_API_URL=http://links.shareon.kr (вместо localhost)
- Правильные настройки для продакшена
- Пересоздание БД с правильным паролем
- Выполнение миграций
- Создание суперпользователя

📝 Документация:
- PRODUCTION_FIX.md - инструкция по исправлению проблем

🚨 Решает проблему:
- password authentication failed for user links_user
- undefined в API URL фронтенда
- Неправильные настройки DEBUG режима
2025-11-02 15:09:10 +09:00
5376d5139e 📋 Добавлены скрипты диагностики nginx
 Новые скрипты:
- scripts/check-nginx.sh - полная диагностика nginx
- scripts/nginx-quick-check.sh - быстрая проверка

🔧 Новые команды Makefile:
- make check-nginx - быстрая проверка
- make check-nginx-full - полная диагностика

📊 Что проверяют скрипты:
- Статус службы nginx
- Корректность конфигурации
- Прослушиваемые порты (80, 443)
- Доступность backend/frontend сервисов
- Проксирование через nginx
- Доменные имена и DNS
- SSL сертификаты
- Анализ логов и конфигурации
- Рекомендации по исправлению

📝 Документация:
- docs/NGINX_DIAGNOSTICS.md - руководство по диагностике

🎯 Использование на сервере:
- ./scripts/nginx-quick-check.sh
- ./scripts/check-nginx.sh
2025-11-02 14:57:25 +09:00
5 changed files with 362 additions and 1 deletions

View File

@@ -112,6 +112,10 @@ deploy-full: ## Полное развертывание в продакшен с
@echo "✅ Полное развертывание завершено!"
@echo "🌐 Сайт доступен по адресу: https://links.shareon.kr"
fix-production: ## Исправление настроек продакшена
@echo "🔧 Исправление настроек продакшена..."
@./scripts/fix-production-env.sh
deploy: ## Развертывание в продакшен
@echo "🚀 Развертывание в продакшен..."
@$(DOCKER_COMPOSE) -f docker-compose.yml -f docker-compose.prod.yml down

114
PRODUCTION_FIX.md Normal file
View File

@@ -0,0 +1,114 @@
# Быстрое исправление проблем продакшена
## 🚨 Проблема: password authentication failed
### Причина
Неправильные настройки в `.env` файле:
- `DJANGO_DEBUG=True` (должно быть False)
- `NEXT_PUBLIC_API_URL=http://localhost:8000` (должно быть домен)
- Возможно проблема с паролем БД
### ⚡ Быстрое решение
На сервере выполните:
```bash
cd /opt/links
git pull
# Автоматическое исправление
make fix-production
```
### 🔧 Ручное исправление
Если автоматическое не сработало:
```bash
# 1. Остановить контейнеры
make down
# 2. Создать правильный .env
cat > .env << 'EOF'
# Django настройки
DJANGO_SECRET_KEY=lskjflSDJHFdSFYU7TYOREIFLUDJKFBNKLJSDHFP9Q234856QT80OUAEIYDWSF9PQ28345701784QRTEOYAGWDFLSBAPWO9I485Y
DJANGO_DEBUG=False
DJANGO_ALLOWED_HOSTS=links.shareon.kr,sharon.kr,localhost,127.0.0.1
# База данных PostgreSQL
DATABASE_ENGINE=django.db.backends.postgresql
DATABASE_NAME=links_db
DATABASE_USER=links_user
DATABASE_PASSWORD=links_OASDUIFH90324*ftye(guBJ;O234789SDgfu{
DATABASE_HOST=db
DATABASE_PORT=5432
# PostgreSQL настройки для контейнера
POSTGRES_DB=links_db
POSTGRES_USER=links_user
POSTGRES_PASSWORD=links_OASDUIFH90324*ftye(guBJ;O234789SDgfu{
# Frontend настройки (ВАЖНО!)
NEXT_PUBLIC_API_URL=http://links.shareon.kr
# Для продакшена
DJANGO_SECURE_SSL_REDIRECT=False
DJANGO_SECURE_HSTS_SECONDS=31536000
DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=True
DJANGO_SECURE_HSTS_PRELOAD=True
EOF
# 3. Удалить старые данные БД
docker volume rm links_postgres_data
# 4. Пересобрать и запустить
make build-prod
make up-prod
# 5. Подождать запуска БД
sleep 15
# 6. Выполнить миграции
make migrate
# 7. Создать суперпользователя
make superuser
```
### ✅ Проверка
После исправления проверьте:
```bash
# Быстрая проверка
make check-nginx
# Проверка API
curl http://links.shareon.kr/api/
# Проверка админки
curl http://links.shareon.kr/admin/
```
### 🎯 Результат
После исправления должно работать:
- ✅ Сайт: http://links.shareon.kr
- ✅ API: http://links.shareon.kr/api/
- ✅ Админка: http://links.shareon.kr/admin/
- ✅ Логин через фронтенд
### 🔍 Диагностика
Если проблемы остались:
```bash
# Полная диагностика
make check-nginx-full
# Логи контейнеров
make logs
# Статус контейнеров
make status
```

View File

@@ -7,7 +7,7 @@ services:
- DJANGO_SECURE_HSTS_SECONDS=31536000
- DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=True
- DJANGO_SECURE_HSTS_PRELOAD=True
- DJANGO_ALLOWED_HOSTS=links.shareon.kr,sharon.kr,localhost,127.0.0.1
- DJANGO_ALLOWED_HOSTS=links.shareon.kr,shareon.kr,localhost,127.0.0.1
restart: unless-stopped
frontend:

166
docs/NGINX_DIAGNOSTICS.md Normal file
View File

@@ -0,0 +1,166 @@
# Диагностика nginx для CatLink
## Скрипты проверки
### 🚀 Быстрая проверка
```bash
make check-nginx
# ИЛИ
./scripts/nginx-quick-check.sh
```
**Что проверяет:**
- ✅ Статус службы nginx
- ✅ Корректность конфигурации
- ✅ Прослушивание портов
- ✅ Доступность backend (порт 8000)
- ✅ Доступность frontend (порт 3000)
- ✅ Работа проксирования через nginx
- ✅ Доступность по доменному имени
### 🔍 Полная диагностика
```bash
make check-nginx-full
# ИЛИ
./scripts/check-nginx.sh
```
**Что проверяет:**
- 🔧 Установка и статус nginx
- 📝 Конфигурационные файлы
- 🌐 Прослушиваемые порты (80, 443)
- 🔗 Доступность backend сервисов
- 🌍 Проверка через nginx
- 🌐 Доменные имена
- 🔒 SSL сертификаты
- 📄 Анализ конфигурации
- 📊 Логи nginx
- 💡 Рекомендации по исправлению
## Типичные проблемы и решения
### ❌ nginx не работает
```bash
sudo systemctl start nginx
sudo systemctl enable nginx
```
### ❌ Ошибка в конфигурации
```bash
sudo nginx -t
./scripts/setup-nginx.sh
```
### ❌ Порт 80 не прослушивается
```bash
sudo systemctl restart nginx
sudo ss -tlnp | grep nginx
```
### ❌ Backend недоступен
```bash
make status
make up-prod
docker ps
```
### ❌ Frontend недоступен
```bash
make logs-frontend
make restart
```
### ❌ Домен недоступен
```bash
# Проверьте DNS записи
dig links.shareon.kr
nslookup links.shareon.kr
# Проверьте nginx конфигурацию
sudo nginx -t
```
## Проверка конфигурации вручную
### Проверка nginx
```bash
# Статус службы
sudo systemctl status nginx
# Проверка конфигурации
sudo nginx -t
# Перезагрузка конфигурации
sudo nginx -s reload
# Просмотр логов
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
```
### Проверка портов
```bash
# Все прослушиваемые порты
sudo ss -tlnp
# Только nginx
sudo ss -tlnp | grep nginx
# Проверка портов 80 и 443
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443
```
### Проверка сервисов
```bash
# Backend API
curl -I http://localhost:8000/api/
# Frontend
curl -I http://localhost:3000/
# Через nginx
curl -I http://localhost/
curl -I http://localhost/api/
curl -I http://links.shareon.kr/
```
### Проверка Docker контейнеров
```bash
# Статус контейнеров
docker ps
# Логи
docker logs links-web-1
docker logs links-frontend-1
docker logs links-db-1
# Переменные окружения
docker exec links-frontend-1 env | grep NEXT_PUBLIC
```
## Автоматическая диагностика
Для автоматической проверки при развертывании добавьте в ваши скрипты:
```bash
# В конце deploy скрипта
echo "🔍 Проверка развертывания..."
./scripts/nginx-quick-check.sh
if [ $? -eq 0 ]; then
echo "✅ Развертывание успешно завершено!"
else
echo "❌ Обнаружены проблемы. Запустите полную диагностику:"
echo " ./scripts/check-nginx.sh"
fi
```
## Мониторинг
Для постоянного мониторинга можете добавить в crontab:
```bash
# Проверка каждые 5 минут
*/5 * * * * /opt/links/scripts/nginx-quick-check.sh >> /var/log/catlink-health.log 2>&1
```

77
scripts/fix-production-env.sh Executable file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
# scripts/fix-production-env.sh - Исправление .env для продакшена
echo "🔧 Исправление .env файла для продакшена"
echo "========================================"
# Создание правильного .env файла
cat > .env << 'EOF'
# Django настройки
DJANGO_SECRET_KEY=lskjflSDJHFdSFYU7TYOREIFLUDJKFBNKLJSDHFP9Q234856QT80OUAEIYDWSF9PQ28345701784QRTEOYAGWDFLSBAPWO9I485Y
DJANGO_DEBUG=False
DJANGO_ALLOWED_HOSTS=links.shareon.kr,sharon.kr,localhost,127.0.0.1
# База данных PostgreSQL
DATABASE_ENGINE=django.db.backends.postgresql
DATABASE_NAME=links_db
DATABASE_USER=links_user
DATABASE_PASSWORD=links_OASDUIFH90324*ftye(guBJ;O234789SDgfu{
DATABASE_HOST=db
DATABASE_PORT=5432
# PostgreSQL настройки для контейнера
POSTGRES_DB=links_db
POSTGRES_USER=links_user
POSTGRES_PASSWORD=links_OASDUIFH90324*ftye(guBJ;O234789SDgfu{
# Frontend настройки (ВАЖНО для продакшена!)
NEXT_PUBLIC_API_URL=http://links.shareon.kr
# Для продакшена
DJANGO_SECURE_SSL_REDIRECT=False
DJANGO_SECURE_HSTS_SECONDS=31536000
DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=True
DJANGO_SECURE_HSTS_PRELOAD=True
# Опциональные настройки
# DJANGO_EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
# DJANGO_EMAIL_HOST=
# DJANGO_EMAIL_PORT=587
# DJANGO_EMAIL_HOST_USER=
# DJANGO_EMAIL_HOST_PASSWORD=
# DJANGO_EMAIL_USE_TLS=True
EOF
echo "✅ .env файл обновлен для продакшена"
echo ""
echo "🔄 Перезапуск контейнеров..."
# Остановка контейнеров
make down
# Удаление старого volume с БД (если пароль изменился)
echo "🗄️ Очистка старых данных БД..."
docker volume rm links_postgres_data 2>/dev/null || true
# Пересборка и запуск
echo "🏗️ Пересборка контейнеров..."
make build-prod
echo "🚀 Запуск контейнеров..."
make up-prod
echo "⏳ Ожидание запуска БД..."
sleep 15
echo "🗄️ Выполнение миграций..."
make migrate
echo "👤 Создание суперпользователя..."
echo "Создайте суперпользователя для входа в админку:"
make superuser
echo ""
echo "✅ Готово! Проверьте работу:"
echo "• Сайт: http://links.shareon.kr"
echo "• API: http://links.shareon.kr/api/"
echo "• Админка: http://links.shareon.kr/admin/"