diff --git a/doc/run_and_logs.md b/doc/run_and_logs.md new file mode 100644 index 0000000..57cf88c --- /dev/null +++ b/doc/run_and_logs.md @@ -0,0 +1,183 @@ +# Run & Logs — инструкции по запуску и сбору логов + +Дата: 2026-03-11 (обновлено 2026-03-11) + +## ГЛАВНОЕ ОТКРЫТИЕ: запускать всё на удалённой машине + +**Проблема:** lokальная машина (`remote_dev`) ходит в интернет через VPN, который нестабилен: +- `docker push` — TLS handshake timeout +- `terraform apply` — TLS timeout при скачивании провайдера +- HTTP-запросы к `sless-api.kube5s.ru` — иногда падают + +**Решение:** удалённая машина `192.168.1.220` имеет **прямой выход в интернет без VPN**. +Все долгие операции нужно запускать **там через SSH**, а не локально. + +Агент Copilot делает это автоматически: пишет команду через `sshpass ssh`, читает вывод/логи. + +### Что запускаем на удалённой машине (192.168.1.220): +- `terraform init / apply / destroy` — все E2E и стресс-тесты +- `git pull / push` +- `docker build / push` +- `kubectl` деплой оператора — kubeconfig скопирован в `~/.kube/config` (2026-03-11) +- `run_stress_test.sh`, `run_e2e_tests.sh` +- HTTP-проверки к `sless-api.kube5s.ru` +- `go build / go test` (если нужно проверить без VPN) + +### Что остаётся локально: +- VS Code + Copilot — правка кода +- `git commit + push` (файлы редактируются здесь) + +### Шаблон: запустить команду на удалённой машине +```bash +sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 '<команда>' +``` + +### Шаблон: запустить долгий скрипт в фоне и смотреть лог +```bash +# Запуск в фоне: +sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 \ + 'cd /home/naeel/dev/sless && nohup bash run_stress_test.sh > /tmp/stress.log 2>&1 & echo PID=$!' + +# Следить за логом: +sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'tail -30 /tmp/stress.log' +``` + +--- + +1) Предварительные условия +- На локальной машине должен быть доступ в репозиторий (этот проект). +- Для удалённого запуска через SSH используйте ключ или пароль пользователя `naeel`. +- Если нужен неинтерактивный ввод пароля, установите `sshpass`. + +**Реквизиты удалённой машины:** +- Host: `192.168.1.220` +- User: `naeel` +- Password: `p` +- Repo path: `/home/naeel/dev/sless` + +Пример подключения: +```bash +sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'echo OK' +``` + +2) Скрипты (подготовленные в репо) +- Диагностика системы: `.tmp/ssh_diag.sh` +- Сбор логов ssh: `.tmp/ssh_logs.sh` +- Тест пуша в pearlharbor: `test_pearlharbor_push.sh` (в корне репо) + +3) Быстрый запуск диагностик (одной командой, безопасно) + +Если `sshpass` установлен, запустить локально и направить вывод в файл на локальной машине: + +```bash +sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'bash -s' < .tmp/ssh_diag.sh > /tmp/ssh_diag_output.txt 2>&1 +scp -o StrictHostKeyChecking=no naeel@192.168.1.220:/tmp/ssh_diag_output.txt ./ +``` + +Или интерактивно (ввести пароль вручную): + +```bash +ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'bash -s' < .tmp/ssh_diag.sh +``` + +4) Сбор системных логов вручную (на хосте) + +Запустите эти команды на хосте (через ssh) и сохраните результаты в `/tmp` для удобного скачивания: + +```bash +sudo journalctl -u ssh -n 200 --no-pager > /tmp/ssh_journal.log +sudo tail -n 200 /var/log/auth.log > /tmp/auth.log +sudo systemctl status ssh --no-pager > /tmp/ssh_status.txt +sudo cat /etc/ssh/sshd_config > /tmp/sshd_config.txt +``` + +Docker логи и состояние: + +```bash +docker --version > /tmp/docker_version.txt 2>&1 || true +docker ps -a > /tmp/docker_ps.txt 2>&1 || true +docker logs > /tmp/docker_.log 2>&1 || true +``` + +Если использовался `nohup` или фоновые скрипты, проверьте их лог-файлы (пример): + +```bash +ls -la /tmp | grep pearlharbor +cat /tmp/pearlharbor_bg.log > /tmp/pearlharbor_bg.log.copy || true +``` + +5) Забрать логи на локальную машину + +```bash +scp naeel@192.168.1.220:/tmp/ssh_journal.log ./ +scp naeel@192.168.1.220:/tmp/auth.log ./ +scp naeel@192.168.1.220:/tmp/docker_ps.txt ./ +``` + +6) Запуск `test_pearlharbor_push.sh` (мультипуш тест) + +Файл: `test_pearlharbor_push.sh` (в корне репозитория). Примеры использования: + +```bash +# простая однократная прогонка (локально, когда docker настроен) +bash ./test_pearlharbor_push.sh + +# с параметрами окружения +# NUM_PUSHES=5 CLEANUP=true ./test_pearlharbor_push.sh +# CREATE_PROJECT=true NUM_PUSHES=3 ./test_pearlharbor_push.sh +``` + +Скрипт печатает сводку по каждому пушу и возвращает HTTP/registry статусы. При включённом `CLEANUP=true` он попытается удалить тестовые теги через Harbor API. + +7) Рекомендации по безопасности +- Никогда не выкладывайте содержимое `secrets/pearlharbor_registry.txt` публично. +- Если используете `sshpass`, убедитесь, что доступ к вашей машине ограничен и удалённый пароль меняется по окончании тестов. + +8) Что делать при проблемах +- Если `docker push` даёт TLS handshake timeout — проверьте VPN/маршрутизацию и повторы (retry) сети. +- При `401 Unauthorized` — проверьте правильность тега `registry/PROJECT/REPO:TAG` и существование проекта в Harbor (создаётся через API либо через WebUI). +- Для ошибок ssh — смотрите `/var/log/auth.log` и `journalctl -u ssh`. + +9) Контактные точки (быстрый чек-лист) +- Скрипты: `.tmp/ssh_diag.sh`, `.tmp/ssh_logs.sh` +- Тест пуш: `test_pearlharbor_push.sh` +- Логи на хосте: `/var/log/auth.log`, `journalctl -u ssh`, `docker logs ` + +Файл создан автоматически агентом 2026-03-11. + +10) Соответствие локальных и удалённых путей + +На локальной машине репозиторий находится в `/home/naeel/remote_dev/sless`, +на удалённой — в `/home/naeel/dev/sless`. +Это не обязательно значит, что содержимое одинаково. При проверке в данной сессии было обнаружено, +что оба репозитория указывают на один и тот же коммит: + +``` +3dc39ddc20648b15e1f154d5e0b238ccf9789ba0 +``` + +Команды для проверки соответствия и синхронизации: + +- Проверить текущий git-HEAD локально и на удалённой машине: + +```bash +git -C /home/naeel/remote_dev/sless rev-parse HEAD +ssh naeel@serv 'git -C /home/naeel/dev/sless rev-parse HEAD' +``` + +- Сравнить списки файлов (локально собрать и получить с удалённой): + +```bash +find /home/naeel/remote_dev/sless -type f | sort > /tmp/files_local_sless.txt +ssh naeel@serv 'find /home/naeel/dev/sless -type f | sort' > /tmp/files_remote_sless.txt +diff -u /tmp/files_local_sless.txt /tmp/files_remote_sless.txt | less +``` + +- Быстрая проверка синхронизации через `rsync` (dry-run): + +```bash +rsync -av --dry-run --delete /home/naeel/remote_dev/sless/ naeel@serv:/home/naeel/dev/sless/ +``` + +Если хэши совпадают, репозитории находятся в одном состоянии на уровне коммита. Если нужно, могу +запустить подробный `diff` или предложить команды для синхронизации (rsync/пуш/клонирование).