Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

El server mas barato del universo

Intro

Es­ta es la his­to­ria de co­mo te­ner tu pro­pio ser­ver de apps we­b, de la ma­ne­ra más ba­ra­ta, sen­ci­lla y fun­cio­na­l.

Su­pon­ga­mos que por el mo­ti­vo que fue­ra uno tie­ne al­gu­nas apps que quie­re usar. En mi ca­so, di­ga­mos que son do­s:

  • Gi­­tea: al­­go co­­­mo tu pro­­­pio Gi­­tHu­­b. ¿Por qué? Po­r­­que es­­tá bien ser due­­ño de tus pro­­­pios da­­to­­s, me pa­­re­­ce. En­­to­n­­ces quie­­ro te­­ner la PO­­­SI­­BI­­LI­­DAD de te­­ner mi pro­­­pio se­r­­ve­­r. Ta­m­­bién pe­r­­mi­­te clo­­­nar el re­­po a Gi­­tHub así que no pe­r­­dés na­­da.

  • Mi si­­tio: Po­r­­que, de nue­­vo, lo que yo es­­cri­­bo es mío, y por qué no lo voy a te­­ner yo en vez de po­­­ne­r­­lo en Me­­dium o al­­gún otro si­­tio ma­­li­g­no. Apa­r­­te, lo ten­­go ha­­ce más de 20 año­­s, no voy a pa­­rar aho­­­ra.

Pe­ro po­dría ser cual­quier co­sa! Una app que es­tás ha­cien­do, al­go que que­rés pro­ba­r, Own­Cloud o lo que se te can­te, si sos el ti­po de nerd que quie­re te­ner su pro­pia app/­si­tio ... se pue­de.

Así que va­mos a cons­trui­r, des­de ce­ro, to­do lo ne­ce­sa­rio pa­ra po­der ac­ce­der a esos si­tio­s/a­pp­s.

Level 1: self hosting

Si que­rés te­ner tus pro­pias app­s, en­ton­ces vas a ne­ce­si­tar har­dwa­re en el cual eje­cu­tar­la­s. Cuál es la com­pu­ta­do­ra de uso ge­ne­ral más ba­ra­ta a la cual se pue­de ac­ce­der que tie­ne al­gún ti­po de re­d?

Una Ras­pbe­rry Pi Ze­ro W ... sa­le 10 dó­la­res, si se pu­die­se con­se­gui­r, cla­ro. Pe­ro bue­no, yo ten­go una. O sei­s. la que voy a usar se lla­ma pi­nk­y.

Si no te­né­s, o no que­rés una de es­as, po­dés usar cual­quier co­sa que ten­ga Li­nu­x. O Win­do­ws. O Ma­cO­S, pe­ro yo lo hi­ce con Li­nu­x, así que me­jor si usás Li­nux por aho­ra. Pue­de ser li­te­ral­men­te cual­quier com­pu no hay com­pu muy len­ta pa­ra es­to.

O sí, de­pen­dien­do de lo que quie­ras po­ner ahí, pe­ro pro­ba­ble­men­te cual­quier com­pu sir­va.

No voy a en­trar en de­ta­lle­s, pe­ro ins­ta­lá lo que sea que que­rés ha­cer an­da­r, y ha­ce­lo an­da­r. En mi ca­so la de­fi­ni­ción de "an­da" es:

  • Gi­tea: pue­do ac­ce­der a http://­pi­nk­y.­lo­ca­l:3000 y ver gi­tea an­dan­do.
  • Mi si­tio: pue­do ac­ce­der a http://­pi­nk­y.­lo­ca­l:8000 y ver mi si­tio.

Así que bus­cá las ins­truc­cio­nes pa­ra lo que que­rés y ha­cé­lo an­da­r, che.

Si po­dés ac­ce­der y usar­lo des­de la mis­ma red en la que es­tá tu ser­ve­r? Lis­to. Le­vel UP.

Level 2: remote access

¿Pe­ro que pa­sa si que­rés ac­ce­der a ese si­tio y no es­tás en la mis­ma re­d?

Bue­no, no an­da. Ob­vio que http://­pi­nk­y.­lo­ca­l:3000 so­lo an­da en la red lo­cal así que va­mos a so­lu­cio­nar­lo.

Hay va­rias ma­ne­ra­s, pe­ro voy a mos­trar la que quie­ro mos­tra­r: tailsca­le, en par­ti­cu­la­r, la ver­sión gra­tis, pa­ra una per­so­na.

¿Qué es tailsca­le? Es una VP­N.

En par­ti­cu­la­r, es una VPN "per­so­na­l". Si te re­gis­trás y lo ins­ta­lás en un par de má­qui­nas crea una red que co­nec­ta am­bas má­qui­nas en­tre sí, aun­que esas má­qui­nas no es­tén en la mis­ma red fí­si­ca.

Así que si uno ins­ta­la tailsca­le en el ser­ver (en mi ca­so se­ría pi­nk­y) y en la má­qui­na que uso to­do el tiem­po (en mi ca­so sal­ma) ... en­ton­ces esas má­qui­nas siem­pre pue­den ver­se usan­do nom­bres es­pe­cia­les que te da tailsca­le.

Tailscale dashboard

Si ha­go cli­ck en una de las má­qui­nas me da in­for­ma­ción so­bre ella.

Tailscale machine details

Y ahí podemos ver que pinky también tiene otro nombre, que le da tailscale: pinky.ralsina.github.beta.tailscale.net

No in­ten­ten ac­ce­der­la por­que no fun­cio­na a me­nos que us­te­des es­tén en mi VPN y no lo es­tán ni lo van a es­tar :-)

¡Pe­ro yo sí!

gitea via tailscale

