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

9.4 KiB
Raw Blame History

Руководство по деплою 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

Что делает скрипт:

  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: Ручное обновление

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):

    git checkout dev
    # вносишь изменения
    git add .
    git commit -m "feat: новая фича"
    git push origin dev
    
  2. Релиз (merge в main):

    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):

    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. Резервное копирование базы данных

Дамп БД (на сервере)

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