v1.0.0 MIT Ubuntu 24.04 LTS

Un script de Bash entre tú y producción.

Orbit despliega tus webs en tu propio VPS con un comando. Sin Vercel, sin Netlify, sin factura sorpresa a fin de mes.

$ orbit new

Eliges un repo de tu GitHub desde una lista, escribes el dominio, y en un par de minutos la web está online con su certificado HTTPS. Lo que genera son vhosts de nginx y unidades de systemd: si mañana borras Orbit, tus webs siguen online.

  • 1fichero
  • ~1.200líneas de Bash
  • 0demonios residentes
scroll

01 El problema

¿Cuántas tardes llevas
configurando nginx a mano?

Y cada vez que quieres publicar una web, se te va la tarde entre configurar nginx a mano, acordarte de cómo iba certbot, escribir un servicio de systemd y rezar para que el build no te tumbe la versión que ya estaba funcionando.

A mano una tarde
  • Instalar nginx y pelearse con el vhost
  • Acordarse de cómo iba certbot esta vez
  • Escribir la unidad de systemd desde cero
  • Elegir un puerto que no esté cogido
  • Descubrir que el build se ha comido la RAM
  • Crear el usuario y la base de datos
  • Rehacerlo todo porque falta una devDependency
  • Volver atrás a mano cuando algo revienta
Con Orbit ~2 min
$ orbit new

Orbit automatiza exactamente eso, y nada más. No es un PaaS, no es Kubernetes, no es un panel que haya que mantener. Es el trabajo aburrido, hecho bien y siempre igual.

  • nginx configurado y validado antes de recargar
  • certificado emitido por DNS-01 y renovado solo
  • systemd endurecido, app sin privilegios
  • si el build falla, producción ni se entera

02 La demo

Un terminal de verdad.
Bueno, casi.

Los comandos de orbit --help, con las salidas que documenta el repositorio. Historial con flechas, autocompletado con Tab, Esc para salir. No toca nada real. Escribe help para empezar.

root@vps: ~ — orbit 1.0.0
3 apps · carga 0.14 · mem 1.2G/12G Tab completa · ↑↓ historial · Ctrl+L limpia · Esc sale

03 Anatomía de un despliegue

Nueve pasos.
Solo uno es irreversible.

