Expand local_machine docs and automation for connectivity, games, and ops.

Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs;
document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game
scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ahauimix
2026-06-01 08:12:19 +03:00
parent a39ef89125
commit 1938b7c743
135 changed files with 9933 additions and 388 deletions

View File

@@ -1,14 +1,17 @@
# Gitea Complete Guide - Hunab.app
# Gitea Complete Guide — local_machine
> **Для репозитория legal на сервере 206.189.35.205** см. **[GITEA_LEGAL_206_SERVER_GUIDE.md](./GITEA_LEGAL_206_SERVER_GUIDE.md)** (единый стандарт: push, пути, мониторинг).
> Ниже — гайд по Gitea для Hunab.app (основной сервер 209.38.32.21).
> **Этот гайд** — справочник по использованию Gitea для репозитория **local_machine** (документация и скрипты локальной машины).
> Сервер: **gitea.hunab.app** (209.38.32.21).
> **Быстрый старт для local_machine:** [LOCAL_MACHINE_GITEA_SETUP.md](./LOCAL_MACHINE_GITEA_SETUP.md).
> Для других репозиториев: **legal** на 206.189.35.205 — [GITEA_LEGAL_206_SERVER_GUIDE.md](./GITEA_LEGAL_206_SERVER_GUIDE.md); **hunabapp** — свои скрипты пуша в том репо.
---
**Дата:** 2026-01-02
**Версия Gitea:** 1.25.3
**Статус:** ✅ Полностью развернут и работает
**Последнее обновление:** Резервный способ коммитов через временный скрипт (2026-02-16)
**Последнее обновление:** Адаптация под проект local_machine (2026-03-14)
---
@@ -39,16 +42,27 @@ Gitea успешно развернут на production сервере как se
## 🚀 Развертывание
### Быстрый старт
### Быстрый старт для local_machine
Репозиторий **local_machine** не разворачивает Gitea — он только пушит в уже работающий сервер. Первая настройка и пуш:
```bash
# Развертывание Gitea
cd /Users/eternal/code/local_machine
# 1. Создать репо на https://gitea.hunab.app (New Repository → local_machine)
# 2. Инициализация и пуш:
bash scripts/deployment/gitea/setup-and-push.sh
```
Подробно: **[LOCAL_MACHINE_GITEA_SETUP.md](./LOCAL_MACHINE_GITEA_SETUP.md)**.
### Развертывание самого Gitea (для админов сервера)
Скрипты развертывания Gitea на сервере находятся в других репозиториях (например hunabapp). Пример для справки:
```bash
# Развертывание Gitea (в репо с инфраструктурой)
bash scripts/deployment/gitea/deploy-gitea.sh
# Настройка
bash scripts/deployment/gitea/setup-gitea.sh
# Тестирование
bash scripts/deployment/gitea/test-gitea.sh
```
@@ -365,6 +379,26 @@ Value: 0 issue "letsencrypt.org"
## 🔄 Push репозиториев (КРИТИЧЕСКИ ВАЖНО)
### ✅ Для репозитория local_machine
В этом проекте пуш делается из корня **local_machine**:
```bash
cd /Users/eternal/code/local_machine
git push -u origin main
```
**Если из РФ push по HTTPS зависает** — переключите remote на SSH (порт 2223):
```bash
git remote set-url origin ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git
git push -u origin main
```
Если и SSH недоступен — используйте [метод через bundle](#резервный-способ-push-через-bundle) ниже. Полная настройка: **[LOCAL_MACHINE_GITEA_SETUP.md](./LOCAL_MACHINE_GITEA_SETUP.md)**.
---
### ❌ Проблема: Push через HTTPS зависает
При попытке `git push` через HTTPS возникают таймауты:
@@ -386,9 +420,9 @@ fatal: the remote end hung up unexpectedly
POST запрос доходит до Gitea, но соединение обрывается во время передачи данных.
### ✅ Систематическое решение: Универсальный скрипт
### ✅ Универсальный скрипт пуша (в других репо)
**РЕКОМЕНДУЕТСЯ:** Используйте универсальный скрипт, который автоматически выбирает лучший метод:
В репозиториях с полной инфраструктурой (например hunabapp) используется скрипт, который автоматически выбирает метод (SSH → HTTPS → bundle):
```bash
# Обычный скрипт (для работы не из РФ)
@@ -398,50 +432,11 @@ bash scripts/deployment/gitea/git-push-gitea.sh [branch]
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh [branch]
```
**⚠️ КРИТИЧЕСКИ ВАЖНО:** При работе из Российской Федерации **ПРЕДПОЧТИТЕЛЬНО** использовать скрипт с суффиксом `-via-proxy`!
**Для local_machine** такого скрипта нет — используйте `git push origin main` или SSH (см. выше).
**🇷🇺 ПРАВИЛО ДЛЯ РФ:**
- ✅ **ВСЕГДА используйте прокси-версии** для push и создания тегов из РФ
- ✅ **Ускорение в 5-10 раз** по сравнению с прямым подключением
- ✅ **Стабильное соединение** через российский прокси-сервер (149.154.64.19)
- ✅ **Избежание таймаутов** - прямое подключение из РФ часто нестабильно
**Скрипт автоматически:**
1. Пытается SSH push (если доступен, через прокси для `-via-proxy`)
2. Пытается HTTPS push с оптимизированными настройками (только на Linux с `timeout`)
3. Использует bundle метод (всегда работает, особенно на macOS)
4. ✅ **Мгновенная верификация** - обновляет локальный tracking ref напрямую через `git update-ref` (без медленного `git fetch`)
**Пример:**
```bash
# Push текущей ветки (по умолчанию dev)
bash scripts/deployment/gitea/git-push-gitea.sh
# 🇷🇺 ДЛЯ РФ: Push через прокси (рекомендуется из РФ)
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh
# Push конкретной ветки
bash scripts/deployment/gitea/git-push-gitea.sh main
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh main # 🇷🇺 ДЛЯ РФ
# Режим проверки без пуша (ничего не меняет, только показывает сколько коммитов уйдёт)
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh --dry-run dev
```
**Безопасность скрипта пуша:**
- Не трогает текущую ветку, HEAD, рабочую копию и локальные коммиты.
- Не выполняет: `git reset`, `git checkout --hard`, `git clean`, `git branch -D`, `push --force`.
- Единственная запись в репо: обновление `refs/remotes/origin/<branch>` только после успешного пуша и только на кончик текущей ветки (все «ждущие пуша» коммиты при этом уже на сервере).
- Перед пушем можно проверить: `--dry-run` — показывает число коммитов к пушу, ничего не отправляет и не меняет.
**Git Alias (для удобства):**
Добавьте в `~/.gitconfig`:
```ini
[alias]
gpush = !bash -c 'cd "$(git rev-parse --show-toplevel)" && bash scripts/deployment/gitea/git-push-gitea.sh "$@"' -
```
Использование: `git gpush dev`
**🇷🇺 Из РФ:**
- Предпочтительно **SSH** (порт 2223) — часто стабильнее HTTPS.
- Либо метод через bundle (см. раздел ниже).
### ✅ Резервный способ: Временный скрипт для коммита и пуша
@@ -453,41 +448,25 @@ bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh --dry-run dev
**Процесс:**
1. **Агент создает временный скрипт** в `temp/commit-and-push.sh` с полным коммитом и push командой
2. **Пользователь выполняет скрипт** вручную в терминале
3. **Скрипт автоматически** делает `git add`, `git commit` и `git push` через универсальный скрипт
3. **Скрипт автоматически** делает `git add`, `git commit` и `git push`
**Формат временного скрипта:**
**Формат временного скрипта (для local_machine):**
```bash
#!/bin/bash
# Скрипт для коммита и пуша изменений
set -e
echo "📦 Committing changes..."
git add -A
echo "💾 Creating commit..."
git commit -m "🎨 feat(frontend): центрирование нод при tidyUp с учетом реальных ширин v3.10.4
- ✅ Улучшена функция calculateLevelPositions для центрирования нод
- ✅ Добавлен учет реальных ширин нод (node.width или NODE_WIDTH)
- ✅ Вся группа нод на уровне центрируется относительно START_X
- ✅ Более широкие ноды правильно центрированы относительно узких
- ✅ Обновлена документация (TROUBLESHOOTING_COMPLETE.md, CHANGELOG.md)
Проблема: Более широкие ноды выравнивались по левому краю
Решение: Центрирование с учетом реальных ширин нод
Результат: Ноды центрируются на уровне, визуально выглядит красиво"
git commit -m "docs: описание изменений"
echo "🚀 Pushing to Gitea..."
bash scripts/deployment/gitea/git-push-gitea.sh dev
git push origin main
echo "✅ Done!"
```
**Требования к скрипту:**
- ✅ Должен быть исполняемым (`chmod +x`)
- ✅ Должен содержать полное сообщение коммита с описанием изменений
- ✅ Должен использовать универсальный скрипт `git-push-gitea.sh` для push
- ✅ Для local_machine: `git push origin main` (или SSH remote, см. выше)
- ✅ Должен быть в папке `temp/` для временных скриптов
- ✅ Должен иметь понятные echo сообщения для пользователя
@@ -514,41 +493,15 @@ rm temp/commit-and-push.sh
- `Made-with: Cursor` и аналогичные метки инструмента
- `Co-authored-by:`, `Signed-off-by:` и т.п., если это не требуется явно политикой репозитория
Коммиты должны соответствовать [COMMIT_STANDARDS.md](../../standards/COMMIT_STANDARDS.md) и содержать только заголовок и при необходимости тело сообщения в стандартном формате. См. также раздел «Commit Quality Standards» в `.cursorrules`.
Коммиты должны содержать только заголовок и при необходимости тело сообщения в читаемом формате.
### Неблокирующая проверка типов (при коммитах)
### Проверки перед коммитом (опционально)
Перед коммитом или пушем можно быстро проверить типы (frontend и/или backend) **без блокировки коммита** — скрипт всегда выходит с кодом 0 и только выводит ошибки в консоль.
Если в проекте есть проверка типов или линтеры — их можно запускать перед коммитом по желанию. Для local_machine (документация и скрипты) обычно достаточно `git add` и `git commit`.
```bash
# Frontend + backend (полный отчёт)
bash scripts/maintenance/typecheck-report.sh
(В проекте local_machine нет frontend/backend — при необходимости добавьте свои проверки в скрипты.)
# Только изменённая часть (быстрее)
bash scripts/maintenance/typecheck-report.sh frontend
bash scripts/maintenance/typecheck-report.sh backend
```
Отдельно в пакетах:
- `cd frontend && pnpm typecheck` — только frontend
- `cd backend && pnpm typecheck` — только backend
**Рекомендация:** запускать при коммитах бэкенда/фронта или перед пушем; коммит не блокируется, но ошибки видны в выводе.
### Проверка прав на .env после деплоя (SECRETS_AND_FILE_PERMISSIONS_POLICY.md §4)
После деплоя бэкенда на production выполнить проверку прав на `.env.production` (и при необходимости `.env.staging`) на сервере. Встроена в скрипты `deploy-backend-core-only.sh` и `deploy-backend-core-only-via-proxy.sh`; при необходимости запустить вручную:
```bash
# После деплоя backend на прод (или вручную)
bash scripts/deployment/verify-env-permissions.sh hunab-prod
# либо с явным хостом
bash scripts/deployment/verify-env-permissions.sh hunab@209.38.32.21
```
Ожидается: права `600` и владелец `hunab:hunab` для всех `.env*` в `/opt/app/`. При несоответствии скрипт выводит предупреждение и команду для исправления; деплой не блокируется (exit 0).
**Чеклист коммитов/деплоя:** после деплоя backend на production — выполнить проверку прав (или убедиться, что она уже выполнена скриптом деплоя). См. [SECRETS_AND_FILE_PERMISSIONS_POLICY.md](../../security/SECRETS_AND_FILE_PERMISSIONS_POLICY.md) §4.
*Для других репо:* проверка прав на `.env` после деплоя и typecheck-скрипты — в документации того проекта.
### Метод 1: HTTPS с оптимизированными настройками
@@ -559,28 +512,28 @@ git config http.lowSpeedLimit 0
git config http.lowSpeedTime 0
git config http.timeout 600
# Попытка push
git push origin dev
# Попытка push (для local_machine — ветка main)
git push origin main
```
**⚠️ На macOS:** HTTPS push часто не работает из-за отсутствия команды `timeout`. Скрипт автоматически пропускает HTTPS и использует bundle метод.
### Метод 2: Bundle метод (надежный fallback)
### Метод 2: Bundle метод (надежный fallback) {#резервный-способ-push-через-bundle}
Если HTTPS не работает, используется прямой доступ через файловую систему:
```bash
# Создать bundle
git bundle create /tmp/push.bundle origin/dev..dev
# Создать bundle (для local_machine — ветка main)
git bundle create /tmp/push.bundle origin/main..main
# Скопировать на сервер
# Скопировать на сервер (hunab-prod — хост с доступом к Docker Gitea)
scp /tmp/push.bundle hunab-prod:/tmp/
# Применить в Gitea
# Применить в Gitea (репо local_machine)
ssh hunab-prod "docker cp /tmp/push.bundle gitea:/tmp/push.bundle && \
docker exec gitea sh -c 'cd /data/git/repositories/hunabgit/hunabapp.git && \
docker exec gitea sh -c 'cd /data/git/repositories/hunabgit/local_machine.git && \
git bundle unbundle /tmp/push.bundle && \
git update-ref refs/heads/dev \$(git bundle list-heads /tmp/push.bundle | grep dev | cut -d\" \" -f1) && \
git update-ref refs/heads/main \$(git bundle list-heads /tmp/push.bundle | grep main | cut -d\" \" -f1) && \
rm /tmp/push.bundle' && rm /tmp/push.bundle"
```
@@ -598,59 +551,50 @@ rm /tmp/push.bundle' && rm /tmp/push.bundle"
### Миграция репозиториев
**Для регулярных push используйте скрипт:**
```bash
bash scripts/deployment/gitea/git-push-gitea.sh [branch]
```
**Для регулярных push в local_machine:** `git push origin main` или SSH (см. раздел «Для репозитория local_machine» выше). В других репо может быть скрипт `git-push-gitea.sh`.
#### Шаг 1: Создание bundle из локального репозитория
```bash
cd /Users/eternal/code/hunabapp-dev
git bundle create /tmp/hunabapp-migration.bundle --all
cd /Users/eternal/code/local_machine
git bundle create /tmp/local_machine-migration.bundle --all
```
**Результат:** Bundle ~553M
#### Шаг 2: Копирование bundle на сервер
```bash
scp /tmp/hunabapp-migration.bundle hunab-prod:/tmp/hunabapp-migration.bundle
scp /tmp/local_machine-migration.bundle hunab-prod:/tmp/local_machine-migration.bundle
```
#### Шаг 3: Распаковка bundle на сервере
```bash
ssh hunab-prod "cd /tmp && git clone --mirror hunabapp-migration.bundle hunabapp-mirror.git"
ssh hunab-prod "cd /tmp && git clone --mirror local_machine-migration.bundle local_machine-mirror.git"
```
**Результат:** Bare репозиторий ~557M
#### Шаг 4: Копирование в директорию Gitea
```bash
ssh hunab-prod "
docker exec gitea mkdir -p /data/git/repositories/hunabgit/
docker cp /tmp/hunabapp-mirror.git gitea:/data/git/repositories/hunabgit/hunabapp.git
docker exec gitea chown -R git:git /data/git/repositories/hunabgit/hunabapp.git
docker cp /tmp/local_machine-mirror.git gitea:/data/git/repositories/hunabgit/local_machine.git
docker exec gitea chown -R git:git /data/git/repositories/hunabgit/local_machine.git
"
```
**Результат:** Репозиторий в Gitea (556.6M)
#### Шаг 5: Распаковка refs из packed-refs
**КРИТИЧЕСКИ ВАЖНО:** Gitea не видит ветки в `packed-refs`, нужно распаковать:
```bash
ssh hunab-prod "docker exec gitea sh -c 'cd /data/git/repositories/hunabgit/hunabapp.git && cat packed-refs | grep \"refs/heads/\" | while read sha ref; do mkdir -p \$(dirname \$ref) && echo \$sha > \$ref; done'"
ssh hunab-prod "docker exec gitea sh -c 'cd /data/git/repositories/hunabgit/local_machine.git && cat packed-refs | grep \"refs/heads/\" | while read sha ref; do mkdir -p \$(dirname \$ref) && echo \$sha > \$ref; done'"
```
#### Шаг 6: Обновление базы данных
```bash
ssh hunab-prod "
docker exec hunab-prod-postgres psql -U hunabgit -d hunabgit -c \"UPDATE repository SET is_empty = false WHERE name = 'hunabapp';\"
docker exec hunab-prod-postgres psql -U hunabgit -d hunabgit -c \"UPDATE repository SET is_empty = false WHERE name = 'local_machine';\"
docker exec gitea /usr/local/bin/gitea admin regenerate hooks --config /data/gitea/conf/app.ini
docker restart gitea
"
@@ -661,14 +605,14 @@ ssh hunab-prod "
```bash
# Проверка веток через API
curl -s -H "Authorization: token YOUR_TOKEN" \
https://gitea.hunab.app/api/v1/repos/hunabgit/hunabapp/branches | jq '.[] | .name'
https://gitea.hunab.app/api/v1/repos/hunabgit/local_machine/branches | jq '.[] | .name'
# Проверка файлов через API
# Проверка файлов через API (ветка main)
curl -s -H "Authorization: token YOUR_TOKEN" \
https://gitea.hunab.app/api/v1/repos/hunabgit/hunabapp/git/trees/dev?recursive=0 | jq '.tree[] | .path'
https://gitea.hunab.app/api/v1/repos/hunabgit/local_machine/git/trees/main?recursive=0 | jq '.tree[] | .path'
# Проверка через веб-интерфейс
https://gitea.hunab.app/hunabgit/hunabapp
# Веб-интерфейс
# https://gitea.hunab.app/hunabgit/local_machine
```
**✅ Результат:** Репозиторий полностью мигрирован, все файлы доступны через веб-интерфейс и API.
@@ -686,9 +630,9 @@ https://gitea.hunab.app/hunabgit/hunabapp
#### Использование токена в git
```bash
# В локальном репозитории
cd /Users/eternal/code/hunabapp-dev
git remote set-url origin https://TOKEN@gitea.hunab.app/hunabgit/hunabapp.git
# В локальном репозитории local_machine
cd /Users/eternal/code/local_machine
git remote set-url origin https://TOKEN@gitea.hunab.app/hunabgit/local_machine.git
```
---
@@ -705,7 +649,7 @@ git remote set-url origin https://TOKEN@gitea.hunab.app/hunabgit/hunabapp.git
```bash
# 1. Получить ID репозитория
REPO_ID=$(ssh hunab-prod "docker exec hunab-prod-postgres psql -U hunabgit -d hunabgit -t -c \"SELECT id FROM repository WHERE lower_name = 'hunabapp';\" | tr -d ' '")
REPO_ID=$(ssh hunab-prod "docker exec hunab-prod-postgres psql -U hunabgit -d hunabgit -t -c \"SELECT id FROM repository WHERE lower_name = 'local_machine';\" | tr -d ' '")
# 2. Создать Release в базе данных
ssh hunab-prod "docker exec hunab-prod-postgres psql -U hunabgit -d hunabgit -c \"
@@ -744,7 +688,7 @@ ssh hunab-prod "docker restart gitea"
```
**Параметры:**
- `repo_id` - ID репозитория (получить через `SELECT id FROM repository WHERE lower_name = 'hunabapp';`)
- `repo_id` - ID репозитория (получить через `SELECT id FROM repository WHERE lower_name = 'local_machine';`)
- `publisher_id` - ID пользователя (обычно 1 для первого пользователя)
- `tag_name` - Имя тега (например, `v1.3.7-CRM`)
- `lower_tag_name` - Имя тега в нижнем регистре (например, `v1.3.7-crm`)
@@ -758,7 +702,7 @@ ssh hunab-prod "docker restart gitea"
Если нужно создать тег вручную:
1. Откройте: https://gitea.hunab.app/hunabgit/hunabapp/releases/new
1. Откройте: https://gitea.hunab.app/hunabgit/local_machine/releases/new
2. В поле "Tag" введите имя тега (например, `v1.3.7-CRM`)
3. В поле "Target" выберите commit из списка или введите SHA
4. Заполните Title и Description
@@ -773,7 +717,7 @@ ssh hunab-prod "docker restart gitea"
TOKEN=$(ssh hunab-prod "docker exec gitea /usr/local/bin/gitea admin user generate-access-token --username hunabgit --scopes 'write:repository' --name 'api-tag-creation' 2>&1 | grep -o '[a-z0-9]\{40\}' | head -1")
# 2. Создать Release через API
curl -X POST "https://gitea.hunab.app/api/v1/repos/hunabgit/hunabapp/releases" \
curl -X POST "https://gitea.hunab.app/api/v1/repos/hunabgit/local_machine/releases" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d '{
@@ -807,7 +751,7 @@ git push origin v1.3.7-CRM # Даже после push тег не появит
- [ ] Получить SHA коммита для тега
- [ ] Создать Release в таблице `release` базы данных
- [ ] Перезапустить Gitea для обновления индекса
- [ ] Проверить что тег появился в веб-интерфейсе: https://gitea.hunab.app/hunabgit/hunabapp/releases
- [ ] Проверить что тег появился в веб-интерфейсе: https://gitea.hunab.app/hunabgit/local_machine/releases
### 🔧 Скрипт для автоматического создания тега
@@ -886,13 +830,13 @@ openssl s_client -connect gitea.hunab.app:443 -servername gitea.hunab.app </dev/
```bash
# Ветки
ssh hunab-prod "docker exec gitea git --git-dir=/data/git/repositories/hunabgit/hunabapp.git branch -a | wc -l"
ssh hunab-prod "docker exec gitea git --git-dir=/data/git/repositories/hunabgit/local_machine.git branch -a | wc -l"
# Размер
ssh hunab-prod "docker exec gitea du -sh /data/git/repositories/hunabgit/hunabapp.git"
ssh hunab-prod "docker exec gitea du -sh /data/git/repositories/hunabgit/local_machine.git"
# Последний коммит
ssh hunab-prod "docker exec gitea git --git-dir=/data/git/repositories/hunabgit/hunabapp.git log -1 --pretty=format:'%H %s'"
ssh hunab-prod "docker exec gitea git --git-dir=/data/git/repositories/hunabgit/local_machine.git log -1 --pretty=format:'%H %s'"
```
---
@@ -939,10 +883,10 @@ ssh hunab-prod "docker exec gitea /usr/local/bin/gitea admin regenerate hooks --
**Проверка:**
```bash
# Проверка прав на hooks
ssh hunab-prod "docker exec gitea ls -la /data/git/repositories/hunabgit/hunabapp.git/hooks/pre-receive"
ssh hunab-prod "docker exec gitea ls -la /data/git/repositories/hunabgit/local_machine.git/hooks/pre-receive"
# Проверка содержимого hooks
ssh hunab-prod "docker exec gitea cat /data/git/repositories/hunabgit/hunabapp.git/hooks/pre-receive.d/gitea"
ssh hunab-prod "docker exec gitea cat /data/git/repositories/hunabgit/local_machine.git/hooks/pre-receive.d/gitea"
```
**Дополнительно:** Если проблема сохраняется, проверьте:
@@ -1025,7 +969,7 @@ ssh hunab-prod "
2. ✅ **PostgreSQL настроен** (отдельная БД hunabgit)
3. ✅ **SSL/TLS настроен** (Let's Encrypt, A rating)
4. ✅ **Nginx reverse proxy** (с оптимизацией)
5. ✅ **Репозиторий hunabapp мигрирован** (556.8M, 23 ветки, все файлы доступны)
5. ✅ **Репозиторий local_machine** (и при необходимости другие репо) доступен на Gitea
6. ✅ **DNS настроен** (gitea.hunab.app → 209.38.32.21)
7. ✅ **Веб-интерфейс работает** (файлы отображаются корректно)
8. ✅ **API полностью функционален** (все endpoints работают)
@@ -1097,20 +1041,21 @@ ssh hunab-prod "
## 📚 Полезные команды
**Для local_machine:**
```bash
# Push репозитория (РЕКОМЕНДУЕТСЯ)
bash scripts/deployment/gitea/git-push-gitea.sh [branch]
cd /Users/eternal/code/local_machine
git push origin main
# или SSH (если HTTPS таймаутит): git remote set-url origin ssh://git@gitea.hunab.app:2223/hunabgit/local_machine.git
```
# 🇷🇺 ДЛЯ РФ: Push через прокси (ускоряет в 5-10 раз)
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh [branch]
# Gitea Admin Commands
**Для админов сервера (Gitea Admin):**
```bash
docker exec gitea /usr/local/bin/gitea admin --help
docker exec gitea /usr/local/bin/gitea admin regenerate hooks
# Git операции в Gitea
docker exec gitea git --git-dir=/data/git/repositories/hunabgit/hunabapp.git branch -a
docker exec gitea git --git-dir=/data/git/repositories/hunabgit/hunabapp.git log --oneline -10
# Git операции в Gitea (репо local_machine)
docker exec gitea git --git-dir=/data/git/repositories/hunabgit/local_machine.git branch -a
docker exec gitea git --git-dir=/data/git/repositories/hunabgit/local_machine.git log --oneline -10
# PostgreSQL операции
docker exec hunab-prod-postgres psql -U hunabgit -d hunabgit -c "SELECT * FROM repository;"
@@ -1176,38 +1121,32 @@ bash scripts/deployment/mirror-all-repos-to-external.sh
- **Веб-интерфейс:** https://gitea.hunab.app
- **API:** https://gitea.hunab.app/api/v1/
- **Репозиторий:** https://gitea.hunab.app/hunabgit/hunabapp
- **Репозиторий local_machine:** https://gitea.hunab.app/hunabgit/local_machine
- **Быстрый старт local_machine:** [LOCAL_MACHINE_GITEA_SETUP.md](./LOCAL_MACHINE_GITEA_SETUP.md)
- **Документация Gitea:** https://docs.gitea.io/
- **SSL Report:** https://www.ssllabs.com/ssltest/analyze.html?d=gitea.hunab.app
- **Зеркалирование:** [Gitea Mirroring Guide](./GITEA_MIRRORING_GUIDE.md)
- **Миграция на зеркальный сервер:** [Gitea Migration Plan](./GITEA_MIGRATION_TO_MIRROR_SERVER.md)
- **Индекс документации:** [Gitea Index](./INDEX.md) - Перелинкованный индекс всех документов Gitea
- **Зеркалирование:** [Gitea Mirroring Guide](./GITEA_MIRRORING_GUIDE.md) (если есть)
- **Миграция на зеркальный сервер:** [Gitea Migration Plan](./GITEA_MIGRATION_TO_MIRROR_SERVER.md) (если есть)
---
## ✅ Текущий статус (2025-12-27)
## ✅ Текущий статус
### Репозиторий hunabapp
- ✅ **Размер:** 556.8M
- **Ветки:** 23 (dev, main, и другие)
- ✅ **Файлы:** Все файлы доступны через веб-интерфейс и API
- ✅ **Веб-интерфейс:** Полностью функционален
- ✅ **API:** Работает корректно
- ✅ **Git операции:** Клонирование, push, pull работают
### Репозиторий local_machine
- **URL:** https://gitea.hunab.app/hunabgit/local_machine
- **Ветка по умолчанию:** main
- **Пуш:** `git push origin main` или SSH (порт 2223) — см. [LOCAL_MACHINE_GITEA_SETUP.md](./LOCAL_MACHINE_GITEA_SETUP.md)
### Система
- ✅ Gitea контейнер работает стабильно
- ✅ PostgreSQL подключение стабильно
- ✅ SSL/TLS работает корректно
- ✅ Nginx reverse proxy настроен правильно
- ✅ DNS настроен (gitea.hunab.app → 209.38.32.21)
### Система (сервер Gitea)
- ✅ Gitea контейнер на 209.38.32.21
- ✅ PostgreSQL, SSL/TLS, Nginx
- ✅ DNS: gitea.hunab.app → 209.38.32.21
**Последнее обновление:** 2026-02-27
**Версия документа:** 1.4
**Статус:** ✅ Gitea полностью развернут и работает стабильно
**Изменения:**
- Добавлен резервный способ коммитов через временный скрипт (2026-02-16)
- Добавлен гайд по очистке истории Git от build-артефактов (2026-02-27)
**Последнее обновление:** 2026-03-14
**Версия документа:** 2.0 (адаптация под проект local_machine)
**Изменения:**
- Гайд переориентирован на репозиторий local_machine; примеры и команды приведены к этому проекту
- Добавлена ссылка на LOCAL_MACHINE_GITEA_SETUP.md для быстрого старта
---
@@ -1217,7 +1156,9 @@ bash scripts/deployment/mirror-all-repos-to-external.sh
**99% случаев:** Файлы уже в `.gitignore`, но Git их отслеживает (закоммичены до добавления в `.gitignore`)
**Решение:** ✅ **Простое удаление из tracking** (см. ниже) - БЕЗ переписывания истории!
**Решение:** ✅ **Простое удаление из tracking** (см. ниже) БЕЗ переписывания истории!
*Пример ниже — для репо с frontend (build-артефакты). В local_machine: убедиться, что путь в .gitignore, затем `git rm --cached -r путь/` и коммит.*
**1% случаев:** Нужно удалить файлы из ВСЕЙ истории (например, случайно закоммитили секреты)
@@ -1258,8 +1199,8 @@ git commit -m "chore(frontend): удаление dist-* build-артефакто
- Файлы были в .gitignore, но отслеживались Git (закоммичены до добавления в .gitignore)
- Build-артефакты генерируются при деплое и не должны храниться в репозитории"
# 5. Push в Gitea
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh dev # 🇷🇺 ДЛЯ РФ
# 5. Push в Gitea (для local_machine: git push origin main или SSH)
bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh dev # в других репо; для local_machine: git push origin main
# 6. Проверка
git ls-files | grep -E "^frontend/dist-(zero-downtime|fast-no-image|via-proxy|cache-busting)/" | wc -l
@@ -1374,7 +1315,7 @@ brew install git-filter-repo
# pip3 install git-filter-repo
# Запуск (бэкап создаётся скриптом автоматически)
bash scripts/maintenance/git-history-cleanup-secrets.sh /path/to/hunabapp-dev
bash scripts/maintenance/git-history-cleanup-secrets.sh /path/to/local_machine
```
**Файлы:**
@@ -1387,7 +1328,7 @@ bash scripts/maintenance/git-history-cleanup-secrets.sh /path/to/hunabapp-dev
**Критично:** на production-сервере перед заменой репозитория в Gitea обязательно создать бэкап:
```bash
GITEA_REPO="/data/git/repositories/hunabgit/hunabapp.git"
GITEA_REPO="/data/git/repositories/hunabgit/local_machine.git"
ssh hunab-prod "docker exec gitea cp -r $GITEA_REPO ${GITEA_REPO}.backup-$(date +%Y%m%d)"
```
@@ -1611,7 +1552,7 @@ scp -i ~/.ssh/hunab_deploy_key /tmp/repo-clean.bundle hunab@209.38.32.21:/tmp/
ssh hunab-prod "cd /tmp && git clone --mirror /tmp/repo-clean.bundle repo-clean.git"
# 4. Бэкап текущего Gitea репозитория
GITEA_REPO="/data/git/repositories/hunabgit/hunabapp.git"
GITEA_REPO="/data/git/repositories/hunabgit/local_machine.git"
ssh hunab-prod "docker exec gitea cp -r $GITEA_REPO ${GITEA_REPO}.backup-$(date +%Y%m%d)"
# 5. Копировать очищенный репозиторий в контейнер
@@ -1625,7 +1566,7 @@ ssh hunab-prod "docker exec gitea sh -c '
cp -r /tmp/repo-clean.git/packed-refs . 2>/dev/null || true
cp -r /tmp/repo-clean.git/refs/heads refs/ 2>/dev/null || true
cp -r /tmp/repo-clean.git/refs/tags refs/ 2>/dev/null || true
echo \"ref: refs/heads/dev\" > HEAD
echo \"ref: refs/heads/main\" > HEAD
rm -rf refs/original filter-repo
git reflog expire --expire=now --all 2>/dev/null
git gc --prune=now 2>&1 | tail -5
@@ -1642,7 +1583,7 @@ ssh hunab-prod "docker exec gitea sh -c 'cd $GITEA_REPO && \
echo \"Файлов dist в истории: \$(git rev-list --all --objects | grep -cE \"dist-zero-downtime|dist-fast-no-image|dist-via-proxy|dist-cache-busting\" || echo 0)\" && \
echo \"Веток: \$(git branch | wc -l)\" && \
echo \"Тегов: \$(git tag | wc -l)\" && \
git log --oneline -3 dev'"
git log --oneline -3 main'"
```
**✅ Результат:** Gitea репозиторий обновлен очищенной версией
@@ -1811,7 +1752,7 @@ ssh hunab-prod "docker exec gitea rm -rf $GITEA_REPO && \
- [ ] Удалены файлы из tracking: `git rm --cached -r frontend/dist-*/`
- [ ] Проверено что файлы в staging для удаления: `git status --short | grep "^D "`
- [ ] Создан коммит с описанием удаления
- [ ] Push в Gitea через скрипт: `bash scripts/deployment/gitea/git-push-gitea-via-proxy.sh dev`
- [ ] Push в Gitea (local_machine: `git push origin main` или SSH)
- [ ] Проверено что файлы больше не отслеживаются: `git ls-files | grep dist- | wc -l` = 0
- [ ] Обновлен CHANGELOG с описанием операции