(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
我遵循了这些说明
thoka
(Thomas Kalka)
2
这是来自 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 个赞
nineb
3
太好了。确认快照可以按预期恢复后,我将尝试这个技巧。
独角兽与 VPS vCPU 的数量直接有 2 倍的关系吗?