Files
dash/DEPLOYMENT.md

321 lines
9.2 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по развертыванию
## Быстрый старт
### 1. Подготовка окружения
#### Установка зависимостей системы
**Ubuntu/Debian:**
```bash
sudo apt-get update
sudo apt-get install -y python3.9 python3-pip python3-venv postgresql-client nodejs npm
```
**Windows:**
- Установите Python 3.9+ с официального сайта
- Установите Node.js 18+ с официального сайта
- Установите PostgreSQL с официального сайта
### 2. Настройка баз данных
#### Создание readonly роли для ManicTime БД
**ВАЖНО**: Выполните эти команды на сервере PostgreSQL, где находится база данных ManicTime:
```sql
-- Подключитесь к PostgreSQL как суперпользователь
psql -U postgres
-- Создайте роль
CREATE ROLE manictime_readonly LOGIN PASSWORD 'N0v1y_S3cur3_P@ssw0rd!';
-- Предоставьте права на подключение к БД
GRANT CONNECT ON DATABASE "ManicTimeReports" TO manictime_readonly;
-- Предоставьте права на схему
GRANT USAGE ON SCHEMA public TO manictime_readonly;
-- Предоставьте права на чтение таблиц
GRANT SELECT ON ALL TABLES IN SCHEMA public TO manictime_readonly;
-- Для новых таблиц (если они будут созданы)
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO manictime_readonly;
```
#### Создание служебной базы данных
```sql
CREATE DATABASE dashboard_service;
```
### 3. Настройка Backend
```bash
cd backend
# Создание виртуального окружения
python -m venv venv
# Активация (Windows)
venv\Scripts\activate
# Активация (Linux/Mac)
source venv/bin/activate
# Установка зависимостей
pip install -r requirements.txt
# Создание файла .env
cp .env.example .env
# Отредактируйте .env с вашими настройками
# Используйте любой текстовый редактор
```
#### Настройка .env файла
Откройте `backend/.env` и заполните следующие параметры:
```env
# ManicTime Database (Read-Only)
MANICTIME_DB_HOST=192.168.1.100 # IP или hostname сервера ManicTime БД
MANICTIME_DB_PORT=5432
MANICTIME_DB_NAME=ManicTimeReports
MANICTIME_DB_USER=manictime_readonly
MANICTIME_DB_PASSWORD=N0v1y_S3cur3_P@ssw0rd! # Пароль, который вы установили выше
# Service Database
SERVICE_DB_HOST=localhost
SERVICE_DB_PORT=5432
SERVICE_DB_NAME=dashboard_service
SERVICE_DB_USER=postgres
SERVICE_DB_PASSWORD=ваш_пароль_postgres
# JWT Settings
JWT_SECRET_KEY=$(openssl rand -hex 32) # Сгенерируйте случайный ключ
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
```
**Для генерации JWT_SECRET_KEY на Linux/Mac:**
```bash
openssl rand -hex 32
```
**Для Windows:**
Используйте онлайн генератор или Python:
```python
import secrets
print(secrets.token_hex(32))
```
#### Инициализация базы данных
```bash
# Применение миграций
alembic upgrade head
# Создание начальных ролей и администратора
python scripts/init_db.py
```
### 4. Запуск Backend
```bash
# Режим разработки
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Или для production (рекомендуется использовать gunicorn)
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
```
Backend будет доступен по адресу: `http://localhost:8000`
API документация: `http://localhost:8000/docs`
### 5. Настройка Frontend
```bash
cd frontend
# Установка зависимостей
npm install
# Запуск в режиме разработки
npm run dev
# Или сборка для production
npm run build
```
Frontend будет доступен по адресу: `http://localhost:3000`
### 6. Первый вход
После успешного запуска:
1. Откройте браузер и перейдите на `http://localhost:3000`
2. Вы увидите страницу входа
3. Используйте учетные данные:
- **Логин**: `admin`
- **Пароль**: `admin123`
4. После входа **НЕМЕДЛЕННО** измените пароль через панель администратора
## Развертывание в Production
### Использование Docker
```bash
# Создайте .env файл в корне проекта
cp backend/.env.example .env
# Отредактируйте .env
# Запуск всех сервисов
docker-compose up -d
# Просмотр логов
docker-compose logs -f
# Остановка
docker-compose down
```
### Настройка Nginx (рекомендуется)
Пример конфигурации Nginx для production:
```nginx
server {
listen 80;
server_name your-domain.com;
# Frontend
location / {
root /path/to/frontend/dist;
try_files $uri $uri/ /index.html;
}
# Backend API
location /api {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
### Systemd Service (для Linux)
Создайте файл `/etc/systemd/system/manictime-dashboard.service`:
```ini
[Unit]
Description=ManicTime Dashboard Backend
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/dash/backend
Environment="PATH=/path/to/dash/backend/venv/bin"
ExecStart=/path/to/dash/backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
```
Активация сервиса:
```bash
sudo systemctl daemon-reload
sudo systemctl enable manictime-dashboard
sudo systemctl start manictime-dashboard
sudo systemctl status manictime-dashboard
```
## Устранение неполадок
### Проблема: Не удается подключиться к БД ManicTime
**Решение:**
1. Проверьте, что роль `manictime_readonly` создана и имеет правильные права
2. Проверьте файрвол - порт 5432 должен быть открыт
3. Проверьте настройки в `.env`
4. Попробуйте подключиться вручную: `psql -h HOST -U manictime_readonly -d ManicTimeReports`
### Проблема: Ошибка при миграциях
**Решение:**
```bash
# Проверьте подключение к служебной БД
psql -h localhost -U postgres -d dashboard_service
# Если БД не существует, создайте её
createdb dashboard_service
# Повторите миграции
alembic upgrade head
```
### Проблема: Frontend не может подключиться к Backend
**Решение:**
1. Проверьте, что Backend запущен на порту 8000
2. Проверьте настройки прокси в `vite.config.js`
3. Проверьте CORS настройки в `backend/app/main.py`
4. Проверьте консоль браузера на наличие ошибок
### Проблема: JWT токены не работают
**Решение:**
1. Убедитесь, что `JWT_SECRET_KEY` установлен в `.env`
2. Проверьте, что ключ достаточно длинный (минимум 32 символа)
3. Перезапустите Backend после изменения ключа
## Обновление системы
```bash
# 1. Остановите сервисы
docker-compose down # или systemctl stop manictime-dashboard
# 2. Обновите код
git pull # или скопируйте новые файлы
# 3. Обновите зависимости
cd backend
pip install -r requirements.txt
cd ../frontend
npm install
# 4. Примените миграции БД
cd backend
alembic upgrade head
# 5. Перезапустите сервисы
docker-compose up -d # или systemctl restart manictime-dashboard
```
## Резервное копирование
### База данных служебной БД
```bash
# Создание резервной копии
pg_dump -h localhost -U postgres dashboard_service > backup_$(date +%Y%m%d).sql
# Восстановление
psql -h localhost -U postgres dashboard_service < backup_20240101.sql
```
### Файлы конфигурации
Всегда сохраняйте копию файла `.env` в безопасном месте!