Dla programistów → Przewodniki

Wdrażanie aplikacji za pomocą git push

NameOcean App Server to serwer Linux z Twoim projektem w repozytorium git. Wykonujesz push, a aplikacja działa. Ten przewodnik prowadzi aplikację Flask od pierwszego pusha aż do własnej domeny z HTTPS; w przypadku Django, Node.js i Next.js różni się tylko jedna linia.

Jak żądania docierają do aplikacji

ścieżka żądania
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

Certyfikaty znajdują się na load balancerze, więc serwer obsługuje tylko port 80. Aplikacja nasłuchuje na 127.0.0.1:8000 pod kontrolą supervisora, a nginx przekazuje do niej żądania.

1. Serwer i klucz 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

Serwer jest rozliczany miesięcznie; servers create bez --yes wyświetla tylko cenę. Serwer można też utworzyć w sekcji Panel → Hosting. ssh-keys add instaluje klucz ~/.ssh/id_ed25519.pub, którego git używa do pushowania.

2. Projekt

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

W deploy.sh umieszcza się kroki budowania: instalację pakietów, migracje, npm run build. Ich wynik pojawia się w terminalu podczas pusha.

3. Pierwsze wdrożenie

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

nameocean deploy dodaje zdalne repozytorium git o nazwie nameocean, wypycha bieżącą gałąź do /root/app na serwerze (od tej pory serwer wdraża tę gałąź), wypycha ją również do Twojego origin i restartuje aplikacje.

4. Uruchomienie (jednorazowo)

Wskaż supervisorowi, jak uruchomić aplikację, a nginx, aby przekazywał do niej żądania. Oba pliki znajdują się na serwerze wraz z przykładami dla każdego stosu; wystarczy odkomentować odpowiednie linie.

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

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

W przypadku innych stosów zmienia się tylko command (przykłady znajdują się też w pliku):

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 z 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 oraz npm ci && npm run build w deploy.sh
Go/root/app/server oraz go build -o server . w deploy.sh

Aplikacja działa teraz pod adresem https://3f9a1c2e.nameocean.org.

5. Ustawienia i sekrety

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

Otrzymuje je każda aplikacja, deploy.sh i sesja SSH, a aplikacje są restartowane, aby je wczytać. Są przechowywane wyłącznie na serwerze, nigdy w repozytorium ani w bazie danych NameOcean.

6. Twoja domena

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

DNS domeny musi być obsługiwany przez NameOcean. NameOcean dodaje rekordy DNS, wystawia certyfikat i konfiguruje load balancer (przekierowanie z HTTP na HTTPS oraz z domeny bez www na www); zwykle trwa to kilka minut. Na serwerze nic się nie zmienia.

7. Każde kolejne wdrożenie

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

Każde wdrożenie wysyła zdarzenie webhooka server.deployed z informacją o commicie i o tym, czy aplikacje się uruchomiły. Kopie zapasowe, restarty i pozostała część API: App Server API. Na serwerze znajduje się przewodnik dla agentów AI w /root/AGENTS.md.