Udviklere → Vejledninger

Udrul en app med git push

En NameOcean App Server er en Linux-server med dit projekt i et git-repository. Du pusher, og den kører. Denne vejledning tager en Flask-app fra det første push til sit eget domæne med HTTPS; Django, Node.js og Next.js adskiller sig kun på én linje.

Sådan når forespørgsler frem til din app

forespørgslens vej
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

Load balanceren har certifikaterne, så serveren betjener kun port 80. Din app lytter på 127.0.0.1:8000 under supervisor, og nginx videresender forespørgsler til den.

1. En server og din SSH-nøgle

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

En server faktureres månedligt; servers create uden --yes viser kun prisen. Du kan også oprette den under Dashboard → Hosting. ssh-keys add installerer ~/.ssh/id_ed25519.pub, som git bruger til at pushe.

2. Projektet

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

deploy.sh er stedet til build-trin: installation af pakker, migreringer, npm run build. Outputtet vises i din terminal, når du pusher.

3. Første udrulning

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

nameocean deploy tilføjer et git-remote ved navn nameocean, pusher den aktuelle branch til /root/app på serveren (serveren udruller derefter den branch), pusher den også til dit eget origin og genstarter apps.

4. Kør den (én gang)

Fortæl supervisor, hvordan appen startes, og nginx, at forespørgsler skal videresendes til den. Begge filer ligger på serveren med eksempler for hver stack; du skal blot fjerne udkommenteringen.

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

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

For andre stacks ændres kun command (filen indeholder også disse eksempler):

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

Din app er nu live på https://3f9a1c2e.nameocean.org.

5. Indstillinger og hemmeligheder

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

Alle apps, deploy.sh og SSH-sessioner får dem, og apps genstartes for at indlæse dem. De gemmes kun på serveren, aldrig i repositoryet eller i NameOceans database.

6. Dit domæne

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

Domænets DNS skal ligge hos NameOcean. NameOcean tilføjer DNS-posterne, udsteder certifikatet og opsætter load balanceren (HTTP til HTTPS og det rene domæne til www); det tager normalt et par minutter. Intet ændres på serveren.

7. Hver udrulning derefter

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

Hver udrulning sender en server.deployed-webhook-hændelse med commit'et og om apps'ene kom op. Backups, genstarter og resten af API'et: App Server API. Serveren har en vejledning til AI-agenter i /root/AGENTS.md.