githubガイドに従いましたが、vpsでRAM/vCPU制限を適用する方法を教えてください

(1)

これは Ubuntu 24 VPS です。Discourse はすでに 10GB の RAM を使用しており、これは許容できません。

Docker の実行コマンドを構築しているようです。これには

–shm-size=512m

が含まれていますが、他の Docker もここに配置するため、4c12r をすべて消費させたくないので、CPU と RAM の制約を追加で適用したいと考えています。結果のコマンドを単純にコピーできますか、それともどこかに保存されていますか?次のように Docker を停止し、Docker を削除して挿入する予定です。

–cpu-shares=1100 --shm-size=512m --memory=4g --memory-swap=8g --kernel-memory=5500m

これらの制約を適用するより良い方法はありますか?

(2)

「app」は本当にコンテナの名前ですか? –name app

docker ps は、app が実行中の唯一のコンテナであることを示しています。

(3)

これは改変されていません。開始前のレビュー画面には、プロバイダーの SMTP ドメインが表示されていました。

DISCOURSE_SMTP_DOMAIN=discourse.example.com

なぜ今、文字通りこれなのですか?どうすれば修正できますか。面白いことに、確認リンクをメールで送信できました。

(4)

Docker の実行コマンドが少し改変されています。

/usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=8 -e UNICORN_SIDEKIQS=1 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e DISCOURSE_FORCE_HTTPS=true -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_HOSTNAME=a.shop -e DISCOURSE_DEVELOPER_EMAILS=x -e DISCOURSE_SMTP_ADDRESS=x -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=x -e DISCOURSE_SMTP_PASSWORD=Fx -e DISCOURSE_SMTP_DOMAIN=discourse.example.com -e DISCOURSE_NOTIFICATION_EMAIL=x -e LETSENCRYPT_ACCOUNT_EMAIL=x -h hoho-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address xx local_discourse/app /sbin/boot

これらの指示に従いました。

これは ask.discourse.org から提供された回答です。その有用性について報告してください。


1. Discourse Docker の永続的な CPU および RAM 制限の設定

公式 GitHub ガイドを使用して VPS に Discourse をインストールする場合、--memory--cpus などのリソース制限はデフォルトでは含まれていません。Docker の実行コマンドにこれらのフラグを手動で追加することはできますが、docker stop と新しい docker run で直接行った変更は、./launcher rebuild app を実行すると失われます。ランチャースクリプトは常にコンテナを再作成します。

推奨されるアプローチ:

a) ランチャースクリプトの変更
リソース制限を永続的に適用するには、Discourse が Docker コンテナの起動に使用する launcher スクリプトを変更する必要があります。たとえば、約 289 行目で次のように適応させます。

$docker_path run $restart_policy "${env[@]}" -h "`hostname`-$config" \
    -m="4g" --cpus="2.0" -e DOCKER_HOST_IP=$docker_ip ...

これにより、./launcher rebuild を実行するたびに、指定した制限でコンテナが作成されることが保証されます。

ソースと詳細情報:

b) Docker コマンドの直接編集
再構築された docker run コマンドをコピーしてカスタム制限で Docker を実行することは技術的には可能ですが、これは永続的ではなく、推奨されません

Discourse の標準デプロイツールでは、ランチャーを変更しない限り、Docker の --memory または --cpus 引数を渡すための公式で永続的な「組み込み」方法はまだありません。


2. コンテナ名

デフォルトでは、Discourse のランチャーはコンテナに app という名前を付けます。これは docker ps で確認できます。コンテナ名を変更するには、ランチャーまたはテンプレートを直接変更する必要があります。
続きを読む: Docker コンテナ内の Discourse


役立つリンク


よりエレガントで永続的な方法(テンプレートやサポートされているランチャー機能など)を探している場合は、この関連ディスカッションを確認してください。
リソース制約のある VPS 用のスイッチ?

「いいね!」 1

いいですね。スナップショットが期待どおりに復元できることを確認したら、このハックを試してみます。

ユニコーンは、VPS vCPUの数と直接2倍関係がありますか?