# 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).