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

12 KiB
Raw Permalink Blame History

Troubleshooting

1) https://git.papatramp.ru не открывается

Проверь DNS и маршрутизацию:

dig +short git.papatramp.ru
  • из интернета должен резолвиться во внешний IP;
  • из локалки лучше Split DNS на LAN IP HAProxy.

Проверь HAProxy:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl status haproxy --no-pager

2) 404 от HAProxy

Причина: не совпадает Host, запрос уходит в bk_http_default.

Проверка:

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.

Проверки:

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 именно его шлёт).

Если не отвечает:

cd /opt/gitea
sudo docker compose ps
sudo docker compose logs --tail=200 gitea

4) SSH push не работает (Permission denied (publickey))

Проверь порт и доступ:

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:

curl -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/user"

7) Private репозитории GitHub не видны в миграции

Проверь GITHUB_TOKEN:

  • токен должен иметь права на чтение приватных репозиториев;
  • GITHUB_OWNER и GITHUB_OWNER_TYPE должны быть корректными.

8) LFS не перенесся

Включи:

export MIGRATE_LFS=true

И проверь наличие git-lfs:

git lfs version

9) Кривые редиректы/URL в Gitea

Проверь ROOT_URL в app.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, команда apt-get install docker-ce … всегда даст no installation candidate — это ожидаемо.

Шаг A (опционально): включить universe

Иногда помогает; без вопросов в консоли используйте -y:

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):

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; отредактируйте при необходимости):

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

Установка демона и плагинов:

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker

Проверка:

docker --version
docker compose version

Важно: держите на машине один вариант демона Docker: либо docker.io (из Ubuntu), либо docker-ce (из Docker). Для этого репозитория удобнее стек Docker Inc. со шага B и docker compose.

Шаг C: плагин вручную из релиза Compose (без apt)

Если нужен только бинарник Compose v2 рядом с уже работающим docker:

  • Актуальная версия и архитектура — в релизах compose.
  • Пример для amd64 (подставьте версию и имя файла со страницы релиза):
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.

Исправление:

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.

12) containerd.io : Conflicts: containerd при установке Docker / bootstrap

На одной системе не должно одновременно стоять:

  • containerd — пакет Ubuntu, тянется вместе с docker.io;
  • containerd.io — пакет из репозитория Docker Inc., нужен для docker-ce и типичной связке с docker-compose-plugin из того же источника.

Если вы ставили docker.io из Ubuntu, а затем docker-compose-plugin с download.docker.com, apt может попытаться подтянуть containerd.io и упасть с конфликтом.

Решение A (рекомендуется): только стек Docker Inc.

После того как репозиторий Docker уже добавлен (шаг B из §10):

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: при уже рабочем docker compose он не будет снова вызывать apt для Docker.

Решение B: только пакеты Ubuntu

Если хотите оставить docker.io без репозитория Docker — не ставьте docker-compose-plugin из Docker; используйте docker-compose как отдельную команду из пакета universe или бинарник Compose v2 вручную (§10, шаг C).

Проверка

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 на узле Gitea должен слушать кто‑то HTTPS на 443 (чаще nginx с вашим wildcard).

Пошаговая установка: docs/gitea-nginx-https.md.

14) Миграция GitHub → Gitea: Permission denied (publickey) при push

Скрипт migrate-github-to-gitea.sh по умолчанию делает git push в Gitea по SSH. На машине должен быть SSH-ключ, добавленный в ваш аккаунт Gitea. Если миграцию запускают на сервере с Gitea под root, своего ключа там обычно нет.

Сделайте пуш по HTTPS с токеном:

export PUSH_WITH_SSH=false
export GITEA_USERNAME='ваш_логин_в_Gitea'
# GITEA_TOKEN уже с правами на репозитории

См. также .env.example и раздел про миграцию в README.md.