Ontwikkelaars → Handleidingen

Een app deployen met git push

Een NameOcean App Server is een Linux-server met uw project in een git-repository. U pusht, en het draait. Deze handleiding brengt een Flask-app van de eerste push naar een eigen domein met HTTPS; bij Django, Node.js en Next.js verschilt slechts één regel.

Hoe verzoeken uw app bereiken

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

De load balancer beheert de certificaten, dus de server bedient alleen poort 80. Uw app luistert op 127.0.0.1:8000 onder supervisor, en nginx stuurt verzoeken door naar de app.

1. Een server en uw SSH-sleutel

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

Een server wordt maandelijks gefactureerd; servers create zonder --yes toont alleen de prijs. U kunt de server ook aanmaken via Dashboard → Hosting. ssh-keys add installeert ~/.ssh/id_ed25519.pub, die git gebruikt om te pushen.

2. Het project

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 komen de buildstappen: pakketten installeren, migraties, npm run build. De uitvoer verschijnt in uw terminal wanneer u pusht.

3. Eerste deploy

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

nameocean deploy voegt een git-remote met de naam nameocean toe, pusht de huidige branch naar /root/app op de server (de server deployt vanaf dan die branch), pusht deze ook naar uw eigen origin en herstart de apps.

4. Uitvoeren (eenmalig)

Vertel supervisor hoe de app gestart moet worden en nginx dat verzoeken naar de app moeten worden doorgestuurd. Beide bestanden staan op de server, met voorbeelden voor elke stack; u hoeft alleen het commentaar te verwijderen.

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

De [program:app] voor 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

Voor andere stacks verandert alleen command (het bestand bevat deze voorbeelden ook):

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

Uw app staat nu live op https://3f9a1c2e.nameocean.org.

5. Instellingen en geheimen

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

Elke app, deploy.sh en SSH-sessie krijgt ze, en de apps herstarten om ze in te lezen. Ze worden alleen op de server bewaard, nooit in de repository of in de database van NameOcean.

6. Uw domein

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

De DNS van het domein moet bij NameOcean staan. NameOcean voegt de DNS-records toe, geeft het certificaat uit en configureert de load balancer (HTTP naar HTTPS, en het kale domein naar www); dit duurt meestal enkele minuten. Op de server verandert niets.

7. Elke deploy daarna

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

Elke deploy verstuurt een server.deployed webhook-event met de commit en of de apps zijn opgestart. Back-ups, herstarts en de rest van de API: App Server API. De server bevat een handleiding voor AI-agents in /root/AGENTS.md.