🚀 Установка и настройка¶
📋 Обзор¶
Данное руководство поможет вам установить и настроить систему охраны труда на вашем сервере. Система поддерживает развертывание как в Docker контейнерах, так и в нативной среде.
🎯 Требования к системе¶
Минимальные требования¶
- CPU: 2 ядра
- RAM: 4 GB
- Диск: 50 GB свободного места
- ОС: Ubuntu 20.04+ / CentOS 8+ / Windows Server 2019+
Рекомендуемые требования¶
- CPU: 4+ ядра
- RAM: 8+ GB
- Диск: 100+ GB SSD
- ОС: Ubuntu 22.04 LTS
Программное обеспечение¶
- Python: 3.11+
- Node.js: 18+
- PostgreSQL: 14+
- Redis: 6+ (опционально)
- Nginx: 1.18+ (для продакшн)
🐳 Установка через Docker (Рекомендуется)¶
Предварительные требования¶
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# Установка Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Клонирование репозитория¶
Настройка переменных окружения¶
Пример .env файла:
# База данных
DATABASE_URL=postgresql://safety_user:safety_password@db:5432/safety_db
# Redis
REDIS_URL=redis://redis:6379
# JWT
SECRET_KEY=your-secret-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=15
# CORS
CORS_ORIGINS=["http://localhost:3000", "https://yourdomain.com"]
# Email
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# Файловое хранилище
UPLOAD_DIR=uploads
SFTP_HOST=your-sftp-server.com
SFTP_USER=safety_user
SFTP_PASSWORD=safety_password
Запуск системы¶
# Запуск всех сервисов
docker-compose up -d
# Проверка статуса
docker-compose ps
# Просмотр логов
docker-compose logs -f
Инициализация базы данных¶
# Выполнение миграций
docker-compose exec backend alembic upgrade head
# Создание администратора
docker-compose exec backend python -c "
from app.database import SessionLocal
from app.models.models import User
from app.utils.auth import get_password_hash
db = SessionLocal()
admin = User(
username='admin',
email='admin@example.com',
full_name='Администратор Системы',
password_hash=get_password_hash('admin123'),
role='admin',
is_active=True,
password_set=True,
first_login_completed=True
)
db.add(admin)
db.commit()
db.close()
print('Администратор создан: admin / admin123')
"
🖥️ Нативная установка¶
Установка зависимостей¶
Ubuntu/Debian¶
# Обновление системы
sudo apt update && sudo apt upgrade -y
# Установка Python 3.11
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev -y
# Установка PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# Установка Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs -y
# Установка системных зависимостей
sudo apt install build-essential libpq-dev libffi-dev -y
CentOS/RHEL¶
# Установка EPEL репозитория
sudo yum install epel-release -y
# Установка Python 3.11
sudo yum install python311 python311-pip python311-devel -y
# Установка PostgreSQL
sudo yum install postgresql-server postgresql-contrib -y
sudo postgresql-setup initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql
# Установка Node.js
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install nodejs -y
# Установка системных зависимостей
sudo yum groupinstall "Development Tools" -y
sudo yum install postgresql-devel libffi-devel -y
Настройка базы данных¶
# Переключение на пользователя postgres
sudo -u postgres psql
# Создание базы данных и пользователя
CREATE DATABASE safety_db;
CREATE USER safety_user WITH PASSWORD 'safety_password';
GRANT ALL PRIVILEGES ON DATABASE safety_db TO safety_user;
\q
Установка Backend¶
# Клонирование репозитория
git clone https://github.com/safety-system/back_opр.git
cd back_opр
# Создание виртуального окружения
python3.11 -m venv venv
source venv/bin/activate
# Установка зависимостей
pip install -r requirements.txt
# Настройка переменных окружения
cp .env.example .env
nano .env
Установка Frontend¶
# Переход в директорию фронтенда
cd frontend
# Установка зависимостей
npm install
# Сборка для продакшн
npm run build
Запуск системы¶
# Запуск backend
cd ../python_backend
source venv/bin/activate
uvicorn main:app --host 0.0.0.0 --port 8000
# Запуск frontend (в отдельном терминале)
cd frontend
npm run preview
⚙️ Конфигурация¶
Настройка Nginx (Продакшн)¶
server {
listen 80;
server_name yourdomain.com;
# Редирект на HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com;
# SSL сертификаты
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
# Frontend
location / {
root /path/to/frontend/dist;
try_files $uri $uri/ /index.html;
}
# 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;
}
# WebSocket (если используется)
location /ws/ {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Настройка systemd сервисов¶
# /etc/systemd/system/safety-backend.service
[Unit]
Description=Safety System Backend
After=network.target
[Service]
Type=simple
User=safety
WorkingDirectory=/opt/safety-system/python_backend
Environment=PATH=/opt/safety-system/venv/bin
ExecStart=/opt/safety-system/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
# Активация сервиса
sudo systemctl daemon-reload
sudo systemctl enable safety-backend
sudo systemctl start safety-backend
🔧 Настройка окружения¶
Переменные окружения¶
Обязательные переменные¶
# База данных
DATABASE_URL=postgresql://user:password@localhost:5432/database
# Безопасность
SECRET_KEY=your-secret-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=15
# CORS
CORS_ORIGINS=["http://localhost:3000"]
Опциональные переменные¶
# Redis (для кэширования)
REDIS_URL=redis://localhost:6379
# Email
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# Файловое хранилище
UPLOAD_DIR=uploads
SFTP_HOST=your-sftp-server.com
SFTP_USER=safety_user
SFTP_PASSWORD=safety_password
# Логирование
LOG_LEVEL=INFO
LOG_FILE=/var/log/safety-system.log
# Мониторинг
SENTRY_DSN=your-sentry-dsn
Настройка SSL сертификатов¶
# Использование Let's Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com
# Автоматическое обновление
sudo crontab -e
# Добавить строку:
0 12 * * * /usr/bin/certbot renew --quiet
🗄️ Настройка базы данных¶
Миграции¶
# Создание новой миграции
alembic revision --autogenerate -m "Description of changes"
# Применение миграций
alembic upgrade head
# Откат миграции
alembic downgrade -1
Резервное копирование¶
# Создание бэкапа
pg_dump -h localhost -U safety_user -d safety_db > backup_$(date +%Y%m%d_%H%M%S).sql
# Восстановление из бэкапа
psql -h localhost -U safety_user -d safety_db < backup_20240115_120000.sql
Мониторинг базы данных¶
-- Проверка размера базы данных
SELECT pg_size_pretty(pg_database_size('safety_db'));
-- Проверка активных соединений
SELECT count(*) FROM pg_stat_activity WHERE datname = 'safety_db';
-- Проверка медленных запросов
SELECT query, mean_time, calls
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;
🔍 Проверка установки¶
Проверка Backend¶
# Проверка доступности API
curl http://localhost:8000/api/health
# Проверка документации
curl http://localhost:8000/api/docs
Проверка Frontend¶
Проверка базы данных¶
# Подключение к базе данных
psql -h localhost -U safety_user -d safety_db
# Проверка таблиц
\dt
# Проверка пользователей
SELECT username, email, role FROM safety_users;
🚨 Устранение неполадок¶
Частые проблемы¶
Проблема: Ошибка подключения к базе данных¶
Решение: 1. Проверить статус PostgreSQL: sudo systemctl status postgresql 2. Проверить настройки в .env файле 3. Проверить права пользователя базы данных 4. Проверить сетевые настройки
Проблема: Ошибка 500 при загрузке файлов¶
Решение: 1. Проверить права на директорию uploads 2. Проверить свободное место на диске 3. Проверить настройки Nginx (client_max_body_size) 4. Проверить логи приложения
Проблема: Медленная работа системы¶
Решение: 1. Проверить использование ресурсов сервера 2. Оптимизировать запросы к базе данных 3. Настроить кэширование Redis 4. Проверить индексы в базе данных
Логи и мониторинг¶
# Просмотр логов backend
tail -f /var/log/safety-system/backend.log
# Просмотр логов Nginx
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
# Мониторинг ресурсов
htop
iostat -x 1
📞 Поддержка¶
При возникновении проблем с установкой: - Email: support@safety-system.com - Документация: https://docs.safety-system.com - GitHub Issues: https://github.com/safety-system/back_opр/issues - Telegram: @safety_system_support
Руководство по установке регулярно обновляется. Для получения актуальной информации проверяйте последнюю версию документации.