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:
@@ -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 с описанием операции
|
||||
|
||||
|
||||
Reference in New Issue
Block a user