Docs / Premiers pas / Votre premier déploiement

Votre premier déploiement

Mettre votre propre code en ligne depuis un répertoire de votre poste, sans dépôt Git. Chaque commande ci-dessous a été exécutée sur un serveur sh0, avec sa sortie réelle.

Vue d'ensemble

sh0 déploie une application depuis quatre sources. Ce guide suit la première, qui convient à la plupart des projets :

  • Un répertoire de votre poste, envoyé par sh0 push sous forme d'archive -- votre code, avec un Dockerfile ou une pile détectée (Node.js, Python, Go, Rust, PHP…).
  • Une archive ZIP envoyée depuis le tableau de bord.
  • Un dépôt Git, public ou privé, cloné par le serveur.
  • Un gabarit du catalogue (bases de données, CMS, outils).

Étape 1 : préparer le répertoire

Un Dockerfile à la racine vous donne la maîtrise complète de l'image. Sans lui, sh0 détecte la pile d'après les fichiers du projet. L'application doit écouter sur un port, ici 3000 :

Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY server.js .
EXPOSE 3000
CMD ["node","server.js"]

sh0 check note le répertoire avant tout envoi et signale ce qu'il faut corriger. sh0 push fait la même vérification et s'arrête sur un problème bloquant (sauf --no-check) ; les avertissements ne l'arrêtent pas :

Terminal
$ sh0 check .
  Scanning /home/you/my-api
  Detected:  Dockerfile

  Health Score: 95/100
  Complexity:   2 (Simple)

  [~] Warnings (1):
      - Missing .dockerignore
        Fix: Create a .dockerignore file with: node_modules, .git, dist, .env

  1 issue(s): 0 blocking, 1 warnings, 0 auto-fix, 0 info

Étape 2 : connecter la CLI

Installez la CLI sur votre poste (voir Installation de la CLI), puis lancez sh0 login --url https://panel.example.com avec l'adresse de votre panneau. Elle demande votre adresse e-mail et votre mot de passe (et votre code 2FA s'il est activé), puis enregistre une clé d'API dans ~/.sh0/config.toml.

Vérifiez la connexion :

Terminal
$ sh0 whoami
  Server:  https://panel.example.com
  User:    [email protected]
  Role:    owner

Étape 3 : envoyer

Depuis le répertoire du projet :

Terminal
$ sh0 push -n my-api --port 3000
  Deploying my-api
  Detected dockerfile -- 95/100 health
  2 files (0.0 MB) packaged
  Uploading OK 5ms
  Routing OK 10.0s

[ok] Live in 10.0s
  -> https://my-api-<instance>.sh0.app
  • -n nomme l'application ; sans lui, c'est le nom du répertoire. Le même nom met ensuite à jour la même application.
  • --port est le port sur lequel votre application écoute dans le conteneur.
  • Une archive est limitée à 500 Mo. Ajoutez un .dockerignore pour exclure node_modules, .git et les fichiers de build ; voir Déployer par push pour les autres limites.

Étape 4 : vérifier

La dernière ligne de sh0 push est l'adresse de l'application. Sur un serveur relié au proxy cloud de sh0, c'est un sous-domaine *.sh0.app en HTTPS ; pour votre propre domaine, voir l'étape 6.

Terminal
$ sh0 status my-api
  App: my-api
  ------------------------------
  ID:         85aab295-4166-470a-9538-807b46e8bec3
  Status:     running
  ...
  Latest Deployment
  ------------------------------
  ID:         551c1602-5a46-49eb-93df-70ee831cfea3
  Status:     running
  Duration:   37.9s
  When:       39s ago

$ curl -s https://my-api-<instance>.sh0.app/
{"db":true,"version":2,"greeting":"salut"}

Si l'application ne répond pas, lisez ses journaux avec sh0 logs my-api --tail 100, ou ouvrez l'application dans le tableau de bord et consultez le journal de build du déploiement.

Étape 5 : mettre à jour

Modifiez votre code et relancez le même sh0 push -n my-api --port 3000 : sh0 construit une nouvelle image et remplace le conteneur en service une fois le nouveau prêt. La mise à jour ci-dessus a pris 38 secondes, et l'application a répondu avec sa nouvelle version.

Étape 6 : votre propre domaine

Faites pointer un enregistrement A de votre domaine vers l'adresse IP du serveur, puis ajoutez-le à l'application, depuis l'onglet Domaines de l'application ou avec sh0 domains my-api add api.example.com. sh0 demande le certificat TLS à Let's Encrypt. Détails dans Domaines personnalisés.

Warning
Ajoutez le domaine une fois que l'enregistrement DNS pointe vers le serveur. Avant, la demande de certificat échoue, et Let's Encrypt limite les échecs répétés.

Depuis le tableau de bord

Ouvrez Déployer dans la barre latérale et choisissez une source :

  • Téléverser un fichier -- une archive ZIP de votre projet.
  • URL Git ou GitHub -- un dépôt et une branche.
  • Modèle -- une application du catalogue.
Note
Pour un dépôt privé, renseignez un jeton d'accès dans le champ prévu, ou utilisez une clé SSH ajoutée au serveur ; voir Déployer depuis Git.

Prochaines étapes

Votre application est en ligne. Pour la suite :