Files
owngit/docs/troubleshooting.md
T
2026-04-22 12:10:32 +10:00

221 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Troubleshooting
## 1) `https://git.papatramp.ru` не открывается
Проверь DNS и маршрутизацию:
```bash
dig +short git.papatramp.ru
```
- из интернета должен резолвиться во внешний IP;
- из локалки лучше Split DNS на LAN IP HAProxy.
Проверь HAProxy:
```bash
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl status haproxy --no-pager
```
## 2) 404 от HAProxy
Причина: не совпадает `Host`, запрос уходит в `bk_http_default`.
Проверка:
```bash
curl -I -H "Host: git.papatramp.ru" http://127.0.0.1
```
Убедись, что есть ACL:
- `acl host_git hdr(host) -i git.papatramp.ru`
- `use_backend bk_gitea if host_git`
## 3) 503 от HAProxy на Gitea
Причина: backend `bk_gitea` down.
Проверки:
```bash
curl -I http://192.168.128.100:3000
curl -I http://192.168.128.100:3000/api/healthz
```
Если не отвечает:
```bash
cd /opt/gitea
sudo docker compose ps
sudo docker compose logs --tail=200 gitea
```
## 4) SSH push не работает (`Permission denied (publickey)`)
Проверь порт и доступ:
```bash
nc -zv git.papatramp.ru 2222
ssh -vvv -p 2222 git@git.papatramp.ru
```
Убедись:
- публичный ключ добавлен в Gitea аккаунт;
- в `~/.ssh/config` правильный `HostName`, `Port`, `IdentityFile`;
- backend `bk_git_ssh` смотрит на правильный IP/порт.
## 5) В локалке не работает, а из интернета работает
Обычно это DNS/NAT loopback:
- настрой Split DNS (`git.papatramp.ru -> LAN IP HAProxy`);
- либо включи Hairpin NAT на роутере.
## 6) Миграция не создает репозитории в Gitea
Проверь токен и права:
- `GITEA_TOKEN` должен иметь право создавать репозитории;
- для org нужен доступ к организации;
- `GITEA_OWNER_TYPE` должен соответствовать `user`/`org`.
Проверка API:
```bash
curl -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/user"
```
## 7) Private репозитории GitHub не видны в миграции
Проверь `GITHUB_TOKEN`:
- токен должен иметь права на чтение приватных репозиториев;
- `GITHUB_OWNER` и `GITHUB_OWNER_TYPE` должны быть корректными.
## 8) LFS не перенесся
Включи:
```bash
export MIGRATE_LFS=true
```
И проверь наличие `git-lfs`:
```bash
git lfs version
```
## 9) Кривые редиректы/URL в Gitea
Проверь `ROOT_URL` в `app.ini`:
```ini
[server]
ROOT_URL = https://git.papatramp.ru/
```
И заголовки от HAProxy в `bk_gitea` (`X-Forwarded-Proto`, `X-Forwarded-Host`, `Host`).
## 10) `E: Unable to locate package docker-compose-plugin`
Команды в этом репозитории используют **Docker Compose v2** (`docker compose …`).
### Почему так бывает
- Пакет **`docker-compose-plugin`** иногда отсутствует в вашем наборе репозиториев (например, на Ubuntu 24.04 Noble даже при включённом **universe** зеркало может не отдавать пакет или он не попадает в установку).
- Пакеты **`docker-ce`**, **`docker-ce-cli`**, **`containerd.io`**, **`docker-compose-plugin`** с сайта Docker **не входят** в обычные `ubuntu.com` репозитории. Пока не добавлен **[официальный apt-источник Docker](https://docs.docker.com/engine/install/ubuntu/)**, команда `apt-get install docker-ce …` всегда даст *no installation candidate* — это ожидаемо.
### Шаг A (опционально): включить `universe`
Иногда помогает; без вопросов в консоли используйте `-y`:
```bash
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y universe
sudo apt-get update
sudo apt-get install -y docker-compose-plugin
```
Если снова *Unable to locate package* — переходите к шагу B.
### Шаг B: репозиторий Docker + установка (основной способ)
Сначала **подключите** репозиторий, затем ставьте пакеты (пример как в [документации Docker](https://docs.docker.com/engine/install/ubuntu/)):
```bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
```
Если уже стоит **`docker.io`** из Ubuntu и хотите заменить на **`docker-ce`**, снимите конфликтующие пакеты (список из документа Docker; отредактируйте при необходимости):
```bash
for p in docker.io docker-doc docker-compose docker-compose-v2 docker-doc podman-docker containerd runc; do
sudo apt-get remove -y "$p" 2>/dev/null || true
done
```
Установка демона и плагинов:
```bash
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
```
Проверка:
```bash
docker --version
docker compose version
```
**Важно:** держите на машине один вариант демона Docker: либо **`docker.io`** (из Ubuntu), либо **`docker-ce`** (из Docker). Для этого репозитория удобнее стек Docker Inc. со шага B и `docker compose`.
### Шаг C: плагин вручную из релиза Compose (без apt)
Если нужен только бинарник Compose v2 рядом с уже работающим `docker`:
- Актуальная версия и архитектура — в [релизах compose](https://github.com/docker/compose/releases).
- Пример для amd64 (подставьте версию и имя файла со страницы релиза):
```bash
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.XX.YY/docker-compose-linux-x86_64" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
docker compose version
```
Путь `…/cli-plugins/docker-compose` — стандартный для подкоманды `docker compose`.
## 11) Bootstrap: «Не найден файл: …/gitea/docker-compose.yml» и т.п.
Скрипт ищет файлы по **`OWGIT_REPO_DIR`** (по умолчанию это каталог **над** `scripts/`, где лежит `bootstrap-own-git.sh`). Ошибка значит: переменная указывает **не на тот** каталог или репозиторий не склонирован туда.
**Пример ошибки:** задали `OWGIT_REPO_DIR=/opt/owngit`, а клон реально в `/tmp/owngit`.
**Исправление:**
```bash
cd /tmp/owngit # каталог с gitea/, systemd/, …
sudo OWGIT_REPO_DIR="$(pwd)" ENABLE_HAPROXY=false ./scripts/bootstrap-own-git.sh
```
Либо склонируйте репозиторий в `/opt/owngit` и используйте `OWGIT_REPO_DIR=/opt/owngit`. Запускайте **`./scripts/bootstrap-own-git.sh`** из каталога клона (или с явным путём к скрипту), чтобы не исполнить случайный скрипт из `$PATH`.
См. также блок про bootstrap в [`README.md`](../README.md).