Elido dostarcza chart Helm, który wdraża cały stos na jednym klastrze Kubernetes, a ten tekst przechodzi przez niego na pojedynczym węźle k3s. Przed poleceniami to, co decyduje, czy czytać dalej: Elido nie jest open source, a self-hosting nie jest produktem, który sprzedajemy. Repozytorium nie ma pliku licencji, więc nikt spoza firmy nie ma licencji na uruchamianie ani modyfikowanie go. Chart to narzędzie wdrożeniowe, które trzymamy w repozytorium, a poniższe polecenia pochodzą z niego i z runbooka obok (dostęp 2026-10-25). Skorzystaj z tego przewodnika, jeśli pracujesz nad Elido, masz z nami pisemne ustalenie albo chcesz zobaczyć dokładnie, co wymaga uruchomienie platformy.
Jeśli wciąż wybierasz między projektami, które faktycznie możesz pobrać, zacznij od porównania samodzielnie hostowanych skracaczy. Obejmuje YOURLS, Shlink, Kutt i Dub i nie powtarza żadnego z kroków tutaj.
Czym jest chart, a czym nie jest
Chart znajduje się w deploy/helm/elido. Jego metadane wskazują repozytorium GitHub w organizacji elidoapp; nieuwierzytelnione żądanie pod ten adres zwróciło 404 w dniu 2026-10-25, więc nie licz na sklonowanie go z internetu. Plik values pobiera obrazy z ghcr.io/elidoapp, a komentarz w nim nazywa rejestr publicznym. Nie mogłem potwierdzić anonimowych pobrań, więc traktuj to jako niezweryfikowane.
Chart jest też młody. Jego wersja to 0.1.0, a własny opis nazywa cel "jednoregionowym klastrem k3s na mocnej maszynie wirtualnej". Brakuje kilku rzeczy, które ludzie zakładają przy chartach Kubernetes, a wcześniejsza wersja tego tekstu błędnie opisywała niektóre z nich:
- Brak wysokiej dostępności. Każdy stateful set działa w jednej replice.
- Brak zadań kopii zapasowych. Runbook tak mówi i każe użyć Velero, k8up lub migawek dostawcy.
- Brak obiektów monitoringu, pulpitów i autoskalerów.
- Brak wieloregionowego brzegu. Preset zwija przekierowania do jednej floty.
Jeśli wymaga tego regulator lub Twoja polityka, zaplanuj pracę nad ich dodaniem samodzielnie.
Co wdraża preset self-host
values-selfhost.yaml przycina wszystko, by zmieścić się na hoście z 4 rdzeniami i 8 GB. Uruchamia po jednej replice każdego obciążenia aplikacji: api-core, analytics-api, click-ingester, url-scanner, notification, bio-renderer, billing, panel (web), stronę marketingową oraz jedną flotę edge, która odpowiada za każdy host. Usługa tożsamości obsługuje rejestrację i sesje.
Za nimi stoi sześć stateful setów z woluminami trwałymi: Postgres (20Gi w presecie), Redis (2Gi), magazyn kolumnowy dla zdarzeń kliknięć (30Gi), szyna zdarzeń (10Gi), magazyn obiektów (20Gi) i indeks wyszukiwania (5Gi). Redis jest tu pojedynczą instancją z trwałością append-only, a nie klastrem. Kilka usług, które kiedyś były osobne, w tym zarządzanie domenami, dostarczanie webhooków i indeksowanie wyszukiwania, działa teraz wewnątrz api-core, dlatego lista obciążeń jest krótsza, niż sugeruje starsza dokumentacja.
Wymagania wstępne
Runbook wymaga Kubernetes 1.27 lub nowszego, Helm 3.13 lub nowszego oraz kubectl skierowanego na klaster. Potrzebujesz też rekordów DNS dla nazw hostów panelu, API, przekierowań i bio, przekaźnika SMTP dostępnego dla klastra i kontrolera ingress klasy caddy.
k3s dołącza Traefik, który rywalizowałby o porty 80 i 443 z kontrolerem, który zaraz zainstalujesz. Wyłącz go podczas instalacji k3s:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $UID ~/.kube/config
kubectl get nodes # should show Ready
Instalacja krok po kroku
Utwórz namespace i wygeneruj sekrety. Skrypt generuje losowe wartości dla hasła bazy danych, kluczy cookie i szyfrowania usługi tożsamości, klucza zaciemniania slugów i pepperu kluczy API oraz tworzy placeholdery dla SMTP i LiqPay. Pomija sekrety, które już istnieją, chyba że podasz --rotate.
kubectl create namespace elido
./deploy/helm/elido/scripts/bootstrap-secrets.sh elido
Skrypt wypisuje hasło Postgresa na końcu. Zapisz je. Następnie zastąp placeholder SMTP, zanim ktokolwiek się zarejestruje; ten sam wzorzec działa dla elido-liqpay, jeśli przyjmujesz płatności:
kubectl -n elido create secret generic elido-smtp \
--from-literal=host=smtp.example.com \
--from-literal=port=587 \
[email protected] \
--from-literal=pass=YOUR_SMTP_KEY \
--from-literal=kratos_uri='smtps://postmaster%40your-domain.com:[email protected]:465/?disable_starttls=false' \
--dry-run=client -o yaml | kubectl apply -f -
Zainstaluj kontroler ingress z włączonym TLS na żądanie:
helm repo add caddy https://caddyserver.github.io/charts
helm -n caddy-system upgrade --install caddy caddy/caddy-ingress-controller \
--create-namespace --set controller.config.onDemandTLS=true
Teraz zainstaluj samo Elido. Przypnij image.tag do wybranego wydania. Przykład w runbooku używa latest, co utrudnia rozumowanie o aktualizacjach i wycofaniach.
helm -n elido upgrade --install elido ./deploy/helm/elido \
-f ./deploy/helm/elido/values-selfhost.yaml \
--set image.tag=YOUR_TAG \
--set ingress.hosts.dashboard=app.your-domain.com \
--set ingress.hosts.api=api.your-domain.com \
--set ingress.hosts.bio=bio.your-domain.com \
--set 'ingress.hosts.redirect={r.your-domain.com}' \
--set ingress.hosts.marketing=your-domain.com \
--set auth.kratos.publicHost=app.your-domain.com
kubectl -n elido get pods -w
Migracje działają jako init containery dla usług, które ich potrzebują, i jako zadanie pre-install dla usługi tożsamości. Jeśli migracja się nie powiedzie, nowe pody nigdy nie przejmują ruchu.
Pierwszy użytkownik i domeny własne
Otwórz https://app.your-domain.com/signup i zarejestruj się. Usługa tożsamości tworzy konto, a api-core zapisuje wiersz użytkownika. Nic jeszcze nie czyni tego użytkownika właścicielem, więc utwórz workspace i członkostwo ręcznie, co mówią własne uwagi instalacyjne charta:
kubectl -n elido exec -it sts/postgres -- psql -U elido -d elido <<'SQL'
INSERT INTO workspaces (slug, name, plan_tier)
VALUES ('default', 'Default', 'business') RETURNING id;
INSERT INTO workspace_members (workspace_id, user_id, role)
SELECT 1, id, 'owner' FROM users WHERE email = '[email protected]';
SQL
Domeny własne używają TLS na żądanie. Klient dodaje links.brand.com w panelu, a następnie kieruje CNAME na host ustawiony w EDGE_CNAME_TARGET (zmienna api-core, której domyślną wartością jest własny host brzegowy Elido, więc ją zmień). Przy pierwszym żądaniu HTTPS kontroler ingress wywołuje GET /v1/caddy/ask na api-core. Odpowiedź 200 wystawia certyfikat; 403 oznacza, że domena nie jest zweryfikowana. Debuguj przez kubectl -n elido logs deploy/api-core | grep caddy/ask.
Kopie zapasowe, aktualizacje i wycofanie
Kopie zapasowe są po Twojej stronie. Wskazówka z runbooka to codzienne migawki woluminu Postgresa (data-postgres-0) i cotygodniowe dla magazynu kolumnowego (data-clickhouse-0), ponieważ dane kliknięć można odtworzyć z szyny zdarzeń w oknie jej retencji. Wolumin szyny zdarzeń nie wymaga kopii. Aby użyć zarządzanego Postgresa, ustaw postgres.enabled=false i skieruj url sekretu elido-postgres na niego. Wykonaj przywracanie do tymczasowego namespace, zanim na czymkolwiek z tego oprzesz zaufanie.
Aktualizacje to jedno polecenie z nowym tagiem:
helm -n elido upgrade elido ./deploy/helm/elido \
-f ./deploy/helm/elido/values-selfhost.yaml --set image.tag=NEW_TAG
Aktualizacje kroczące używają maxSurge: 1 i maxUnavailable: 0, a helm -n elido rollback elido <revision> zamienia Deploymenty z powrotem bez dotykania woluminów ani sekretów. Przy jednej replice na usługę spodziewaj się krótkich zakłóceń na obciążeniach, które nie są bezstanowe.
Znane problemy
| Objaw | Prawdopodobna przyczyna | Poprawka |
|---|---|---|
Zadanie migracji tożsamości kończy się błędem database "kratos" does not exist | Postgres utworzył elido, ale nie tę bazę | CREATE DATABASE kratos; przez psql, potem ponownie helm upgrade |
api-core wpada w pętlę awarii, pytając o KRATOS_PUBLIC_URL | auth.kratos.enabled=false bez nadpisania | Włącz ponownie usługę tożsamości lub ustaw zmienną na swojego IdP |
| Panel zwraca 502 przy pierwszym ładowaniu | Certyfikat jeszcze nie został wystawiony | Obserwuj logi kontrolera ingress; pierwsze wystawienie może trwać około 30 sekund |
| Przekierowania zwracają 503 | Flota edge nie może połączyć się z Redisem | Sprawdź, czy URL w sekrecie elido-redis wskazuje usługę w klastrze |
| Wszystko wpada w pętlę awarii po restarcie | PVC niepowiązane | kubectl get pv,pvc -n elido i sprawdź, czy provisioner local-path działa |
Jeśli powodem, dla którego tu jesteś, jest inspektor ochrony danych, opcja hostowana może już wystarczyć: jej główne dane są w UE, a przewodnik o rezydencji w UE wymienia, co jest przetwarzane poza nią. O opóźnieniach przy uruchamianiu własnych przekierowań zobacz tekst o węzłach brzegowych.
Powiązane na blogu
Najczęściej zadawane pytania
Czy mogę hostować Elido samodzielnie?
Nie jako produkt, który dziś oferujemy. Repozytorium ma chart Helm i runbook, których sami używamy, ale nie ma pliku licencji, więc nikt spoza Elido nie ma licencji na uruchamianie ani modyfikowanie kodu, a nie ma opublikowanego planu self-hosted ani wsparcia. Jeśli masz twardy wymóg lokalizacji danych, skontaktuj się z nami, a omówimy to jako indywidualne ustalenie.
Czy Elido jest open source?
Nie. Repozytorium nie zawiera pliku licencji, co oznacza, że wszystkie prawa są zastrzeżone. Niektóre pakiety klienckie (SDK, typy API i serwer MCP) mają własne pliki LICENSE, ale sama platforma, w tym chart opisany w tym tekście, nie. Każda treść na stronie, która podaje Apache 2.0 dla self-hostingu, jest błędna.
Czego potrzebuje preset self-host, żeby działać?
Runbook wymaga Kubernetes 1.27 lub nowszego, Helm 3.13 lub nowszego, DNS wildcard dla hostów panelu, API, przekierowań i bio, przekaźnika SMTP oraz kontrolera ingress klasy caddy. Maszyna wirtualna z 4 rdzeniami i 8 GB jest opisana jako wystarczająca do testu na szybko. Produkcja według tego samego runbooka wymaga trzech lub więcej węzłów po 8 rdzeni i 16 GB.
Czy chart zawiera kopie zapasowe, monitoring lub wysoką dostępność?
Nie. Chart wdraża Postgres, Redis, magazyn kolumnowy, szynę zdarzeń, magazyn obiektów i wyszukiwanie jako stateful sety z jedną repliką i woluminami trwałymi. Kopie zapasowe są pozostawione narzędziom klastra, takim jak Velero lub k8up, a chart nie ma obiektów monitoringu, autoskalowania ani przełączania awaryjnego. Wcześniejsze wersje tego tekstu je opisywały; nie było ich w charcie.
Jak działają domeny własne w instalacji self-hosted?
Kontroler ingress pyta api-core pod /v1/caddy/ask przed wystawieniem certyfikatu dla nieznanej nazwy hosta, a api-core odpowiada na podstawie listy zweryfikowanych domen. Rekordy CNAME klientów kierujesz na host ustawiony w EDGE_CNAME_TARGET. Jeśli ten endpoint zwraca 403, certyfikat nigdy nie zostanie wystawiony, więc najpierw sprawdź logi api-core.
Jak zaktualizować lub wycofać?
Uruchom helm upgrade z tym samym plikiem values i nowym image.tag. Deploymenty używają maxSurge 1 i maxUnavailable 0, a migracje bazy danych działają, zanim nowe pody obsłużą ruch, więc nieudana migracja zostawia stare pody uruchomione. helm rollback do poprzedniej rewizji zamienia Deploymenty i zostawia woluminy danych oraz sekrety w spokoju.
Wypróbuj Elido
Wklej URL, otrzymaj krótki link
Bez rejestracji. Link działa 30 dni. Zarejestruj się, aby zachować go na zawsze.
Bez rejestracji. Załóż darmowe konto i korzystaj z 50 linków miesięcznie.