[付费] 在 Ubuntu 服务器上将 Discourse 安装到子目录

我们拥有 这个 网站。我们需要在 Ubuntu 上设置一个子文件夹形式的 Discourse Docker 论坛。我们希望在不使用 CDN 的情况下,通过 TalkWithStranger Ask - Ask and chat random strangers and meet new people in online free chat rooms. 提供 Discourse 服务。

我曾尝试按照 这个教程 进行设置,但遇到了以下问题:

  1. 头像在重建 2 或 3 次后消失。
  2. 在主题中上传的图片在几次重建后返回 404 错误。

您需要在 这个测试域名 上修复这些 bug,以便我可以在我的 live 网站上安装并修复同样的问题。95% 的工作已完成,您只需修复一些 bug。

我的 app.yml

##   使用 Docker 支持子文件夹   https://meta.discourse.org/t/subfolder-support-with-docker/30507

## discourse-terraform Docker 配置模板

##

## 修改此文件后,您必须重建容器,才能使更改在您的实时 Discourse 实例中生效:

##

## /var/discourse/launcher rebuild app

##

## 这是独立的一体化 Discourse Docker 容器模板

# 您可以通过注释掉 ratelimited 模板来添加速率限制。

# 默认情况下,它允许每个 IP 每秒 12 个请求,每分钟 100 个请求。

# 您可以通过修改此文件中的参数进行配置。

templates:

  - "templates/postgres.template.yml"

  - "templates/redis.template.yml"

  - "templates/web.template.yml"

  - "templates/sshd.template.yml"

## 此容器应暴露哪些 TCP/IP 端口?

expose:

  - "1357:80" # 将此端口更改为您希望运行 Discourse 的端口 # 将主机端口 80 转发到容器端口 80 (http)

  #- "2222:22" # 将主机端口 2222 转发到容器端口 22 (ssh)

params:

  db_default_text_search_config: "pg_catalog.english"

  ## 将 db_shared_buffers 设置为分配给 postgres 的内存的 1/3

  ## 在 1GB 安装中设置为 128MB,在 4GB 实例上可提升至 1GB

  db_shared_buffers: "512MB"

  #

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

  #version: tests-passed

env:

  LANG: en_US.UTF-8

  ## TODO:支持多少个并发 Web 请求?

  ## 对于 2GB 内存,我们建议 3-4 个工作进程;对于 1GB 内存,仅建议 2 个

  UNICORN_WORKERS: 3

  ##

  ## TODO:逗号分隔的电子邮件列表,这些用户将在初始注册时成为管理员和开发者

  ## 示例:'user1@example.com, user2@example.com'

  DISCOURSE_DEVELOPER_EMAILS: "ahmeds.works@gmail.com" # 将这些电子邮件更改为站点管理员的电子邮件

  ##

  ## TODO:此 Discourse 实例将响应的域名

  DISCOURSE_RELATIVE_URL_ROOT: /ask 

  DISCOURSE_HOSTNAME: "privitevps.ga" # 将此域名更改为您的网站域名

  ##

  ## TODO:此 Discourse 实例将使用的邮件服务器

  # 将 SMTP 设置更改为您自己的 SMTP 设置

  DISCOURSE_SMTP_ADDRESS: smtp.example.com

  DISCOURSE_SMTP_PORT: 587

  DISCOURSE_SMTP_USER_NAME: example@example.com

  DISCOURSE_SMTP_PASSWORD: example_password

##

  ## 此 Discourse 实例的 CDN 地址(配置为拉取)

  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## 这些容器是无状态的,所有数据都存储在 /shared 中

volumes:

  - volume:

      host: /var/discourse/shared/standalone

      guest: /shared

  - volume:

      host: /var/discourse/shared/standalone/log/var-log

      guest: /var/log

## Docker Manager 插件允许您一键升级 Discourse

## http://discourse.example.com/admin/docker

hooks:

  after_code:

    - exec:

        cd: $home/plugins

        cmd:

          - mkdir -p plugins

          - git clone https://github.com/discourse/docker_manager.git

          - git clone https://github.com/discourse/discourse-voting.git

## 记住,这是 YAML 语法 —— 您只能有一个带名称的块

run:

    - exec:

        cd: $home

        cmd:

          - rm -fr public/assets

          - sudo -E -u discourse bundle exec rake assets:precompile

          - mkdir -p public/ask

          - cd public/ask && ln -s ../uploads && ln -s ../backups

          - rm public/uploads

          - rm public/backups

    - replace:

       global: true

       filename: /etc/nginx/conf.d/discourse.conf

       from: proxy_pass http://discourse;

       to: |

          rewrite ^/(.*)$ /ask/$1 break;

          proxy_pass http://discourse;

    - replace:

       filename: /etc/nginx/conf.d/discourse.conf

       from: etag off;

       to: |

          etag off;

          location /ask {

             rewrite ^/ask/?(.*)$ /$1;

          }

    - replace:

         filename: /etc/nginx/conf.d/discourse.conf

         from: $proxy_add_x_forwarded_for

         to: $http_fastly_client_ip

         global: true

    - exec: echo "自定义命令结束"

    - exec: awk -F\# '{print $1;}' ~/.ssh/authorized_keys | awk 'BEGIN { print "此容器的授权 SSH 密钥:"; } NF\u003e=2 {print $NF;}'

