Index denníkaDockup / poznámka z terénu
Note / self-host-shlink

Ako hostovať Shlink vo vlastnej réžii v roku 2026: domény, API kľúče a štatistiky

Praktický návod na hostovanie Shlinku vo vlastnej réžii, ktorý pokrýva Docker, porty, perzistentné dáta, TLS, bezpečnosť, zálohy a zlyhania blokujúce produkčné nasadenie. Krok za krokom.

Hostovanie Shlinku vo vlastnej réžii začne byť zaujímavé pri prvom opätovnom nasadení, nie pri prvom docker run. Ak generované odkazy používajú HTTP alebo migrácie nedokážu dosiahnuť databázu, Docker môže stále hlásiť úplne zdravý proces. Nasadenie nižšie je postavené na pozorovateľnom správaní: vytvoriť krátku URL cez API, nasledovať jej presmerovanie, zaznamenať návštevy a skontrolovať štatistiky vo webovom klientovi.

Úloha Shlinku je jasná: link shortener s prístupom API-first a štatistikami. Tento opis nám hovorí, čo musí zostať verejné, čo má zostať súkromné a čo musí záloha obnoviť.

Od čoho Shlink závisí

Zdravie procesu a zdravie produktu sú pri Shlinku dve odlišné veci. Port 8080 môže odpovedať, zatiaľ čo transakcia viditeľná pre používateľa stále zlyháva. Sieťová zmluva pre Shlink pozostáva z Postgresu alebo MariaDB a voliteľného Redis pre produkciu. Súkromné endpointy ponechajte na internom DNS, povoľte iba potrebné odchádzajúce spojenia a Shlinku prideľte servisné poverenie s obmedzeným rozsahom oprávnení.

Toto overenie pripravenosti použite po významných zmenách konfigurácie: vytvorte krátku URL cez API, nasledovať jej presmerovanie, zaznamenajte návštevy a skontrolujte štatistiky vo webovom klientovi. Nákladné externé kontroly ponechajte mimo liveness probe, aby výpadok poskytovateľa nespôsobil slučku reštartov. Pri plánovaní kapacity sledujte priepustnosť presmerovaní, zápisy do databázy, sťahovanie geolokačných údajov a správanie cache, pretože tieto ukazovatele lepšie odrážajú skutočné zaťaženie Shlinku než požiadavky na stránky.

Volumes sú iba prvou vrstvou obnovy

V štandardnom obraze Shlinku sa neočakáva žiadny zapisovateľný stav aplikácie. Zachovajte databázu, API kľúče a všetky importované údaje o návštevách vrátane pripnutého digestu a skontrolovanej konfigurácie routovania, namiesto zálohovania prázdneho filesystemu kontajnera.

Vytvorte Shlink od začiatku na inom hoste a overte, že sa vrátia domény, krátke kódy, tagy a záznamy o návštevách a že každá vzorkovaná krátka URL presmeruje úplne rovnako. Ak pridáte samostatnú databázu, room server alebo autentifikačnú vrstvu, priraďte každému komponentu vlastného explicitného vlastníka obnovy. Návod od Gitu po produkciu ukazuje, ako reprodukovateľný artefakt nahrádza zálohu kontajnera.

Príkaz na obnovu a test s očakávaným výstupom zaznamenajte spolu s release. Bezstavový plán obnovy je úspešný vtedy, keď dokáže reprodukovať správanie z dôveryhodných vstupov; nemal by závisieť od kopírovania nepriehľadného bežiaceho kontajnera.

Chráňte hodnotnú časť Shlinku

Bezpečné nasadenie Shlinku začína odstránením nadbytočných oprávnení. Nevystavujte REST API kľúč a po zverejnení odkazov nemeňte verejnú doménu; namiesto toho držte API kľúče mimo kódu prehliadača, používajte HTTPS a obmedzte administráciu, pričom presmerovania ponechajte verejné.

DEFAULT_DOMAIN je konfigurácia, nie tajný údaj; jeho hodnotu majte explicitne uvedenú a zároveň chráňte samostatné poverenia používané Shlinkom. Obmedzte administratívne routy, pre závislosti používajte súkromné DNS a skontrolujte každý bind mount. Ak sa logy odosielajú centrálne, ešte pred opustením servera z nich odstráňte tajné údaje a súkromný obsah.

Zmeňte smoke test Shlinku na kontrolu release

Pre Shlink definujte pred spustením známu správnu transakciu: vytvoriť krátku URL cez API, nasledovať jej presmerovanie, zaznamenať návštevy a skontrolovať štatistiky vo webovom klientovi. Jej predpoklady, očakávanú odpoveď a kroky čistenia uložte do version control bez tajných hodnôt. Pripnite obraz použitý na vytvorenie tejto referencie.

Transakciu použite na overenie náhrady aj nezávislej obnovy. Obnovená služba je prijateľná iba vtedy, keď sa vrátia domény, krátke kódy, tagy a záznamy o návštevách a každá vzorkovaná krátka URL presmeruje úplne rovnako. Zároveň sledujte priepustnosť presmerovaní, zápisy do databázy, sťahovanie geolokačných údajov a správanie cache a z najpomalšej alebo najviac obmedzenej časti vytvorte service-level alert.

Gate potrebuje aj negatívny prípad: dočasne odoberte testovacej identite prístup k Postgresu alebo MariaDB a voliteľnému Redis pre produkciu. Overte, že Shlink vytvorí použiteľnú chybovú správu bez poškodenia dát, obnovte platný stav a zopakujte známu správnu transakciu. Uchovávanie oboch výsledkov zabráni tomu, aby sa povrchný health endpoint stal jediným dôkazom funkčnosti v produkcii.

