- 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
268 lines
7.4 KiB
Markdown
268 lines
7.4 KiB
Markdown
# 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>
|
||
```
|