Есть такой способ бэкапа Github - импорт организации в self-hosted Gitlab и сохранение данных где-то у себя. У меня на сервере этот процесс начал неожиданно сбоить. Попробовал воспроизвести локально, а тут импорт вообще не запускался, запрос падал с тайм-аутом:
==> /var/log/gitlab/gitlab-rails/production.log <== Rack::Timeout::RequestTimeoutException (Request ran for longer than 60000ms ):
Посмотрел интернет по этой ошибке, ничего похожего не нашел. Поискал как увеличить тайм-ауты Rack и Puma - изменения настроек не помогли, тайм-аут оставался.
Попробовал разные версии Gitlab, изначально была использовалась 16, на 17 и 18 без изменений.
Включил debug логи, новых данных не добавилось.
Параллельно с этим общался с ChatGPT и в какой-то момент он предложил проверить сеть в контейнере. DNS и подключение по 443 порту к api.github.com через netcat работал нормально
root@4aed0d800013:/var/log/gitlab# netcat -zv api.github.com 443
Warning: inverse host lookup failed for 4.208.26.200:
Unknown host api.github.com [4.208.26.200] 443 (?) open
а вот curl в контейнере тоже падал по тайм-ауту:
root@4aed0d800013:/var/log/gitlab# curl --connect-timeout 5 https://api.github.com
curl: (28) Connection timed out after 5001 milliseconds
Никаких прокси не использовалось, но был включен VPN. И с такими симптомами вывод один - проблемы с MTU. ChatGPT предложил несколько решений:
* В настройках Dockerd:
# cat /etc/docker/daemon.json|
{
"mtu": 1380
}
* Через iptables:
# iptables -t mangle -A POSTROUTING \
-p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
- Использовать прокси:
$ docker run \
-e HTTPS_PROXY=http://host.docker.internal:3128 \
-e HTTP_PROXY=http://host.docker.internal:3128 \
gitlab/gitlab-ce
Остановился на первом, подключение к api.github.com заработало.
Не первый раз сталкиваюсь с проблемами MTU и каждый раз не сразу понятно куда копать.
Вывод такой: если у вас проблемы c подключением, но при этом DNS работает и подключение по порту через netcat проходит, a http - нет - проверяйте MTU.