Files
owngit/docs/troubleshooting.md
2026-04-22 15:44:25 +10:00

276 lines
12 KiB
Markdown
Raw Permalink 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 -sS -o /dev/null -w "%{http_code}\n" http://192.168.128.100:3000/api/healthz
```
Ожидайте код **200**. Не используйте **`curl -I http://…:3000/`** без пути: для **`/`** Gitea отвечает **405** на метод **HEAD** (`curl -I` именно его шлёт).
Если не отвечает:
```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).
## 12) `containerd.io : Conflicts: containerd` при установке Docker / bootstrap
На одной системе не должно одновременно стоять:
- **`containerd`** — пакет Ubuntu, тянется вместе с **`docker.io`**;
- **`containerd.io`** — пакет из [репозитория Docker Inc.](https://docs.docker.com/engine/install/ubuntu/), нужен для **`docker-ce`** и типичной связке с **`docker-compose-plugin`** из того же источника.
Если вы ставили **`docker.io`** из Ubuntu, а затем **`docker-compose-plugin`** с `download.docker.com`, apt может попытаться подтянуть **`containerd.io`** и упасть с конфликтом.
### Решение A (рекомендуется): только стек Docker Inc.
После того как репозиторий Docker уже добавлен (шаг B из §10):
```bash
sudo apt-get remove -y docker.io docker-doc docker-compose docker-compose-v2 docker-doc podman-docker containerd runc 2>/dev/null || true
sudo apt-get autoremove -y
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
docker compose version
```
Повторите [`bootstrap-own-git.sh`](../scripts/bootstrap-own-git.sh): при уже рабочем `docker compose` он **не** будет снова вызывать `apt` для Docker.
### Решение B: только пакеты Ubuntu
Если хотите оставить **`docker.io`** без репозитория Docker — не ставьте **`docker-compose-plugin`** из Docker; используйте **`docker-compose`** как отдельную команду из пакета universe или бинарник Compose v2 вручную (§10, шаг C).
### Проверка
```bash
dpkg -l | grep -E 'docker.io|docker-ce|containerd|compose'
```
## 13) `Connection refused` на `https://git.…:443` (kalinamall / Gitea)
Gitea в Docker обычно слушает только **HTTP :3000**; **:443** пустой, пока не настроен TLS-прокси на хосте. При схеме из [`docs/haproxy-kalinamall.cfg`](haproxy-kalinamall.cfg) на узле Gitea должен слушать кто‑то **HTTPS на 443** (чаще **nginx** с вашим wildcard).
Пошаговая установка: **[`docs/gitea-nginx-https.md`](gitea-nginx-https.md)**.
## 14) Миграция GitHub → Gitea: `Permission denied (publickey)` при push
Скрипт [`migrate-github-to-gitea.sh`](../scripts/migrate-github-to-gitea.sh) по умолчанию делает **`git push`** в Gitea по **SSH**. На машине должен быть **SSH-ключ**, добавленный в ваш аккаунт Gitea. Если миграцию запускают на **сервере с Gitea** под **root**, своего ключа там обычно нет.
Сделайте пуш по **HTTPS** с токеном:
```bash
export PUSH_WITH_SSH=false
export GITEA_USERNAME='ваш_логин_в_Gitea'
# GITEA_TOKEN уже с правами на репозитории
```
См. также [.env.example](../.env.example) и раздел про миграцию в [`README.md`](../README.md).