** 引导失败 **

我尝试安装 Discourse,但遇到了“启动失败(FAILED TO BOOTSTRAP)”错误。
以下是日志:

按 Enter 继续,按 'n' 重试,按 Ctrl+C 退出:
启用 Let's Encrypt
web.ssl.template.yml 已启用
letsencrypt.ssl.template.yml 已启用

配置文件已更新成功!

更新成功。将在 5 秒后重新构建。
正在构建应用
确保启动器为最新版本
正在获取 origin
启动器已是最新版本
cd /pups && git pull && /pups/bin/pups --stdin
已是最新版本。
I, [2020-07-24T18:55:58.464935 #1]  INFO -- : 正在加载 --stdin
I, [2020-07-24T18:55:58.473367 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-24T18:55:58.506619 #1]  INFO -- : 正在生成区域设置(这可能需要一些时间)...
生成完成。

I, [2020-07-24T18:55:58.506995 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-24T18:55:58.509890 #1]  INFO -- :
I, [2020-07-24T18:55:58.510432 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-24T18:55:58.512373 #1]  INFO -- :
I, [2020-07-24T18:55:58.512886 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-24T18:55:58.515262 #1]  INFO -- :
I, [2020-07-24T18:55:58.515771 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-24T18:55:58.517798 #1]  INFO -- :
I, [2020-07-24T18:55:58.518308 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-24T18:55:58.520717 #1]  INFO -- :
I, [2020-07-24T18:55:58.521218 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres 已在运行,停止容器 ; exit 1
2020/07/24 18:55:58 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): 没有那个文件或目录
I, [2020-07-24T18:55:58.532831 #1]  INFO -- :
I, [2020-07-24T18:55:58.533118 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-24T18:55:58.535580 #1]  INFO -- :
I, [2020-07-24T18:55:58.535885 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-24T18:55:58.538318 #1]  INFO -- :
I, [2020-07-24T18:55:58.538610 #1]  INFO -- : > mkdir -p /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-07-24T18:55:58.540691 #1]  INFO -- :
I, [2020-07-24T18:55:58.541137 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-07-24T18:55:58.542920 #1]  INFO -- :
I, [2020-07-24T18:55:58.547145 #1]  INFO -- : 文件 > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-07-24T18:55:58.551140 #1]  INFO -- : 文件 > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-07-24T18:55:58.555034 #1]  INFO -- : 文件 > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-07-24T18:55:58.558937 #1]  INFO -- : 文件 > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-07-24T18:55:58.559391 #1]  INFO -- : > chown -R root /var/lib/postgresql/12/main
I, [2020-07-24T18:56:05.381806 #1]  INFO -- :
I, [2020-07-24T18:56:05.382562 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/12/bin/initdb -D /shared/postgres_data || exit 0
I, [2020-07-24T18:56:05.385503 #1]  INFO -- :
I, [2020-07-24T18:56:05.385920 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2020-07-24T18:56:05.394083 #1]  INFO -- :
I, [2020-07-24T18:56:05.394491 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2020-07-24T18:56:05.396516 #1]  INFO -- :
I, [2020-07-24T18:56:05.396943 #1]  INFO -- : > /root/upgrade_postgres
I, [2020-07-24T18:56:05.403490 #1]  INFO -- :
I, [2020-07-24T18:56:05.403830 #1]  INFO -- : > rm /root/upgrade_postgres
I, [2020-07-24T18:56:05.405807 #1]  INFO -- :
I, [2020-07-24T18:56:05.406414 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 data_directory = '/var/lib/postgresql/12/main' 替换为 data_directory = '/shared/postgres_data'
I, [2020-07-24T18:56:05.407666 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?listen_addresses *=.*) 替换为 listen_addresses = '*'
I, [2020-07-24T18:56:05.408137 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?synchronous_commit *=.*) 替换为 synchronous_commit = $db_synchronous_commit
I, [2020-07-24T18:56:05.408917 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?shared_buffers *=.*) 替换为 shared_buffers = $db_shared_buffers
I, [2020-07-24T18:56:05.409490 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?work_mem *=.*) 替换为 work_mem = $db_work_mem
I, [2020-07-24T18:56:05.410066 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?default_text_search_config *=.*) 替换为 default_text_search_config = '$db_default_text_search_config'
I, [2020-07-24T18:56:05.410701 #1]  INFO -- : > install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
I, [2020-07-24T18:56:05.414314 #1]  INFO -- :
I, [2020-07-24T18:56:05.414961 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?checkpoint_segments *=.*) 替换为 checkpoint_segments = $db_checkpoint_segments
I, [2020-07-24T18:56:05.415521 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?logging_collector *=.*) 替换为 logging_collector = $db_logging_collector
I, [2020-07-24T18:56:05.416016 #1]  INFO -- : 在 /etc/postgresql/12/main/postgresql.conf 中将 (?-mix:#?log_min_duration_statement *=.*) 替换为 log_min_duration_statement = $db_log_min_duration_statement
I, [2020-07-24T18:56:05.416731 #1]  INFO -- : 在 /etc/postgresql/12/main/pg_hba.conf 中将 (?-mix:^#local +replication +postgres +peer$) 替换为 local replication postgres  peer
I, [2020-07-24T18:56:05.417184 #1]  INFO -- : 在 /etc/postgresql/12/main/pg_hba.conf 中将 (?-mix:^host.*all.*all.*127.*$) 替换为 host all all 0.0.0.0/0 md5
I, [2020-07-24T18:56:05.417700 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/12/bin/postmaster -D /etc/postgresql/12/main
I, [2020-07-24T18:56:05.418973 #1]  INFO -- : > sleep 5
2020-07-24 18:56:05.434 GMT [49] LOG:  0 8kB 超出了参数 "shared_buffers" 的有效范围 (16 .. 1073741823)
2020-07-24 18:56:05.435 UTC [49] FATAL: 配置文件 "/etc/postgresql/12/main/postgresql.conf" 包含错误
I, [2020-07-24T18:56:10.424189 #1]  INFO -- :
I, [2020-07-24T18:56:10.424518 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
createdb: 错误:无法连接到数据库 template1:无法连接到服务器:没有那个文件或目录
        服务器是否在本地运行并正在接受
        Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2020-07-24T18:56:10.470398 #1]  INFO -- :
I, [2020-07-24T18:56:10.470767 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
psql: 错误:无法连接到服务器:无法连接到服务器:没有那个文件或目录
        服务器是否在本地运行并正在接受
        Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2020-07-24T18:56:10.520451 #1]  INFO -- :
I, [2020-07-24T18:56:10.520909 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
psql: 错误:无法连接到服务器:无法连接到服务器:没有那个文件或目录
        服务器是否在本地运行并正在接受
        Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2020-07-24T18:56:10.569147 #1]  INFO -- :
I, [2020-07-24T18:56:10.569513 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
psql: 错误:无法连接到服务器:无法连接到服务器:没有那个文件或目录
        服务器是否在本地运行并正在接受
        Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2020-07-24T18:56:10.624778 #1]  INFO -- :
I, [2020-07-24T18:56:10.625306 #1]  INFO -- : 正在终止异步进程


失败
--------------------
Pups::ExecError: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' 执行失败,返回状态 #<Process::Status: pid 75 exit 2>
失败位置:/pups/lib/pups/exec_command.rb:112:in `spawn'
执行失败,参数为 "su postgres -c 'psql $db_name -c \"alter schema public owner to $db_user;\"'"
88ef1f69c68375f34f7ed80b11cbe2b1fac59a79a226118cb3205f0dc0ea5276
** 启动失败 ** 请向上滚动日志,查找更早的错误消息,可能不止一条。
./discourse-doctor 可能有助于诊断问题。

看起来主要错误是无法连接到服务器,但我不太理解其中的原因……
su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' psql: 错误:无法连接到服务器:无法连接到服务器:没有那个文件或目录 服务器是否在本地运行并正在接受 Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?

有人能帮忙吗?
谢谢

这台服务器有多少内存?

1 GB。{text text text}

嗯,这确实很奇怪。

我们在这里计算 db_shared_buffers 的大小:

我不明白按照这个逻辑怎么会得出只有 8kB 的结果。

你能检查一下你的 app.yml 文件中的值吗?

没问题,app.yml 文件在哪里,或者我应该执行什么命令(如 cat)来查看它?

/var/discourse/containers/app.yml

我发现 nano 更易用。

谢谢。

@Falco, @IAmGav,这是 app.yml 的内容:

## 这是 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"
  - "templates/web.ratelimited.template.yml"
## 如果您想添加 Lets Encrypt (https),请取消注释以下两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与另一个 Web 服务器(如 Apache 或 nginx)共享端口,
## 请参阅 https://meta.discourse.org/t/17247 了解详情
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## 将 db_shared_buffers 设置为总内存的最大 25%。
  ## 将根据检测到的 RAM 由 bootstrap 自动设置,或者您可以覆盖
  db_shared_buffers: "0MB"

  ## 可以提高排序性能,但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个 Git 版本?(默认:tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## 支持多少并发 Web 请求?取决于内存和 CPU 核心数。
  ## 将根据检测到的 CPU 由 bootstrap 自动设置,或者您可以覆盖
  UNICORN_WORKERS: 0

  ## TODO: 此 Discourse 实例将响应的域名
  ## 必需项。Discourse 无法在裸 IP 地址上运行。
  DISCOURSE_HOSTNAME: community.kodularlessons.net

  ## 如果您希望容器以与上面指定的相同的主机名(-h 选项)启动,请取消注释
  ## (默认值为 "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初始注册时将设为管理员和开发者的逗号分隔电子邮件列表
  ## 示例:'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: '******s@gmail.com'

  ## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
  # SMTP 地址、用户名和密码是必需的
  # 警告:SMTP 密码中的字符 '#' 可能会导致问题!
  DISCOURSE_SMTP_ADDRESS: mboxhosting.com
  DISCOURSE_SMTP_PORT: 993
  DISCOURSE_SMTP_USER_NAME: no-reply@kodularlessons.net
  DISCOURSE_SMTP_PASSWORD: "*****************"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

  ## 如果您添加了 Lets 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

## 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 "结束自定义命令"

注意:我已手动屏蔽了私人信息。

这不应该是零

请将其更改为

db_shared_buffers: “128MB”

谢谢,稍等,我马上改。

1 个赞

我的帖子因为被垃圾邮件过滤器拦截而消失了,不管怎样,我会把新的日志粘贴到 Pastebin 上。

在修改 yml 文件后,请运行以下命令:

./launcher rebuild app

谢谢,它也返回了启动失败的错误,请查看日志:

它在 shared_buffers 和 PostgreSQL 方面遇到了一些问题。

该实例上还在运行其他什么服务?

虚拟机上没有其他程序在运行(我想是这样)……
我是从 Azure 购买的。