Προγραμματιστές → Οδηγοί

Ανάπτυξη εφαρμογής με git push

Ένας NameOcean App Server είναι ένας Linux server με το έργο σας σε ένα αποθετήριο git. Κάνετε push και η εφαρμογή εκτελείται. Αυτός ο οδηγός οδηγεί μια εφαρμογή Flask από το πρώτο push μέχρι το δικό της domain με HTTPS· στα Django, Node.js και Next.js διαφέρει μόνο μία γραμμή.

Πώς φτάνουν τα αιτήματα στην εφαρμογή σας

διαδρομή αιτήματος
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

Ο load balancer διατηρεί τα πιστοποιητικά, οπότε ο server εξυπηρετεί μόνο τη θύρα 80. Η εφαρμογή σας ακούει στο 127.0.0.1:8000 υπό τον supervisor και το nginx της προωθεί τα αιτήματα.

1. Ένας server και το κλειδί 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

Ο server χρεώνεται μηνιαία· η εντολή servers create χωρίς --yes εμφανίζει μόνο την τιμή. Μπορείτε επίσης να τον δημιουργήσετε από το Πίνακας ελέγχου → Hosting. Η εντολή ssh-keys add εγκαθιστά το ~/.ssh/id_ed25519.pub, το οποίο χρησιμοποιεί το git για το push.

2. Το έργο

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 μπαίνουν τα βήματα build: εγκατάσταση πακέτων, migrations, npm run build. Η έξοδός του εμφανίζεται στο τερματικό σας όταν κάνετε push.

3. Πρώτη ανάπτυξη

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

Η εντολή nameocean deploy προσθέτει ένα git remote με όνομα nameocean, κάνει push τον τρέχοντα κλάδο στο /root/app στον server (από εκεί και πέρα ο server αναπτύσσει αυτόν τον κλάδο), τον κάνει push και στο δικό σας origin και επανεκκινεί τις εφαρμογές.

4. Εκτέλεση (μία φορά)

Ορίστε στον supervisor πώς να ξεκινά την εφαρμογή και στο nginx να της προωθεί τα αιτήματα. Και τα δύο αρχεία βρίσκονται στον server με παραδείγματα για κάθε stack· απλώς αφαιρείτε τα σχόλια.

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] για 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

Για άλλα stack αλλάζει μόνο το command (το αρχείο περιέχει κι αυτά τα παραδείγματα):

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 με 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 και npm ci && npm run build στο deploy.sh
Go/root/app/server και go build -o server . στο deploy.sh

Η εφαρμογή σας είναι πλέον διαθέσιμη στο https://3f9a1c2e.nameocean.org.

5. Ρυθμίσεις και μυστικά

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

Τα λαμβάνουν κάθε εφαρμογή, το deploy.sh και κάθε συνεδρία SSH, και οι εφαρμογές επανεκκινούνται για να τα διαβάσουν. Φυλάσσονται μόνο στον server, ποτέ στο αποθετήριο ή στη βάση δεδομένων της NameOcean.

6. Το domain σας

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

Το DNS του domain πρέπει να βρίσκεται στη NameOcean. Η NameOcean προσθέτει τις εγγραφές DNS, εκδίδει το πιστοποιητικό και ρυθμίζει τον load balancer (HTTP σε HTTPS και το σκέτο domain σε www)· συνήθως διαρκεί λίγα λεπτά. Στον server δεν αλλάζει τίποτα.

7. Κάθε επόμενο deploy

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

Κάθε deploy στέλνει ένα συμβάν webhook server.deployed με το commit και με το αν ξεκίνησαν οι εφαρμογές. Αντίγραφα ασφαλείας, επανεκκινήσεις και το υπόλοιπο API: App Server API. Ο διακομιστής διαθέτει οδηγό για AI agents στο /root/AGENTS.md.