Saltar al contenido
← Guía

Publicar una web o una API

De app=3000 a una dirección con HTTPS, con contraseña o token si hace falta.

Lo básico

En tu máquina

lnkstart add app=3000
lnkstart add api=8080 nas=192.168.1.20:5000

app=3000 queda en app.tunnels.midominio.com. La segunda línea publica dos cosas, y una vive en otra máquina de tu red local.

Los WebSockets y las respuestas largas (SSE, descargas) pasan tal cual. Si tu app necesita ver el dominio público en la cabecera Host, añade --preserve-host; para quitarlo, repite el mismo add sin la opción.

Antes de publicar, add pregunta a la app por lo que nadie quiere publicar sin saberlo: un .env con claves, la carpeta .git, credenciales de AWS o la consola de depuración de Flask. Si lo sirve, no publica y dice cómo arreglarlo (--force publica igualmente). phpinfo, server-status y parecidos sólo avisan. Todo se mira en tu máquina: nada sale de ella.

Proteger el acceso

En tu máquina

lnkstart add app=3000 --password
lnkstart add app=3000 --access-token
lnkstart add app=3000 --no-password

La contraseña se escribe sin que se vea (o en LNKSTART_PASSWORD). El token se enseña una vez y va en la cabecera x-lnkstart-token: para webhooks y scripts.

La protección es del nombre, no de la sesión: sigue puesta aunque reinicies el agente, hasta que la quites con --no-password o --no-access-token. Ni la contraseña ni el token llegan nunca a tu app.

Acceso temporal, sin dar la contraseña

En el VPS

sudo lnkstart server share app --for 2h --once --pin

Imprime un enlace (y un PIN) que se enseña una vez; --note dice para quién es. Quien lo abre entra sin saber la contraseña hasta que caduca; con --once, sólo la primera persona. Abrirlo no lo gasta: se gasta al pulsar Entrar, así que la vista previa de un chat no se lo queda. También desde la consola, en la ficha del servicio.

sudo lnkstart server share list dice cuáles siguen vivos y si alguien los usó, y desde qué IP; sudo lnkstart server share revoke saca en el acto a quien entró con uno. Sólo para servicios web protegidos: si no tienen contraseña ni token, no hay nada que saltarse. Con los avisos puestos, te llega uno cada vez que alguien entra con un enlace.

Cuando tu máquina no está

Si el agente o la app no responden, el visitante ve una página que dice que el servicio vuelve enseguida (código 503), nunca un error del servidor. En cuanto el agente vuelve, la siguiente visita entra.

Esa página, y el redirección de abajo, son para navegaciones: quien llama a una API recibe un 503 con un JSON ({"success": false, "error": "service_unavailable"}), que es lo que un cliente sabe leer.

En tu máquina

lnkstart add app=3000 --fallback https://estado.midominio.com

Con --fallback, en vez de esa página se manda al visitante a la dirección que digas.

Tu dominio principal y tus subdominios

Lo normal: la web en tu dominio y la API en un subdominio, cada una en un puerto de la misma máquina. El servidor mira el dominio que pide el visitante y lo manda al puerto que toca, como un server_name de nginx.

En tu máquina

lnkstart add tunnels.midominio.com=3000 api=8080 --app web

tunnels.midominio.com sirve tu web y api.tunnels.midominio.com tu API. Cada uno con su certificado.

Varias aplicaciones en una máquina

Con --app cada cosa queda agrupada en services.toml, el fichero de esta máquina. Se puede editar a mano, y no guarda ninguna contraseña: eso vive en el servidor.

~/.config/lnkstart/services.toml

[web]
"tunnels.midominio.com" = 3000
api = 8080

[casa]
nas = { port = 5000, host = "192.168.1.20" }
camara = { port = 8554, tcp = "private" }

En tu máquina

lnkstart up
lnkstart up web
lnkstart down casa
lnkstart down nas
lnkstart reload

up publica todo lo que no esté apagado; down apaga una aplicación entera o un solo servicio sin perder lo guardado, y up con el mismo nombre lo vuelve a publicar (con el servicio instalado, se lo pasa a él). Si editas services.toml a mano, reload lo comprueba y se lo pasa al servicio instalado sin cortar lo que sirve.

Otro dominio distinto del tuyo

Un dominio que no cuelga de tunnels.midominio.com (tienda.example.com) lo autoriza el dueño del servidor, máquina por máquina. Su DNS tiene que apuntar al VPS, y el servidor no hay que reiniciarlo.

En el VPS

sudo lnkstart server join-code portatil --domains tienda.example.com
sudo lnkstart server token domains add portatil otra.example.com

El primero, al crear la máquina; el segundo, para añadir uno después.

En tu máquina

lnkstart add tienda.example.com=3000