Développeurs → Guides

Déployer une application avec git push

Un App Server NameOcean est un serveur Linux avec votre projet dans un dépôt git. Vous faites un push, il s'exécute. Ce guide accompagne une application Flask du premier push jusqu'à son propre domaine en HTTPS ; pour Django, Node.js et Next.js, seule une ligne change.

Comment les requêtes atteignent votre application

chemin de la requête
visitor ──HTTPS:443──▶ NameOcean load balancer ──HTTP:80──▶ nginx ──▶ your app on 127.0.0.1:8000

Le load balancer détient les certificats, le serveur ne sert donc que le port 80. Votre application écoute sur 127.0.0.1:8000 sous supervisor, et nginx lui transmet les requêtes.

1. Un serveur et votre clé 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

Un serveur est facturé mensuellement ; servers create sans --yes affiche uniquement le prix. Vous pouvez aussi le créer depuis Tableau de bord → Hébergement. ssh-keys add installe ~/.ssh/id_ed25519.pub, que git utilise pour le push.

2. Le projet

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 contient les étapes de build : installation des paquets, migrations, npm run build. Sa sortie s'affiche dans votre terminal lors du push.

3. Premier déploiement

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

nameocean deploy ajoute un remote git nommé nameocean, pousse la branche courante dans /root/app sur le serveur (le serveur déploie ensuite cette branche), la pousse aussi vers votre propre origin, puis redémarre les applications.

4. Lancer l'application (une seule fois)

Indiquez à supervisor comment démarrer l'application et à nginx de lui transmettre les requêtes. Les deux fichiers se trouvent sur le serveur avec des exemples pour chaque stack ; il vous suffit de décommenter.

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

Le [program:app] pour 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

Pour les autres stacks, seule la ligne command change (le fichier contient aussi ces exemples) :

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 avec 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 et npm ci && npm run build dans deploy.sh
Go/root/app/server et go build -o server . dans deploy.sh

Votre application est désormais en ligne sur https://3f9a1c2e.nameocean.org.

5. Paramètres et secrets

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

Chaque application, deploy.sh et session SSH les reçoit, et les applications redémarrent pour les lire. Ils sont conservés uniquement sur le serveur, jamais dans le dépôt ni dans la base de données de NameOcean.

6. Votre domaine

nameocean
$ nameocean bind kahvebot.com 3f9a1c2e

Le DNS du domaine doit être hébergé chez NameOcean. NameOcean ajoute les enregistrements DNS, émet le certificat et configure le load balancer (HTTP vers HTTPS, et le domaine nu vers www) ; cela prend généralement quelques minutes. Rien ne change sur le serveur.

7. Chaque déploiement suivant

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

Chaque déploiement envoie un événement webhook server.deployed avec le commit et l'indication du démarrage des applications. Sauvegardes, redémarrages et le reste de l'API : API App Server. Le serveur contient un guide pour les agents IA dans /root/AGENTS.md.