Made-with: Cursor
12 KiB
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.ruuse_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.