ce1e88174b
Made-with: Cursor
256 lines
10 KiB
Markdown
256 lines
10 KiB
Markdown
# 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'
|
||
```
|