- BRAINYCP_DEPLOY_GUIDE.md: complete human deployment guide - AI_DEPLOY_CONTEXT.md: machine-readable deploy instructions for AI agents - sync-production.sh: universal deployment script (full/quick/status/logs/backup) - DEPLOY_PLAN.md: step-by-step deployment plan - DEPLOY_AUDIT_REPORT.md: server audit results - MIGRATION_AUDIT_REPORT.md: MySQL migration complexity analysis - SERVER_AUDIT_REPORT.md: server environment audit - Update README.md with BrainyCP deploy workflow and Git sync instructions Refs: production server 46.175.149.131, domain tenerifeprop.es
181 lines
5.7 KiB
Markdown
181 lines
5.7 KiB
Markdown
# План деплоя 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` под реальные на сервере.
|