Add Object B and self-growth canons with Cursor ledger rules; refresh connectivity and VPN runbooks.
Track day metrics/anamnesis HARD rules under .cursor/rules and personal docs so each screening updates days/{KIN}, dynamics, and big-data ledger.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
71
docs/apps/git/README.md
Normal file
71
docs/apps/git/README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# Git / Gitea — репозиторий local_machine
|
||||
|
||||
Документация и скрипты этой машины в self-hosted **Gitea**. Обычная работа — коммиты и push; из РФ часто нужен SSH или прокси.
|
||||
|
||||
| Документ | Назначение |
|
||||
|----------|------------|
|
||||
| **[RUNBOOK.md](./RUNBOOK.md)** | Push не идёт, таймаут, auth, bundle — пошагово |
|
||||
| [docs/git/LOCAL_MACHINE_GITEA_SETUP.md](../../git/LOCAL_MACHINE_GITEA_SETUP.md) | Первый пуш, `.gitignore` |
|
||||
| [docs/git/GITEA_COMPLETE_GUIDE.md](../../git/GITEA_COMPLETE_GUIDE.md) | Полный справочник Gitea (сервер, SSL, админ) |
|
||||
|
||||
---
|
||||
|
||||
## Константы
|
||||
|
||||
| Что | Значение |
|
||||
|-----|----------|
|
||||
| Репозиторий | `hunabgit/local_machine` |
|
||||
| Веб | https://gitea.hunab.app/hunabgit/local_machine |
|
||||
| Ветка | `main` |
|
||||
| SSH | `ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git` |
|
||||
| HTTPS | `https://gitea.hunab.app/hunabgit/local_machine.git` |
|
||||
| Ключ (прод / Gitea) | `~/.ssh/hunab_deploy_key` |
|
||||
| RU-прокси (SSH hop) | `hsites-ahau` (149.154.64.19) |
|
||||
|
||||
---
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
### Первый раз (репо ещё не на Gitea)
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
# 1. На https://gitea.hunab.app → New Repository → local_machine (пустой)
|
||||
bash scripts/deployment/gitea/setup-and-push.sh
|
||||
```
|
||||
|
||||
### Обычный коммит и push
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
git status
|
||||
git add …
|
||||
git commit -m "…"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Push из РФ (если `git push` зависает)
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh --dry-run
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh
|
||||
```
|
||||
|
||||
Подробно: [RUNBOOK.md](./RUNBOOK.md).
|
||||
|
||||
---
|
||||
|
||||
## Скрипты
|
||||
|
||||
| Скрипт | Когда |
|
||||
|--------|--------|
|
||||
| `scripts/deployment/gitea/setup-and-push.sh` | Первый push, init git |
|
||||
| `scripts/deployment/gitea/git-push-gitea-via-proxy.sh` | Push через RU → DO (SSH / HTTPS / bundle) |
|
||||
|
||||
---
|
||||
|
||||
## Связанное
|
||||
|
||||
- [docs/connectivity/PROXY_GUIDE.md](../../connectivity/PROXY_GUIDE.md) — SSH `hsites-ahau`, `hunab-prod`
|
||||
- [docs/connectivity/PROXY_EMERGENCY.md](../../connectivity/PROXY_EMERGENCY.md) — если «всё слетело»
|
||||
338
docs/apps/git/RUNBOOK.md
Normal file
338
docs/apps/git/RUNBOOK.md
Normal file
@@ -0,0 +1,338 @@
|
||||
# Runbook: Git / Gitea — push local_machine
|
||||
|
||||
Симптом: **не удаётся запушить** в Gitea, `git push` зависает, auth error, «repository not found», или нужен первый push.
|
||||
|
||||
Репозиторий: **local_machine** → https://gitea.hunab.app/hunabgit/local_machine
|
||||
Корень на Mac: `/Users/eternal/code/local_machine`
|
||||
|
||||
---
|
||||
|
||||
## Архитектура (кратко)
|
||||
|
||||
```
|
||||
Mac (local_machine) ──git push──► Gitea (209.38.32.21 / gitea.hunab.app)
|
||||
PostgreSQL, контейнер gitea, SSH :2223
|
||||
```
|
||||
|
||||
**Из РФ** прямой HTTPS/SSH часто нестабилен → цепочка **Mac → RU (`hsites-ahau`) → DO (209.38.32.21)** или bundle на зеркало **206.189.35.205**.
|
||||
|
||||
| Компонент | Значение |
|
||||
|-----------|----------|
|
||||
| Remote `origin` | SSH `:2223` или HTTPS (см. `git remote -v`) |
|
||||
| Ветка | `main` |
|
||||
| SSH ключ Gitea | `~/.ssh/hunab_deploy_key` |
|
||||
| SSH hop RU | `hsites-ahau`, `~/.ssh/id_ed25519` |
|
||||
| Скрипт push через прокси | `scripts/deployment/gitea/git-push-gitea-via-proxy.sh` |
|
||||
|
||||
Полный справочник сервера: [GITEA_COMPLETE_GUIDE.md](../../git/GITEA_COMPLETE_GUIDE.md).
|
||||
|
||||
---
|
||||
|
||||
## Шаг 0: диагностика (2 минуты)
|
||||
|
||||
Из корня **local_machine**:
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
git status
|
||||
git remote -v
|
||||
git branch -vv
|
||||
git log -1 --oneline
|
||||
git fetch origin 2>&1 | tail -5
|
||||
```
|
||||
|
||||
| Проверка | OK | Проблема |
|
||||
|----------|-----|----------|
|
||||
| `git status` | на нужной ветке, осмысленные изменения | не в корне репо |
|
||||
| `origin` | SSH `2223` или HTTPS gitea.hunab.app | нет remote → `setup-and-push.sh` |
|
||||
| `git fetch origin` | без ошибки | сеть / auth → §2–§4 |
|
||||
| Gitea в браузере | https://gitea.hunab.app открывается | сеть / DNS → connectivity |
|
||||
|
||||
**SSH до Gitea (прямой):**
|
||||
|
||||
```bash
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=10 -p 2223 -i ~/.ssh/hunab_deploy_key git@gitea.hunab.app
|
||||
# ожидаем приветствие Gitea или "Hi there, ..." / exit 1 — не timeout
|
||||
```
|
||||
|
||||
**SSH через RU (как в proxy-скрипте):**
|
||||
|
||||
```bash
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=8 hsites-ahau "echo RU_OK"
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=15 -p 2223 \
|
||||
-i ~/.ssh/hunab_deploy_key \
|
||||
-o ProxyJump=hsites-ahau \
|
||||
git@209.38.32.21 "echo GITEA_SSH_OK"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Правильные remote URL
|
||||
|
||||
| Режим | URL |
|
||||
|-------|-----|
|
||||
| **SSH (предпочтительно)** | `ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git` |
|
||||
| HTTPS | `https://gitea.hunab.app/hunabgit/local_machine.git` |
|
||||
|
||||
Переключить:
|
||||
|
||||
```bash
|
||||
git remote set-url origin ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git
|
||||
# или
|
||||
git remote set-url origin https://gitea.hunab.app/hunabgit/local_machine.git
|
||||
```
|
||||
|
||||
Клонирование:
|
||||
|
||||
```bash
|
||||
git clone ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git
|
||||
# или
|
||||
git clone https://gitea.hunab.app/hunabgit/local_machine.git
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Симптом → причина → действие
|
||||
|
||||
### 1. Репозиторий ещё не на Gitea / «repository not found»
|
||||
|
||||
**Причина:** на сервере нет `hunabgit/local_machine`.
|
||||
|
||||
**Действие:**
|
||||
|
||||
1. https://gitea.hunab.app → **New Repository** → Name: `local_machine` → **пустой** (без README).
|
||||
2. Или API: `GITEA_TOKEN=… bash scripts/deployment/gitea/setup-and-push.sh --create-only`
|
||||
3. `bash scripts/deployment/gitea/setup-and-push.sh` или `git push -u origin main`
|
||||
|
||||
---
|
||||
|
||||
### 2. `git push` зависает / timeout (типично из РФ)
|
||||
|
||||
**Причина:** HTTPS или прямой SSH до DO режется или медленный маршрут.
|
||||
|
||||
**Действие A — SSH на 2223:**
|
||||
|
||||
```bash
|
||||
git remote set-url origin ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git
|
||||
GIT_SSH_COMMAND="ssh -i ~/.ssh/hunab_deploy_key -o ConnectTimeout=30" git push origin main
|
||||
```
|
||||
|
||||
**Действие B — скрипт через прокси (рекомендуется из РФ):**
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh --dry-run
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh
|
||||
```
|
||||
|
||||
Скрипт по порядку: **SSH через `hsites-ahau`** → HTTPS (короткий timeout) → **bundle** (scp + `docker exec gitea`).
|
||||
|
||||
Переменные при необходимости:
|
||||
|
||||
```bash
|
||||
PROXY_SERVER=hsites-ahau \
|
||||
TARGET_SSH_KEY=~/.ssh/hunab_deploy_key \
|
||||
GITEA_SERVER=206.189.35.205 \
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. `Permission denied (publickey)` / auth failed
|
||||
|
||||
**Причина:** неверный ключ или ключ не добавлен в Gitea / `~/.ssh/config`.
|
||||
|
||||
**Действие:**
|
||||
|
||||
```bash
|
||||
ssh-add -l
|
||||
ls -la ~/.ssh/hunab_deploy_key ~/.ssh/id_ed25519
|
||||
ssh -v -p 2223 -i ~/.ssh/hunab_deploy_key git@gitea.hunab.app 2>&1 | tail -20
|
||||
```
|
||||
|
||||
- В Gitea: **Settings → SSH / GPG Keys** — публичный ключ с Mac.
|
||||
- В `~/.ssh/config` блок для `gitea.hunab.app` с `IdentityFile ~/.ssh/hunab_deploy_key`, `Port 2223`.
|
||||
- Через прокси: ключ **`hunab_deploy_key`** на целевой хост, **`id_ed25519`** до RU.
|
||||
|
||||
SSH recovery: [PROXY_EMERGENCY.md](../../connectivity/PROXY_EMERGENCY.md).
|
||||
|
||||
---
|
||||
|
||||
### 4. `rejected (non-fast-forward)` / нужен pull
|
||||
|
||||
**Причина:** на Gitea есть коммиты, которых нет локально.
|
||||
|
||||
**Действие:**
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git log --oneline HEAD..origin/main # что на сервере
|
||||
git pull --rebase origin main # или merge — по политике команды
|
||||
git push origin main
|
||||
```
|
||||
|
||||
**Не делать** `git push --force` на `main` без явного запроса.
|
||||
|
||||
---
|
||||
|
||||
### 5. Push прошёл, но в Gitea старый коммит (bundle)
|
||||
|
||||
**Причина:** использовался bundle; локальный `origin/main` не обновился.
|
||||
|
||||
**Действие:**
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git log -1 origin/main
|
||||
git log -1 main
|
||||
```
|
||||
|
||||
Если расходятся — повторить push или `git fetch` после успешного bundle (скрипт делает `git update-ref` при совпадении).
|
||||
|
||||
---
|
||||
|
||||
### 6. Случайно пытаюсь закоммитить секреты
|
||||
|
||||
**Причина:** `.env`, ключи, VPN `.conf` с приватными ключами.
|
||||
|
||||
**Действие:**
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff --cached
|
||||
```
|
||||
|
||||
Не коммитить: `~/.config/joplin-webdav/env`, `*.pem`, `*.key`, `docs/connectivity/vpn/*.conf`, `temp/` с личными данными. См. корневой `.gitignore`.
|
||||
|
||||
Если уже в индексе: `git reset HEAD <file>`.
|
||||
|
||||
---
|
||||
|
||||
### 7. «Not a git repository» / push из не того каталога
|
||||
|
||||
**Причина:** команды не из `/Users/eternal/code/local_machine`.
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
git rev-parse --show-toplevel
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. Нет интернета / RU недоступен
|
||||
|
||||
Push невозможен, пока не восстановлена сеть.
|
||||
|
||||
```bash
|
||||
curl -sS --max-time 8 https://gitea.hunab.app
|
||||
ssh -o ConnectTimeout=6 hsites-ahau "echo RU_OK"
|
||||
```
|
||||
|
||||
Hotspot / Wi‑Fi: [HOTSPOT_NETWORK_EMERGENCY.md](../../connectivity/HOTSPOT_NETWORK_EMERGENCY.md).
|
||||
Прокси RU→DO: `./scripts/vpn/exit-via-ru-do.sh` — **после** базового интернета.
|
||||
|
||||
---
|
||||
|
||||
## Процедуры
|
||||
|
||||
### Ежедневный push (нормальная сеть)
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
git status
|
||||
git add -p # или конкретные файлы
|
||||
git commit -m "Кратко: зачем изменение."
|
||||
git push origin main
|
||||
```
|
||||
|
||||
Коммиты создавать **только по запросу** (локальная политика). Не пушить без явного согласия, если так принято в workflow.
|
||||
|
||||
---
|
||||
|
||||
### Первый push новой машины
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
git clone ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git
|
||||
# или уже есть папка:
|
||||
bash scripts/deployment/gitea/setup-and-push.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Push только через прокси (рабочий режим из РФ)
|
||||
|
||||
```bash
|
||||
cd /Users/eternal/code/local_machine
|
||||
git add … && git commit -m "…"
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh --dry-run
|
||||
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh
|
||||
```
|
||||
|
||||
`--dry-run` показывает число коммитов к отправке, **ничего не меняет**.
|
||||
|
||||
---
|
||||
|
||||
### После смены hotspot / VPN
|
||||
|
||||
1. Проверить интернет и RU: `ssh hsites-ahau "echo OK"`.
|
||||
2. `git fetch origin` — если OK, обычный `git push`.
|
||||
3. Если fetch/push timeout → `git-push-gitea-via-proxy.sh`.
|
||||
|
||||
---
|
||||
|
||||
## Скрипты
|
||||
|
||||
| Скрипт | Назначение |
|
||||
|--------|------------|
|
||||
| `scripts/deployment/gitea/setup-and-push.sh` | `git init`, remote, первый commit+push; `--create-only` + `GITEA_TOKEN` |
|
||||
| `scripts/deployment/gitea/git-push-gitea-via-proxy.sh` | Push main: SSH→HTTPS→bundle; `--dry-run [branch]` |
|
||||
|
||||
Безопасность proxy-скрипта: **не** делает `reset --hard`, **не** `--force` push; только обновляет `origin/main` после успеха.
|
||||
|
||||
---
|
||||
|
||||
## `.gitignore` (напоминание)
|
||||
|
||||
Коммитить **можно:** `docs/`, `scripts/`, примеры конфигов без секретов.
|
||||
|
||||
**Нельзя:** `.env`, ключи, `temp/` с дампами, личные CSV, VPN conf с ключами, `~/.config/*` секреты.
|
||||
|
||||
---
|
||||
|
||||
## Логи и отладка
|
||||
|
||||
```bash
|
||||
GIT_TRACE=1 GIT_SSH_COMMAND="ssh -v" git push origin main 2>&1 | tail -50
|
||||
```
|
||||
|
||||
Bundle-артефакты: `temp/gitea-push-*.bundle` (скрипт удаляет после успеха).
|
||||
|
||||
Gitea UI: **Commits** на https://gitea.hunab.app/hunabgit/local_machine/commits/branch/main
|
||||
|
||||
---
|
||||
|
||||
## Связанные документы
|
||||
|
||||
| Документ | Зачем |
|
||||
|----------|--------|
|
||||
| [README.md](./README.md) | Оглавление apps/git |
|
||||
| [LOCAL_MACHINE_GITEA_SETUP.md](../../git/LOCAL_MACHINE_GITEA_SETUP.md) | Первичная настройка |
|
||||
| [GITEA_COMPLETE_GUIDE.md](../../git/GITEA_COMPLETE_GUIDE.md) | Сервер, SSL, bundle детали |
|
||||
| [PROXY_GUIDE.md](../../connectivity/PROXY_GUIDE.md) | SSH config, hsites-ahau |
|
||||
| [PROXY_EMERGENCY.md](../../connectivity/PROXY_EMERGENCY.md) | Восстановление SSH |
|
||||
|
||||
---
|
||||
|
||||
## История типовых инцидентов
|
||||
|
||||
| Ситу | Симптом | Фикс |
|
||||
|------|---------|------|
|
||||
| — | HTTPS push hang | SSH `:2223` или `git-push-gitea-via-proxy.sh` |
|
||||
| — | repository not found | Создать repo на Gitea UI |
|
||||
| — | Permission denied | `hunab_deploy_key` в Gitea + SSH config |
|
||||
| 2026-03 | Первый push local_machine | `setup-and-push.sh` |
|
||||
|
||||
---
|
||||
|
||||
*Проверка remote: `git remote -v`. Push из РФ: `bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh --dry-run`.*
|
||||
Reference in New Issue
Block a user