StanD
(Stan Dyck)
2023 年8 月 22 日 17:42
22
这是我的 unicorn.stderr.log 的末尾,供参考
I, [2023-08-22T04:18:52.795267 #81] INFO -- : Refreshing Gem list
fatal: detected dubious ownership in repository at '/var/www/discourse'
To add an exception for this directory, call:
git config --global --add safe.directory /var/www/discourse
I, [2023-08-22T04:18:57.742262 #81] INFO -- : listening on addr=127.0.0.1:3000 fd=10
fatal: detected dubious ownership in repository at '/var/www/discourse'
To add an exception for this directory, call:
git config --global --add safe.directory /var/www/discourse
I, [2023-08-22T04:19:04.916798 #81] INFO -- : starting 1 supervised sidekiqs
I, [2023-08-22T04:19:04.927971 #81] INFO -- : starting up EmailSync demon
I, [2023-08-22T04:19:07.993280 #81] INFO -- : master process ready
I, [2023-08-22T04:19:11.010040 #174] INFO -- : worker=0 ready
I, [2023-08-22T04:19:11.994849 #188] INFO -- : worker=1 ready
I, [2023-08-22T04:19:12.524936 #203] INFO -- : worker=2 ready
Falco:
你运行的是什么发行版?
Ubuntu 22.04 (Server)
从云主机商那里全新设置的。除了更新系统、安装 docker、zsh、nginx 和运行 discourse 的设置之外,什么都没做,结果失败了。
编辑:
我用 Fedora 重建了云服务器,刚刚安装了 docker,然后再次尝试了全新安装。
又出现了另一个不同的错误
[Tue 22 Aug 2023 05:51:02 PM UTC] Run reload cmd: sv reload nginx
warning: nginx: unable to open supervise/ok: file does not exist
[Tue 22 Aug 2023 05:51:02 PM UTC] Reload error for :
Started runsvdir, PID is 2941
ok: run: redis: (pid 2953) 0s
ok: run: postgres: (pid 2954) 0s
supervisor pid: 2949 unicorn pid: 2981
内部的 nginx 不想运行
Falco
(Falco)
2023 年8 月 22 日 18:16
24
DarthLasciel:
只安装了nginx
等等,你为什么要安装nginx?如果主机上已有其他程序占用了80端口,默认安装会失败。
在一个新的Digital Ocean液滴上,我只做了官方安装指南中的步骤,并且一切正常。让Discourse安装程序为我安装docker以及其他所有东西。
试图重现这个问题证明很棘手。
2 个赞
StanD
(Stan Dyck)
2023 年8 月 22 日 18:41
25
Falco:
试图重现这一点很棘手。
是的,似乎是这样。自从我看到多个人报告过它(@DarthLasciel 、@Godmar_Back 和也许 @kdambekalns )以来,这绝对似乎是一个问题。
如果您想了解我的安装情况,请告诉我。
1 个赞
Falco
(Falco)
2023 年8 月 22 日 18:47
26
如果您在新服务器上的新子域下进行预配,并严格遵循我们的官方安装指南,不安装任何额外的宿主包,问题是否仍然存在?
另外,您能否分享一下您的 [redacted] app.yml?
leonardo
(Leonardo Mosquera)
2023 年8 月 22 日 18:53
27
特别是,请务必隐藏 DISCOURSE_SMTP_PASSWORD 环境变量和任何其他敏感部分。
另外:
您可以尝试将此添加到 URL 吗? ?safe_mode=no_plugins
如果成功,这可能指向插件错误。
除了子域名部分,我做的完全一样。
新的 Fedora 服务器,安装 docker,安装 discourse,在未安装 nginx 的服务器上进行设置。结果是上面发布的错误。
## 这是全合一的独立 Discourse Docker 容器模板
##
## 修改此文件后,您必须重建
## /var/discourse/launcher rebuild app
##
## 编辑时请务必*非常小心*!
## YAML 文件对空格或对齐的错误*极其*敏感!
## 如有需要,请访问 http://www.yamllint.com/ 来验证此文件
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## 取消注释下一行以启用 IPv6 监听器
#- "templates/web.ipv6.template.yml"
- "templates/web.ratelimited.template.yml"
## 如果您想添加 Let's Encrypt (https),请取消注释这两行
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
## 请参阅 https://meta.discourse.org/t/17247 了解详情
expose:
- "9980:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## 将 db_shared_buffers 设置为总内存的最多 25%。
## 将由 bootstrap 根据检测到的 RAM 自动设置,或者您可以覆盖它
#db_shared_buffers: "256MB"
## 可以提高排序性能,但会增加每个连接的内存使用量
#db_work_mem: "40MB"
## 此容器应使用哪个 Git 版本? (默认: tests-passed)
#version: tests-passed
env:
LC_ALL: de_DE.UTF-8
LANG: de_DE.UTF-8
LANGUAGE: de_DE.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## 支持多少并发 Web 请求?取决于内存和 CPU 核心。
## 将由 bootstrap 根据检测到的 CPU 自动设置,或者您可以覆盖它
#UNICORN_WORKERS: 3
## TODO: 此 Discourse 实例将响应的域名
## 必需。Discourse 不能与裸 IP 地址一起使用。
DISCOURSE_HOSTNAME: 'redacted.de'
## 如果您希望容器以与上面指定的相同的主机名(-h 选项)启动,请取消注释
## (默认值“$hostname-$config”)
#DOCKER_USE_HOSTNAME: true
## TODO: 将被设为管理员和开发者的逗号分隔的电子邮件列表
## 初始注册示例“user1@example.com,user2@example.com”
DISCOURSE_DEVELOPER_EMAILS: 'me@example.com,you@example.com'
## TODO: 用于验证新帐户和发送通知的 SMTP 邮件服务器
# 需要 SMTP 地址、用户名和密码
# 警告:SMTP 密码中的字符 '#' 可能会导致问题!
DISCOURSE_SMTP_ADDRESS: none.com
#DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: user@none.com
DISCOURSE_SMTP_PASSWORD: none
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认 true)
#DISCOURSE_SMTP_DOMAIN: discourse.example.com # (某些提供商需要)
#DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com # (用于发送通知的地址)
## 如果您添加了 Let's Encrypt 模板,请取消注释下方以获取免费 SSL 证书
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## 此 Discourse 实例的 HTTP 或 HTTPS CDN 地址(配置为拉取)
## 请参阅 https://meta.discourse.org/t/14857 了解详情
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## 用于 IP 地址查找的 maxmind 地理位置 IP 地址密钥
## 请参阅 https://meta.discourse.org/t/-/137387/23 了解详情
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## 插件在此处
## 请参阅 https://meta.discourse.org/t/19157 了解详情
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## 构建后要运行的任何自定义命令
run:
- exec: echo "开始执行自定义命令"
## 如果您想为您的首次注册设置“发件人”电子邮件地址,请取消注释并进行更改:
## 在收到首次注册电子邮件后,请重新注释该行。它只需要运行一次。
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "自定义命令结束"
rtwfroody
(Tim Newsome)
2023 年8 月 22 日 23:05
29
我遇到了同样的权限问题,即 unicorn.pid 不可写。我想通过查看官方安装指南是否能重现问题来获取更多信息,但这不适合我的系统。首先,它抱怨端口 80/443 已被占用,然后它进行了一些失败的电子邮件检查。您是否有不要求任何外部依赖的、仅创建 Docker 镜像的 app.yml?假设这个问题用那个镜像也能重现。
我“修复”了这个问题,我感觉自己蠢得不可思议。
我没有“正确地”安装 Docker,而是直接输入了“sudo apt install docker-compose”并继续操作。Docker “似乎”能工作……似乎……
我按照 Docker 指南告诉我的方式重新安装了它,添加了另一个存储库、密钥环,以及所有那些东西……现在 Discourse 运行了!
7 个赞
pfaffman
(Jay Pfaffman)
2023 年8 月 23 日 14:19
31
一次糟糕的 Docker 安装是罪魁祸首。我真的不明白为什么安装最新且功能正常的 Docker 仍然如此困难。而且他们似乎终于将 docker-compose 集成到了 docker 中(所以你可以执行 docker compose ... 命令),尽管我还没有密切关注这一点。
@rtwfroody 和 @StanD ,这能解决你们的问题吗?
2 个赞
Falco
(Falco)
2023 年8 月 23 日 14:49
32
但我们根本不使用 docker-compose
很高兴知道,但我们的指南并不要求任何这些,你运行 discourse-setup,它会为你安装 Docker。
StanD
(Stan Dyck)
2023 年8 月 23 日 15:43
33
我相当确定我的 Docker 安装没问题,而且我没有使用 Docker Compose。老实说,我所做的只是删除一个插件(不再需要的 discourse-checklist 插件),然后在自行托管的、最新的、运行了多年且一直正常的实例上进行重建。
不幸的是,我的本职工作让我过去 24 小时无法处理这个问题。我今晚应该会重新开始处理。我会看看是否能提供更多信息。
1 个赞
csgeek
2023 年8 月 24 日 18:21
34
我在 EC2(Ubuntu 22.04.3 LTS)上全新安装时遇到了同样的问题。
我之前有过设置 Discourse 的经验(大约 2-3 次)。
起初,我以为是构建问题,并多次运行 ./launcher rebuild app,因此耗尽了 Let’s Encrypt 提供的 SSL 证书每周限制,这就是为什么网站会显示“无法访问网站”错误。
后来,我尝试了 ./launcher logs app。它显示了以下错误:
目录 pid=/var/www/discourse/tmp/pids/unicorn.pid 不可写 (ArgumentError)。
“detail”:“创建新订单时出错 :: 过去 168 小时内为此确切的域名集已颁发了过多的证书 (5)” - [Let's Encrypt 速率限制问题](https://community.letsencrypt.org/t/there-were-too-many-requests-of-a-given-type-error-creating-new-order-too-many-certificates-5-already-issued-for-this-exact-set-of-domains-in-the-last-168-hours/176622)。
我与官方指南 唯一不同的地方是 Docker 的安装。
我使用 sudo apt install docker.io 安装了 Docker。我将其完全卸载,然后让 Docker 通过 ./discourse-setup 进行安装。
然后就好了!!
正如 @pfaffman 所说,这是 Docker 安装的问题。
PS:由于我必须优先设置 Discourse 服务器,因此在第二次安装时我使用了新的子域名。
rtwfroody
(Tim Newsome)
2023 年8 月 24 日 19:57
35
正如 @pfaffman 和 @csgeek 所说,以下方法对我有用:
apt remove docker.io,移除 docker.io (20.10.25-0ubuntu1~22.04.1)
运行 ./discourse-setup 直到它安装了 docker,然后退出。
systemctl start docker
./launcher rebuild app
这适用于运行 Ubuntu 22.04.3 LTS 的系统。
1 个赞
pfaffman
(Jay Pfaffman)
2023 年8 月 24 日 20:50
36
嘿 @jeanas 。这看起来是值得尝试的方法。你能这样做吗:
如果这对你有用,请将他的帖子标记为解决方案?
StanD
(Stan Dyck)
2023 年8 月 26 日 17:36
37
[注意:我的情况并非真正的#installation问题,但产生的错误与此主题中的相同,我的修复(如下)可能对其他人有帮助。版主(@pfaffman ?),请随意更恰当地分类此内容。]
在我运行 ./launcher rebuild app 命令后,在我的自托管 Docker 实例(已安装并运行多年)上出现了 ArgumentError 消息。这是因为 unicorn 无法在容器内的 /var/www/discourse/tmp/pids 目录中写入 pid 文件。日志显示每隔几秒就会尝试写入该文件,并出现一连串的 ArgumentError 消息。
我通过以下命令从主机登录到容器:
docker exec -it app bash
在容器内,我运行:
find /var/www/discourse -printf '%u:%g\n' | sort -t: -u
这会显示该目录中所有者:组的列表:
root:root
discourse:discourse
然后我将 /var/www/discourse/tmp/pids 目录设置为全局可读:
chmod +r /var/www/discourse/tmp/pids
此时,一个 unicorn.pid 文件会被写入该目录。该文件的所有者:组为 discourse:www-data。
我的修复方法是递归地将 /var/www/discourse 的所有权更改为 discourse:www-data。
chown -R discourse:www-data /var/www/discourse
由于有超过 100,000 个文件,这需要很长时间。可能不需要更改整个目录,但我还是这样做了。
最后,我将 /etc/postgres/13/main/pb_hba.conf 文件设置为全局可读:
chmod +r /etc/postgres/13/main/pg_hba.conf
重新启动容器,一切正常。
似乎文件所有权的设置不太正确,但我对权限设置的了解不够深入,无法找出更简单的修复方法。unicorn.pid 文件的组是 www-data 这一点似乎是关键。
看起来我每次执行 rebuild(即每次更改 app.yml 文件)时都需要执行此过程。另外请注意,这似乎 不是由特定插件引起的问题。
希望这些信息足够让开发人员查看并说:“当然!我只需要更改 x 就可以修复它。”
1 个赞
pfaffman
(Jay Pfaffman)
2023 年8 月 26 日 17:44
38
也许您的问题与其他人不同。您正在运行哪个版本的 Docker,以及您是如何安装它的?
我同意,您长期以来一直可以正常工作的 Docker 出现问题是没有道理的。
StanD
(Stan Dyck)
2023 年8 月 26 日 17:51
39
在我的服务器上运行 docker --version 返回
Docker version 20.10.25, build 20.10.25-0ubuntu1~22.04.1
看起来我可能没有更新?
2 个赞
csgeek
2023 年8 月 28 日 06:49
40
这个版本的 Docker 对我有用 @StanD 。
Docker version 24.0.5, build ced0996。
你可以试试这个。
1 个赞
jeanas
(Jean Abou Samra)
2023 年9 月 4 日 18:38
41
太棒了!这对我来说奏效了。
根据我的经验和 @Stand 的经验,似乎 Discourse 不再适用于旧版 Docker。
1 个赞