Utviklere → Veiledninger

Distribuer en app med git push

En NameOcean App Server er en Linux-server med prosjektet ditt i et git-repositorium. Du pusher, og den kjører. Denne veiledningen tar en Flask-app fra første push til eget domene med HTTPS; for Django, Node.js og Next.js er det bare én linje som er annerledes.

Slik når forespørsler appen din

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

Lastbalansereren har sertifikatene, så serveren betjener bare port 80. Appen din lytter på 127.0.0.1:8000 under supervisor, og nginx sender forespørsler videre til den.

1. En server og SSH-nøkkelen din

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ånedlig; servers create uten --yes viser bare prisen. Du kan også opprette den under Kontrollpanel → Hosting. ssh-keys add installerer ~/.ssh/id_ed25519.pub, som git bruker til å pushe.

2. Prosjektet

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 for byggetrinn: installering av pakker, migreringer, npm run build. Utdataene vises i terminalen din når du pusher.

3. Første distribusjon

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

nameocean deploy legger til en git-remote kalt nameocean, pusher gjeldende gren til /root/app på serveren (serveren distribuerer den grenen fra da av), pusher den også til din egen origin og starter appene på nytt.

4. Kjør den (én gang)

Fortell supervisor hvordan appen skal startes, og nginx at forespørsler skal sendes til den. Begge filene ligger på serveren med eksempler for hver stack; du trenger bare å fjerne kommentartegnene.

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] for 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 stacker endres bare command (filen inneholder også disse eksemplene):

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

Appen din er nå tilgjengelig på https://3f9a1c2e.nameocean.org.

5. Innstillinger og hemmeligheter

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

Alle apper, deploy.sh og SSH-økter får dem, og appene startes på nytt for å lese dem. De lagres bare på serveren, aldri i repositoriet eller i NameOceans database.

6. Domenet ditt

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

Domenets DNS må ligge hos NameOcean. NameOcean legger til DNS-postene, utsteder sertifikatet og setter opp lastbalansereren (HTTP til HTTPS, og domenet uten www til www); det tar vanligvis noen minutter. Ingenting endres på serveren.

7. Hver deploy etter det

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

Hver deploy sender en server.deployed-webhook-hendelse med commiten og om appene startet. Sikkerhetskopier, omstarter og resten av API-et: App Server API. Serveren har en veiledning for AI-agenter i /root/AGENTS.md.