chore: reorganize project structure and prepare for deployment

- Organize files into logical directories (docs/, scripts/, tests/)
- Add comprehensive documentation (README, CONTRIBUTING, CHANGELOG)
- Create deployment automation scripts
- Add Docker production configuration
- Update .gitignore and add .dockerignore
- Remove temporary and test files from root
- Improve settings.py with DEBUG from env variable

Added:
- README.md with project overview
- CONTRIBUTING.md for contributors
- CHANGELOG.md for version tracking
- PROJECT_STATUS.md with current state
- docker-compose.prod.yml for production
- nginx.conf for production web server
- scripts/deploy.sh for automated deployment
- scripts/check-config.sh for configuration validation
- scripts/setup-ssl.sh for SSL certificate setup
- docs/DEPLOYMENT.md with detailed deployment guide
- docs/ENV_VARIABLES.md with all environment variables

Moved:
- Documentation to docs/
- Scripts to scripts/
- Test files to tests/

Removed:
- .history/ directory
- Test response JSON files from root
- settings_production.py (merged into settings.py)

This commit prepares the project for:
- Production deployment
- Team collaboration
- Docker containerization
- Proper documentation
This commit is contained in:
2025-11-24 07:12:04 +09:00
parent 7bf003e70d
commit d9adac609b
26 changed files with 1869 additions and 11 deletions

76
.dockerignore Normal file
View File

@@ -0,0 +1,76 @@
# Git
.git
.gitignore
.history
# Python
__pycache__
*.py[cod]
*$py.class
*.so
.Python
*.egg-info
dist
build
.pytest_cache
.coverage
htmlcov
# Virtual environments
.venv
venv
env
ENV
# Environment files
.env
.env.local
.env.*.local
# IDEs
.vscode
.idea
*.swp
*.swo
# Documentation (not needed in container)
docs/
tests/
*.md
!requirements.txt
# Docker files
docker-compose*.yml
Dockerfile
.dockerignore
# Nginx config (copied separately in production)
nginx*.conf
# SSL certificates (mounted as volumes)
certbot/
# Backups
*.sql
*.dump
backup/
# Logs (generated in container)
logs/
*.log
# Temporary files
*.tmp
*.temp
*.bak
# OS files
.DS_Store
Thumbs.db
# Scripts (not all needed in container)
scripts/setup-ssl.sh
scripts/check-config.sh
# Test files
tests/response_*.json

88
.gitignore vendored
View File

@@ -1,5 +1,85 @@
# SmartSolTech .gitignore
# Python
*.py[cod]
*$py.class
*.so
.Python
__pycache__/
*.egg-info/
dist/
build/
*.egg
# Virtual Environment
.venv/
venv/
env/
ENV/
# Django
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
/media
/staticfiles
*.pot
# Environment variables
.env
__pycache__
.venv
.history
static/qr_codes
.env.local
.env.*.local
# IDEs
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
.history/
# Docker
docker-compose.override.yml
# Certificates
certbot/
# Backups
*.sql
*.dump
backup/
# Temporary files
*.tmp
*.temp
*.bak
# Test responses
tests/response_*.json
# QR Codes (generated)
static/qr_codes/
smartsoltech/static/qr_codes/
smartsoltech/staticfiles/qr_codes/
# Logs
logs/
*.log
# Cache
.pytest_cache/
.coverage
htmlcov/
.tox/
.mypy_cache/
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

80
CHANGELOG.md Normal file
View File

