Sviluppatori → Guide

Pubblicare un'app con git push

Un App Server NameOcean è un server Linux con il Suo progetto in un repository git. Lei fa push, l'app parte. Questa guida accompagna un'app Flask dal primo push al suo dominio con HTTPS; per Django, Node.js e Next.js cambia una sola riga.

Come le richieste raggiungono la Sua app

percorso della richiesta
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

I certificati risiedono sul load balancer, quindi il server serve solo la porta 80. La Sua app è in ascolto su 127.0.0.1:8000 sotto supervisor e nginx le inoltra le richieste.

1. Un server e la Sua chiave 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

Il server viene fatturato mensilmente; servers create senza --yes mostra solo il prezzo. Può anche crearlo da Dashboard → Hosting. ssh-keys add installa ~/.ssh/id_ed25519.pub, che git usa per il push.

2. Il progetto

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

In deploy.sh vanno i passaggi di build: installazione dei pacchetti, migrazioni, npm run build. Il suo output compare nel Suo terminale quando fa push.

3. Primo deploy

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

nameocean deploy aggiunge un remote git chiamato nameocean, invia il branch corrente in /root/app sul server (da quel momento il server pubblica quel branch), lo invia anche al Suo origin e riavvia le app.

4. Avvio (una sola volta)

Indichi a supervisor come avviare l'app e a nginx di inoltrarle le richieste. Entrambi i file si trovano sul server con esempi per ogni stack; basta togliere i commenti.

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

Il blocco [program:app] per 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

Per gli altri stack cambia solo command (il file contiene anche questi esempi):

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 e npm ci && npm run build in deploy.sh
Go/root/app/server e go build -o server . in deploy.sh

La Sua app è ora online su https://3f9a1c2e.nameocean.org.

5. Impostazioni e segreti

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

Le ricevono tutte le app, deploy.sh e ogni sessione SSH, e le app si riavviano per leggerle. Sono conservate solo sul server, mai nel repository né nel database di NameOcean.

6. Il Suo dominio

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

Il DNS del dominio deve essere gestito da NameOcean. NameOcean aggiunge i record DNS, emette il certificato e configura il load balancer (da HTTP a HTTPS e dal dominio senza www a www); di solito bastano pochi minuti. Sul server non cambia nulla.

7. Ogni deploy successivo

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

Ogni deploy invia un evento webhook server.deployed con il commit e l'esito dell'avvio delle app. Backup, riavvii e il resto dell'API: API App Server. Il server include una guida per gli agenti AI in /root/AGENTS.md.