Entwickler → Anleitungen

App mit git push deployen

Ein NameOcean App Server ist ein Linux-Server mit Ihrem Projekt in einem Git-Repository. Sie pushen, er läuft. Diese Anleitung bringt eine Flask-App vom ersten Push bis auf ihre eigene Domain mit HTTPS; bei Django, Node.js und Next.js unterscheidet sich nur eine Zeile.

Wie Anfragen Ihre App erreichen

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

Der Load Balancer verwaltet die Zertifikate, daher bedient der Server nur Port 80. Ihre App lauscht unter supervisor auf 127.0.0.1:8000, und nginx leitet Anfragen an sie weiter.

1. Ein Server und Ihr SSH-Schlüssel

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

Ein Server wird monatlich abgerechnet; servers create ohne --yes zeigt nur den Preis an. Sie können ihn auch unter Dashboard → Hosting erstellen. ssh-keys add installiert ~/.ssh/id_ed25519.pub, den git zum Pushen verwendet.

2. Das Projekt

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 gehören die Build-Schritte: Pakete installieren, Migrationen, npm run build. Die Ausgabe erscheint beim Pushen in Ihrem Terminal.

3. Erstes Deployment

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

nameocean deploy fügt ein Git-Remote namens nameocean hinzu, pusht den aktuellen Branch nach /root/app auf dem Server (der Server deployt ab dann diesen Branch), pusht ihn auch zu Ihrem eigenen origin und startet die Apps neu.

4. Starten (einmalig)

Teilen Sie supervisor mit, wie die App gestartet wird, und nginx, dass Anfragen an sie weitergeleitet werden sollen. Beide Dateien liegen mit Beispielen für jeden Stack auf dem Server; Sie müssen nur die Kommentarzeichen entfernen.

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

Der [program:app]-Abschnitt für 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

Bei anderen Stacks ändert sich nur command (diese Beispiele stehen auch in der Datei):

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

Ihre App ist jetzt unter https://3f9a1c2e.nameocean.org live.

5. Einstellungen und Secrets

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

Jede App, deploy.sh und jede SSH-Sitzung erhält sie, und die Apps werden neu gestartet, um sie einzulesen. Sie werden ausschließlich auf dem Server gespeichert, niemals im Repository oder in der Datenbank von NameOcean.

6. Ihre Domain

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

Das DNS der Domain muss bei NameOcean liegen. NameOcean legt die DNS-Einträge an, stellt das Zertifikat aus und richtet den Load Balancer ein (HTTP auf HTTPS sowie die Domain ohne www auf www); das dauert in der Regel wenige Minuten. Auf dem Server ändert sich nichts.

7. Jedes weitere Deployment

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

Jedes Deployment sendet ein server.deployed-Webhook-Ereignis mit dem Commit und der Angabe, ob die Apps gestartet sind. Backups, Neustarts und der Rest der API: App Server API. Auf dem Server finden Sie unter /root/AGENTS.md eine Anleitung für KI-Agenten.