Vaše aplikace běží. Spustili jste vývojový server, otevřeli http://localhost:3000a dělá, co má. Pak vás někdo požádá o odkaz a vy zjistíte, že URL na vaší obrazovce nikomu kromě vás nic neříká.
Existují tři způsoby, jak dát aplikaci z localhostu veřejnou URL bez VPS, plus jedna rychlejší varianta, když je druhá osoba ve vaší místní síti, a výběr mezi nimi není otázka nástroje. Je to otázka toho, jak dlouho má aplikace zůstat dostupná a jestli může běžet jinde než na vašem notebooku. Níže najdete každou cestu, příkaz, který vám dá URL, a přesně to, co tu URL zase rozbije.
Stručně
- Někdo na vaší Wi-Fi to potřebuje vidět: navažte vývojový server na všechna síťová rozhraní a předejte svou LAN IP. Hotovo za pár sekund, mrtvé v okamžiku, kdy návštěvník opustí vaši síť.
- Potřebujete odkaz, který kdokoli otevře během příští hodiny: spusťte tunel (
cloudflared, ngrok, localtunnel, localhost.run). Veřejná HTTPS URL zhruba za minutu, žádné změny na routeru, a umře s procesem, který ji spustil. - Musí běžet, i když je notebook zavřený: pošlete aplikaci na bezplatný hostingový tarif. To ji odpojí od vašeho notebooku a přinese nová pravidla ohledně platebních karet, komerčního použití a toho, jestli vaše data přežijí restart.
- Vaše aplikace nepotřebuje serverový kód v okamžiku požadavku: sestavte ji a statický výstup nahrajte na statický hosting. Může zůstat online bez vašeho notebooku a nemá žádný proces aplikace, který by bylo třeba probouzet, dokud účet a limity využití hostingu stačí.
- Jedno výchozí nastavení, které stojí za to znát:
next devapython -m http.serveruž naslouchají na všech síťových rozhraních bez jakéhokoli přepínače. Pokud jste předpokládali, že váš vývojový server je soukromý a viditelný jen na notebooku, není.
Která cesta sedí vaší aplikaci
Tři z těchto čtyř cest dají vaší aplikaci veřejnou internetovou URL; první dosáhne jen do vaší vlastní sítě, což z ní dělá zároveň nejrychlejší i nejomezenější variantu. Seřaďte je podle toho, jak dlouho musí URL přežít, a výběr se udělá v podstatě sám.
| Cesta | Čas do získání URL | Jak dlouho vydrží | Co ji zabije | Pro koho |
|---|---|---|---|---|
| Stejná síť | Sekundy | Dokud jste oba v síti | Návštěvník se přepne na jinou Wi-Fi | Kolega u vedlejšího stolu nebo váš vlastní telefon |
| Tunel | Zhruba minuta | Dokud proces běží | Zavření notebooku, ukončení terminálu, dosažení limitů tarifu | Demo, ukázka klientovi, test webhooku |
| Bezplatný hostingový tarif | 10 až 30 minut | Neomezeně, s podmínkami | Uspání, pomíjivý souborový systém nebo podmínky tarifu | Něco, co musí odpovídat, i když spíte |
| Statický build | 10 až 20 minut | Neomezeně | Potřeba serverového kódu v okamžiku požadavku | Aplikace, které lze celé vygenerovat při buildu nebo spouštět na straně klienta |
Které řádky máte k dispozici, závisí na třech věcech, které si můžete ověřit ve vlastním projektu:
- Potřebuje aplikace váš serverový kód v okamžiku požadavku? Route ve Flasku nebo FastAPI, endpoint v
server.jsnebo serverová logika závislá na požadavku potřebuje hosting na straně serveru. Serverový kód spouštěný při buildu automaticky nevylučuje statické nasazení: Next.js Server Components mohou běžet běhemnext builda statickéGETRoute Handlers lze předrenderovat. Pokud lze každý požadavek za běhu obsloužit jako statické soubory nebo poslat přímo z prohlížeče na externí API, statická cesta zůstává otevřená. - Čte nebo zapisuje soubor, který si musí uchovat? Soubor databáze (
.db,.sqlite), složka s nahranými soubory, JSON soubor, který upravuje. Pokud ano, před nasazením si ověřte model úložiště hostingu. Bezplatné webové služby Render a bezplatné instance Koyeb používají pomíjivé místní úložiště, zatímco Vercel Functions mají souborový systém jen pro čtení s dočasným prostorem/tmp. Trvalý stav ukládejte do trvalého svazku, databáze nebo objektového úložiště, místo abyste předpokládali, že místní disk aplikace přežije. - Potřebuje za běhu nějaké tajemství? Klíč v souboru
.envfunguje beze změny na prvních dvou cestách, protože aplikace stále běží na vašem stroji. Na dalších dvou ho znovu zadáte v nastavení prostředí poskytovatele a nesmí ležet v repozitáři, který pushujete.
Sdílejte ji ve vlastní síti
next dev už naslouchá na všech síťových rozhraních vašeho stroje (přesně to znamená 0.0.0.0 , když ho vidíte), a totéž dělá python -m http.server. Ani jeden nepotřebuje přepínač, takže vývojový server, který teď máte spuštěný, je nejspíš už dostupný z vašeho telefonu na stejné Wi-Fi.
Next.js dokumentuje -H jako způsob, jak tento hostname změnit, s výchozí hodnotou 0.0.0.0, a dokumentace Pythonu říká, že modul se váže na všechna rozhraní , pokud nepředáte --bind 127.0.0.1. Díky tomu je to nejrychlejší způsob, jak aplikaci z localhostu sdílet: bez účtu, bez instalace, bez nasazení. Ostatním běžným vývojovým serverům to musíte říct.
# Already listening on all interfaces. Nothing to add.
next dev
python -m http.server 8000
streamlit run app.py
# Needs the flag.
npm run dev -- --host # Vite
flask run --host=0.0.0.0
uvicorn main:app --host 0.0.0.0 # FastAPI
Dokumentace Vite: server.host má výchozí hodnotu localhosta přijímá --host na příkazové řádce nebo server.host: '0.0.0.0' v konfiguračním souboru. Uvicorn používá výchozí 127.0.0.1, což pokrývá i FastAPI, protože právě on ho spouští. Streamlit nechává server.address nenastavené a jeho konfigurační reference uvádí, že jeho nastavení omezí přístup na tuto jedinou adresu: nenastaveno znamená bez omezení.
Pak potřebujete adresu, kterou předáte. Je to vlastní IP vašeho stroje v místní síti, ne localhost:
# macOS
ipconfig getifaddr en0
# Linux
hostname -I
# Windows (PowerShell)
ipconfig | findstr IPv4
Dejte návštěvníkovi http://<that-address>:3000 a je uvnitř. Háček je v tvaru celé cesty: tahle adresa mimo vaši síť nic neznamená. Jakmile je návštěvník na jiné Wi-Fi, na mobilních datech nebo doma, odkaz je pro něj mrtvý.
Poznámka: pokud příkaz proběhne v pořádku a druhé zařízení se stále nemůže připojit, je to téměř vždy firewall operačního systému, ne příkaz. Dokumentace firewallu Apple říká, že macOS zobrazí upozornění pro aplikaci, kterou jste ještě nepovolili, a odmítá spojení, dokud nezareagujete. Windows se místo toho ptá, který síťový profil platí, a udržuje oddělená pravidla pro soukromé a veřejné sítě. V domácí nebo kancelářské síti zvolte Soukromá. Nikdy Veřejná.
Schovejte ji za tunel
Tunel je malý program, který běží vedle vaší aplikace a dává jí veřejnou HTTPS adresu. Jeden příkaz vám zhruba za minutu zajistí bezplatný tunel na localhost a stojí za to předem vědět, že URL umře v okamžiku, kdy tento příkaz skončí:
cloudflared tunnel --url http://localhost:3000
Na routeru se nic nemění, a to kvůli směru, kterým spojení putuje. Váš stroj otevře odchozí spojení k okraji sítě poskytovatele, stejného druhu, jaké váš prohlížeč navazuje při načítání jakékoli stránky, a poskytovatel ho drží otevřené a tlačí jím zpět příchozí požadavky. Příchozí porty na vaší straně zůstávají zavřené, a proto to funguje na hotelové Wi-Fi, na hotspotu z telefonu i na domácím připojení, jehož router neovládáte.
Poznámka: ten poslední případ si zaslouží šedesátisekundovou kontrolu, než místo toho zvážíte přesměrování portů. Otevřete stavovou stránku routeru, najděte WAN IP, kterou hlásí, a porovnejte ji se svou skutečnou veřejnou IP z libovolného vyhledávání „jaká je moje IP“. Pokud WAN IP leží uvnitř
100.64.0.0/10, pravděpodobnou příčinou je CGNAT. Pokud se WAN IP a veřejná IP prostě liší, víte, že výš je další vrstva NAT, ale může jít o CGNAT nebo o obyčejný dvojitý NAT. V obou případech nemusí přesměrování portů jen na tomto routeru stačit. Tento rozsah je rezervován RFC 6598 jako sdílený adresní prostor, tedy to, za co vás poskytovatel schová, když mu dojdou adresy.
Varianty se liší hlavně tím, co od vás chtějí nejdřív.
Rychlé tunely Cloudflare jsou příkaz výše: bez účtu, bez domény, náhodná subdoména na trycloudflare.com . Cloudflare je omezuje na 200 souběžných požadavků, nad tím vrací 429, nepodporuje Server-Sent Events a ve stejné dokumentaci uvádí, že bezplatné tunely jsou pro testování a vývoj, ne pro nasazení produkčního webu.
ngrok vyžaduje nejprve registraci a poté ngrok http 3000. Aktuální bezplatný tarif vám dá 5 $ jednorázového zahrnutého využití, které se měsíčně neobnovuje, až 3 online endpointy, 1 GB přenosu, 20 000 HTTP/S požadavků a mezistránku s varováním, kterou návštěvník musí prokliknout. Dostanete také bezplatnou automaticky přidělenou vývojovou doménu, kterou ngrok oznámil v roce 2023 , aby ukončil starou stížnost na URL měnící se při každém restartu.
localtunnel nevyžaduje registraci ani instalaci nad rámec npx: npx localtunnel --port 3000. Dostanete náhodnou subdoménu a README výslovně uvádí, že --subdomain si o jméno požádá, ale nezaručí ho.
localhost.run nic neinstaluje, protože používá SSH klienta, který už váš systém obsahuje: ssh -R 80:localhost:3000 localhost.run. Dokumentace uvádí, že není třeba nic stahovat a že pro bezplatné domény není potřeba zakládat účet.
VS Code to má v panelu Ports, praktické, pokud stejně žijete v editoru. Vyžaduje přihlášení přes GitHub nebo Microsoft a výchozí nastavení vás nachytá: přesměrovaný port je soukromý, což znamená, že návštěvník bude vyzván k přihlášení vaším účtem, dokud port nepřepnete na veřejný. (V pohodě pro kolegu z týmu. K ničemu pro klienta, který chce jen kliknout na odkaz.)
Tailscale Funnel to umí také, se dvěma omezeními, která obvykle rozhodnou: URL může žít jen na doméně vašeho tailnetu a naslouchat může jen na portech 443, 8443 a 10000.
Ať zvolíte cokoli, mějte jasno v tom, co jste rozdali. U veřejného tunelu bez řízení přístupu je vše, co vývojový server servíruje, dostupné komukoli s touto URL, včetně route, na které jste nikdy neodkázali, a jakéhokoli ladicího rozhraní, které jste nechali zapnuté. V pohodě pro patnáctiminutové demo. Mnohem méně v pohodě pro URL vloženou do veřejného Discordu.
Vypršení vás zaskočí, protože může vypadat, jako by se aplikace rozbila. Většina rychlých cest tady stále závisí na tunelovacím softwaru běžícím na vašem notebooku: zastavte cloudflared, ngrok, localtunnel nebo SSH relaci localhost.run a přesměrování skončí. Tailscale Funnel je výjimka, když ho spustíte s --bg, což udrží konfiguraci Funnelu běžet na pozadí a obnoví ji po restartu. Žádný z nich nedokáže servírovat vaši místní aplikaci, když je samotný notebook offline. Tunel můžete nechat běžet celé dny a bude fungovat přesně do chvíle, kdy se zavře víko nebo narazíte na limit požadavků.
Tunel je správný nástroj pro demo a špatný nástroj pro hosting: jeho dostupnost je dostupnost vašeho notebooku.
Nechte aplikaci opustit váš stroj
Tohle je první cesta, kde váš notebook přestává být nosným prvkem, a první, kde podmínky znamenají víc než nástroje. To, co to tady ukončí, nejsou hodiny. Je to uspání, reset souborového systému nebo tarif, který rozhodne, že vaše aplikace není to, co chce mít na bezplatné instanci.
Varianty níže sahají od trvale bezplatných tarifů po krátké zkušební období. Některé dokážou v rámci svých limitů udržet aplikaci online neomezeně; jiné se po pevně dané zkušební době zastaví nebo vyžadují za výpočetní výkon placený účet. Před nasazením si ověřte pravidla účtování, uspávání a úložiště.
Podmínky bezplatných tarifů níže byly ověřeny na stránkách s ceníkem nebo dokumentací každého poskytovatele dne 7. září 2026.
| Poskytovatel | Komerční použití? | Přežijí data restart? | Háček |
|---|---|---|---|
| Netlify | Povoleno | Ano, s Netlify Blobs nebo Database | Bez karty na začátek; vyčerpání všech měsíčních kreditů tarifu Free pozastaví projekty do dalšího účtovacího cyklu, pokud nepřejdete na vyšší tarif |
| Render | Neuvedeno | Ztracena při restartu | Bez karty na začátek; usne po 15 minutách nečinnosti; bezplatný Postgres vyprší 30 dní po vytvoření |
| Cloudflare Pages / Workers | Neuvedeno | Ano, s KV, D1, R2 nebo Durable Objects | 500 buildů Pages měsíčně; bezplatný Workers je omezen na 100 000 požadavků denně |
| Vercel | Ne v Hobby | Ztracena při restartu | Hobby je jen pro osobní použití; souborový systém funkcí je jen pro čtení |
| GitHub Pages | Nepovoleno | Jen statický výstup | Žádné online podnikání, e-commerce ani komerční SaaS; limit nasazení 10 minut |
| PythonAnywhere | Neuvedeno | Ano | Bezplatné účty dosáhnou jen na povolený seznam externích hostitelů; bezplatná webová aplikace po měsíci vyprší , pokud ji neobnovíte |
| Fly.io | Neuvedeno | Ano, s Fly Volume | Žádný trvale bezplatný tarif: 2 strojové hodiny nebo 7 dní; zkušební Machines se automaticky zastaví po 5 minutách běhu a zkušební období zahrnuje 20 GB úložiště na svazcích; po skončení zkušební doby se aplikace zastaví, dokud nepřidáte kartu |
| Koyeb | Neuvedeno | Žádné trvalé místní úložiště | Karta povinná; Koyeb provede a zruší předautorizaci 29 $, ale registrace ve výchozím stavu vybere Pro a naúčtuje jeho poměrnou cenu, pokud nepřepnete na Starter |
| Hugging Face Spaces | Neuvedeno | Ztracena při restartu | Static Spaces jsou zdarma; Gradio a Docker obecně vyžadují placený tarif, ale způsobilé bezplatné osobní účty mohou hostovat až dva Gradio Spaces na ZeroGPU |
| Railway | Neuvedeno | Ano, pokud aplikace používá zahrnutý svazek 0,5 GB | 30denní zkušební období s jednorázovým kreditem 5 $, poté tarif Free za 0 $ s 1 $ kreditu na zdroje měsíčně; karta není vyžadována |
„Neuvedeno“ znamená, že vlastní stránky poskytovatele na tuto otázku u bezplatného tarifu neodpovídají. Berte to jako neznámou, ne jako ano nebo ne.
Tři z těchto řádků si před začátkem zaslouží pozornost navíc. Fly.io nemá trvale bezplatný tarif: zkušební období končí po 2 strojových hodinách nebo 7 dnech. Koyeb zahrnuje bezplatnou instanci, ale jeho proces registrace a účtování vyžaduje před nasazením pozornost. Hugging Face ponechává Static Spaces zdarma, zatímco nové Gradio a Docker Spaces vyžadují placený účet, s výjimkou omezené výjimky ZeroGPU. Railway už do tohoto seznamu varování nepatří: po 30denní zkušební době s kreditem 5 $ nyní přechází na tarif Free za 0 $ s 1 $ kreditu na zdroje měsíčně.
Pak je tu otázka dat, kde se fungující aplikace potichu mění v rozbitou. Bezplatné webové služby Render běží na pomíjivém souborovém systému a dokumentace říká natvrdo, že vše, co se tam zapíše, výslovně včetně nahraných obrázků a místních SQLite databází, se ztratí při každém novém nasazení, restartu a uspání. Funkce Vercel běží na souborovém systému jen pro čtení s pouhým dočasným pracovním prostorem, takže SQLite soubor, který vaše aplikace zapisuje, tam také není v bezpečí. Pokud vaše aplikace drží stav v souboru, přesuňte ho do trvalého úložiště: hostované databáze, objektového úložiště nebo trvalého svazku tam, kde ho platforma nabízí.
Uspání stojí za to zažít, než se rozhodnete. Na bezplatném tarifu Render uspí službu 15 minut nečinnosti a další požadavek ji probudí zhruba za minutu, přičemž zobrazí načítací stránku tomu, kdo na váš odkaz klikl. U kousku do portfolia pokrčení ramen. U klienta, který odkaz otevírá během hovoru, šedesát špatných sekund.
PythonAnywhere má jemnější verzi této pasti. Uspávání při nečinnosti tu není, ale bezplatná webová aplikace má měsíční platnost a zastaví se, pokud nekliknete na obnovovací odkaz, který vám PythonAnywhere pošle e-mailem, a bezplatné účty mají omezený odchozí přístup k internetu a dosáhnou jen na povolený seznam externích hostitelů. Aplikace, která volá API mimo tento seznam, je naprosto v pořádku online a selhává při každém požadavku na toto nepovolené API (příšerné na ladění, protože nikde nic nevypadá mimo provoz).
Vydejte ji jako statický web
Pokud nic z toho, co vaše aplikace dělá, nevyžaduje serverový kód v okamžiku požadavku, je statický hosting nejblíž variantě „nastav a zapomeň“: může zůstat online bez vašeho notebooku a žádný proces aplikace nečeká na probuzení. Účet a limity využití hostingu stále platí. Způsobilých aplikací je víc, než byste čekali, a proto stojí za to odpovědět na první z těch tří otázek, než usoudíte, že potřebujete hosting na straně serveru.
Pravidlo je užší než „má backend?“. Vaše aplikace je způsobilá, pokud každý požadavek, který vysílá, míří buď na vaše vlastní statické soubory, nebo přímo z prohlížeče na cizí API. Načítat Supabase nebo veřejné API z prohlížeče je v pořádku, s jedinou výhradou, že klíč v kódu prohlížeče je klíč, který jste zveřejnili. Dveře zavírá potřeba spouštět vlastní kód na serveru při každém požadavku.
Pokud je způsobilá, postup je krátký:
npm run build # Vite writes to dist/, a Next.js static export writes to out/
Pak tento výstup buildu nasaďte na statický hosting. Cloudflare Pages, Netlify a Vercel umí sestavit z připojeného repozitáře. GitHub Pages může publikovat statické soubory z větve nebo pomocí GitHub Actions spustit build vašeho frameworku a nasadit vygenerovaný výstup.
GitHub Pages má omezení dost ostrá na to, aby na nich záleželo od začátku. Jen statika, jeden uživatelský nebo organizační web na účet a limity použití, které uvádějí, že to není bezplatný hosting pro firmu, e-shop ani komerční SaaS. Pokud má vaše aplikace přijímat platby, vylučuje ji to ještě před začátkem.
Tato cesta nemá žádné vypršení procesu aplikace. Funguje, dokud hostingový účet zůstává aktivní a v rámci svých limitů, a přestává vyhovovat, jakmile aplikace potřebuje práci na straně serveru v okamžiku požadavku.
Kde bezplatné cesty končí
Bezplatné cesty selhávají na různých místech, ne všechny najednou. Statický hosting už řeší dostupnost notebooku a dává vám stabilní URL od poskytovatele. Bezplatný hosting aplikací dokáže totéž a některé nyní zahrnují trvalé úložiště. VPS začíná dávat smysl, když se požadavky nakupí: váš vlastní proces na straně serveru musí zůstat online, potřebujete předvídatelné trvalé úložiště a pravidla zdrojů nebo využití bezplatného tarifu už nestačí.
Tuto hranici stojí za to respektovat. Jedno demo není důvod kupovat server a statický projekt s nízkou návštěvností také ne. Zůstaňte u tunelu pro krátkodobé sdílení, u statického hostingu, dokud je aplikace opravdu statická, a u bezplatného hostingu aplikací, dokud jeho limity odpovídají tomu, co provozujete.
Přejděte na VPS, když potřebujete stále běžící server pod svou kontrolou a jste ochotni převzít provozní práci, která s tím přichází. Náš Linux VPS je jedna z možností a srovnatelný VPS od jiného poskytovatele zvládne stejnou práci. Dimenzujte server podle aplikace, místo abyste předpokládali, že nejmenší tarif bude stačit.
Stavte na Linux VPS s root přístupem, NVMe a výkonem AMD EPYC.
Zobrazit Linux plányPoté se změní dvě věci. Nasazovací postup „push do gitu“, který vám dával platformový hosting, už není automatický. Můžete ho znovu vytvořit pomocí self-hosted PaaS, jako je Coolify nebo Dokku, nebo si postavit vlastní CI/CD cestu, a tak či tak jsou aktualizace a údržba teď na vás.
Druhá změna je, že na stroji je toho víc než jen aplikace. S radostí bude provozovat Code Server a Claude Code , pokud chcete, aby tam bydlel i váš editor, což je podle vás buď příjemný bonus, nebo úplně nový víkend práce.
Časté dotazy
Proč moje veřejná URL přestala fungovat po zavření notebooku?
Protože tunel byl navázán na proces, který ho vytvořil, ne na vaši aplikaci. Zavření notebooku nebo ukončení terminálu tento proces ukončí, veřejná URL umře a vaše aplikace je v pořádku. Restart tunelu vám dá novou URL, pokud vám nástroj nepřidělí rezervovanou doménu. Pokud má odkaz přežít uspání notebooku, aplikace musí opustit váš stroj.
Potřebuji doménové jméno, abych dostal místní aplikaci na veřejnou URL?
Ne, téměř ve všech případech. Rychlý tunel Cloudflare, vývojová doména přidělená ngrokem, localtunnel, localhost.run i bezplatné hostingové tarify výše vám všechny bezplatně přidělí subdoménu na své vlastní doméně. Výjimkou je pojmenovaný tunel Cloudflare, který potřebuje doménu, kterou už jste přidali do Cloudflare DNS.
Může někdo na jiné Wi-Fi síti otevřít moji místní IP adresu?
Ne. Adresa jako 192.168.1.42 ukazuje na to zařízení, které ji zrovna má v síti, ke které jste právě připojeni, což je v jakékoli jiné síti jiné zařízení nebo vůbec nic. Kdokoli mimo vaši Wi-Fi potřebuje místo toho tunel, bezplatný hostingový tarif nebo statický hosting.
Které z nich fungují, když má moje aplikace přihlášení a databázi?
Cesty stejná síť a tunel fungují beze změny, protože aplikace stále běží na vašem stroji. Statické nasazení může fungovat také, pokud požadavky na přihlášení a databázi jdou přímo z prohlížeče do hostované služby a pro žádný požadavek nemusí běžet soukromý kód na straně serveru. Pokud váš vlastní kód pro ověřování nebo databázi potřebuje v okamžiku požadavku server, použijte místo toho hosting na straně serveru. Na bezplatném hostingu aplikací držte trvalá data v trvalém úložišti, místo abyste předpokládali, že místní souborový systém aplikace přežije.

Diskuse
Komentáře
Přihlaste se a zapojte se do diskuse.