Documentación / Primeros pasos / Tu primer despliegue

Tu primer despliegue

Publica tu propio código desde un directorio de tu equipo, sin repositorio Git. Cada comando de abajo se ejecutó contra un servidor sh0, con su salida real.

Descripción general

sh0 despliega una aplicación desde cuatro orígenes. Esta guía sigue el primero, que sirve para la mayoría de los proyectos:

  • Un directorio de tu equipo, enviado por sh0 push como archivo comprimido -- tu código, con un Dockerfile o una pila detectada (Node.js, Python, Go, Rust, PHP…).
  • Un archivo ZIP subido desde el panel.
  • Un repositorio Git, público o privado, clonado por el servidor.
  • Una plantilla del catálogo (bases de datos, CMS, herramientas).

Paso 1: preparar el directorio

Un Dockerfile en la raíz te da control total sobre la imagen. Sin él, sh0 detecta la pila a partir de los archivos del proyecto. La aplicación debe escuchar en un puerto, aquí el 3000:

Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY server.js .
EXPOSE 3000
CMD ["node","server.js"]

sh0 check puntúa el directorio antes de enviar nada y señala qué corregir. sh0 push hace la misma comprobación y se detiene ante un problema bloqueante (salvo con --no-check); las advertencias no lo detienen:

Terminal
$ sh0 check .
  Scanning /home/you/my-api
  Detected:  Dockerfile

  Health Score: 95/100
  Complexity:   2 (Simple)

  [~] Warnings (1):
      - Missing .dockerignore
        Fix: Create a .dockerignore file with: node_modules, .git, dist, .env

  1 issue(s): 0 blocking, 1 warnings, 0 auto-fix, 0 info

Paso 2: conectar la CLI

Instala la CLI en tu equipo (ver Instalación de la CLI) y ejecuta sh0 login --url https://panel.example.com con la dirección de tu panel. Pide tu correo y tu contraseña (y tu código 2FA si está activado) y guarda una clave de API en ~/.sh0/config.toml.

Comprueba la conexión:

Terminal
$ sh0 whoami
  Server:  https://panel.example.com
  User:    [email protected]
  Role:    owner

Paso 3: enviar

Desde el directorio del proyecto:

Terminal
$ sh0 push -n my-api --port 3000
  Deploying my-api
  Detected dockerfile -- 95/100 health
  2 files (0.0 MB) packaged
  Uploading OK 5ms
  Routing OK 10.0s

[ok] Live in 10.0s
  -> https://my-api-<instance>.sh0.app
  • -n da nombre a la aplicación; sin él, se usa el nombre del directorio. El mismo nombre actualiza después la misma aplicación.
  • --port es el puerto en el que escucha tu aplicación dentro del contenedor.
  • Un archivo comprimido está limitado a 500 MB. Añade un .dockerignore para excluir node_modules, .git y los artefactos de compilación; ver Desplegar con push para los demás límites.

Paso 4: verificar

La última línea de sh0 push es la dirección de la aplicación. En un servidor conectado al proxy en la nube de sh0 es un subdominio *.sh0.app con HTTPS; para tu propio dominio, ver el paso 6.

Terminal
$ sh0 status my-api
  App: my-api
  ------------------------------
  ID:         85aab295-4166-470a-9538-807b46e8bec3
  Status:     running
  ...
  Latest Deployment
  ------------------------------
  ID:         551c1602-5a46-49eb-93df-70ee831cfea3
  Status:     running
  Duration:   37.9s
  When:       39s ago

$ curl -s https://my-api-<instance>.sh0.app/
{"db":true,"version":2,"greeting":"salut"}

Si la aplicación no responde, lee sus registros con sh0 logs my-api --tail 100, o abre la aplicación en el panel y revisa el registro de compilación del despliegue.

Paso 5: actualizar

Cambia tu código y vuelve a ejecutar el mismo sh0 push -n my-api --port 3000: sh0 construye una imagen nueva y sustituye el contenedor en marcha cuando el nuevo está listo. La actualización de arriba tardó 38 segundos, y la aplicación respondió con su nueva versión.

Paso 6: tu propio dominio

Apunta un registro A de tu dominio a la dirección IP del servidor y añádelo a la aplicación, desde la pestaña Dominios de la aplicación o con sh0 domains my-api add api.example.com. sh0 solicita el certificado TLS a Let's Encrypt. Detalles en Dominios personalizados.

Warning
Añade el dominio cuando el registro DNS ya apunte al servidor. Antes, la solicitud del certificado falla, y Let's Encrypt limita los fallos repetidos.

Desde el panel

Abre Desplegar en la barra lateral y elige un origen:

  • Subir archivo -- un archivo ZIP de tu proyecto.
  • URL Git o GitHub -- un repositorio y una rama.
  • Plantilla -- una aplicación del catálogo.
Note
Para un repositorio privado, indica un token de acceso en el campo correspondiente, o usa una clave SSH añadida al servidor; ver Desplegar desde Git.

Próximos pasos

Tu aplicación está en línea. Siguientes pasos: