Um App Server NameOcean é um servidor Linux com o seu projeto em um repositório git. Você faz o push e ele roda. Este guia leva um app Flask do primeiro push até o seu próprio domínio com HTTPS; Django, Node.js e Next.js diferem em apenas uma linha.
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000
O balanceador de carga guarda os certificados, então o servidor atende apenas a porta 80. O seu app escuta em 127.0.0.1:8000 sob o supervisor, e o nginx repassa as requisições para ele.
$ 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
Um servidor é cobrado mensalmente; servers create sem --yes apenas mostra o preço. Você também pode criá-lo em Painel → Hospedagem. ssh-keys add instala ~/.ssh/id_ed25519.pub, que o git usa para fazer o push.
import os
from flask import Flask
app = Flask(__name__)
@app.get("/")
def home():
return f"Hello from {os.environ.get('SITE_NAME', 'NameOcean')}"
flask gunicorn
#!/bin/bash # runs on the server after every push, in /root/app, with your env variables set -e pip install -r requirements.txt
O deploy.sh é onde ficam as etapas de build: instalação de pacotes, migrações, npm run build. A saída dele aparece no seu terminal quando você faz o push.
$ git add . && git commit -m "First deploy" $ nameocean deploy 3f9a1c2e
nameocean deploy adiciona um remote git chamado nameocean, envia o branch atual para /root/app no servidor (a partir daí o servidor implanta esse branch), envia-o também para o seu próprio origin e reinicia os apps.
Indique ao supervisor como iniciar o app e ao nginx como repassar as requisições para ele. Os dois arquivos estão no servidor com exemplos para cada stack; basta descomentar.
$ 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
O [program:app] para Flask:
[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 outros stacks, só muda o command (o arquivo também traz estes exemplos):
| 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 com 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 e npm ci && npm run build no deploy.sh |
| Go | /root/app/server e go build -o server . no deploy.sh |
O seu app já está no ar em https://3f9a1c2e.nameocean.org.
$ nameocean servers env set 3f9a1c2e SITE_NAME=Kahvebot SECRET_KEY=…
Todos os apps, o deploy.sh e as sessões SSH os recebem, e os apps são reiniciados para lê-los. Eles ficam guardados apenas no servidor, nunca no repositório nem no banco de dados da NameOcean.
$ nameocean bind kahvebot.com 3f9a1c2e
O DNS do domínio precisa estar na NameOcean. A NameOcean adiciona os registros DNS, emite o certificado e configura o balanceador de carga (HTTP para HTTPS e o domínio sem www para www); isso costuma levar alguns minutos. Nada muda no servidor.
$ git commit -am "New page" $ nameocean deploy $ nameocean servers logs 3f9a1c2e --app app -f # if it does not come up
Cada deploy envia um evento de webhook server.deployed com o commit e a indicação de se as aplicações arrancaram. Backups, reinícios e o resto da API: App Server API. O servidor tem um guia para agentes de IA em /root/AGENTS.md.