time-tracking-eltex/install.md

4.8 KiB
Raw Blame History

Инструкция по развертыванию на выделенный сервер с доступом по внешнему IP

Предполагается, что сервер работает на Ubuntu/Debian. Замените <external_ip> на реальный внешний IP-адрес сервера, <your_domain> на домен (если есть), и настройте firewall для открытых портов (например, 22 для SSH, 80/443 для HTTP/HTTPS, 5000 для backend).

1. Подготовка сервера

  • Подключитесь к серверу по SSH: ssh user@<external_ip>
  • Обновите систему: sudo apt update && sudo apt upgrade -y
  • Установите Node.js (версия 18+):
    curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
  • Установите PostgreSQL (если база данных не внешняя):
    sudo apt install postgresql postgresql-contrib -y
    sudo systemctl start postgresql
    sudo systemctl enable postgresql
    
    Создайте базу данных и пользователя (замените на свои значения):
    sudo -u postgres psql
    CREATE DATABASE time_tracking;
    CREATE USER postgres WITH PASSWORD 'g7K4b4Xv!';
    GRANT ALL PRIVILEGES ON DATABASE time_tracking TO postgres;
    \q
    
  • Установите nginx: sudo apt install nginx -y
  • Установите PM2 для управления процессами: sudo npm install -g pm2

2. Клонирование и настройка проекта

  • Клонируйте репозиторий: git clone https://github.com/your-repo/time-tracking-eltex.git (замените на ваш репо)
  • Перейдите в директорию: cd time-tracking-eltex

3. Настройка backend

  • Перейдите в backend: cd backend
  • Установите зависимости: npm install
  • Настройте .env файл (пример ниже, адаптируйте под свою базу):
    DB_HOST=<db_external_ip_or_localhost>
    DB_PORT=5432
    DB_USER=postgres
    DB_PASSWORD=g7K4b4Xv!
    DB_NAME=time_tracking
    JWT_SECRET=your_secure_jwt_secret
    PORT=5000
    
  • Запустите миграции: npx sequelize-cli db:migrate
  • Запустите backend с PM2: pm2 start server.js --name "backend"
  • Сохраните PM2 конфиг: pm2 save && pm2 startup

4. Настройка frontend

  • Перейдите в frontend: cd ../frontend
  • Установите зависимости: npm install
  • Измените URL в src/services/api.js и src/components/HealthCheck.jsx с http://localhost:5000 на http://<external_ip>:5000 или https://<your_domain> (если используете HTTPS).
  • Соберите проект: npm run build
  • Скопируйте билд в nginx: sudo cp -r dist/* /var/www/html/

5. Настройка nginx

  • Создайте конфиг для сайта: sudo nano /etc/nginx/sites-available/time-tracking

    server {
        listen 80;
        server_name <external_ip> <your_domain>;
    
        root /var/www/html;
        index index.html;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        location /api {
            proxy_pass http://localhost:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        location /health {
            proxy_pass http://localhost:5000;
        }
    }
    
  • Включите сайт: sudo ln -s /etc/nginx/sites-available/time-tracking /etc/nginx/sites-enabled/

  • Удалите дефолтный сайт: sudo rm /etc/nginx/sites-enabled/default

  • Проверьте конфиг: sudo nginx -t

  • Перезапустите nginx: sudo systemctl restart nginx

6. Настройка HTTPS (опционально, но рекомендуется)

  • Установите Certbot: sudo apt install certbot python3-certbot-nginx -y
  • Получите сертификат: sudo certbot --nginx -d <your_domain>
  • Измените конфиг nginx для listen 443 и перенаправления с 80 на 443.

7. Проверка

  • Откройте браузер и перейдите на http://<external_ip> для frontend.
  • Backend доступен на http://<external_ip>:5000/api.
  • Убедитесь, что firewall разрешает трафик на нужные порты: sudo ufw allow 80 && sudo ufw allow 443 && sudo ufw allow 5000.

Если база данных внешняя, обновите DB_HOST в .env на её IP. Для продакшена измените пароль админа и JWT secret.

pm2 start npm --name "time-tracking-frontend" -- run dev