個人的には、8GB RAM、4CPU、80GB ディスク未満の環境ではデュアルコンテナ構成を実行しませんが、あなたの状況や結果は異なるかもしれません。私は Hetzner のセットアップで、約300人のアクティブユーザーと70〜100 DEUの比較的忙しいフォーラムを運用しています。
Hetzner サーバーを探すための bash スクリプト
これは、あなたやこの記事を読む他の人々のお役に立つかもしれません。Hetzner 固有のものですが、他の VPS ベンダーにもおそらく適応できるでしょう(ただし、私に他のベンダー用を作ってくださいとはお尋ねにならないでください)。
これは、5分ごとに Hetzner サーバーの CAX21 または CX33 をチェックし、現在の Discourse インスタンスのカテゴリにトピックとして投稿する単純な bash スクリプトです(設定を好みに合わせて変更できます)。RSS フィードカテゴリと似たように動作します。
Hetzner トークンと Discourse API キー、およびトピックを投稿したい Discourse カテゴリの ID が必要です。スクリプトは、ロケーションを指定するためのフィルターを含めるように変更することもできます(このスクリプトはすべてのロケーションを検索します)。
ステップ1: API トークンの取得
- Hetzner API トークン: Hetzner Cloud コンソールに移動 → プロジェクトを選択 → 左側の セキュリティ をクリック → API トークン → トークンを生成(読み取り専用で構いません)。このキーをコピーして保存します。
- Discourse API キー: Discourse の管理画面に移動 → API → 新しいキーを作成(システムユーザー、すべてのエンドポイントで構いません)。これもコピーして保存します。
ステップ2: jq のインストール
現在の Hetzner サーバーに SSH 接続し、jq JSON パーサーをインストールします(数秒で完了します):
apt-get update
apt-get install jq -y
ステップ3: トラッカー スクリプトのセットアップ
現在の Hetzner サーバーで、以下の bash スクリプトを作成します:
nano /root/hetzner_tracker.sh
ここにコードを貼り付けます(実際の API キー、フォーラムの URL、および投稿したいカテゴリ ID を入力する必要があります)。
#!/bin/bash
HETZNER_TOKEN="put_your_new_hetzner_token_here"
DISCOURSE_URL="https://your-forum.com"
DISCOURSE_USER="system"
DISCOURSE_API_KEY="put_your_new_discourse_api_key_here"
CATEGORY_ID=XX # Discourse フォーラムのカテゴリ ID
# 1. Hetzner にサーバーモデルを問い合わせて、安価な8GBモデル(CAX21またはCX33)のIDのみを取得
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. Hetzner にすべてのデータセンターのリアルタイム在庫レベルを問い合わせ
DC_JSON=$(curl -s -H "Authorization: Bearer $HETZNER_TOKEN" "https://api.hetzner.cloud/v1/datacenters")
# 3. すべてのロケーションをチェックし、特定のモデルが「利用可能」リストにあるか確認
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)) |
"- Location: \($loc | ascii_upcase) (\($dc)) - Server Model ID: \(.)"
')
# 4. マッチが見つかった場合、Discourse投稿を作成して送信
if [ -n "$MATCHES" ]; then
RAW_TEXT="A budget 8GB server (CAX21 or CX33) is now available!
**Matches found:**
$MATCHES
[Go to the Hetzner console now!](https://console.hetzner.cloud/)"
PAYLOAD=$(jq -n --arg title "🚨 HETZNER ALERT: 8GB Server in 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"
# 投稿後にスクリプトを無効化し、フォーラムへのスパムを防ぐ
chmod -x "$0"
fi
ファイルを保存し(ctrl+o、enter、ctrl+x)、実行可能にします:
chmod +x /root/hetzner_tracker.sh
ステップ4: スクリプトの自動化
cron スケジュール設定ファイルを開きます:
crontab -e
既存のコードの最下部に以下の行を追加します:
*/5 * * * * /root/hetzner_tracker.sh
動作原理:
5分ごとに、サーバーは Hetzner に静かに問いかけます。「今日利用可能なサーバーはありますか?」
Hetzner が「はい」と答えたら、スクリプトはすぐに Discourse API を使用して指定されたカテゴリに新しいトピックを作成し、Discourse で新しいトピックの通知を設定している場合、メールや電話が通知音を送ります。
以下は、米国エリアで特定の8GB CPX31サーバーを探していた時の例トピック投稿です。
投稿が成功すると、スクリプトは自身の実行権限を無効化し(chmod -x)、サーバーが在庫にある間に数百の投稿でフォーラムをスパムしないようにします。
心配しないでください、私はこれを何度も使用しており、レート制限がかかることはありません。