# План деплоя TenerifeProp на BrainyCP (v2) ## Условия на сервере - Панель: **BrainyCP** - Папка проекта: **уже создана** панелью (например, `/var/www/{user}/data/www/{domain}/`) - Выделен порт: **3003** - Runtime: **Bun** - БД: **SQLite** (WAL mode) - Web-сервер: **Nginx** (управляется BrainyCP) - SSL: настраивается через BrainyCP (Let's Encrypt) ## Архитектура деплоя ``` Интернет → Nginx (BrainyCP: 80/443) → Reverse Proxy → Bun (localhost:3003) ↑ ↑ SSL от BrainyCP PM2 / Systemd ``` Bun работает как standalone backend на `localhost:3003`. Nginx терминирует SSL и проксирует HTTP-запросы. ## Пошаговая инструкция ### 1. SSH на сервер ```bash ssh user@your_server_ip ``` ### 2. Установка Bun ```bash curl -fsSL https://bun.sh/install | bash source ~/.bashrc bun --version ``` ### 3. Загрузка проекта в папку BrainyCP Если папка уже создана панелью (например, `/var/www/user/data/www/tenerifeprop.ru`): - Загрузи туда файлы проекта (через FTP, SCP или Git). - Убедись, что папка `data/` существует и доступна для записи. ```bash cd /var/www/user/data/www/tenerifeprop.ru # Если через git: git clone https://git.softuniq.eu/UniqueSoft/TenerifeProp.git . # Установка зависимостей: bun install --production ``` ### 4. Создание .env (PORT = 3003) ```bash cat > .env <<'EOF' NODE_ENV=production PORT=3003 RESEND_API_KEY=your_key_here TELEGRAM_BOT_TOKEN=your_token_here TELEGRAM_CHAT_ID=your_chat_id_here GITEA_API_URL=https://git.softuniq.eu/api/v1 GITEA_TOKEN=your_gitea_token_here EOF chmod 600 .env ``` ### 5. Инициализация базы данных (если нужно) ```bash # Создание БД и сидов bun run src/db/init.ts bun run src/db/seed.ts # Убедись, что файл появился: ls -la data/tenerifeprop.db ``` ### 6. Запуск через PM2 ```bash bun add -g pm2 pm2 start "bun run src/server/index.ts" --name tenerifeprop pm2 save pm2 startup systemd # Выполни команду, которую предложит pm2 (обычно sudo systemctl ...) ``` Проверка: ```bash curl http://localhost:3003/api/settings ``` ### 7. Настройка Nginx в BrainyCP Зайди в панель BrainyCP: - **WWW-домены** → твой домен → **Редактировать конфиг Nginx** (или "Дополнительные настройки / Пользовательский конфиг"). Добавь внутрь секции `server` (перед закрывающей скобкой или в начале): ```nginx location / { proxy_pass http://127.0.0.1:3003; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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; proxy_cache_bypass $http_upgrade; proxy_read_timeout 86400; } ``` > **Важно:** не редактируй `/etc/nginx/nginx.conf` напрямую — BrainyCP может перезаписать его. ### 8. Перезапуск Nginx Через BrainyCP: - **Сервисы** → **Nginx** → **Перезапустить** Или по SSH: ```bash sudo nginx -t && sudo systemctl reload nginx ``` ### 9. Проверка - Открой домен в браузере: `https://твой-домен.ru` - Проверь API: `https://твой-домен.ru/api/settings` - Проверь админку: `https://твой-домен.ru/admin/login` - Войди с демо-данными: `admin@clinic.ru` / `admin123` ## Автоматизация обновлений Скрипт `deploy.sh` в корне проекта: ```bash #!/bin/bash set -e cd /var/www/user/data/www/tenerifeprop.ru git pull origin dev bun install --production pm2 restart tenerifeprop ``` ```bash chmod +x deploy.sh ``` ## Риски и нюансы | Проблема | Решение | |----------|---------| | BrainyCP перезаписывает Nginx-конфиг | Редактировать только через панель (WWW-домены) | | Порт 3003 занят | `lsof -i :3003` → найди и убей процесс, или укажи другой порт | | Нет root-прав | Установка Bun в `$HOME/.bun`, PM2 глобально через `bun add -g` | | SQLite не переживает перенос | Копируй `data/tenerifeprop.db` через `rsync` или `scp` | | SSL | BrainyCP → SSL → Let's Encrypt. Nginx терминирует SSL, Bun работает по HTTP | ## Альтернатива без PM2 (systemd unit) Если PM2 недоступен, создай systemd-сервис: ```bash sudo tee /etc/systemd/system/tenerifeprop.service <<'EOF' [Unit] Description=TenerifeProp Bun Server After=network.target [Service] Type=simple User=www-data WorkingDirectory=/var/www/user/data/www/tenerifeprop.ru Environment=NODE_ENV=production Environment=PORT=3003 ExecStart=/home/user/.bun/bin/bun run src/server/index.ts Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable tenerifeprop sudo systemctl start tenerifeprop ``` > Адаптируй пути `User`, `WorkingDirectory` и `ExecStart` под реальные на сервере.