Spustite Shlink bez skrývania pohyblivých častí

Nasledujúci príkaz zviditeľní hranicu kontajnera bez predstierania, že zabezpečuje provisioning všetkých externých služieb.

docker run -d \
  --name shlink \
  --restart unless-stopped \
  -p 127.0.0.1:8080:8080 \
  -e DEFAULT_DOMAIN=go.example.com \
  shlinkio/shlink:stable

Pred otvorením ingressu skontrolujte vyriešené premenné prostredia, mounty a listener. Pridajte skontrolované nastavenia pripojenia pre Postgres alebo MariaDB a voliteľný Redis pre produkciu; pre súkromné služby používajte súkromné názvy. Úspešné spustenie nastáva až vtedy, keď dokážete vytvoriť krátku URL cez API, nasledovať jej presmerovanie, zaznamenať návštevy a skontrolovať štatistiky vo webovom klientovi, nie vtedy, keď docker ps vypíše Up.

Dajte Shlinku jednu kanonickú adresu

Verejná hranica Shlinku by mala pozostávať z jedného kanonického hostname, automatického TLS a jedného interného cieľa na porte 8080. Pred vytváraním krátkych URL nastavte DEFAULT_DOMAIN a IS_HTTPS_ENABLED, aby sa klienti vracali na adresu, ktorú služba rozpoznáva.

Ak akceptačná transakcia zlyhá, klasifikujte prvú chybu. Problémy s DNS, certifikátom a stavom 502 patria do checklistu overenia TLS. Stav „generované odkazy používajú HTTP alebo migrácie nedokážu dosiahnuť databázu“ patrí na aplikačnú stranu až po úspešnom doručení požiadavky do Shlinku.

Diagnostikujte Shlink, ktorý vyzerá zdravo

Pri Shlinku monitorujte transakciu, nie proces: vytvorte krátku URL cez API, nasledovať jej presmerovanie, zaznamenajte návštevy a skontrolujte štatistiky vo webovom klientovi. Jej latenciu a chybovosť kombinujte s priepustnosťou presmerovaní, zápismi do databázy, sťahovaním geolokačných údajov a správaním cache, aby alert identifikoval obmedzovaný komponent.

Skúška upgradu musí pokrývať fakt, že migrácie databázy a kompatibilita API by sa mali nasadzovať postupne, pretože zverejnené krátke odkazy nemôžu čakať na manuálnu opravu. Pred nahradením produkcie obnovte službu, spustite migrácie a vykonajte transakciu. Ak generované odkazy používajú HTTP alebo migrácie nedokážu dosiahnuť databázu, nemažte dáta s cieľom dosiahnuť úspešný štart; v tomto poradí porovnajte verziu, premenné, mounty a dostupnosť závislostí.

Nechajte Shlink explicitný, zatiaľ čo Dockup rieši routovanie

Nasadenie Shlinku jedným kliknutím v Dockupe by malo zaistiť bezpečnú náhradu: route naďalej smeruje na port 8080, tajné údaje nie sú zabudované v obraze a perzistentné cesty sa vrátia v novom kontajneri. Rovnaké nasadenie môže bežať na výpočtovej infraštruktúre Dockup alebo na pripojenom stroji.

Dokončite prácu špecifickú pre aplikáciu pripojením a otestovaním Postgresu alebo MariaDB a voliteľného Redisu pre produkciu, použitím kanonickej verejnej adresy a vykonaním tejto akceptačnej kontroly: vytvorte krátku URL cez API, nasledovať jej presmerovanie, zaznamenajte návštevy a skontrolujte štatistiky vo webovom klientovi. Výsledok obnovy pridajte do runbooku ešte pred príchodom skutočných používateľov.

Často kladené otázky

Čo Shlink potrebuje na produkčné nasadenie?

Nasmerujte kontajner Shlinku na porte 8080 cez jeden HTTPS origin. Podpornou sieťovou požiadavkou je Postgres alebo MariaDB a voliteľný Redis pre produkciu. Shlink neoznačujte za pripravený, kým nedokážete vytvoriť krátku URL cez API, nasledovať jej presmerovanie, zaznamenať návštevy a skontrolovať štatistiky vo webovom klientovi.

Ktoré dáta Shlinku patria do zálohy?

Štandardný obraz Shlinku nemá povinný mount s aplikačnými dátami. Zachovajte jeho konfiguráciu nasadenia a všetok pripojený stav zálohujte samostatne; obnova je úspešná vtedy, keď sa vrátia domény, krátke kódy, tagy a záznamy o návštevách a každá vzorkovaná krátka URL presmeruje úplne rovnako.

Vyžaduje Shlink HTTPS za reverse proxy?

Pre verejný origin Shlinku používajte HTTPS a port 8080 ponechajte na internej route. Nastavenie Shlinku aplikujte správne: pred vytváraním krátkych URL nastavte DEFAULT_DOMAIN a IS_HTTPS_ENABLED. HTTPS pri Shlinku chráni poverenia alebo používateľský obsah počas prenosu a zachováva konzistentné správanie klienta citlivé na origin.

Ako testovať upgrade Shlinku?

Obnovte aktuálny stav Shlinku do izolovaného nasadenia, aplikujte kandidátsku verziu a zopakujte akceptačnú transakciu. Venujte tomu osobitnú pozornosť, pretože migrácie databázy a kompatibilita API by sa mali nasadzovať postupne, keďže zverejnené krátke odkazy nemôžu čakať na manuálnu opravu. Predchádzajúci obraz Shlinku si ponechajte, kým nebudete rozumieť hranici migrácie dát a rollbacku.