- 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
9.4 KiB
9.4 KiB
Руководство по деплою 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
ssh root@46.175.149.131
systemctl stop nodejs@3003.service
systemctl disable nodejs@3003.service
Шаг 2: Установить Bun
# Установка 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: Клонировать репозиторий
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
git checkout -b production origin/production
# или если ветки нет:
git checkout -b production
Шаг 5: Создать .env
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: Установить зависимости
/home/nero/.bun/bin/bun install --production
Шаг 7: Настроить systemd
Создать файл /etc/systemd/system/tenerifeprop.service:
[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
Активировать:
systemctl daemon-reload
systemctl enable tenerifeprop.service
systemctl start tenerifeprop.service
Шаг 8: Проверить работу
# Локальный тест
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.
# Обновить из ветки production
cd /home/nero/sites/tenerifeprop.es
./scripts/deploy.sh
Что делает скрипт:
git fetch origingit reset --hard origin/productionbun install --productionchown -R nero:nero .chmod 600 .envsystemctl restart tenerifeprop- Проверка healthcheck
Метод B: Ручное обновление
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
Как внести изменения
-
Разработка (на локальной машине или в Docker):
git checkout dev # вносишь изменения git add . git commit -m "feat: новая фича" git push origin dev -
Релиз (merge в main):
git checkout main git merge dev git tag -a v1.1.0 -m "Release v1.1.0" git push origin main --tags -
Деплой (merge в production):
git checkout production git merge main git push origin production -
Авто-деплой (на сервере):
- Вебхук 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, который:
- Проверяет секретный ключ.
- Запускает
git pull origin production. - Перезапускает сервер.
Это усложнение — рекомендуется начать со скрипта.
6. Резервное копирование базы данных
Дамп БД (на сервере)
cd /home/nero/sites/tenerifeprop.es
# SQLite — просто копируем файл
cp data/tenerifeprop.db /backup/tenerifeprop-$(date +%Y%m%d).db
Восстановление
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. Команды для мониторинга
# Статус сервера
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 |