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

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

@@ -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 бота. Весь процесс автоматизирован и интегрирован с существующей системой.