Tal vez es­to sea su­fi­cien­te. En es­te mo­men­to po­dés ac­ce­der a tus ser­vers des­de cual­quier la­do mien­tras ten­gas co­ne­xión a la VPN de tailsca­le. Ni­ce!

Pe­ro ... y si quie­ro que ac­ce­da más gen­te? En­ton­ces LE­VEL UP.

Level 3: Ingress Rules

Nue­va­men­te hay va­rias ma­ne­ras de dar­le a ter­ce­ros ac­ce­so a tu ser­ve­r. Pe­ro yo te voy a mos­trar una que me gus­ta a mí: fl­y.io

Fl­y.io es una em­pre­sa que te da la po­si­bi­li­dad de eje­cu­tar "co­sas" en má­qui­nas vir­tua­les "gra­tis" den­tro de cier­tos lí­mi­tes. En par­ti­cu­la­r, no más de 160­GB al me­s, des­pués te co­bran.

Así que ... ima­gi­ne­mos que una de esas VMs es­tu­vie­ra co­nec­ta­da a nues­tra VPN de tailsca­le.

Y que es­tá eje­cu­tan­do un pro­xy in­ver­so de ma­ne­ra que cual­quie­ra pue­de co­nec­tar­se a esa má­qui­na vir­tual que ha­ría de in­ter­me­dia­rio y ex­pon­dría nues­tro ser­ver pa­ra que se pue­da ac­ce­der des­de afue­ra? Eh?

Bue­no. Acá es­tá la do­cu­men­ta­ción ne­ce­sa­ria pa­ra co­nec­tar una VM de fl­y.io a nues­tra VP­N.

Y acá es­tá mi ver­sión, que ins­ta­la un Ngi­nx

Mo­di­fi­cá el ngi­n­x.­conf pa­ra que man­de las co­sas adon­de vos que­rés que va­yan.

Por ahora no sería posible usar dos hostnames distintos (después vemos) y el server_name debería ser el hostname público que te da fly.io, por ejemplo en mi caso eso era white-wave-7409.fly.dev

dashboard de fly.io

Una vez he­cho eso de­be­rías po­der ac­ce­der a uno de tus ser­vi­cios usan­do ese hos­tna­me:

Mi sitio funcionando en esa URL

Nó­te­se que es­tá co­nec­ta­do via HTTP­S, por­que fl­y.io en rea­li­dad tie­ne un pro­xy "mas afue­ra" que ha­ce la ter­mi­na­ción HTTP­S, así que no ne­ce­si­ta­mos crear cer­ti­fi­ca­dos ni na­da.

Y con eso te­ne­mos un si­tio we­b, ac­ce­si­ble des­de cual­quier dis­po­si­ti­vo co­nec­ta­do a In­ter­ne­t, y es gra­tis por los pri­me­ros 160­GB! Mi­sión cum­pli­da!

Pe­ro que pa­sa si que­re­mos una URL más bo­ni­ta? Por ejem­plo, yo quie­ro que Gi­tea es­té en gi­t.­ral­si­na.­me y mi si­tio en ho­me.­ral­si­na.­me ...

Bue­no, si que­rés eso, LE­VEL UP.

Level 4: Custom DNS

Co­mo siem­pre, hay mu­chas ma­ne­ras de re­sol­ver­lo. Pe­ro es­ta es la que yo uso. Clou­dfla­re da DNS gra­tis. Si te­nés un do­mi­nio, lo con­fi­gu­rás pa­ra que use clou­dfla­re de DNS y lis­to.

Si no te­nés un do­mi­nio, com­prá o con­se­guí uno, que se yo.

Una vez que lo te­né­s, y lo con­fi­gu­ras­te en Clou­dfla­re o en el ser­ver de DNS que más te gus­te ... con­fi­gu­rá to­dos los CNA­ME que quie­ra­s.

Yo en par­ti­cu­lar hi­ce do­s:

CNAMEs en cloudflare

Tan­to gi­t.­ral­si­na.­me co­mo ho­me.­ral­si­na.­me apun­tan al nom­bre que me dió fl­y.io (whi­te-wa­ve-7409.­fl­y.­de­v), así que aho­ra "re­suel­ven" así:

> host git.ralsina.me
git.ralsina.me is an alias for white-wave-7409.fly.dev.
white-wave-7409.fly.dev has address 37.16.0.181
white-wave-7409.fly.dev has IPv6 address 2a09:8280:1::6:3716

Si usás clou­dfla­re, tie­nen que es­tar co­mo "D­NS On­l­y"

El si­guien­te pa­so es in­for­mar a fl­y.io que va­mos a ma­ne­jar esos nom­bres a tra­vés nues­tra app con es­tos co­man­dos (cam­biar co­mo co­rres­pon­da) en la má­qui­na don­de ma­ne­ja­mos nues­tra app de fl­y.io

> flyctl certs create git.ralsina.me
> flyctl certs create home.ralsina.me

Cam­bia­mos nue­va­men­te la con­fi­gu­ra­ción de ngi­nx pa­ra que en­víe ca­da ser­vi­cio don­de co­rres­pon­da en ba­se al ser­ver na­me y ya es­tá. Con es­to te­ne­mos to­do fun­cio­nan­do.

¿Qué lo­gra­mo­s?

  • Ser­vers ac­ce­si­bles des­de cual­quier la­do: Gi­tea y Mi si­tio
  • Ser­vi­cios co­rrien­do en la com­pu más ba­ra­ta del mun­do
  • Con URLs lin­das
  • Gra­tis
  • Sin con­fi­gu­ra­r/a­gu­je­rear fi­rewa­lls

Creo que na­die tie­ne pu­bli­ca­da una guía pa­ra lo­grar to­do es­to, oja­lá le sir­va a al­guien.


Contents © 2000-2023 Roberto Alsina