diff --git a/INFRASTRUCTURE.md b/INFRASTRUCTURE.md index f75eac6f..c3879f8b 100644 --- a/INFRASTRUCTURE.md +++ b/INFRASTRUCTURE.md @@ -86,6 +86,159 @@ git fetch daarion-city --- +## 🤖 Для агентів Cursor: Робота на НОДА1 + +### SSH підключення до НОДА1 + +**Базова команда:** +```bash +ssh root@144.76.224.179 +``` + +**Важливо для агентів:** +- SSH ключ має бути налаштований на локальній машині користувача +- Якщо ключа немає, підключення запитає пароль (який має надати користувач) +- Після підключення ви працюєте від імені `root` + +### Робочі директорії на НОДА1 + +```bash +# Основний проєкт +cd /opt/microdao-daarion + +# Docker контейнери +docker ps # список запущених контейнерів +docker logs # логи контейнера +docker exec -it bash # зайти в контейнер + +# Логи системи +cd /var/log +tail -f /var/log/syslog # системні логи +journalctl -u docker -f # Docker логи в реальному часі + +# Скрипти безпеки +ls -la /root/*.sh # firewall та моніторинг скрипти +``` + +### Типові завдання для агентів + +**1. Перевірити статус сервісів:** +```bash +ssh root@144.76.224.179 "docker ps --format 'table {{.Names}}\\t{{.Status}}'" +``` + +**2. Перезапустити сервіс:** +```bash +ssh root@144.76.224.179 "docker restart " +``` + +**3. Переглянути логи:** +```bash +ssh root@144.76.224.179 "docker logs --tail 50 " +``` + +**4. Виконати команду в контейнері:** +```bash +ssh root@144.76.224.179 "docker exec " +``` + +**5. Git operations:** +```bash +ssh root@144.76.224.179 "cd /opt/microdao-daarion && git pull origin main" +ssh root@144.76.224.179 "cd /opt/microdao-daarion && git status" +``` + +**6. Перезапустити Docker Compose:** +```bash +ssh root@144.76.224.179 "cd /opt/microdao-daarion && docker compose restart" +``` + +### Interactive режим (для складних завдань) + +Якщо потрібно виконати кілька команд підряд, використовуйте interactive SSH: + +```bash +# Запустіть інтерактивну сесію +ssh root@144.76.224.179 + +# Тепер ви на сервері, можете виконувати команди: +cd /opt/microdao-daarion +docker ps +docker logs dagi-router --tail 20 +exit # вийти з SSH +``` + +### Важливі нотатки для агентів + +1. **Завжди перевіряйте, де ви знаходитесь:** + ```bash + hostname # має показати назву сервера Hetzner + pwd # поточна директорія + ``` + +2. **Не виконуйте деструктивні команди без підтвердження:** + - `docker rm -f` (видалення контейнерів) + - `rm -rf` (видалення файлів) + - Будь-які зміни в production без backup + +3. **Перевіряйте статус перед змінами:** + ```bash + docker ps # що зараз працює + docker compose ps # статус docker compose сервісів + systemctl status docker # статус Docker daemon + ``` + +4. **Логування ваших дій:** + - Всі важливі зміни документуйте + - Використовуйте `git commit` з детальними повідомленнями + - Включайте `Co-Authored-By: Cursor Agent ` + +### Приклад сесії для Cursor Agent + +```bash +# 1. Підключення +ssh root@144.76.224.179 + +# 2. Перехід до проєкту +cd /opt/microdao-daarion + +# 3. Перевірка статусу +git status +docker ps --format "table {{.Names}}\\t{{.Status}}" + +# 4. Оновлення коду (якщо потрібно) +git pull origin main + +# 5. Перезапуск сервісів (якщо потрібно) +docker compose restart dagi-router + +# 6. Перевірка логів +docker logs dagi-router --tail 20 + +# 7. Вихід +exit +``` + +### Troubleshooting + +**Якщо SSH не підключається:** +1. Перевірте, чи сервер онлайн: `ping 144.76.224.179` +2. Перевірте SSH ключі: `ls -la ~/.ssh/` +3. Спробуйте з verbose: `ssh -v root@144.76.224.179` + +**Якщо контейнери не працюють:** +1. Перевірте Docker: `systemctl status docker` +2. Перевірте логи: `journalctl -u docker --no-pager -n 50` +3. Перезапустіть Docker: `systemctl restart docker` + +**Якщо потрібен rescue mode:** +1. Зайдіть в Hetzner Robot: https://robot.hetzner.com +2. Активуйте rescue system +3. Зробіть Reset +4. Підключіться через SSH з rescue паролем + +--- + ## 🚀 Services & Ports (Docker Compose) diff --git a/docs/infrastructure_quick_ref.ipynb b/docs/infrastructure_quick_ref.ipynb index 37e2a297..cff1047b 100644 --- a/docs/infrastructure_quick_ref.ipynb +++ b/docs/infrastructure_quick_ref.ipynb @@ -210,7 +210,76 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 🎨 Vision Encoder Service (NEW)\n", + "🤖 Для агентів Cursor: SSH доступ до НОДА1\n", + "\n", + "### Підключення до Production Server\n", + "\n", + "**SSH команда:**\n", + "```bash\n", + "ssh root@144.76.224.179\n", + "```\n", + "\n", + "**Робоча директорія:** `/opt/microdao-daarion`\n", + "\n", + "**Важливо:**\n", + "- SSH ключ має бути налаштований локально\n", + "- Працюєте від імені `root`\n", + "- Завжди перевіряйте `hostname` і `pwd` перед виконанням команд\n", + "- Не виконуйте деструктивні команди без підтвердження\n", + "\n", + "**Повна інструкція:** див. `INFRASTRUCTURE.md` → Для агентів Cursor" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# SSH Access for Cursor Agents\n", + "NODE1_ACCESS = {\n", + " \"host\": \"144.76.224.179\",\n", + " \"user\": \"root\",\n", + " \"ssh_command\": \"ssh root@144.76.224.179\",\n", + " \"project_root\": \"/opt/microdao-daarion\",\n", + " \"auth\": \"SSH key (configured locally)\",\n", + " \"common_commands\": [\n", + " \"docker ps\",\n", + " \"docker compose ps\",\n", + " \"docker logs --tail 50\",\n", + " \"git status\",\n", + " \"git pull origin main\",\n", + " \"systemctl status docker\"\n", + " ],\n", + " \"safety_checks\": [\n", + " \"Always verify hostname before executing commands\",\n", + " \"Never use 'rm -rf' without confirmation\",\n", + " \"Never use 'docker rm -f' on production containers\",\n", + " \"Always check current directory with 'pwd'\",\n", + " \"Document all changes in git commits\"\n", + " ]\n", + "}\n", + "\n", + "print(\"🔐 SSH Access to NODE1:\")\n", + "print(\"=\"*60)\n", + "print(f\"Host: {NODE1_ACCESS['host']}\")\n", + "print(f\"User: {NODE1_ACCESS['user']}\")\n", + "print(f\"Command: {NODE1_ACCESS['ssh_command']}\")\n", + "print(f\"Project: {NODE1_ACCESS['project_root']}\")\n", + "print(f\"Auth: {NODE1_ACCESS['auth']}\")\n", + "print(\"\\nCommon Commands:\")\n", + "for cmd in NODE1_ACCESS['common_commands']:\n", + " print(f\" - {cmd}\")\n", + "print(\"\\n⚠️ Safety Checks:\")\n", + "for check in NODE1_ACCESS['safety_checks']:\n", + " print(f\" • {check}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "⌘ Vision Encoder Service (NEW)\n", "\n", "### Overview\n", "- **Service:** Vision Encoder (OpenCLIP ViT-L/14)\n",