nginx 配置

location /ask {
    proxy_pass      http://localhost:1357;
    proxy_read_timeout      90;
    proxy_redirect  http://localhost:1357 https://privitevps.ga;
}

Discourse 错误日志

    /var/www/discourse/app/models/report.rb:267:in `rescue in find'

    /var/www/discourse/app/models/report.rb:234:in `find'

    /var/www/discourse/app/controllers/admin/reports_controller.rb:42:in `block (2 levels) in bulk'

    actionpack-6.0.3.5/lib/action_controller/metal/strong_parameters.rb:345:in `block in each_pair'

    actionpack-6.0.3.5/lib/action_controller/metal/strong_parameters.rb:344:in `each_pair'

    actionpack-6.0.3.5/lib/action_controller/metal/strong_parameters.rb:344:in `each_pair'

    /var/www/discourse/app/controllers/admin/reports_controller.rb:31:in `block in bulk'

    /var/www/discourse/lib/hijack.rb:56:in `instance_eval'

    /var/www/discourse/lib/hijack.rb:56:in `block in hijack'

    /var/www/discourse/lib/scheduler/defer.rb:94:in `block in do_work'

    rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'

    /var/www/discourse/lib/scheduler/defer.rb:89:in `do_work'

    /var/www/discourse/lib/scheduler/defer.rb:79:in `block (2 levels) in start_thread'

PostgreSQL 日志

2021-04-01 18:33:04.209 UTC [51] LOG:  启动 PostgreSQL 13.2 (Debian 13.2-1.pgdg100+1),编译于 x86_64-pc-linux-gnu,使用 gcc (Debian 8.3.0-6) 8.3.0,64 位
2021-04-01 18:33:04.210 UTC [51] LOG:  监听 IPv4 地址 "0.0.0.0",端口 5432
2021-04-01 18:33:04.211 UTC [51] LOG:  监听 IPv6 地址 "::",端口 5432
2021-04-01 18:33:04.211 UTC [51] LOG:  监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-04-01 18:33:04.223 UTC [73] LOG:  数据库系统在 2021-04-01 18:32:19 UTC 关闭
2021-04-01 18:33:04.230 UTC [51] LOG:  数据库系统已准备好接受连接
2021-04-01 18:44:16.543 UTC [1155] discourse@discourse LOG:  提供的用户名 (discourse) 与认证用户名 (root) 不匹配
2021-04-01 18:44:16.544 UTC [1155] discourse@discourse FATAL:  用户 "discourse" 的 Peer 认证失败
2021-04-01 18:44:16.544 UTC [1155] discourse@discourse DETAIL:  连接匹配 pg_hba.conf 第 94 行:"local   all             all                                     peer"
2021-04-02 03:33:33.893 UTC [36640] discourse@discourse LOG:  持续时间:141.998 毫秒  语句:COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2021-04-02 17:49:50.676 UTC [92100] discourse@discourse LOG:  持续时间:156.461 毫秒  语句:DO $$DECLARE row record;
        BEGIN
          -- 如果尚不存在,则创建 <目标> 架构
          -- 注意:DROP & CREATE SCHEMA 更容易,但我们不想删除 public 架构
          -- 否则扩展(如 hstore & pg_trgm)将无法再工作...
          CREATE SCHEMA IF NOT EXISTS backup;
          -- 将所有 <源> 表移动到 <目标> 架构
          FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'public'  AND tableowner = 'discourse'
          LOOP
            EXECUTE 'DROP TABLE IF EXISTS backup.' || quote_ident(row.tablename) || ' CASCADE;';
            EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || ' SET SCHEMA backup;';
          END LOOP;
          -- 将所有 <源> 视图移动到 <目标> 架构
          FOR row IN SELECT viewname FROM pg_views WHERE schemaname = 'public' AND viewowner = 'discourse'
          LOOP
            EXECUTE 'DROP VIEW IF EXISTS backup.' || quote_ident(row.viewname) || ' CASCADE;';
            EXECUTE 'ALTER VIEW public.' || quote_ident(row.viewname) || ' SET SCHEMA backup;';
          END LOOP;
        END$$;

