Разработчикам → Руководства

Развертывание приложения через git push

App Server NameOcean — это Linux-сервер, на котором Ваш проект находится в git-репозитории. Вы делаете push — приложение запускается. В этом руководстве Flask-приложение проходит путь от первого push до собственного домена с HTTPS; для Django, Node.js и Next.js отличается всего одна строка.

Как запросы попадают в Ваше приложение

путь запроса
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

Сертификаты хранятся на балансировщике нагрузки, поэтому сервер обслуживает только порт 80. Ваше приложение слушает 127.0.0.1:8000 под управлением supervisor, а nginx передает ему запросы.

1. Сервер и Ваш 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

Сервер оплачивается ежемесячно; servers create без --yes только показывает цену. Создать сервер можно также в разделе Панель управления → Хостинг. 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 размещаются шаги сборки: установка пакетов, миграции, npm run build. Его вывод отображается в Вашем терминале при push.

3. Первое развертывание

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

nameocean deploy добавляет git remote с именем nameocean, отправляет текущую ветку в /root/app на сервере (с этого момента сервер развертывает именно эту ветку), также отправляет ее в Ваш собственный origin и перезапускает приложения.

4. Запуск (один раз)

Укажите supervisor, как запускать приложение, а nginx — куда передавать запросы. Оба файла уже есть на сервере с примерами для каждого стека; нужно лишь раскомментировать нужные строки.

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

Для других стеков меняется только 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-сессии, а приложения перезапускаются, чтобы их считать. Они хранятся только на сервере — никогда в репозитории или в базе данных NameOcean.

6. Ваш домен

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

DNS домена должен обслуживаться в NameOcean. NameOcean добавляет DNS-записи, выпускает сертификат и настраивает балансировщик нагрузки (HTTP на HTTPS и домен без www на www); обычно это занимает несколько минут. На сервере ничего не меняется.

7. Каждый последующий деплой

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

При каждом деплое отправляется событие вебхука server.deployed с коммитом и информацией о том, запустились ли приложения. Резервные копии, перезапуски и остальной API: App Server API. На сервере есть руководство для ИИ-агентов в /root/AGENTS.md.