Discourse 本地服务器设置:PostgreSQL 和设置脚本问题

您好,Discourse 社区,

我对 Docker 和 Linux 系统管理任务总体来说是个新手。我正试图说服我的公司使用 Discourse,他们要求我先做一个演示。所以我在这里尝试在我们的服务器上搭建它。
我一直在尝试在本地服务器上设置 Discourse,并遇到了一些问题,希望得到帮助。以下是我的设置摘要以及我到目前为止所采取的步骤:

系统设置:

  • 操作系统:Ubuntu 20.04.6 LTS
  • Docker 版本:24.0.5,构建版本 24.0.5-0ubuntu1~20.04.1
  • Discourse 版本:3.2

问题:
我遵循了在云服务器上安装 Discourse 的官方指南 (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub),但在 discourse-setup 脚本中遇到了与 PostgreSQL 相关的问题。

已采取的步骤:

  1. 我通过检查进程列表确认 PostgreSQL 正在运行。
  2. 我验证了 PostgreSQL 是否在正确的端口 (5432) 上监听,并且 Unix 套接字文件是否存在。
  3. 我遇到了错误,提示“discourse”数据库和用户已存在,但当我使用 psql 命令检查时,数据库和用户都不在列表中。

这是我使用的命令:

  • 检查 PostgreSQL 进程:ps aux | grep postgres
  • 检查 PostgreSQL 监听端口:sudo netstat -plunt | grep postgres
  • 检查 Unix 套接字文件:ls -l /var/run/postgresql/.s.PGSQL.5432
  • 尝试删除“discourse”数据库和用户:su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"'su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • 列出数据库和用户:psql -c \"\\l\"psql -c \"\\du\"

遇到的错误:

  • ERROR: database "discourse" already exists
  • ERROR: role "discourse" already exists
  • psql: error: FATAL: role "root" does not exist

尽管有这些错误,但在直接在 PostgreSQL 中检查时,“discourse”数据库和用户似乎并不存在。
日志中还有其他错误,但我认为这些至少是目前最相关的。

我将非常感谢任何关于如何解决这些问题的指导或建议。是否有人遇到过类似的问题,或者有人能洞察可能出了什么问题?

提前感谢您的帮助,
Andrea

您无需安装 postgres。在标准的安装中,Discourse 在容器内有自己的 postgres。我建议您卸载或删除 postgres。您是否有理由使用预先存在的 postgres?这台机器上是否还在运行其他东西?

我认为那些不是错误,只是调试消息。

脚本的末尾说了什么?

你好 @pfaffman
感谢你的回复。

不,这台机器是专用于 discord 的,我在注意到这些错误后才安装了 postgre。

我希望我能附上日志,但我仍然无法做到。

这是最后一部分:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
' failed with return #<Process::Status: pid 146 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git reset --hard", "sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == \"true\" \n]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin $version\n      git fetch --depth 1 origin $version\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n'", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete]"}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

我现在将尝试卸载 postgre。

谢谢,
Andrea

你内存不足。你需要添加交换空间和/或更多的 RAM。

free -h

显示什么?

1 个赞

我还有大约 7GB 可用空间

              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       319Mi       599Mi        13Mi       6.9Gi       7.1Gi
Swap:         975Mi       2.0Mi       973Mi

指南建议约 2GB。

默认的 1 GB RAM 对小型 Discourse 社区来说运行良好。我们推荐大型社区使用 2 GB RAM。

我是否遗漏了什么?

嗯。这很奇怪。最近有人报告了一些关于内存需求的奇怪问题。您可以再试几次。有报告称它有时会失败。

编辑:抱歉。127 是内存。128 是未知。

您是从头开始进行标准安装,运行 discourse-setup?(您在 OP 中是这么说的)

您是否在某种防火墙后面,该防火墙可能会阻止服务器访问 GitHub 和其他存储库?

是的,没错,我正在遵循 GitHub 指南。
如果问题不是 PostgreSQL 而是最后一条消息,那么日志中失败的点在这里:

  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
fatal: 无法访问 'https://github.com/discourse/discourse.git/':服务器证书验证失败。CAfile: none CRLfile:
none

看起来我无法正确连接到 GitHub,尽管我能够从该机器克隆仓库。

这是一个 Docker 网络问题。您是如何安装 Docker 的?考虑卸载并尝试其他方法。

您的操作系统或网络上是否启用了防火墙?也可能是 DNS 问题。正如他们所说,问题总是出在 DNS 上。

我知道我们目前没有防火墙,但有关 Docker 安装的详细信息我需要与 IT 部门沟通。
您知道我们可能会遇到哪些 DNS 问题吗?有什么日志部分或调试消息可以提供帮助(我仍然无法附加文件)?

@pfaffman 发现我的 shell 历史记录中也有这些详细信息。

   63  sudo apt install docker.io
   64  sudo apt remove containerd runc
   65  sudo apt remove containerd
   66  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   67  echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
   68  sudo apt update
   69  sudo apt install docker-ce
   70  sudo apt upgrade
   71  sudo apt install docker.io

我认为您不能同时安装 docker-cedocker.io。也许可以删除这两个,然后只安装其中一个。

我通常使用 https://get.docker.com/。我会这样做:获取一个新虚拟机,然后只使用它。