- 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
5.7 KiB
5.7 KiB
План деплоя 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 на сервер
ssh user@your_server_ip
2. Установка Bun
curl -fsSL https://bun.sh/install | bash
source ~/.bashrc
bun --version
3. Загрузка проекта в папку BrainyCP
Если папка уже создана панелью (например, /var/www/user/data/www/tenerifeprop.ru):
- Загрузи туда файлы проекта (через FTP, SCP или Git).
- Убедись, что папка
data/существует и доступна для записи.
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)
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. Инициализация базы данных (если нужно)
# Создание БД и сидов
bun run src/db/init.ts
bun run src/db/seed.ts
# Убедись, что файл появился:
ls -la data/tenerifeprop.db
6. Запуск через PM2
bun add -g pm2
pm2 start "bun run src/server/index.ts" --name tenerifeprop
pm2 save
pm2 startup systemd
# Выполни команду, которую предложит pm2 (обычно sudo systemctl ...)
Проверка:
curl http://localhost:3003/api/settings
7. Настройка Nginx в BrainyCP
Зайди в панель BrainyCP:
- WWW-домены → твой домен → Редактировать конфиг Nginx (или "Дополнительные настройки / Пользовательский конфиг").
Добавь внутрь секции server (перед закрывающей скобкой или в начале):
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:
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 в корне проекта:
#!/bin/bash
set -e
cd /var/www/user/data/www/tenerifeprop.ru
git pull origin dev
bun install --production
pm2 restart tenerifeprop
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-сервис:
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под реальные на сервере.