Des alternatives moins chères à Hetzner ?

Personnellement, je ne lancerais pas une configuration à double conteneur sur une machine avec moins de 8 Go de RAM, 4 cœurs CPU et 80 Go de disque, mais votre expérience et votre situation peuvent varier. Je fais tourner un forum assez actif sur cette configuration Hetzner avec environ 300 utilisateurs actifs, et entre 70 et 100 DEU.

Script Bash pour trouver un serveur Hetzner

Ok, cela pourrait vous aider, ainsi que les autres lecteurs. Il est spécifique à Hetzner, mais peut probablement être adapté pour d’autres fournisseurs de VPS (ne me demandez pas de le faire pour vous, cependant).

Il s’agit d’un simple script Bash qui vérifie toutes les 5 minutes la disponibilité des serveurs Hetzner CAX21 ou CX33 et publie un sujet dans une catégorie de votre instance Discourse actuelle (vous pouvez bien sûr modifier le script selon votre configuration). Il fonctionne de manière similaire à une catégorie de flux RSS.

Vous aurez besoin d’un jeton Hetzner et d’une clé API Discourse, ainsi que de l’ID de la catégorie Discourse dans laquelle vous souhaitez publier les sujets. Le script peut être modifié pour inclure un filtre afin de spécifier la localisation (celui-ci recherche dans toutes leurs localisations).

Étape 1 : obtenir les jetons API

  • Jeton API Hetzner : rendez-vous dans votre console cloud Hetzner → sélectionnez votre projet → puis cliquez sur Sécurité à gauche → Jetons API → Générer un jeton (lecture seule suffit). Copiez et sauvegardez cette clé.
  • Clé API Discourse : rendez-vous dans l’administration de votre Discourse → API → créer une nouvelle clé (utilisateur système, tous les points de terminaison convient). Copiez et sauvegardez celle-ci également.

Étape 2 : installer jq

Connectez-vous via SSH à votre serveur Hetzner actuel et installez le parseur JSON jq (cela ne prend que quelques secondes) :

apt-get update
apt-get install jq -y

Étape 3 : configurer le script de suivi

Sur votre serveur Hetzner actuel, créez le script Bash suivant :

nano /root/hetzner_tracker.sh

Collez ce code à l’intérieur (vous devrez insérer vos vraies clés API, l’URL de votre forum et l’ID de la catégorie dans laquelle vous souhaitez publier).

#!/bin/bash

HETZNER_TOKEN="mettez_votre_nouveau_jeton_hetzner_ici" 
DISCOURSE_URL="https://votre-forum.com"
DISCOURSE_USER="system"
DISCOURSE_API_KEY="mettez_votre_nouvelle_clé_api_discourse_ici"
CATEGORY_ID=XX # ID de la catégorie de votre forum Discourse

# 1. Demander à Hetzner les modèles de serveurs, et NE récupérer QUE les IDs des modèles économiques de 8 Go (CAX21 ou CX33)
TYPES_JSON=$(curl -s -H "Authorization: Bearer $HETZNER_TOKEN" "https://api.hetzner.cloud/v1/server_types")
TARGET_IDS=$(echo "$TYPES_JSON" | jq -c '[.server_types[] | select(.name == "cax21" or .name == "cx33") | .id]')

# 2. Demander à Hetzner les niveaux de stock en temps réel de tous les centres de données.
DC_JSON=$(curl -s -H "Authorization: Bearer $HETZNER_TOKEN" "https://api.hetzner.cloud/v1/datacenters")

# 3. Vérifier TOUTES les localisations pour voir si nos modèles spécifiques sont dans la liste "disponible".
MATCHES=$(echo "$DC_JSON" | jq -r --argjson targets "$TARGET_IDS" '
  .datacenters[] | 
  .location.name as $loc |
  .name as $dc |
  .server_types.available[] | 
  select(. as $avail | $targets | index($avail)) | 
  "- Localisation : \($loc | ascii_upcase) (\($dc)) - ID du modèle de serveur : \(.)"
')

# 4. Si nous avons trouvé une correspondance, construire le message Discourse et le publier !
if [ -n "$MATCHES" ]; then
  
  RAW_TEXT="Un serveur économique de 8 Go (CAX21 ou CX33) est maintenant disponible !

**Correspondances trouvées :**
$MATCHES

[Rendez-vous dans la console Hetzner maintenant !](https://console.hetzner.cloud/)"

  PAYLOAD=$(jq -n --arg title "🚨 ALERTE HETZNER : Serveur 8 Go en stock !" \
                   --arg raw "$RAW_TEXT" \
                   --argjson cat "$CATEGORY_ID" \
                   '{title: $title, raw: $raw, category: $cat}')

  curl -s -X POST "$DISCOURSE_URL/posts.json" \
    -H "Api-Key: $DISCOURSE_API_KEY" \
    -H "Api-Username: $DISCOURSE_USER" \
    -H "Content-Type: application/json" \
    -d "$PAYLOAD"

  # Désactiver le script après publication pour ne pas spamer votre forum
  chmod -x "$0"
fi

Sauvegardez le fichier (ctrl+o, entrée, ctrl+x), puis rendez-le exécutable :

chmod +x /root/hetzner_tracker.sh

Étape 4 : automatiser le script

Ouvrez un fichier de configuration de planification cron :

crontab -e

Ajoutez cette ligne tout en bas du code existant :

*/5 * * * * /root/hetzner_tracker.sh

Comment cela fonctionne :

toutes les 5 minutes, votre serveur demande discrètement à Hetzner : « Avez-vous des serveurs disponibles aujourd’hui ? »

Si Hetzner répond oui, le script utilise immédiatement votre API Discourse pour créer un tout nouveau sujet dans votre catégorie spécifiée, et si vous avez configuré Discourse pour vous notifier des nouveaux sujets, votre e-mail et/ou votre téléphone devrait vous alerter.

Voici un exemple de sujet publié lorsque je cherchais un serveur CPX31 de 8 Go spécifique dans la zone américaine.

Une fois la publication réussie, le script désactive ses propres permissions d’exécution (chmod -x) afin de ne pas spamer votre forum avec des centaines de posts pendant que le serveur est en stock.

Ne vous inquiétez pas, j’ai utilisé cela de nombreuses fois et cela ne vous limitera pas en taux de requêtes.