Cada versión va a su propia carpeta y hasta el final no se mueve nada. El build puede tardar dos minutos y comerse toda la RAM: durante ese rato, la web anterior sigue sirviendo con normalidad. Dale a reproducir y rómpelo a propósito.

    /srv/apps/mi-web/

      https://mi-web.com sirviendo v42

      El punto de no retorno es el paso 5. Todo lo anterior se puede abortar sin que un visitante note nada. Todo lo posterior tiene marcha atrás automática.

      04 Detección de stack

      Pega tu package.json.
      Te digo qué haría Orbit.

      Esta es la misma lógica que detect_stack() ejecuta en el servidor, reimplementada aquí en JavaScript. El orden de comprobación importa: los indicadores se solapan y el primero que coincide gana.

      Ficheros presentes en el repo:
      
            

      · ¿No sale tu stack?

      Añadir uno es la contribución
      más útil y la más fácil.

      Son cuatro pasos y todos ocurren en la misma función que acabas de ver funcionar aquí arriba. Si SvelteKit, Remix o Go te hacen falta hoy, probablemente estés a un PR de tenerlos.

        05 Arquitectura

        Orbit no está en el camino de una petición.

        Configura las piezas y se aparta. Puedes borrar /usr/local/bin/orbit mañana y tus webs seguirán online, porque todo lo que genera son artefactos estándar. Pulsa un nodo para ver qué hace.

        Todo legible con cat

        La configuración de una app son 16 líneas de clave='valor'. Sin formato binario, sin estado oculto, sin base de datos de control.

        systemd, no PM2

        Ya está ahí, arranca al iniciar la máquina, escribe en journald con rotación y permite encerrar el proceso. Un runtime menos que mantener vivo.

        PostgreSQL en localhost

        Bases creadas con orbit db create, con la DATABASE_URL escrita en el .env y copia diaria a las 4:30.

        06 Seguridad

        Seguro por defecto,
        y honesto sobre los límites.

        No hay un modo inseguro que sea más cómodo. Pero tampoco vamos a fingir que esto aísla lo que no aísla.

        Qué sí protege
          Qué no protege

            La unidad que genera systemd

            ProtectSystem=strict monta todo el sistema de ficheros en solo lectura salvo las rutas de ReadWritePaths. Una app comprometida no puede escribir fuera de su propio directorio. Pasa el ratón por encima de cada directiva.

            Puertos 80 y 443 abiertos a todo internet.

            /etc/systemd/system/orbit-mi-web.service
            
                  

            07 La factura

            Cuánto cuesta
            no tener sorpresas.

            Mueve los controles. Los precios son públicos y están fechados; las cuentas están a la vista y las letras pequeñas también. Orbit no siempre gana, y cuando no gana lo dice.

            Y si no es Orbit, ¿qué?

            Orbit pierde en varias columnas de esta tabla, y las que pierde son importantes. Si necesitas aislamiento entre apps, un panel web o más de un servidor, hay herramientas mejores y están aquí abajo con su enlace.

            08 Referencia

            Todos los comandos.

            Todos aceptan el nombre de la app como argumento. Si lo omites, Orbit te deja elegirla de una lista. dv es un atajo de orbit: dv list funciona igual.

            09 Historias de guerra

            Bugs que costaron
            una tarde cada uno.

            Están en el changelog porque son trampas que pueden reaparecer. Quince. Si vas a escribir Bash para producción, te las regalamos.

            10 Stacks soportados

            Lee tu package.json y decide solo.

            Y si tu proyecto no encaja en ninguno, el asistente te deja definir los comandos a mano. Nunca hay adivinanza silenciosa: enseña lo que ha detectado y te deja corregirlo antes de guardar nada.

            En camino · v1.2

            11 Roadmap

            Hacia dónde va.

            Las fechas son intenciones, no promesas: esto lo mantiene gente en su tiempo libre. Si algo te interesa especialmente, abre un issue y dilo. El orden se ajusta según lo que la gente pida de verdad.

            Los tres filtros

            Cualquier propuesta pasa por aquí antes que por el código. Es el resumen más corto que existe de por qué Orbit es como es.

            Cómo influir en esto

              Fuera de alcance

              Cosas que Orbit no va a hacer, para que nadie pierda el tiempo proponiéndolas.

                12 Instalación

                Cinco a diez minutos.
                Una vez en la vida del servidor.

                En un Ubuntu 24.04 recién creado. Instala nginx, Node 22 con pnpm, PostgreSQL, PHP 8.3 FPM, Python, Certbot, GitHub CLI, UFW y fail2ban.

                1. 1

                  Clona y ejecuta el instalador

                  Verás pasar 13 pasos y un recuadro verde al final.

                  # git clone https://github.com/intervolutions/orbit.git && cd orbit && sudo bash install.sh
                2. 2

                  Conecta GitHub y Cloudflare

                  Un código de ocho caracteres para GitHub. Un token con permiso Zone → DNS → Edit para Cloudflare.

                  # orbit github && orbit cf-token
                3. 3

                  Despliega tu primera web

                  Repo, dominio, y el asistente hace el resto. Al terminar: ✔ mi-web desplegada → https://midominio.com

                  # orbit new

                root@vps


                Sistema
                Ubuntu 24.04 LTS
                Servidor web
                nginx 1.24 · atiende a los visitantes
                Node
                22 + pnpm · compila React, Next y Astro
                Base de datos
                PostgreSQL · sólo en localhost
                PHP
                8.3 FPM + Composer · por socket unix
                Python
                3 + venv · con gunicorn
                Certificados
                Certbot · Let’s Encrypt por DNS-01
                Git
                GitHub CLI · para clonar repos privados
                Cortafuegos
                UFW + fail2ban · 4 intentos, 4 h de bloqueo
                Swap
                4 GB · para que los builds grandes no mueran
                Orbit
                1.0.0 · un fichero · ~1.200 líneas de Bash

                Esto es lo que te deja install.sh en 13 pasos. Todo son paquetes estándar de Ubuntu: si mañana borras Orbit, la máquina sigue siendo exactamente esta.

                Son las versiones que trae Ubuntu 24.04, no las últimas. Node 22 está en mantenimiento hasta abril de 2027 y PHP 8.3 en soporte de seguridad hasta diciembre de 2027. Es una elección deliberada, no un descuido: los paquetes de la distribución los parchea Canonical hasta 2029.

                Requisitos

                Probado en un VPS de OVH con 12 GB de RAM y 6 vCPU sirviendo varias webs a la vez. Debian 12 debería funcionar; no está probado.

                13 Qué NO es Orbit

                Conviene ser honesto
                sobre los límites.

                Nació de la frustración de desplegar webs a mano una y otra vez en el mismo VPS. Si te ahorra una tarde, ya ha cumplido su propósito.