Desarrolladores → Guías

Despliegue una app con git push

Un App Server de NameOcean es un servidor Linux con su proyecto en un repositorio git. Usted hace push y se ejecuta. Esta guía lleva una app Flask desde el primer push hasta su propio dominio con HTTPS; con Django, Node.js y Next.js solo cambia una línea.

Cómo llegan las solicitudes a su app

ruta de la solicitud
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

El balanceador de carga gestiona los certificados, así que el servidor solo sirve el puerto 80. Su app escucha en 127.0.0.1:8000 bajo supervisor, y nginx le pasa las solicitudes.

1. Un servidor y su clave SSH

nameocean
$ nameocean servers plans
$ nameocean servers create --plan starter --yes
$ nameocean servers ls
ID   NAME      STATUS   PLAN     DEFAULT DOMAIN          DOMAINS
812  3f9a1c2e  running  starter  3f9a1c2e.nameocean.org  -
$ nameocean servers ssh-keys add 3f9a1c2e

Un servidor se factura mensualmente; servers create sin --yes solo muestra el precio. También puede crearlo en Panel → Hosting. ssh-keys add instala ~/.ssh/id_ed25519.pub, que git utiliza para hacer push.

2. El proyecto

app.py
import os

from flask import Flask

app = Flask(__name__)


@app.get("/")
def home():
    return f"Hello from {os.environ.get('SITE_NAME', 'NameOcean')}"
requirements.txt
flask
gunicorn
.nameocean/deploy.sh
#!/bin/bash
# runs on the server after every push, in /root/app, with your env variables
set -e
pip install -r requirements.txt

En deploy.sh van los pasos de compilación: instalar paquetes, migraciones, npm run build. Su salida aparece en su terminal cuando hace push.

3. Primer despliegue

nameocean
$ git add . && git commit -m "First deploy"
$ nameocean deploy 3f9a1c2e

nameocean deploy añade un remoto git llamado nameocean, hace push de la rama actual a /root/app en el servidor (a partir de entonces el servidor despliega esa rama), también la sube a su propio origin y reinicia las apps.

4. Ejecútela (una vez)

Indique a supervisor cómo iniciar la app y a nginx que le pase las solicitudes. Ambos archivos están en el servidor con ejemplos para cada stack; solo tiene que descomentarlos.

ssh
$ nameocean servers info 3f9a1c2e   # the ssh line
$ ssh -p 2152 root@3f9a1c2e.nameocean.org
# vi /root/conf/supervisor.conf   # uncomment the Flask [program:app] and the shared settings
# supervisorctl reread && supervisorctl update
# vi /root/conf/nginx.conf        # remove the static "location /", uncomment the proxy one
# nginx -t && systemctl reload nginx
# curl -s http://127.0.0.1/
Hello from NameOcean

El [program:app] para Flask:

/root/conf/supervisor.conf
[program:app]
command=/root/.pyenv/versions/app/bin/gunicorn app:app --workers 2 --bind 127.0.0.1:8000
directory=/root/app
environment=PATH="/root/.pyenv/versions/app/bin:/usr/local/bin:/usr/bin:/bin"
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/app.log

Para otros stacks solo cambia command (el archivo también incluye estos ejemplos):

Django/root/.pyenv/versions/app/bin/gunicorn myproject.wsgi:application --workers 2 --bind 127.0.0.1:8000
FastAPI/root/.pyenv/versions/app/bin/uvicorn main:app --host 127.0.0.1 --port 8000 --workers 2
Node.js/usr/bin/node server.js con environment=NODE_ENV="production",PORT="8000",HOST="127.0.0.1"
Next.js/usr/bin/npx next start -H 127.0.0.1 -p 8000 y npm ci && npm run build en deploy.sh
Go/root/app/server y go build -o server . en deploy.sh

Su app ya está en línea en https://3f9a1c2e.nameocean.org.

5. Configuración y secretos

nameocean
$ nameocean servers env set 3f9a1c2e SITE_NAME=Kahvebot SECRET_KEY=…

Todas las apps, deploy.sh y las sesiones SSH los reciben, y las apps se reinician para leerlos. Se guardan únicamente en el servidor, nunca en el repositorio ni en la base de datos de NameOcean.

6. Su dominio

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

El DNS del dominio debe estar en NameOcean. NameOcean añade los registros DNS, emite el certificado y configura el balanceador de carga (de HTTP a HTTPS, y del dominio sin www a www); normalmente tarda unos minutos. No cambia nada en el servidor.

7. Cada despliegue posterior

nameocean
$ git commit -am "New page"
$ nameocean deploy
$ nameocean servers logs 3f9a1c2e --app app -f   # if it does not come up

Cada despliegue envía un evento de webhook server.deployed con el commit y la indicación de si las aplicaciones se iniciaron. Copias de seguridad, reinicios y el resto de la API: API de App Server. El servidor incluye una guía para agentes de IA en /root/AGENTS.md.