2021-04-02 17:49:52.092 UTC [92128] discourse@discourse LOG:  持续时间:114.918 毫秒  语句:COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) FROM stdin;
2021-04-02 17:49:53.398 UTC [92128] discourse@discourse LOG:  持续时间:1266.208 毫秒  语句:COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) FROM stdin;
2021-04-02 17:51:24.451 UTC [51] LOG:  收到智能关闭请求
2021-04-02 17:51:26.828 UTC [51] LOG:  后台工作进程 "logical replication launcher" (PID 79) 以退出代码 1 退出
2021-04-02 17:51:26.836 UTC [74] LOG:  正在关闭
2021-04-02 17:51:26.948 UTC [51] LOG:  数据库系统已关闭
2021-04-02 18:00:56.877 UTC [52] LOG:  启动 PostgreSQL 13.2 (Debian 13.2-1.pgdg100+1),编译于 x86_64-pc-linux-gnu,使用 gcc (Debian 8.3.0-6) 8.3.0,64 位
2021-04-02 18:00:56.879 UTC [52] LOG:  监听 IPv4 地址 "0.0.0.0",端口 5432
2021-04-02 18:00:56.879 UTC [52] LOG:  监听 IPv6 地址 "::",端口 5432
2021-04-02 18:00:56.880 UTC [52] LOG:  监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-04-02 18:00:56.893 UTC [73] LOG:  数据库系统在 2021-04-02 18:00:11 UTC 关闭
2021-04-02 18:00:56.909 UTC [52] LOG:  数据库系统已准备好接受连接
2021-04-02 18:03:23.275 UTC [343] discourse@discourse LOG:  持续时间:172.267 毫秒  语句:UPDATE "stylesheet_cache"
           SET "content" = REPLACE("content", '/uploads', '/../uploads'), "digest" = REPLACE("digest", '/uploads', '/../uploads'), "source_map" = REPLACE("source_map", '/uploads', '/../uploads'), "target" = REPLACE("target", '/uploads', '/../uploads')
         WHERE "content" IS NOT NULL AND "content" LIKE '%/uploads%' OR "digest" IS NOT NULL AND "digest" LIKE '%/uploads%' OR "source_map" IS NOT NULL AND "source_map" LIKE '%/uploads%' OR "target" IS NOT NULL AND "target" LIKE '%/uploads%'

2021-04-02 18:03:55.952 UTC [52] LOG:  收到智能关闭请求
2021-04-02 18:03:57.185 UTC [52] LOG:  后台工作进程 "logical replication launcher" (PID 79) 以退出代码 1 退出
2021-04-02 18:03:57.189 UTC [74] LOG:  正在关闭
2021-04-02 18:03:57.308 UTC [52] LOG:  数据库系统已关闭
2021-04-02 18:04:00.354 UTC [47] LOG:  启动 PostgreSQL 13.2 (Debian 13.2-1.pgdg100+1),编译于 x86_64-pc-linux-gnu,使用 gcc (Debian 8.3.0-6) 8.3.0,64 位
2021-04-02 18:04:00.355 UTC [47] LOG:  监听 IPv4 地址 "0.0.0.0",端口 5432
2021-04-02 18:04:00.356 UTC [47] LOG:  监听 IPv6 地址 "::",端口 5432
2021-04-02 18:04:00.359 UTC [47] LOG:  监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-04-02 18:04:00.375 UTC [66] LOG:  数据库系统在 2021-04-02 18:03:57 UTC 关闭
2021-04-02 18:04:00.380 UTC [47] LOG:  数据库系统已准备好接受连接
2021-04-02 18:13:27.137 UTC [47] LOG:  收到智能关闭请求
2021-04-02 18:13:27.980 UTC [47] LOG:  后台工作进程 "logical replication launcher" (PID 72) 以退出代码 1 退出
2021-04-02 18:13:27.982 UTC [67] LOG:  正在关闭
2021-04-02 18:13:28.009 UTC [47] LOG:  数据库系统已关闭
2021-04-02 18:13:31.497 UTC [45] LOG:  启动 PostgreSQL 13.2 (Debian 13.2-1.pgdg100+1),编译于 x86_64-pc-linux-gnu,使用 gcc (Debian 8.3.0-6) 8.3.0,64 位
2021-04-02 18:13:31.499 UTC [45] LOG:  监听 IPv4 地址 "0.0.0.0",端口 5432
2021-04-02 18:13:31.499 UTC [45] LOG:  监听 IPv6 地址 "::",端口 5432
2021-04-02 18:13:31.500 UTC [45] LOG:  监听 Unix 套接字 "/var/run/postgresql/.s.PGSQL.5432"
2021-04-02 18:13:31.515 UTC [67] LOG:  数据库系统在 2021-04-02 18:13:27 UTC 关闭
2021-04-02 18:13:31.520 UTC [45] LOG:  数据库系统已准备好接受连接

Nginx 错误日志

2021/04/02 18:01:06 [error] 69#69: *1 connect() 失败 (111: Connection refused) 在连接到上游时,客户端:172.17.0.1,服务器:_,请求:"GET /ask/ HTTP/1.0",上游:"http://127.0.0.1:3000/ask/",主机:"localhost:1357"
2021/04/02 18:13:38 [error] 64#64: *1 connect() 失败 (111: Connection refused) 在连接到上游时,客户端:172.17.0.1,服务器:_,请求:"POST /ask/message-bus/c734a550b6e54923aff3e0c6fdf1b014/poll HTTP/1.0",上游:"http://127.0.0.1:3000/ask/message-bus/c734a550b6e54923aff3e0c6fdf1b014/poll",主机:"localhost:1357",引用:"https://privitevps.ga/ask/latest"

您何时需要完成?

越快越好

您能为此任务提供的预算是多少(美元)?

欢迎提出建议。请通过私信联系我,说明您的方法和估算。**

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.