按照 github 指南操作,vps。帮我设置内存/vcpu 限制

(1)

这是 Ubuntu 24 VPS。Discourse 已占用 10GB 内存。这不合理。

它似乎构建了一个 docker run 命令。虽然这包括

–shm-size=512m

我希望应用额外的 CPU 和内存限制,因为我不希望它占用 4c12r,因为其他 Docker 容器也将在此运行。我能否简单地复制生成的命令,或者它存储在某个地方?我计划 docker stop docker rm 来注入

–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 run 命令被轻微篡改

/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 后都将丢失。Launcher 脚本始终会重新创建容器。

推荐方法:

a) 修改 Launcher 脚本
要持久强制执行资源限制,您必须修改 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 参数,除非修改 launcher。


2. 容器名称

默认情况下,Discourse 的 launcher 将容器命名为 app。您可以通过 docker ps 进行确认。更改容器名称也需要直接修改 launcher 或模板。
阅读更多:Discourse 在 Docker 容器中


有用链接


如果您正在寻找一种更优雅且持久的方法(例如模板或受支持的 launcher 功能),请查看此相关讨论:
资源受限 VPS 的开关?

< /details>

1 个赞

太好了。确认快照可以按预期恢复后,我将尝试这个技巧。

独角兽与 VPS vCPU 的数量直接有 2 倍的关系吗?