лично я бы не запускал конфигурацию с двумя контейнерами на чем-то менее 8 ГБ ОЗУ, 4 ядер процессора и 80 ГБ диска, но ваш опыт и ситуация могут отличаться. я запускаю относительно загруженный форум на этой настройке от hetzner с около 300 активными пользователями и где-то от 70 до 100 DEU.
bash-скрипт для поиска серверов hetzner
ок, это может помочь вам и другим, кто читает это. он специфичен для hetzner, но, вероятно, может быть адаптирован для других провайдеров vps, (не просите меня сделать это для вас, однако).
это простой bash-скрипт, который будет проверять каждые 5 минут наличие серверов hetzner CAX21 или CX33 и публиковать их как тему в категории на вашем текущем экземпляре Discourse (вы можете изменить скрипт для конфигурации по вашему выбору, однако). он работает аналогично категории rss-ленты.
вам понадобится токен hetzner и api-ключ Discourse, а также идентификатор категории вашего желаемого раздела Discourse, куда он будет публиковать темы. скрипт можно изменить, чтобы включить фильтр для указания местоположения (этот ищет все их локации).
шаг 1: получение api-токенов
- токен api hetzner: перейдите в консоль hetzner cloud → выберите ваш проект → затем нажмите безопасность слева → api-токены → сгенерировать токен (только для чтения достаточно). скопируйте и сохраните этот ключ.
- api-ключ Discourse: перейдите в админку Discourse → api → создать новый ключ (пользователь системы, все конечные точки достаточно). скопируйте и сохраните и этот тоже.
шаг 2: установка jq
подключитесь по ssh к вашему текущему серверу hetzner и установите json-парсер jq (это займет всего несколько секунд):
apt-get update
apt-get install jq -y
шаг 3: настройка скрипта-трекера
на вашем текущем сервере hetzner создайте следующий bash-скрипт:
nano /root/hetzner_tracker.sh
вставьте этот код внутрь (вам нужно будет вставить ваши фактические api-ключи, url вашего форума и идентификатор категории, куда вы хотите, чтобы он публиковал).
#!/bin/bash
HETZNER_TOKEN="вставьте_ваш_новый_токен_hetzner_здесь"
DISCOURSE_URL="https://your-forum.com"
DISCOURSE_USER="system"
DISCOURSE_API_KEY="вставьте_ваш_новый_api_ключ_discourse_здесь"
CATEGORY_ID=XX # идентификатор категории вашего форума Discourse
# 1. Запросите у Hetzner модели серверов, и получите ТОЛЬКО идентификаторы для дешевых моделей на 8 ГБ (CAX21 или 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. Запросите у 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)) |
"- Локация: \($loc | ascii_upcase) (\($dc)) - Идентификатор модели сервера: \(.)"
')
# 4. Если мы нашли совпадение, создайте пост для Discourse и отправьте его!
if [ -n "$MATCHES" ]; then
RAW_TEXT="Бюджетный сервер на 8 ГБ (CAX21 или CX33) теперь доступен!
**Найдены совпадения:**
$MATCHES
[Перейдите в консоль Hetzner прямо сейчас!](https://console.hetzner.cloud/)"
PAYLOAD=$(jq -n --arg title "🚨 ТРЕВОГА HETZNER: Сервер на 8 ГБ в наличии!" \
--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 ответит да, скрипт немедленно использует ваш api Discourse для создания совершенно новой темы в указанной вами категории, и если у вас настроены уведомления Discourse о новых темах, ваш email и/или телефон должны будут вас уведомить.
вот пример темы, опубликованной, когда я искал конкретный сервер на 8 ГБ CPX31 в регионе США.
после успешной публикации скрипт отключает свои собственные права на выполнение (chmod -x), чтобы не спамить ваш форум сотнями постов, пока сервер находится в наличии.
не волнуйтесь, я использовал это много раз, и это не приведет к ограничению частоты запросов для вас.