Initial commit: Базовая структура сайта
This commit is contained in:
320
DEPLOYMENT.md
Executable file
320
DEPLOYMENT.md
Executable file
@@ -0,0 +1,320 @@
|
||||
# Инструкция по развертыванию
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
### 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` в безопасном месте!
|
||||
|
||||
Reference in New Issue
Block a user