Hiddify Manager 12.3.0 - три грабли свежей установки#
При установке Hiddify Manager 12.3.0 на свежий сервер встречаются три отдельных проблемы. Каждая по 20-40 минут отладки, если не знать паттерн.
Симптомы#
- Установщик повис на стадии
init-db, лог стоит на строкеUpdating db from version 0 for node 0. - После установки кнопки "Apply Configs" / "Renew Cert" в админке тихо ничего не делают.
hiddify-haproxy.serviceкрутится в crash-loop сAddress family not supported by protocol.
Почему это происходит#
1. init-db виснет на TLS recv#
Процесс python3 -m hiddifypanel init-db после миграций отправляет серию probe-запросов на внешние CDN (hiddify.com через Cloudflare, fbcdn, и т.д.). На РФ-провайдерах middlebox обрывает TLS recv после handshake, а Hiddify не выставляет socket timeout - повисает навечно.
2. cmd_in_back без аргумента#
В hiddifypanel 12.3.0 в panel/run_commander.py забыли передать аргумент:
В panel.err.log повторяется TypeError: cmd_in_back() missing 1 required positional argument: 'cmd'.
3. haproxy v4v6 на ядре без IPv6#
На хостерах, которые ставят ipv6.disable=1 в kernel cmdline (cloud-провайдеры с агрессивной кастомизацией ядра), /proc/sys/net/ipv6/ отсутствует совсем. Haproxy-конфиг Hiddify содержит bind :443,:::443 v4v6 - попытка биндиться на IPv6 падает.
Что делать#
Для init-db hang#
Установщик ловит смерть python в try/except и продолжает работу. Миграции БД к моменту probe уже отработали.
Для cmd_in_back#
Sed-патч с бэкапом:
FILE=/opt/hiddify-manager/.venv313/lib/python3.13/site-packages/hiddifypanel/panel/run_commander.py
cp "$FILE" "$FILE.bak-$(date +%F)"
sed -i 's|t = threading.Thread(target=cmd_in_back, daemon=True)|t = threading.Thread(target=cmd_in_back, args=(base_cmd,), daemon=True)|' "$FILE"
systemctl restart hiddify-panel-background-tasks hiddify-panel
Патч переживет update.sh, но не переживет обновление самого pip-пакета hiddifypanel. Альтернатива - запускать apply_configs.sh --no-gui --no-log напрямую из shell, не через админку.
Для haproxy на ядре без IPv6#
Убрать v4v6 и IPv6-биндинги из четырех файлов (рендеренного и трех шаблонов):
for f in /opt/hiddify-manager/haproxy/haproxy.cfg \
/opt/hiddify-manager/haproxy/fronts/in_httpmode_quic.cfg.pj2 \
/opt/hiddify-manager/haproxy/fronts/in_tcpmode.cfg.pj2 \
/opt/hiddify-manager/haproxy/fronts/sni_proxy.cfg.pj2; do
cp "$f" "$f.bak-$(date +%F)"
sed -i 's|bind :80,:::80 v4v6 tfo|bind :80 tfo|g
s|bind :443,:::443 v4v6 tfo|bind :443 tfo|g
s|bind quic4@:443,quic6@:443 v4v6 tfo|bind quic4@:443 tfo|g' "$f"
done
systemctl reset-failed hiddify-haproxy && systemctl restart hiddify-haproxy
Важно: keyword v4 в haproxy не существует, удалять v4v6 целиком - дефолт без него уже чистый IPv4.
Источники#
На основе опыта автора hiddify-faq.
Не помогло или есть уточняющий вопрос - заходите в русское сообщество @hiddify_rus.