4.8 KiB
4.8 KiB
Инструкция по развертыванию на выделенный сервер с доступом по внешнему 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 postgresqlsudo -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-trackingserver { 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