Эта страница — единый индекс для любой новой AI-сессии над rodnoy.site. Здесь: SSH-доступ, пути к коду, готовые скрипты, текущий статус, worklog, backlog. Не нужно заново изучать структуру проекта, писать SSH-обёртки или искать .env — всё уже собрано.
3 команды, чтобы начать работу за <30 секунд вместо 5–10 минут рутинной настройки. Первая — забрать SSH-ключ и обёртку.
# Один раз в сессии: paramiko (openssh-client в окружении обычно не установлен) python3 -m pip install paramiko # Скачать обёртку и ключ (если ещё нет) cp /home/z/my-project/upload/deploy_key /home/z/my-project/scripts/deploy_key chmod 600 /home/z/my-project/scripts/deploy_key curl -fsSL https://opt.rodnoy.site/admin/scripts/rodnoy-ssh.py \ -o /home/z/my-project/scripts/rodnoy-ssh.py
# Свежий status.json (генерируется автоматически на сервере) curl -fsSL https://opt.rodnoy.site/admin/data/status.json | python3 -m json.tool # Или запустить живой health-check прямо сейчас python3 /home/z/my-project/scripts/rodnoy-ssh.py \ 'bash /var/www/opt.rodnoy.site/admin/scripts/health-check.sh'
# Что уже сделано (worklog) и что в очереди (backlog) curl -fsSL https://opt.rodnoy.site/admin/data/WORKLOG.md curl -fsSL https://opt.rodnoy.site/admin/BACKLOG.md # Полный контекст проекта (этот файл, но в Markdown) curl -fsSL https://opt.rodnoy.site/admin/CONTEXT.md
.env файлы заново — пароль БД rodnoy лежит в /home/deploy/GroupBy/.env (эталон). Меняется одновременно во всех .env.scripts/rodnoy-ssh.py (paramiko, умеет exec / --file / --get / --put / --sudo).scripts/restart-marketing.sh (использует точный match, не убивает собственный SSH).scripts/test-comments.sh (полный цикл, использует aiReply а не reply).| IP / Port | 93.183.81.233 : 22 |
| User | deploy (sudo без пароля) |
| Root | ssh -i deploy_key root@93.183.81.233 (тоже по ключу) |
| Key | deploy_key (RSA, без passphrase) |
| Локальный путь | /home/z/my-project/scripts/deploy_key (chmod 600) |
| Обёртка (если нет ssh) | python3 /home/z/my-project/scripts/rodnoy-ssh.py 'cmd' |
# Если openssh-client установлен: ssh -i /home/z/my-project/scripts/deploy_key \ -o IdentitiesOnly=yes -o StrictHostKeyChecking=no \ deploy@93.183.81.233 # Если НЕТ ssh (часто в новых сессиях) — используем paramiko-обёртку: python3 -m pip install paramiko # один раз в сессии python3 /home/z/my-project/scripts/rodnoy-ssh.py 'whoami; hostname; date' python3 /home/z/my-project/scripts/rodnoy-ssh.py --file /path/to/local-script.sh python3 /home/z/my-project/scripts/rodnoy-ssh.py --get /remote/path /local/path python3 /home/z/my-project/scripts/rodnoy-ssh.py --put /local/path /remote/path --sudo --owner www-data
/var/www/| opt.rodnoy.site | /var/www/opt.rodnoy.site/ — план + дизайн-система + admin |
| gb.rodnoy.site | /var/www/gb.rodnoy.site/ — анализ проекта GroupBy |
| app.rodnoy.site | /var/www/app.rodnoy.site/ — GroupBy production (Next.js) |
| rodnoy.site | /var/www/rodnoy.site/ — subtracker bot + tracker |
| art.rodnoy.site | /var/www/art.rodnoy.site/ — Art Next.js app |
| mesto.rodnoyart.ru | /var/www/mesto.rodnoyart.ru/ — Next.js app |
| nerosbd-sbd | /var/www/nerosbd-sbd/ — Nerosbd Next.js app |
/home/deploy/| GroupBy (главное) | /home/deploy/GroupBy/ — Next.js, app.rodnoy.site |
| Marketing service | /home/deploy/rodnoy-marketing-service/ — порт 3040, комментарии |
| GET /api/comments/all | ?page=PAGE — список по странице |
| POST /api/comments | {page, section, author, body} — создать |
| PUT /api/comments/:id/status | {status} — new|read|addressed|archived |
| PUT /api/comments/:id/reply | {aiReply: "текст"} — ⚠️ НЕ "reply"! |
| DELETE /api/comments/:id | — удалить по id |
Внешний URL (через nginx): https://app.rodnoy.site/marketing/api/comments
Внутренний URL (на сервере): http://127.0.0.1:3040/api/comments
Страницы комментариев: opt-plan, opt-design, gb-plan
| PostgreSQL | localhost:5432, БД rodnoy, user rodnoy |
| Рабочий пароль (эталон) | /home/deploy/GroupBy/.env — DATABASE_URL=postgresql://rodnoy:***@... |
| Prisma schema | /home/deploy/rodnoy-marketing-service/prisma/schema.prisma |
| nginx конфиги | /etc/nginx/sites-available/{domain} + symlink sites-enabled/ |
| SSL сертификаты | /etc/letsencrypt/live/{domain}/ (до 2026-11-15) |
| SSL auto-renew | включён (certbot.timer) |
Все скрипты лежат на сервере в /var/www/opt.rodnoy.site/admin/scripts/ и доступны по HTTPS. Не нужно писать их заново в каждой новой сессии.
локально у AI
SSH-обёртка на paramiko. Команды: exec, --file, --get, --put, --put --sudo --owner www-data. Ключ ищет в нескольких путях (env → /home/z/my-project/scripts/deploy_key → ./deploy_key).
на сервере
Снимок состояния: маркетинг-сервис (PID/uptime/БД), nginx + SSL (дни до истечения), страницы opt, gb.rodnoy.site, CORS preflight, DNS, диск, load. В конце выводит JSON.
python3 /home/z/my-project/scripts/rodnoy-ssh.py \ 'bash /var/www/opt.rodnoy.site/admin/scripts/health-check.sh'
на сервере
Безопасный перезапуск маркетинг-сервиса через setsid+nohup. Использует точный match для pkill, чтобы не убить собственный SSH. Бэкапит лог, проверяет health после старта.
python3 /home/z/my-project/scripts/rodnoy-ssh.py \ 'bash /var/www/opt.rodnoy.site/admin/scripts/restart-marketing.sh'
на сервере
E2E цикл: POST → GET → PUT status → PUT reply (с правильным полем aiReply) → DELETE → финальный GET. Аргумент $1 — страница (по умолчанию opt-plan).
python3 /home/z/my-project/scripts/rodnoy-ssh.py \ 'bash /var/www/opt.rodnoy.site/admin/scripts/test-comments.sh opt-design'
на сервере
Генерирует свежий data/status.json — машиночитаемый снапшот (запускает внутри себя health-check.sh, парсит JSON, добавляет мета + список страниц + скриптов).
python3 /home/z/my-project/scripts/rodnoy-ssh.py \ 'python3 /var/www/opt.rodnoy.site/admin/scripts/update-status.py'
Ниже — последний сохранённый снапшот. Свежий статус генерируется командой update-status.py (см. раздел Скрипты).
Marketing service
—
загрузка...
Database
—
загрузка...
SSL expires
—
загрузка...
Pages
—
загрузка...
CORS preflight
—
загрузка...
Generated
—
UTC
Подробный список — в BACKLOG.md. Здесь — топ-3 приоритета.
🔴 HighСейчас запущен через nohup. При ребуте сервера не поднимется → упадут комментарии на opt И gb.rodnoy.site. Нужно создать /etc/systemd/system/rodnoy-marketing.service, остановить текущий PID и включить сервис.
aiReply в comments.js 🔴 HighЭндпоинт PUT /api/comments/:id/reply ждёт в body aiReply (camelCase). Если фронт assets/comments.js отправляет reply — всегда 400. Прочитать файл, поправить если надо.
🟡 MediumВиджет комментариев работает (полный цикл проверен), но не проиндексирован в дизайн-системе. Добавить карточку DC-19 в design.html с живым демо, зарегистрировать в design-index.json.
Используйте точный match: pgrep -f "/home/deploy/.bun/bin/bun run src/index.ts". См. restart-marketing.sh.
aiReply, не replyВ эндпоинте PUT /api/comments/:id/reply тело должно быть {"aiReply": "текст"} (camelCase). Любой другой ключ → 400.
Эталон — /home/deploy/GroupBy/.env. Также править: app.rodnoy.site/.env, app.rodnoy.site/.next/standalone/.env, rodnoy-marketing-service/.env.
Уже прописан у регистратора. Cache-Control: no-cache на сервере — изменения видны сразу, без кэш-инвалидации.
Загрузка через deploy требует sudo: sudo install -m 644 src dest && sudo chown www-data:www-data dest. Скрипт rodnoy-ssh.py --put --sudo --owner www-data делает это автоматически.