Skip to content

Déployer Potato sur Hetzner, Vultr ou Linode

Mettez une étude Potato sur une machine virtuelle Hetzner, Vultr ou Linode avec potato deploy, dès €6 environ par mois, avec HTTPS et un disque persistant.

potato deploy up --provider hetzner place une étude d'annotation sur une machine virtuelle Hetzner Cloud pour environ €6 par mois, le prix par défaut le plus bas parmi les cibles VM payantes de Potato. --provider vultr et --provider linode font de même sur Vultr et sur Linode d'Akamai pour $10 et $12 par mois. Chacune est une machine virtuelle ordinaire dont le disque survit aux redémarrages, si bien qu'une étude y tourne pendant des semaines sans service de sauvegarde. Potato configure les trois de la même façon : un pare-feu qui n'ouvre que les ports 22, 80 et 443, Docker, le serveur web Caddy avec un certificat Let's Encrypt, et Potato exécuté comme service système. Cette page exige Potato 2.10 ou une version ultérieure et une configuration que vous avez déjà exécutée avec potato start.

Choisir entre les trois

Les trois diffèrent par le prix, la mémoire, la devise de facturation et l'endroit où la machine tourne par défaut. Le tableau donne la taille que Potato crée sauf si vous passez --size, avec le prix mensuel qu'il affiche :

--provider hetzner--provider vultr--provider linode
Taille par défautcx23, 2 vCPU et 4 Govc2-1c-2gb, 1 vCPU et 2 Gog6-standard-1, 1 vCPU et 2 Go
Prix mensuelenviron €6, adresse IPv4 comprise$10$12
Emplacement par défautnbg1, Nurembergewr, New Jerseyus-east, Newark
Variable du jetonHCLOUD_TOKENVULTR_API_KEYLINODE_TOKEN

Hetzner donne le plus de mémoire pour le prix, et Potato garde l'ensemble d'items en mémoire, si bien que Hetzner convient à un grand corpus avec un petit budget. Hetzner facture en euros depuis une société établie en Allemagne, ce que les règles d'achat de certains établissements n'autorisent pas. Vultr et Linode facturent en dollars américains.

Créer un jeton d'API

Chaque fournisseur s'authentifie avec un jeton d'API que vous créez dans sa console et placez dans votre environnement :

  • Hetzner. Dans la console Hetzner Cloud, ouvrez la section Security du projet et créez un jeton d'API avec les droits de lecture et d'écriture.
  • Vultr. Créez une clé d'API dans le tableau de bord Vultr et ajoutez l'adresse IP de votre machine à la liste de contrôle d'accès de la clé, faute de quoi Vultr rejette toutes les requêtes.
  • Linode. Créez un jeton d'accès personnel avec accès en lecture et en écriture aux Linodes, aux Firewalls et aux Volumes.

Installez l'extra de déploiement, exportez le jeton et vérifiez que Potato peut l'utiliser :

bash
pip install 'potato-annotation[deploy]'
export HCLOUD_TOKEN=...
potato deploy providers --verify

Décider qui peut se connecter

potato deploy ne modifie pas vos réglages de connexion, et l'adresse de la machine est publique. Si la configuration permet à n'importe qui de s'inscrire, l'exécution à blanc ci-dessous signale l'avertissement D003, « Anyone who finds the URL can register and annotate. » (Quiconque trouve l'URL peut s'inscrire et annoter.) Pour une étude en crowdsourcing, l'inscription libre est généralement voulue. Pour des annotateurs nommément désignés, listez-les sous user_config.users avec allow_all_users: false (Gestion des mots de passe) ou faites-les se connecter avec Google, GitHub ou votre établissement (Authentification SSO et OAuth) avant de déployer.

Vérifier le plan et déployer

Une exécution à blanc ne nécessite aucun compte et ne crée rien. Elle affiche chaque étape, le coût estimé et tout réglage risqué de la configuration :

bash
potato deploy up myproject/config.yaml --provider hetzner --dry-run
potato deploy up myproject/config.yaml --provider hetzner

La seconde commande déploie une fois que vous avez confirmé le plan. Elle se termine en affichant l'URL, une adresse https:// sur l'IP de la machine, et le chemin du fichier de la clé d'administration, .potato/secrets.json à côté de votre configuration. La clé d'administration ouvre le tableau de bord d'administration à /admin. Relancer up après avoir modifié la configuration téléverse la nouvelle version sur la même machine. Pendant l'étude, potato deploy logs myproject/config.yaml -f suit le journal du serveur chez les trois fournisseurs.

--region et --size changent l'emplacement et la machine, et --volume-gb ajoute un disque séparé pour les données de la tâche. Hetzner ne vend ses machines cx que dans ses emplacements européens, donc un déploiement vers ses emplacements américains, ash et hil, nécessite un type cpx passé avec --size. Si le type n'est pas vendu dans l'emplacement choisi, Potato s'arrête avant de créer quoi que ce soit et liste les emplacements qui le vendent.

Certificats sans nom de domaine

Sans nom de domaine, Let's Encrypt émet le certificat pour l'adresse IP de la machine. Il dure environ six jours et se renouvelle automatiquement. potato deploy status signale un renouvellement qui échoue, donc vérifiez-le tous les quelques jours si l'étude tourne sans surveillance. Pour utiliser votre propre domaine, faites pointer un enregistrement DNS A vers l'IP de la machine et redéployez avec --domain annotate.example.edu. Le compte Let's Encrypt utilise comme contact l'adresse de votre git config user.email, et --acme-email en définit une autre.

Particularités des fournisseurs

Linode exige un mot de passe root à la création d'une machine, même quand des clés SSH sont fournies. Potato en génère un, le stocke dans .potato/secrets.json et désactive la connexion SSH par mot de passe, si bien que ce mot de passe ne permet pas de se connecter. Sur Vultr, un disque séparé créé avec --volume-gb est attaché après le démarrage de la machine, et la configuration attend que le périphérique apparaisse avant de le formater et de le monter.

Terminer l'étude

Les annotations se trouvent sur le disque de la machine, qui est supprimé avec elle. Récupérez-les d'abord sur votre propre machine, vérifiez-les, puis supprimez le serveur :

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull écrit tout ce que le déploiement a collecté dans un nouveau répertoire potato-pull-<name>-<timestamp> et copie les bases de données au moyen de la commande de sauvegarde de SQLite. destroy refuse de s'exécuter sur un déploiement qui n'a jamais fait l'objet d'un pull.

Pour aller plus loin