# 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/пуш/клонирование).