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:
267
docs/DEPLOYMENT.md
Normal file
267
docs/DEPLOYMENT.md
Normal 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
134
docs/ENV_VARIABLES.md
Normal 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` для диагностики
|
||||
60
docs/QR_CODE_FEATURE_SUMMARY.md
Normal file
60
docs/QR_CODE_FEATURE_SUMMARY.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# QR-код механизм для подачи заявок через Telegram бота
|
||||
|
||||
## ✅ Что добавлено:
|
||||
|
||||
### 1. Модальное окно с QR-кодом
|
||||
- **Файл**: `smartsoltech/web/templates/web/services_modern.html`
|
||||
- **Что добавлено**:
|
||||
- Секция QR-кода в модальном окне заявки
|
||||
- JavaScript для обработки формы и генерации QR-кода
|
||||
- Автоматический сброс формы при закрытии модального окна
|
||||
|
||||
### 2. Backend функциональность
|
||||
- **Существующий механизм**: View `generate_qr_code` в `smartsoltech/web/views.py`
|
||||
- **Что работает**:
|
||||
- Создание клиента и заявки на услугу
|
||||
- Генерация уникального токена для заявки
|
||||
- Создание QR-кода с ссылкой на Telegram бота
|
||||
- Сохранение QR-кода в папку static/qr_codes/
|
||||
|
||||
### 3. Telegram бот интеграция
|
||||
- **Файл**: `smartsoltech/comunication/telegram_bot.py`
|
||||
- **Что работает**:
|
||||
- Обработка команды `/start request_{id}_token_{token}`
|
||||
- Подтверждение заявки и связывание с chat_id пользователя
|
||||
- Создание пользователя Django из данных Telegram
|
||||
- Отправка подтверждающего сообщения
|
||||
|
||||
## 🔄 Workflow (Рабочий процесс):
|
||||
|
||||
1. **Пользователь** заполняет форму в модальном окне на странице услуг
|
||||
2. **JavaScript** отправляет POST запрос на `/service/generate_qr_code/{service_id}/`
|
||||
3. **Django** создает:
|
||||
- Client (клиента)
|
||||
- ServiceRequest (заявку на услугу)
|
||||
- QR-код с ссылкой на Telegram бота
|
||||
4. **Модальное окно** показывает QR-код и ссылку "Открыть в Telegram"
|
||||
5. **Пользователь** сканирует QR-код или переходит по ссылке
|
||||
6. **Telegram бот** получает команду `/start` с параметрами заявки
|
||||
7. **Бот** подтверждает заявку, связывает с chat_id и отправляет подтверждение
|
||||
|
||||
## 🧪 Тестирование:
|
||||
|
||||
Откройте файл `test_qr_functionality.html` в браузере для подробных инструкций по тестированию.
|
||||
|
||||
Быстрый тест:
|
||||
1. Перейдите на http://localhost:8000/services/
|
||||
2. Нажмите "Заказать услугу" под любой услугой
|
||||
3. Заполните форму и отправьте
|
||||
4. Должен появиться QR-код
|
||||
5. Перейдите по ссылке в Telegram и нажмите "Start"
|
||||
|
||||
## 📁 Измененные файлы:
|
||||
|
||||
1. `smartsoltech/web/templates/web/services_modern.html` - добавлен QR-код в модальное окно
|
||||
2. Использован существующий механизм в `smartsoltech/web/views.py` - `generate_qr_code`
|
||||
3. Использован существующий Telegram бот в `smartsoltech/comunication/telegram_bot.py`
|
||||
|
||||
## 🎯 Результат:
|
||||
|
||||
Теперь пользователи могут подавать заявки на услуги через современное модальное окно, которое генерирует QR-код для подтверждения заявки через Telegram бота. Весь процесс автоматизирован и интегрирован с существующей системой.
|
||||
Reference in New Issue
Block a user