Lze na alpine linuxu provozovat hestia control panel?
HestiaCP oficiálně nepodporuje Alpine Linux a instalace na něm by byla velmi komplikovaná.
Důvodem je, že HestiaCP je navržen pro Debian a Ubuntu (resp. systémy s apt
a standardním FHS), zatímco Alpine:
-
Používá musl libc místo glibc → některé binárky a skripty mohou selhat.
-
Má minimální základní systém – mnoho závislostí, které HestiaCP potřebuje (Postfix, Dovecot, PHP-FPM, MariaDB, Bind, atd.) by se muselo ručně doinstalovat a zkompilovat.
-
Používá OpenRC místo systemd, přičemž HestiaCP počítá se
systemd
nebosysvinit
skripty. -
Instalátor HestiaCP je psaný v bash a očekává konkrétní strukturu
/etc/
,/var/
a/usr/
, kterou Alpine nemá. -
apk
balíčky v Alpine se jmenují jinak nežapt
balíčky – instalační skript HestiaCP by je nepoznal.
Možné přístupy
Pokud chceš HestiaCP za každou cenu provozovat na Alpine, existují tyto varianty:
1. Docker s Debianem/Ubuntu uvnitř (doporučeno)
-
Alpine běží jako host OS (malý a rychlý).
-
HestiaCP běží uvnitř Docker kontejneru založeného na Debianu nebo Ubuntu.
-
Alpine zůstane čistý a odlehčený, HestiaCP bude mít vše, co potřebuje.
Příklad:
docker run -d --name hestia \
-p 8083:8083 \
-p 80:80 -p 443:443 \
ubuntu:22.04
Pak se do kontejneru přihlásíš:
docker exec -it hestia bash
A nainstaluješ HestiaCP klasicky:
apt update && apt upgrade -y
wget [https]://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
bash hst-install.sh
Výhoda: čistý Alpine, snadná správa, oficiálně podporované prostředí pro HestiaCP.
Nevýhoda: malý overhead navíc díky kontejneru.
2. Chroot prostředí s Debianem/Ubuntu
-
Na Alpine vytvoříš chroot s Debianem pomocí
debootstrap
. -
V chrootu pak nainstaluješ HestiaCP.
Postup je podobný Dockeru, jen bez kontejnerizace.
Hodí se, pokud nechceš Docker, ale potřebuješ nativní integraci do host systému.
3. Portace HestiaCP na Alpine (náročné)
-
Úprava instalačního skriptu, aby používal
apk
. -
Psaní nových OpenRC init skriptů.
-
Testování kompatibility musl vs. glibc (například postfix a dovecot mají s musl problémy).
-
Dlouhodobá údržba.
-
Prakticky nový projekt – silně nedoporučuji.
Shrnutí
-
Ne, HestiaCP na Alpine nativně nespustíš bez velkých úprav.
-
Nejlepší řešení: provozovat HestiaCP v Docker kontejneru na Debian/Ubuntu obrazu → jednoduché, stabilní a oficiálně podporované.
-
Pokud Docker nechceš, použij chroot s Debianem.
Chceš, abych ti připravil konkrétní Dockerfile pro HestiaCP? 🐳
Jak na OpenWRT nasměřovat https požadavky různých domén na různé IP ve vnitřní síti pomocí "L4 + SNI"?
ChatGPT řekl:
Nastavení L4 + SNI v HAProxy znamená, že neukončuješ TLS (terminaci necháš až na cílovém serveru) a jenom se na základě SNI přeposílají celé TCP streamy.
To je ideální pro tvůj router s OpenWRT a slabším CPU – výkonově je to skoro jako NAT.
Níže popíšu kompletní konfiguraci, krok za krokem.
1. Zapnutí HAProxy v OpenWRT
Na OpenWRT musíš mít nainstalovaný balíček haproxy
:
opkg update
opkg install haproxy
Po instalaci budeš mít konfigurační soubor zde:
/etc/haproxy/haproxy.cfg
2. Princip fungování
-
HAProxy běží na portu 443 na veřejné IP.
-
Pro každý HTTPS request se nejdřív podívá na první část TLS handshaku (ClientHello).
-
V SNI najde, jakou doménu klient požaduje.
-
Podle domény rozhodne, na který vnitřní server přepošle data – bez rozšifrování.
Internet → HAProxy (L4 + SNI) → vnitřní server s HTTPS
3. Základní konfigurace – příklad
Příklad:
www.uforing.cz
→ 192.168.10.10
api.uforing.cz
→ 192.168.10.20
blog.uforing.cz
→ 192.168.10.30
/etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
maxconn 2048
user haproxy
group haproxy
daemon
defaultslog global
mode tcp
option tcplog
timeout connect 5s
timeout client 50s
timeout server 50s
# Frontend - naslouchá na portu 443frontend https_front
bind *:443
# Čeká na první pakety TLS, aby přečetl SNI
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
# Směrování podle SNIuse_backend be_www if { req_ssl_sni -i www.uforing.cz }
use_backend be_api if { req_ssl_sni -i api.uforing.cz }
use_backend be_blog if { req_ssl_sni -i blog.uforing.cz }
# Defaultní server, pokud žádné SNI neodpovídá
default_backend be_default
# Backend pro www.uforing.cz
backend be_www
mode tcp
server web1 192.168.10.10:443 check
# Backend pro api.uforing.cz
backend be_api
mode tcp
server api1 192.168.10.20:443 check
# Backend pro blog.uforing.cz
backend be_blog
mode tcp
server blog1 192.168.10.30:443 check
# Výchozí backend - třeba chybová stránka
backend be_default
mode tcp
server default1 192.168.10.50:443 check
4. Vysvětlení klíčových direktiv
Direktiva | Význam |
---|---|
mode tcp |
HAProxy běží na L4, jen přeposílá šifrovaná data. |
tcp-request inspect-delay 5s |
Počká max. 5 sekund na první data z klienta, aby mohl přečíst SNI z TLS handshaku. |
req_ssl_hello_type 1 |
Podmínka – jedná se o TLS ClientHello (začátek šifrovaného spojení). |
req_ssl_sni -i www.uforing.cz |
Podmínka – pokud SNI obsahuje danou doménu. |
check |
Zdravotní kontrola cílového serveru. |
5. Ověření funkčnosti
-
Restart HAProxy:
/etc/init.d/haproxy restart
-
Podívej se do logu:
logread -f
-
Otestuj z klienta:
curl -vk https://www.uforing.cz --resolve www.uforing.cz:443:TVA_PUBLIC_IP
Pokud vše funguje správně, měl by se request přeposlat na vnitřní server 192.168.10.10.
6. Výkonnostní optimalizace
a) Zapnout TCP Fast Open
Do sekce global
přidej:
tune.ssl.default-dh-param 2048
tune.bufsize 32768
⚠
tune.ssl.default-dh-param
je spíš pro L7 režim, ale zvětšení bufferu pomáhá i pro L4.
b) Použít nbproc
nebo nbthread
MT7621 má dvě jádra, takže můžeš povolit více procesů:
global
nbproc 2
7. Shrnutí
Prvek | Výhoda | Nevýhoda |
---|---|---|
L4 + SNI | TLS zůstává šifrované, žádné certifikáty na HAProxy, vysoký výkon | Nelze směrovat podle cesty (/wp-admin/ ), jen podle domény |
L7 (TLS terminace) | Plná kontrola nad HTTP, možnost přepisovat hlavičky | Výkonově drahé, potřebuješ certifikáty |
8. Doporučení pro tvůj router
-
Na MediaTek MT7621 používej výhradně L4 + SNI.
-
Terminaci TLS přenech koncovým serverům (např. webserver s Nginx/Apache, nebo Hestia panel).
-
Pokud máš hodně domén, můžeš doplnit wildcard pravidla:
use_backend be_wp if { req_ssl_sni -m end .uforing.cz }
Toto pošle všechny subdomény
*.uforing.cz
na jeden server.