Dezvoltatori → Ghiduri

Publicați o aplicație cu git push

Un App Server NameOcean este un server Linux cu proiectul dvs. într-un repository git. Faceți push, iar aplicația rulează. Acest ghid duce o aplicație Flask de la primul push până la propriul domeniu cu HTTPS; pentru Django, Node.js și Next.js diferă o singură linie.

Cum ajung cererile la aplicația dvs.

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

Load balancer-ul deține certificatele, așa că serverul servește doar portul 80. Aplicația dvs. ascultă pe 127.0.0.1:8000 sub supervisor, iar nginx îi transmite cererile.

1. Un server și cheia dvs. 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

Serverul se facturează lunar; servers create fără --yes afișează doar prețul. Îl puteți crea și din Panou → Găzduire. ssh-keys add instalează ~/.ssh/id_ed25519.pub, pe care git o folosește pentru push.

2. Proiectul

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

În deploy.sh se pun pașii de build: instalarea pachetelor, migrările, npm run build. Rezultatul apare în terminal când faceți push.

3. Primul deploy

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

nameocean deploy adaugă un remote git numit nameocean, face push cu branch-ul curent în /root/app pe server (de acum serverul face deploy din acel branch), îl trimite și în propriul origin și repornește aplicațiile.

4. Porniți aplicația (o singură dată)

Indicați-i lui supervisor cum să pornească aplicația și lui nginx să îi transmită cererile. Ambele fișiere se află pe server, cu exemple pentru fiecare stack; trebuie doar să decomentați.

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

Secțiunea [program:app] pentru 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

Pentru alte stack-uri se schimbă doar command (fișierul conține și aceste exemple):

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

Aplicația dvs. este acum online la https://3f9a1c2e.nameocean.org.

5. Setări și secrete

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

Le primesc toate aplicațiile, deploy.sh și sesiunile SSH, iar aplicațiile repornesc pentru a le citi. Sunt păstrate doar pe server, niciodată în repository sau în baza de date NameOcean.

6. Domeniul dvs.

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

DNS-ul domeniului trebuie să fie la NameOcean. NameOcean adaugă înregistrările DNS, emite certificatul și configurează load balancer-ul (HTTP către HTTPS și domeniul simplu către www); de obicei durează câteva minute. Pe server nu se schimbă nimic.

7. Fiecare implementare de după aceea

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

Fiecare implementare trimite un eveniment webhook server.deployed cu commit-ul și informația dacă aplicațiile au pornit. Backupuri, reporniri și restul API-ului: App Server API. Serverul are un ghid pentru agenții AI în /root/AGENTS.md.