diff --git a/install.md b/install.md new file mode 100644 index 0000000..8ff5245 --- /dev/null +++ b/install.md @@ -0,0 +1,107 @@ +### Инструкция по развертыванию на выделенный сервер с доступом по внешнему IP + +Предполагается, что сервер работает на Ubuntu/Debian. Замените `` на реальный внешний IP-адрес сервера, `` на домен (если есть), и настройте firewall для открытых портов (например, 22 для SSH, 80/443 для HTTP/HTTPS, 5000 для backend). + +#### 1. Подготовка сервера + +- Подключитесь к серверу по SSH: `ssh user@` +- Обновите систему: `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_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://:5000` или `https://` (если используете 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 ; + + 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 ` +- Измените конфиг nginx для listen 443 и перенаправления с 80 на 443. + +#### 7. Проверка + +- Откройте браузер и перейдите на `http://` для frontend. +- Backend доступен на `http://:5000/api`. +- Убедитесь, что firewall разрешает трафик на нужные порты: `sudo ufw allow 80 && sudo ufw allow 443 && sudo ufw allow 5000`. + +Если база данных внешняя, обновите `DB_HOST` в `.env` на её IP. Для продакшена измените пароль админа и JWT secret.