@@ -0,0 +1,80 @@
# Changelog
Все значимые изменения в проекте SmartSolTech документируются в этом файле.
Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/),
и проект следует [Semantic Versioning](https://semver.org/lang/ru/).
## [Unreleased]
### Добавлено
- 🐳 Docker контейнеризация приложения
- 📋 Docker Compose конфигурация для development и production
- 🔒 Nginx конфигурация для production
- 📱 Интеграция Telegram бота для уведомлений
- 📧 Система email уведомлений
- 🎨 Django Jazzmin админ-панель
- 📊 PostgreSQL база данных
- 🔐 QR код для подтверждения заявок
- 📈 Интеграция Zabbix Agent для мониторинга
- 🚀 Скрипты автоматического деплоя
- 🔍 Скрипт проверки конфигурации
- 🔒 Скрипт настройки SSL сертификатов
- 📝 Подробная документация по деплою
- 📚 README с инструкциями
- 🤝 CONTRIBUTING руководство
### Изменено
- ⚙️ Настройки Django оптимизированы для production
- 🔧 Переменные окружения вынесены в .env файл
- 📁 Структура проекта реорганизована
- Документация перенесена в `docs/`
- Скрипты перенесены в `scripts/`
- Тестовые файлы перенесены в `tests/`
### Безопасность
- 🔐 SECRET_KEY вынесен в переменные окружения
- 🔒 DEBUG режим управляется через .env
- 🛡️ Добавлены security headers в Nginx
- 🔑 Поддержка HTTPS с Let's Encrypt
### Инфраструктура
- 🐘 PostgreSQL 17
- 🐍 Python 3.10
- 🎯 Django 5.1.1
- 🤖 python-telegram-bot 21.6
- 🌐 Nginx для production
- 🐳 Docker & Docker Compose
---
## Формат записей
### [Версия] - ГГГГ-ММ-ДД
#### Добавлено (Added)
- Новые функции
#### Изменено (Changed)
- Изменения в существующем функционале
#### Устарело (Deprecated)
- Функции, которые скоро будут удалены
#### Удалено (Removed)
- Удаленные функции
#### Исправлено (Fixed)
- Исправления багов
#### Безопасность (Security)
- Изменения, связанные с безопасностью
---
## Предыдущие версии
### Инициализация проекта
- Базовая структура Django приложения
- Модели для клиентов, заказов, услуг
- Основной функционал веб-приложения

255
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,255 @@
# Contributing to SmartSolTech
Спасибо за интерес к проекту SmartSolTech! Это руководство поможет вам начать работу.
## 🚀 Начало работы
### Требования для разработки
- Python 3.10+
- Docker & Docker Compose
- Git
- Базовые знания Django
### Настройка окружения для разработки
1. **Клонируйте репозиторий**
```bash
git clone <repository-url>
cd smartsoltech.kr-master
```
2. **Создайте .env файл**
```bash
cp .env.example .env
# Отредактируйте .env с вашими настройками
```
3. **Запустите проект**
```bash
docker-compose up -d
```
4. **Примените миграции**
```bash
docker-compose exec web python smartsoltech/manage.py migrate
```
5. **Создайте суперпользователя**
```bash
docker-compose exec web python smartsoltech/manage.py createsuperuser
```
## 📝 Соглашения о коде
### Python / Django
- Следуйте PEP 8
- Используйте type hints где возможно
- Документируйте функции и классы docstrings
- Максимальная длина строки: 120 символов
**Пример:**
```python
def send_telegram_notification(chat_id: str, message: str) -> bool:
"""
Отправляет уведомление в Telegram.
Args:
chat_id: ID чата Telegram
message: Текст сообщения
Returns:
True если сообщение отправлено успешно, False иначе
"""
pass
```
### Структура коммитов
Используйте понятные сообщения коммитов:
```
<type>: <subject>
<body>
<footer>
```
**Типы:**
- `feat`: Новая функция
- `fix`: Исправление бага
- `docs`: Изменения в документации
- `style`: Форматирование кода
- `refactor`: Рефакторинг
- `test`: Добавление тестов
- `chore`: Рутинные задачи
**Примеры:**
```
feat: add QR code generation for service requests
- Implement QR code generation using qrcode library
- Add QR code display in frontend
- Update ServiceRequest model with token field
Closes #123
```
## 🔄 Процесс разработки
### 1. Создайте ветку
```bash
git checkout -b feature/your-feature-name
# или
git checkout -b fix/bug-description
```
### 2. Внесите изменения
- Пишите чистый код
- Добавляйте комментарии
- Обновляйте документацию
### 3. Протестируйте
```bash
# Запустите тесты (когда будут добавлены)
docker-compose exec web python smartsoltech/manage.py test
# Проверьте миграции
docker-compose exec web python smartsoltech/manage.py makemigrations --check --dry-run
```
### 4. Закоммитьте изменения
```bash
git add .
git commit -m "feat: add your feature description"
```
### 5. Создайте Pull Request
- Опишите изменения подробно
- Приложите скриншоты (если применимо)
- Упомяните связанные issue
## 🐛 Отчеты о багах
При создании issue о баге, пожалуйста, укажите:
- **Описание**: Что произошло?
- **Ожидаемое поведение**: Что должно было произойти?
- **Шаги воспроизведения**: Как воспроизвести баг?
- **Окружение**: OS, версия Docker, браузер
- **Логи**: Если доступны
**Пример:**
```markdown
## Описание
Telegram бот не отправляет уведомления после создания заявки.
## Ожидаемое поведение
После создания заявки клиент должен получить уведомление в Telegram.
## Шаги воспроизведения
1. Создать заявку через веб-форму
2. Подождать 30 секунд
3. Проверить Telegram - уведомление не пришло
## Окружение
- OS: Ubuntu 22.04
- Docker: 20.10.21
- Browser: Chrome 120
## Логи
```
[ERROR] Failed to send message: Connection timeout
```
## 💡 Предложения новых функций
При предложении новой функции:
- **Описание**: Что вы хотите добавить?
- **Обоснование**: Зачем это нужно?
- **Примеры использования**: Как это будет работать?
- **Альтернативы**: Рассматривали ли другие варианты?
## 🧪 Тестирование
### Ручное тестирование
1. Создайте тестовые данные
2. Проверьте все измененные функции
3. Проверьте интеграции (Telegram, Email)
### Автоматическое тестирование
```bash
# Запуск тестов
docker-compose exec web python smartsoltech/manage.py test
# Запуск тестов с покрытием
docker-compose exec web coverage run --source='.' manage.py test
docker-compose exec web coverage report
```
## 📚 Структура проекта
```
smartsoltech/
├── web/ # Основное веб-приложение
│ ├── models.py # Модели данных
│ ├── views.py # Представления
│ ├── urls.py # URL маршруты
│ ├── forms.py # Формы
│ └── admin.py # Настройки админки
├── comunication/ # Telegram бот и коммуникации
│ ├── telegram_bot.py
│ └── models.py
└── smartsoltech/ # Настройки проекта
├── settings.py
└── urls.py
```
## 🔍 Полезные команды
```bash
# Просмотр логов
docker-compose logs -f web
docker-compose logs -f bot
# Доступ к shell
docker-compose exec web python smartsoltech/manage.py shell
# Создание миграций
docker-compose exec web python smartsoltech/manage.py makemigrations
# Применение миграций
docker-compose exec web python smartsoltech/manage.py migrate
# Сбор статики
docker-compose exec web python smartsoltech/manage.py collectstatic --noinput
# Проверка кода
docker-compose exec web python -m flake8 .
```
## ❓ Вопросы?
Если у вас есть вопросы:
- Создайте issue с меткой `question`
- Проверьте [документацию](docs/)
- Свяжитесь с командой
## 📄 Лицензия
Внося вклад в проект, вы соглашаетесь, что ваши изменения будут лицензированы под той же лицензией, что и проект.
---
Спасибо за ваш вклад в SmartSolTech! 🎉

158
PROJECT_STATUS.md Normal file
View File

@@ -0,0 +1,158 @@
# 📦 Проект готов к деплою!
## ✅ Что было сделано
### 🧹 Организация файлов
- ✅ Создана структура папок:
- `docs/` - вся документация
- `scripts/` - скрипты управления
- `tests/` - тестовые файлы
- ✅ Удалены временные файлы и мусор из корня
- ✅ Удалена папка `.history`
### 📝 Документация
-`README.md` - главный файл с описанием проекта
-`CONTRIBUTING.md` - руководство для контрибьюторов
-`CHANGELOG.md` - история изменений
-`docs/DEPLOYMENT.md` - подробное руководство по деплою
-`docs/ENV_VARIABLES.md` - все переменные окружения
-`docs/QR_CODE_FEATURE_SUMMARY.md` - описание QR функционала
### 🐳 Docker конфигурация
-`Dockerfile` - оптимизирован для production
-`docker-compose.yml` - для development
-`docker-compose.prod.yml` - для production с Nginx
-`.dockerignore` - исключение ненужных файлов
-`nginx.conf` - конфигурация веб-сервера
### 🔧 Скрипты автоматизации
-`scripts/deploy.sh` - автоматический деплой
-`scripts/check-config.sh` - проверка конфигурации
-`scripts/setup-ssl.sh` - настройка SSL
-`scripts/update_telegram_token.py` - обновление токена бота
-`scripts/README.md` - описание всех скриптов
### ⚙️ Конфигурация
-`.env.example` - пример переменных окружения
-`.gitignore` - обновлен для проекта
-`requirements.txt` - Python зависимости
-`settings.py` - DEBUG вынесен в .env
### 🗂️ Итоговая структура
```
smartsoltech.kr-master/
├── 📄 README.md # Главный файл проекта
├── 📄 CONTRIBUTING.md # Руководство для разработчиков
├── 📄 CHANGELOG.md # История изменений
├── 🐳 Dockerfile # Docker образ
├── 🐳 docker-compose.yml # Development
├── 🐳 docker-compose.prod.yml # Production
├── 🔧 .dockerignore # Docker исключения
├── 🔧 .gitignore # Git исключения
├── 🔧 .env.example # Пример переменных
├── 🌐 nginx.conf # Nginx конфигурация
├── 📦 requirements.txt # Python зависимости
├── 🔧 wait-for-it.sh # Утилита ожидания БД
├── 📁 docs/ # 📚 Документация
│ ├── DEPLOYMENT.md # Руководство по деплою
│ ├── ENV_VARIABLES.md # Переменные окружения
│ └── QR_CODE_FEATURE_SUMMARY.md # QR код функционал
├── 📁 scripts/ # 🔧 Скрипты
│ ├── README.md # Описание скриптов
│ ├── deploy.sh # Автоматический деплой
│ ├── check-config.sh # Проверка конфигурации
│ ├── setup-ssl.sh # Настройка SSL
│ ├── update_bot_token.sh # Shell обертка
│ └── update_telegram_token.py # Обновление токена
├── 📁 tests/ # 🧪 Тесты
│ ├── README.md # Описание тестов
│ ├── endpoint_test.sh # Тестирование API
│ └── real_confirmation_process.html
├── 📁 smartsoltech/ # 🐍 Django приложение
│ ├── manage.py
│ ├── web/ # Веб-приложение
│ ├── comunication/ # Telegram бот
│ ├── smartsoltech/ # Настройки
│ ├── static/ # Статика
│ └── media/ # Медиа
├── 📁 frontend/ # 🎨 Frontend ресурсы
├── 📁 bin/ # 🔧 Утилиты
└── 📁 patch/ # 🩹 Патчи
```
## 🚀 Следующие шаги
### 1. Проверьте конфигурацию
```bash
chmod +x scripts/*.sh
./scripts/check-config.sh
```
### 2. Создайте .env файл
```bash
cp .env.example .env
nano .env
```
### 3. Сгенерируйте SECRET_KEY
```bash
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
```
### 4. Запустите деплой
```bash
./scripts/deploy.sh
```
## 📊 Переменные окружения
### Обязательные:
-`SECRET_KEY` - Секретный ключ Django
-`DEBUG` - Режим отладки (False для production)
-`ALLOWED_HOSTS` - Разрешенные хосты
-`POSTGRES_DB` - База данных
-`POSTGRES_USER` - Пользователь БД
-`POSTGRES_PASSWORD` - Пароль БД
-`POSTGRES_HOST` - Хост БД (postgres_db для Docker)
-`PGADMIN_DEFAULT_EMAIL` - Email для PgAdmin
-`PGADMIN_DEFAULT_PASSWORD` - Пароль для PgAdmin
### Опциональные:
- `CSRF_TRUSTED_ORIGINS` - Доверенные источники
- `ZBX_SERVER_HOST` - Zabbix сервер
Подробнее: `docs/ENV_VARIABLES.md`
## 🔐 Безопасность
- ⚠️ `.env` файл в `.gitignore` - НЕ коммитьте его!
- ⚠️ Используйте сильные пароли
- ⚠️ `DEBUG=False` в production
- ⚠️ Настройте HTTPS в production
## 📚 Полезные ссылки
- [Документация по деплою](docs/DEPLOYMENT.md)
- [Переменные окружения](docs/ENV_VARIABLES.md)
- [Руководство контрибьютора](CONTRIBUTING.md)
- [История изменений](CHANGELOG.md)
## 🎉 Готово!
Проект полностью организован и готов к:
- ✅ Коммиту в Git
- ✅ Деплою в Docker
- ✅ Production запуску
- ✅ Совместной разработке
---
**Создано:** 24 ноября 2025
**Версия:** 1.0.0

279
README.md Normal file
View File

@@ -0,0 +1,279 @@
# SmartSolTech - Business Management System
Система управления бизнесом с интеграцией Telegram бота для автоматизации обработки заявок и заказов.
## 🚀 Возможности
- 📋 Управление клиентами и заявками на услуги
- 🛒 Система заказов и проектов
- 📱 Интеграция с Telegram ботом
- 🔔 Уведомления по Email и Telegram
- 🎨 Современная админ-панель (Django Jazzmin)
- 📊 База данных PostgreSQL
- 🐳 Docker контейнеризация
- 📈 Мониторинг Zabbix
## 📁 Структура проекта
```
smartsoltech.kr-master/
├── smartsoltech/ # Основное Django приложение
│ ├── web/ # Веб-приложение (клиенты, заказы, услуги)
│ ├── comunication/ # Telegram бот и коммуникации
│ ├── static/ # Статические файлы
│ └── media/ # Медиа файлы
├── frontend/ # Frontend ресурсы
├── docs/ # Документация
│ ├── DEPLOYMENT.md # Руководство по деплою
│ ├── ENV_VARIABLES.md # Описание переменных окружения
│ └── QR_CODE_FEATURE_SUMMARY.md
├── scripts/ # Скрипты для управления
│ ├── deploy.sh # Скрипт автоматического деплоя
│ ├── check-config.sh # Проверка конфигурации
│ ├── setup-ssl.sh # Настройка SSL сертификатов
│ └── update_telegram_token.py # Обновление токена бота
├── tests/ # Тестовые файлы
├── bin/ # Вспомогательные скрипты
├── patch/ # Патчи для библиотек
├── docker-compose.yml # Development конфигурация
├── docker-compose.prod.yml # Production конфигурация
├── Dockerfile # Docker образ приложения
├── nginx.conf # Конфигурация Nginx
└── requirements.txt # Python зависимости
```
## 🔧 Технологический стек
- **Backend**: Django 5.1.1
- **Database**: PostgreSQL 17
- **Bot**: python-telegram-bot 21.6
- **Frontend**: Bootstrap 5
- **Containerization**: Docker & Docker Compose
- **Web Server**: Nginx (production)
- **Admin**: Django Jazzmin
- **Monitoring**: Zabbix Agent
## 📋 Требования
- Docker 20.10+
- Docker Compose 1.29+
- Git
## ⚡ Быстрый старт
### 1. Клонирование репозитория
```bash
git clone <repository-url>
cd smartsoltech.kr-master
```
### 2. Настройка переменных окружения
```bash
# Создайте .env файл
cp .env.example .env
# Сгенерируйте SECRET_KEY
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
# Отредактируйте .env файл
nano .env
```
**Обязательные переменные:**
- `SECRET_KEY` - Секретный ключ Django
- `DEBUG` - Режим отладки (False для production)
- `ALLOWED_HOSTS` - Разрешенные хосты
- `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD` - Настройки БД
- `PGADMIN_DEFAULT_EMAIL`, `PGADMIN_DEFAULT_PASSWORD` - Доступ к PgAdmin
Подробнее см. [docs/ENV_VARIABLES.md](docs/ENV_VARIABLES.md)
### 3. Проверка конфигурации
```bash
chmod +x scripts/*.sh
./scripts/check-config.sh
```
### 4. Запуск приложения
**Development режим:**
```bash
docker-compose up -d
```
**Production режим:**
```bash
docker-compose -f docker-compose.prod.yml up -d
```
**Или используйте скрипт автоматического деплоя:**
```bash
./scripts/deploy.sh
```
### 5. Применение миграций и создание суперпользователя
```bash
# Применить миграции
docker-compose exec web python smartsoltech/manage.py migrate
# Создать суперпользователя
docker-compose exec web python smartsoltech/manage.py createsuperuser
```
## 🌐 Доступ к сервисам
После запуска сервисы доступны по адресам:
- **Django App**: http://localhost:8000
- **Admin Panel**: http://localhost:8000/admin
- **PgAdmin**: http://localhost:8080
- **Telegram Bot**: Работает в фоновом режиме
## 📱 Настройка Telegram бота
1. Создайте бота через [@BotFather](https://t.me/BotFather)
2. Получите токен бота
3. Обновите токен через скрипт или админ-панель:
```bash
docker-compose exec web python scripts/update_telegram_token.py
```
Или через админ-панель: **Admin → Comunication → Telegram Settings**
## 📧 Настройка Email
Настройте SMTP через админ-панель:
**Admin → Comunication → Email Settings**
## 🔒 Безопасность
-Не храните .env в репозитории (добавлен в .gitignore)
- ✅ Используйте сильные пароли
- ✅ Установите `DEBUG=False` в production
- ✅ Настройте HTTPS (см. scripts/setup-ssl.sh)
- ✅ Регулярно обновляйте зависимости
## 📚 Документация
- [DEPLOYMENT.md](docs/DEPLOYMENT.md) - Подробное руководство по деплою
- [ENV_VARIABLES.md](docs/ENV_VARIABLES.md) - Описание переменных окружения
- [QR_CODE_FEATURE_SUMMARY.md](docs/QR_CODE_FEATURE_SUMMARY.md) - Описание функции QR-кодов
## 🛠️ Полезные команды
### Управление контейнерами
```bash
# Просмотр логов
docker-compose logs -f
# Просмотр логов конкретного сервиса
docker-compose logs -f web
docker-compose logs -f bot
# Перезапуск сервисов
docker-compose restart
# Остановка всех сервисов
docker-compose down
# Остановка с удалением volumes (осторожно!)
docker-compose down -v
```
### Django команды
```bash
# Применить миграции
docker-compose exec web python smartsoltech/manage.py migrate
# Создать миграции
docker-compose exec web python smartsoltech/manage.py makemigrations
# Собрать статику
docker-compose exec web python smartsoltech/manage.py collectstatic --noinput
# Создать суперпользователя
docker-compose exec web python smartsoltech/manage.py createsuperuser
# Django shell
docker-compose exec web python smartsoltech/manage.py shell
```
### Backup и восстановление БД
```bash
# Создание backup
docker-compose exec postgres_db pg_dump -U smartsoltech_user smartsoltech_db > backup.sql
# Восстановление из backup
cat backup.sql | docker-compose exec -T postgres_db psql -U smartsoltech_user smartsoltech_db
```
## 🐛 Troubleshooting
### База данных не готова
```bash
# Проверьте логи PostgreSQL
docker-compose logs postgres_db
# Проверьте health check
docker-compose ps
```
### Telegram бот не работает
```bash
# Проверьте логи бота
docker-compose logs bot
# Обновите токен
docker-compose exec web python scripts/update_telegram_token.py
```
### Проблемы со статикой
```bash
# Пересоберите статику
docker-compose exec web python smartsoltech/manage.py collectstatic --noinput --clear
```
Подробнее см. [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)
## 🔄 Обновление приложения
```bash
# 1. Остановите сервисы
docker-compose down
# 2. Получите обновления
git pull origin main
# 3. Пересоберите образы
docker-compose build --no-cache
# 4. Запустите сервисы
docker-compose up -d
# 5. Примените миграции
docker-compose exec web python smartsoltech/manage.py migrate
# 6. Соберите статику
docker-compose exec web python smartsoltech/manage.py collectstatic --noinput
```
## 📄 Лицензия
Proprietary - Все права защищены
## 👥 Контакты
- Website: https://smartsoltech.kr
- Email: support@smartsoltech.kr
---
Made with ❤️ by SmartSolTech Team

127
docker-compose.prod.yml Normal file
View File

@@ -0,0 +1,127 @@
# Production docker-compose with Nginx
version: '3.8'
services:
postgres_db:
image: postgres:17
container_name: postgres_db
env_file: .env
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin
env_file: .env
depends_on:
postgres_db:
condition: service_healthy
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
networks:
- backend
volumes:
- pgadmin:/var/lib/pgadmin
restart: unless-stopped
web:
build: .
container_name: django_app
env_file: .env
restart: unless-stopped
volumes:
- static_volume:/app/smartsoltech/staticfiles
- media_volume:/app/smartsoltech/media
expose:
- "8000"
depends_on:
postgres_db:
condition: service_healthy
networks:
- backend
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000').read()"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
bot:
build: .
container_name: telegram_bot
command: sh -c "./wait-for-it.sh postgres_db:5432 -- python smartsoltech/manage.py start_telegram_bot"
restart: unless-stopped
env_file:
- .env
depends_on:
web:
condition: service_healthy
networks:
- backend
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- static_volume:/app/smartsoltech/staticfiles:ro
- media_volume:/app/smartsoltech/media:ro
- ./certbot/conf:/etc/letsencrypt:ro
- ./certbot/www:/var/www/certbot:ro
depends_on:
web:
condition: service_healthy
networks:
- backend
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
zabbix-agent:
image: zabbix/zabbix-agent:latest
container_name: zabbix_agent
env_file: .env
environment:
ZBX_SERVER_HOST: ${ZBX_SERVER_HOST}
volumes:
- /proc:/host/proc
- /sys:/host/sys
- /etc:/host/etc
privileged: true
networks:
- backend
restart: unless-stopped
volumes:
pgdata:
pgadmin:
static_volume:
media_volume:
networks:
backend:
driver: bridge

267
docs/DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,267 @@
# SmartSolTech Deployment Guide
## Переменные окружения (.env)
Проект использует следующие переменные окружения:
### Django Settings
- `SECRET_KEY` - Секретный ключ Django (генерируется случайно)
- `DEBUG` - Режим отладки (False для production)
- `ALLOWED_HOSTS` - Разрешенные хосты (через запятую)
- `CSRF_TRUSTED_ORIGINS` - Доверенные источники для CSRF (через запятую)
### PostgreSQL Database
- `POSTGRES_DB` - Имя базы данных
- `POSTGRES_USER` - Пользователь базы данных
- `POSTGRES_PASSWORD` - Пароль базы данных
- `POSTGRES_HOST` - Хост базы данных (postgres_db для Docker)
### PgAdmin
- `PGADMIN_DEFAULT_EMAIL` - Email для входа в PgAdmin
- `PGADMIN_DEFAULT_PASSWORD` - Пароль для входа в PgAdmin
### Zabbix Agent
- `ZBX_SERVER_HOST` - IP адрес Zabbix сервера
### Telegram Bot (настраивается через админку Django)
- Токен и настройки бота хранятся в базе данных
- Используйте скрипт `update_telegram_token.py` для обновления
### Email Settings (настраивается через админку Django)
- SMTP настройки хранятся в базе данных
- Настраиваются через админ-панель Django
## Подготовка к деплою
### 1. Создайте .env файл
```bash
cp .env.example .env
nano .env
```
### 2. Сгенерируйте SECRET_KEY
```python
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
```
### 3. Обновите переменные в .env
Обязательно измените:
- `SECRET_KEY` - используйте сгенерированный ключ
- `DEBUG=False` - для production
- `ALLOWED_HOSTS` - ваш домен
- `CSRF_TRUSTED_ORIGINS` - ваш домен с протоколом
- `POSTGRES_PASSWORD` - сильный пароль
- `PGADMIN_DEFAULT_PASSWORD` - сильный пароль
## Деплой в Docker
### Режим разработки
```bash
# Запуск всех сервисов
docker-compose up -d
# Просмотр логов
docker-compose logs -f
# Остановка
docker-compose down
```
### Production деплой
```bash
# Использование production конфигурации
docker-compose -f docker-compose.prod.yml up -d
# Или используйте скрипт деплоя
chmod +x deploy.sh
./deploy.sh
```
## Управление контейнерами
### Применение миграций
```bash
docker-compose exec web python smartsoltech/manage.py migrate
```
### Сбор статических файлов
```bash
docker-compose exec web python smartsoltech/manage.py collectstatic --noinput
```
### Создание суперпользователя
```bash
docker-compose exec web python smartsoltech/manage.py createsuperuser
```
### Обновление токена Telegram бота
```bash
docker-compose exec web python update_telegram_token.py
```
### Просмотр логов
```bash
# Все сервисы
docker-compose logs -f
# Конкретный сервис
docker-compose logs -f web
docker-compose logs -f bot
docker-compose logs -f postgres_db
```
### Перезапуск сервисов
```bash
# Все сервисы
docker-compose restart
# Конкретный сервис
docker-compose restart web
docker-compose restart bot
```
## Структура сервисов
- **postgres_db** (порт 5432) - PostgreSQL база данных
- **web** (порт 8000) - Django приложение
- **bot** - Telegram бот
- **pgadmin** (порт 8080) - PgAdmin для управления БД
- **zabbix-agent** - Мониторинг Zabbix
- **nginx** (порты 80, 443) - Веб-сервер (только в production)
## Безопасность
1. **Никогда не коммитьте .env файл** - он в .gitignore
2. Используйте сильные пароли для всех сервисов
3. Установите `DEBUG=False` в production
4. Настройте firewall для ограничения доступа к портам
5. Используйте HTTPS в production (настройте SSL сертификаты)
6. Регулярно обновляйте зависимости
## SSL сертификаты (для production с Nginx)
```bash
# Получение сертификата Let's Encrypt
docker-compose run --rm certbot certonly --webroot --webroot-path=/var/www/certbot \
--email your-email@example.com \
--agree-tos \
--no-eff-email \
-d your-domain.com \
-d www.your-domain.com
```
## Backup базы данных
```bash
# Создание backup
docker-compose exec postgres_db pg_dump -U smartsoltech_user smartsoltech_db > backup.sql
# Восстановление из backup
cat backup.sql | docker-compose exec -T postgres_db psql -U smartsoltech_user smartsoltech_db
```
## Мониторинг
### Проверка статуса сервисов
```bash
docker-compose ps
```
### Проверка использования ресурсов
```bash
docker stats
```
### Health checks
Все сервисы имеют health checks для автоматического мониторинга:
- PostgreSQL: проверка готовности через pg_isready
- Django Web: HTTP запрос к порту 8000
- Nginx: проверка процесса
## Troubleshooting
### База данных не готова
```bash
# Проверьте логи PostgreSQL
docker-compose logs postgres_db
# Проверьте health check
docker-compose ps
```
### Миграции не применяются
```bash
# Проверьте подключение к БД
docker-compose exec web python smartsoltech/manage.py dbshell
# Примените миграции вручную
docker-compose exec web python smartsoltech/manage.py migrate --verbosity 3
```
### Telegram бот не запускается
```bash
# Проверьте логи бота
docker-compose logs bot
# Обновите токен через админку или скрипт
docker-compose exec web python update_telegram_token.py
```
## Обновление приложения
```bash
# 1. Остановите сервисы
docker-compose down
# 2. Получите обновления
git pull origin main
# 3. Пересоберите образы
docker-compose build --no-cache
# 4. Запустите сервисы
docker-compose up -d
# 5. Примените миграции
docker-compose exec web python smartsoltech/manage.py migrate
# 6. Соберите статику
docker-compose exec web python smartsoltech/manage.py collectstatic --noinput
```
## Полезные команды
```bash
# Очистка неиспользуемых образов и контейнеров
docker system prune -a
# Просмотр всех volume
docker volume ls
# Удаление конкретного volume (осторожно!)
docker volume rm smartsoltech_pgdata
# Вход в контейнер
docker-compose exec web bash
docker-compose exec postgres_db bash
# Выполнение команды Django
docker-compose exec web python smartsoltech/manage.py <command>
```

134
docs/ENV_VARIABLES.md Normal file
View File

@@ -0,0 +1,134 @@
# SmartSolTech - Environment Variables Summary
## ✅ Все переменные окружения для .env файла
### 🔐 Django Settings (обязательные)
```env
SECRET_KEY=your-secret-key-here-change-this-in-production
DEBUG=False
ALLOWED_HOSTS=localhost,127.0.0.1,your-domain.com
CSRF_TRUSTED_ORIGINS=http://localhost:8000,https://your-domain.com
```
### 🗄️ PostgreSQL Database (обязательные)
```env
POSTGRES_DB=smartsoltech_db
POSTGRES_USER=smartsoltech_user
POSTGRES_PASSWORD=your-strong-password-here
POSTGRES_HOST=postgres_db
```
### 🔧 PgAdmin (обязательные)
```env
PGADMIN_DEFAULT_EMAIL=admin@smartsoltech.kr
PGADMIN_DEFAULT_PASSWORD=your-pgadmin-password
```
### 📊 Zabbix Agent (опционально)
```env
ZBX_SERVER_HOST=your-zabbix-server-ip
```
### 🔒 Security Settings для Production (опционально)
```env
SECURE_SSL_REDIRECT=True
SESSION_COOKIE_SECURE=True
CSRF_COOKIE_SECURE=True
```
## 📝 Настройки через админ-панель Django
Следующие настройки **НЕ** хранятся в .env, а настраиваются через админ-панель Django:
### 📱 Telegram Bot Settings
- Токен бота (от @BotFather)
- Имя бота
- Webhook URL (опционально)
- Используется скрипт `update_telegram_token.py` для обновления
### 📧 Email Settings
- SMTP сервер
- SMTP порт
- Отправитель email
- Пароль
- TLS/SSL настройки
## 🚀 Быстрый старт
1. **Создайте .env файл:**
```bash
cp .env.example .env
```
2. **Сгенерируйте SECRET_KEY:**
```bash
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
```
3. **Отредактируйте .env:**
```bash
nano .env
```
4. **Проверьте конфигурацию:**
```bash
./check-config.sh
```
5. **Запустите деплой:**
```bash
./deploy.sh
```
## 📂 Созданные файлы
### Конфигурационные файлы:
- ✅ `.env.example` - Пример переменных окружения
- ✅ `docker-compose.yml` - Обновлён для development
- ✅ `docker-compose.prod.yml` - Production конфигурация с Nginx
- ✅ `Dockerfile` - Обновлён с улучшениями
- ✅ `nginx.conf` - Конфигурация Nginx для production
### Скрипты:
- ✅ `deploy.sh` - Автоматический деплой
- ✅ `check-config.sh` - Проверка конфигурации
- ✅ `setup-ssl.sh` - Настройка SSL сертификатов
### Документация:
- ✅ `DEPLOYMENT.md` - Подробная документация по деплою
- ✅ `ENV_VARIABLES.md` - Этот файл
- ✅ `settings_production.py` - Дополнительные настройки для production
## 🔍 Изменения в коде
### smartsoltech/settings.py:
- ✅ Добавлена поддержка `DEBUG` из .env (с приведением к bool)
- ✅ Используется `python-decouple` для управления переменными
### docker-compose.yml:
- ✅ Добавлены health checks для всех сервисов
- ✅ Добавлены volumes для persistent storage
- ✅ Улучшены зависимости между сервисами
- ✅ Добавлены restart policies
### Dockerfile:
- ✅ Установка системных зависимостей (postgresql-client, netcat)
- ✅ Улучшенная обработка статики
- ✅ Health check для контейнера
- ✅ Использование wait-for-it.sh для ожидания БД
## ⚠️ Важные замечания
1. **Никогда не коммитьте .env файл в git!** Он в .gitignore
2. В production обязательно установите `DEBUG=False`
3. Используйте сильные пароли для всех сервисов
4. Регулярно обновляйте зависимости
5. Настройте backup базы данных
6. Используйте HTTPS в production
## 🆘 Поддержка
Для получения помощи:
1. Проверьте логи: `docker-compose logs -f`
2. Смотрите DEPLOYMENT.md для troubleshooting
3. Используйте `check-config.sh` для диагностики

View File

@@ -1 +0,0 @@
{"detail":"User 4 deleted"}

View File

@@ -1 +0,0 @@
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0Iiwicm9sZSI6InVzZXIiLCJleHAiOjE3NTI0OTc2NDV9.S_tquLFIPnyG6XlfwIw97hJv0l9oKpTcYw_XG0mDd6w","token_type":"bearer"}

View File

@@ -1 +0,0 @@
{"id":4,"email":"testuser@example.com","role":"user"}

View File

@@ -1 +0,0 @@
{"id":4,"email":"testuser@example.com","role":"user"}

View File

@@ -1 +0,0 @@
{"id":4,"email":"updated_testuser@example.com","role":"admin"}

View File

@@ -1 +0,0 @@
{"id":4,"email":"testuser@example.com","role":"user"}

View File

@@ -1 +0,0 @@
[{"id":1,"email":"user1@example.com","role":"user"},{"id":4,"email":"testuser@example.com","role":"user"}]

154
scripts/README.md Normal file
View File

@@ -0,0 +1,154 @@
# Scripts
Скрипты для управления и деплоя SmartSolTech.
## Доступные скрипты
### 🚀 deploy.sh
Автоматический деплой приложения в Docker.
**Использование:**
```bash
chmod +x deploy.sh
./deploy.sh
```
**Что делает:**
- Проверяет наличие .env файла
- Останавливает существующие контейнеры
- Собирает Docker образы
- Запускает PostgreSQL
- Применяет миграции БД
- Собирает статику
- Запускает все сервисы
---
### 🔍 check-config.sh
Проверка конфигурации проекта перед деплоем.
**Использование:**
```bash
chmod +x check-config.sh
./check-config.sh
```
**Проверяет:**
- Наличие .env файла и обязательных переменных
- Установку Docker и Docker Compose
- Наличие необходимых файлов
- Права доступа к скриптам
---
### 🔒 setup-ssl.sh
Настройка SSL сертификатов Let's Encrypt для production.
**Использование:**
```bash
chmod +x setup-ssl.sh
./setup-ssl.sh your-domain.com admin@your-domain.com
```
**Параметры:**
- `domain` - Ваш домен (например, smartsoltech.kr)
- `email` - Email для уведомлений Let's Encrypt
**Что делает:**
- Создает директории для сертификатов
- Запрашивает SSL сертификат через Certbot
- Генерирует конфигурацию Nginx с HTTPS
- Настраивает автоматическое обновление сертификатов
---
### 📱 update_telegram_token.py
Обновление токена Telegram бота в базе данных.
**Использование:**
```bash
# Внутри Docker контейнера
docker-compose exec web python scripts/update_telegram_token.py
# Или напрямую с Python
python scripts/update_telegram_token.py
```
**Что делает:**
- Проверяет валидность нового токена
- Обновляет токен в базе данных
- Сохраняет информацию о боте
**Получение токена:**
1. Откройте [@BotFather](https://t.me/BotFather) в Telegram
2. Отправьте `/mybots`
3. Выберите своего бота
4. Нажмите "API Token"
---
### 🔄 update_bot_token.sh
Shell скрипт для обновления токена бота (обертка для Python скрипта).
**Использование:**
```bash
chmod +x update_bot_token.sh
./update_bot_token.sh "YOUR_BOT_TOKEN"
```
---
## Общие рекомендации
### Права доступа
Все скрипты должны быть исполняемыми:
```bash
chmod +x scripts/*.sh
```
### Production деплой
Для production используйте:
```bash
# 1. Проверьте конфигурацию
./scripts/check-config.sh
# 2. Настройте SSL (опционально)
./scripts/setup-ssl.sh your-domain.com your-email@example.com
# 3. Запустите деплой с production конфигурацией
docker-compose -f docker-compose.prod.yml up -d
```
### Development
Для разработки:
```bash
# Используйте обычный docker-compose.yml
./scripts/deploy.sh
```
## Troubleshooting
### Скрипт не запускается
```bash
# Проверьте права доступа
ls -la scripts/
# Добавьте права на выполнение
chmod +x scripts/*.sh
```
### Ошибка "command not found"
```bash
# Запускайте скрипты с ./
./scripts/deploy.sh
# Или из корня проекта
bash scripts/deploy.sh
```
### Docker команды не работают
Убедитесь, что Docker и Docker Compose установлены:
```bash
docker --version
docker-compose --version
```

102
scripts/check-config.sh Executable file
View File

@@ -0,0 +1,102 @@
#!/bin/bash
# Configuration check script for SmartSolTech
echo "🔍 Checking SmartSolTech configuration..."
echo ""
# Color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Check if .env file exists
if [ -f .env ]; then
echo -e "${GREEN}${NC} .env file found"
# Check required variables
required_vars=("SECRET_KEY" "POSTGRES_DB" "POSTGRES_USER" "POSTGRES_PASSWORD" "POSTGRES_HOST" "PGADMIN_DEFAULT_EMAIL" "PGADMIN_DEFAULT_PASSWORD")
for var in "${required_vars[@]}"; do
if grep -q "^${var}=" .env; then
value=$(grep "^${var}=" .env | cut -d '=' -f2)
if [ -n "$value" ] && [ "$value" != "your-" ] && [[ ! "$value" =~ ^your- ]]; then
echo -e "${GREEN}${NC} $var is set"
else
echo -e "${YELLOW}${NC} $var needs to be configured"
fi
else
echo -e "${RED}${NC} $var is missing"
fi
done
else
echo -e "${RED}${NC} .env file not found"
echo -e "${YELLOW}${NC} Copy .env.example to .env and configure it"
fi
echo ""
# Check Docker
if command -v docker &> /dev/null; then
echo -e "${GREEN}${NC} Docker is installed"
docker --version
else
echo -e "${RED}${NC} Docker is not installed"
fi
echo ""
# Check Docker Compose
if command -v docker-compose &> /dev/null; then
echo -e "${GREEN}${NC} Docker Compose is installed"
docker-compose --version
else
echo -e "${RED}${NC} Docker Compose is not installed"
fi
echo ""
# Check required files
required_files=("Dockerfile" "docker-compose.yml" "requirements.txt" "wait-for-it.sh")
for file in "${required_files[@]}"; do
if [ -f "$file" ]; then
echo -e "${GREEN}${NC} $file exists"
else
echo -e "${RED}${NC} $file is missing"
fi
done
echo ""
# Check wait-for-it.sh is executable
if [ -f "wait-for-it.sh" ] && [ -x "wait-for-it.sh" ]; then
echo -e "${GREEN}${NC} wait-for-it.sh is executable"
else
echo -e "${YELLOW}${NC} wait-for-it.sh is not executable (will be set in Docker)"
fi
echo ""
# Check Python version in requirements
if [ -f "requirements.txt" ]; then
echo -e "${GREEN}${NC} Python dependencies:"
grep -E "^Django==|^psycopg2|^python-telegram-bot==" requirements.txt
fi
echo ""
# Summary
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📋 Next steps:"
echo ""
if [ ! -f .env ]; then
echo "1. Create .env file: cp .env.example .env"
echo "2. Edit .env with your configuration: nano .env"
fi
echo "3. Generate SECRET_KEY:"
echo ' python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"'
echo "4. Update ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS in .env"
echo "5. Run deployment: ./deploy.sh"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

0
deploy.sh → scripts/deploy.sh Normal file → Executable file
View File

131
scripts/setup-ssl.sh Executable file
View File

@@ -0,0 +1,131 @@
#!/bin/bash
# SSL Setup script using Let's Encrypt for SmartSolTech
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: ./setup-ssl.sh <domain> <email>"
echo "Example: ./setup-ssl.sh smartsoltech.kr admin@smartsoltech.kr"
exit 1
fi
DOMAIN=$1
EMAIL=$2
echo "🔒 Setting up SSL for $DOMAIN..."
# Create directories
mkdir -p certbot/conf
mkdir -p certbot/www
# Stop nginx if running
docker-compose -f docker-compose.prod.yml stop nginx 2>/dev/null || true
# Get certificate
echo "📝 Requesting SSL certificate..."
docker-compose -f docker-compose.prod.yml run --rm certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
--email $EMAIL \
--agree-tos \
--no-eff-email \
--force-renewal \
-d $DOMAIN \
-d www.$DOMAIN
if [ $? -eq 0 ]; then
echo "✅ SSL certificate obtained successfully!"
# Update nginx configuration for HTTPS
cat > nginx-ssl.conf << 'EOF'
upstream django_app {
server web:8000;
}
# HTTP redirect to HTTPS
server {
listen 80;
server_name DOMAIN_PLACEHOLDER www.DOMAIN_PLACEHOLDER;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS server
server {
listen 443 ssl http2;
server_name DOMAIN_PLACEHOLDER www.DOMAIN_PLACEHOLDER;
ssl_certificate /etc/letsencrypt/live/DOMAIN_PLACEHOLDER/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/DOMAIN_PLACEHOLDER/privkey.pem;
# SSL settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 20M;
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
location / {
proxy_pass http://django_app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_redirect off;
proxy_buffering off;
}
location /static/ {
alias /app/smartsoltech/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /app/smartsoltech/media/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# Deny access to sensitive files
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
EOF
# Replace domain placeholder
sed -i "s/DOMAIN_PLACEHOLDER/$DOMAIN/g" nginx-ssl.conf
echo ""
echo "📋 SSL certificate installed!"
echo ""
echo "Next steps:"
echo "1. Replace nginx.conf with nginx-ssl.conf:"
echo " mv nginx-ssl.conf nginx.conf"
echo ""
echo "2. Update .env file with your domain:"
echo " ALLOWED_HOSTS=localhost,127.0.0.1,$DOMAIN,www.$DOMAIN"
echo " CSRF_TRUSTED_ORIGINS=https://$DOMAIN,https://www.$DOMAIN"
echo ""
echo "3. Restart services:"
echo " docker-compose -f docker-compose.prod.yml restart"
else
echo "❌ Failed to obtain SSL certificate"
exit 1
fi

22
tests/README.md Normal file
View File

@@ -0,0 +1,22 @@
# Test Files
Эта папка содержит тестовые и отладочные файлы.
## Файлы
- `endpoint_test.sh` - Скрипт для тестирования API эндпоинтов
- `real_confirmation_process.html` - Документация процесса подтверждения заявок
- `response_*.json` - Примеры ответов API (генерируются автоматически)
## Использование
### Тестирование API
```bash
chmod +x endpoint_test.sh
./endpoint_test.sh
```
## Примечание
Файлы `response_*.json` игнорируются git и генерируются автоматически при запуске тестов.