Files
TenerifeProp/docs/BRAINYCP_DEPLOY_GUIDE.md
APAW Agent Sync 3bcc705e3b docs: add deployment guides, audit reports, and production sync scripts
- 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
2026-05-13 23:44:38 +01:00

310 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Руководство по деплою TenerifeProp на BrainyCP
## Для кого это руководство
Для разработчиков и DevOps-инженеров, которые будут разворачивать или обновлять проект TenerifeProp на хостинге с панелью BrainyCP.
## 1. Предварительные требования
### На сервере (что уже должно быть)
- **BrainyCP** установлена и работает.
- **Домен** добавлен в панель (`tenerifeprop.es`).
- **NodeJS** установлен через панель BrainyCP (создаст заглушку на порту, например `3003`).
- **SSL** активирован (Let's Encrypt через панель).
- **SSH-доступ** к серверу с правами root.
- **Git** установлен (`git --version`).
### На локальной машине
- Доступ к репозиторию `git.softuniq.eu/UniqueSoft/TenerifeProp`.
- SSH-ключ или логин/пароль для доступа к серверу.
### Ветки проекта
```
origin/dev — основная ветка разработки
origin/main — ветка релиза
origin/production — ветка продакшена на BrainyCP (создаётся при первом деплое)
```
## 2. Структура проекта на сервере
```
/home/nero/sites/tenerifeprop.es/
├── .env # Переменные окружения
├── src/ # Серверный код
├── public/ # Статические файлы
├── data/
│ └── tenerifeprop.db # SQLite база данных
├── node_modules/ # Зависимости
├── package.json
├── bun.lock
└── .git/ # Git репозиторий (если клонирован)
```
## 3. Первый деплой (ручной)
### Шаг 1: Остановить заглушку BrainyCP
```bash
ssh root@46.175.149.131
systemctl stop nodejs@3003.service
systemctl disable nodejs@3003.service
```
### Шаг 2: Установить Bun
```bash
# Установка Bun в папку пользователя (не трогает системный Node.js)
curl -fsSL https://bun.sh/install | BUN_INSTALL=/home/nero/.bun bash
chown -R nero:nero /home/nero/.bun
```
Путь к Bun: `/home/nero/.bun/bin/bun`
### Шаг 3: Клонировать репозиторий
```bash
cd /home/nero/sites/tenerifeprop.es
# Очистить заглушку (сохранить .well-known для SSL)
rm -f index.js app.js app.css
git clone https://git.softuniq.eu/UniqueSoft/TenerifeProp.git .
```
### Шаг 4: Переключиться на ветку production
```bash
git checkout -b production origin/production
# или если ветки нет:
git checkout -b production
```
### Шаг 5: Создать `.env`
```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
EOF
chmod 600 .env
chown nero:nero .env
```
### Шаг 6: Установить зависимости
```bash
/home/nero/.bun/bin/bun install --production
```
### Шаг 7: Настроить systemd
Создать файл `/etc/systemd/system/tenerifeprop.service`:
```ini
[Unit]
Description=TenerifeProp Bun Server
After=network.target
[Service]
Type=simple
User=nero
WorkingDirectory=/home/nero/sites/tenerifeprop.es
Environment=NODE_ENV=production
Environment=PORT=3003
EnvironmentFile=/home/nero/sites/tenerifeprop.es/.env
ExecStart=/home/nero/.bun/bin/bun run src/server/index.ts
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
Активировать:
```bash
systemctl daemon-reload
systemctl enable tenerifeprop.service
systemctl start tenerifeprop.service
```
### Шаг 8: Проверить работу
```bash
# Локальный тест
curl http://localhost:3003/api/settings
# Ожидается: {"success":true,"data":{...}}
# Публичный тест
curl https://tenerifeprop.es/api/settings
# Логи
journalctl -u tenerifeprop -f
```
## 4. Обновление проекта (Git-based deploy)
### Метод A: Скрипт автообновления (рекомендуется)
На сервере есть скрипт `/home/nero/sites/tenerifeprop.es/scripts/deploy.sh`.
```bash
# Обновить из ветки production
cd /home/nero/sites/tenerifeprop.es
./scripts/deploy.sh
```
Что делает скрипт:
1. `git fetch origin`
2. `git reset --hard origin/production`
3. `bun install --production`
4. `chown -R nero:nero .`
5. `chmod 600 .env`
6. `systemctl restart tenerifeprop`
7. Проверка healthcheck
### Метод B: Ручное обновление
```bash
ssh root@46.175.149.131
cd /home/nero/sites/tenerifeprop.es
# Переключиться на production
git checkout production
git pull origin production
# Установить зависимости (если изменились)
/home/nero/.bun/bin/bun install --production
# Права
chown -R nero:nero .
chmod 600 .env
# Перезапустить
systemctl restart tenerifeprop
# Проверить
systemctl status tenerifeprop
curl http://localhost:3003/api/settings
```
## 5. Git workflow для синхронизации
### Схема веток
```
[dev] → commit, push → PR → [main] → tag → PR → [production] → auto-deploy
```
### Как внести изменения
1. **Разработка** (на локальной машине или в Docker):
```bash
git checkout dev
# вносишь изменения
git add .
git commit -m "feat: новая фича"
git push origin dev
```
2. **Релиз** (merge в main):
```bash
git checkout main
git merge dev
git tag -a v1.1.0 -m "Release v1.1.0"
git push origin main --tags
```
3. **Деплой** (merge в production):
```bash
git checkout production
git merge main
git push origin production
```
4. **Авто-деплой** (на сервере):
- Вебхук Gitea → сервер получает уведомление.
- Или `git pull` по cron каждые 5 минут.
- Или запускаешь `./scripts/deploy.sh` вручную.
### Webhook (Gitea → сервер)
В Gitea (Settings → Webhooks → Add Webhook):
- URL: `https://tenerifeprop.es/api/admin/deploy`
- Секретный ключ: настрой в `.env` (`DEPLOY_SECRET`)
- События: `push`
На сервере нужен endpoint `/api/admin/deploy`, который:
1. Проверяет секретный ключ.
2. Запускает `git pull origin production`.
3. Перезапускает сервер.
Это усложнение — рекомендуется начать со скрипта.
## 6. Резервное копирование базы данных
### Дамп БД (на сервере)
```bash
cd /home/nero/sites/tenerifeprop.es
# SQLite — просто копируем файл
cp data/tenerifeprop.db /backup/tenerifeprop-$(date +%Y%m%d).db
```
### Восстановление
```bash
systemctl stop tenerifeprop
cp /backup/tenerifeprop-20260513.db data/tenerifeprop.db
chown nero:nero data/tenerifeprop.db
chmod 644 data/tenerifeprop.db
systemctl start tenerifeprop
```
## 7. Troubleshooting
| Проблема | Решение |
|----------|---------|
| Bun не найден | Проверь `ls /home/nero/.bun/bin/bun`. Если нет — переустановить. |
| Порт 3003 занят | `lsof -i :3003` → найти и убить процесс. Или изменить порт в `.env` и Nginx. |
| Nginx не проксирует | Проверить конфиг BrainyCP. Сравнить с рабочим сайтом. |
| Permission denied | `chown -R nero:nero /home/nero/sites/tenerifeprop.es` |
| SQLite database is locked | Остановить сервер, удалить `*.db-shm` и `*.db-wal`, запустить. |
| 502 Bad Gateway | Backend не запущен. `systemctl start tenerifeprop`. |
| Статика 404 | Проверить пути в `public/`. CSS/JS должны быть доступны через Bun. |
## 8. Команды для мониторинга
```bash
# Статус сервера
systemctl status tenerifeprop
# Логи реального времени
journalctl -u tenerifeprop -f
# Проверка порта
ss -tlnp | grep 3003
lsof -i :3003
# Проверка процесса Bun
ps aux | grep bun
# Проверка API
curl -s http://localhost:3003/api/settings | python -m json.tool
# Проверка SSL
openssl s_client -connect tenerifeprop.es:443 -servername tenerifeprop.es
# Ресурсы сервера
htop
df -h
free -h
```
## 9. Контакты и доступы
| Параметр | Значение |
|----------|----------|
| Сервер | `46.175.149.131` |
| SSH логин | `root` |
| Панель | BrainyCP (пользователь `nero`) |
| Домен | `tenerifeprop.es` |
| Backend порт | `3003` |
| Bun путь | `/home/nero/.bun/bin/bun` |
| Папка сайта | `/home/nero/sites/tenerifeprop.es` |
| Логи | `journalctl -u tenerifeprop` |
| База данных | `data/tenerifeprop.db` (SQLite) |
| GitHub/Gitea | `https://git.softuniq.eu/UniqueSoft/TenerifeProp` |