Перейти к содержанию

🚀 Установка и настройка

📋 Обзор

Данное руководство поможет вам установить и настроить систему охраны труда на вашем сервере. Система поддерживает развертывание как в 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

Клонирование репозитория

git clone https://github.com/safety-system/back_opр.git
cd back_opр

Настройка переменных окружения

# Копирование файла конфигурации
cp .env.example .env

# Редактирование конфигурации
nano .env

Пример .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

# Проверка доступности фронтенда
curl http://localhost:3000

Проверка базы данных

# Подключение к базе данных
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


Руководство по установке регулярно обновляется. Для получения актуальной информации проверяйте последнюю версию документации.