我已成功安装站点1并运行了一个多月。今天我按照这里的说明操作:https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247,我编辑了第一个 Discourse 的配置文件,在宿主机上安装了外部的 nginx,并重新构建了第一个 Discourse。
站点1的 app.yml
root@docker-s-1vcpu-2gb-sgp1-01:~# cat /var/bbs-antivte-discourse/containers/app.yml
## 这是一个独立运行的 Discourse Docker 容器模板(all-in-one)
##
## 修改此文件后,您必须重新构建
## /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"
- "templates/web.ratelimited.template.yml"
- "templates/web.socketed.template.yml" # <-- 已添加
## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
## 请参阅 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: "256MB"
## 可提升排序性能,但会增加每个连接的内存占用
#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: 4
## TODO: 此 Discourse 实例将响应的域名
## 必填。Discourse 无法仅通过 IP 地址运行。
DISCOURSE_HOSTNAME: bbs.antivte.com
## 如果希望容器以与上述相同的 hostname(-h 选项)启动,请取消注释
## (默认为 "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: 初始注册时自动设为管理员和开发者的邮箱列表,以逗号分隔
## 示例:'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'techempower@163.com'
## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
# 需要 SMTP 地址、用户名和密码
# 警告:SMTP 密码中的字符 '#' 可能引发问题!
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@mail.antivte.com
DISCOURSE_SMTP_PASSWORD: "67c9458eb7a6ff11b4db70f097b1b5c3-f7910792"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认为 true)
## 如果添加了 Lets Encrypt 模板,请取消下方注释以获取免费 SSL 证书
LETSENCRYPT_ACCOUNT_EMAIL: techempower@163.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/bbs-antivte-discourse/shared/standalone
guest: /shared
- volume:
host: /var/bbs-antivte-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
- git clone https://github.com/discourse/discourse-knowledge-explorer
- git clone https://github.com/discourse/discourse-spoiler-alert.git
- git clone https://github.com/procourse/procourse-static-pages
## 构建后需要运行的任何自定义命令
run:
- exec: echo "开始执行自定义命令"
## 如果希望设置首次注册时的 'From' 邮箱地址,请取消注释并修改:
## 收到首次注册邮件后,请重新注释该行。该命令只需运行一次。
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "自定义命令执行完毕"
接着进行第二个站点的安装,我将源代码克隆到另一个目录,复制第一个编辑好的 app.yml,仅修改其中的域名和克隆目录名称以适配第二个站点,然后运行 https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md
./discourse-setup
我对以下提示信息感到困惑,并且我为两个站点配置了两个不同的 nginx 配置。
站点1的 nginx 配置
root@docker-s-1vcpu-2gb-sgp1-01:~# cat /var/website/conf/conf.d/ytb.antivte.com
server {
listen 80; listen [::]:80;
server_name ytb.antivte.com; # <-- 请修改此处
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name ytb.antivte.com; # <-- 请修改此处
# ssl on;
ssl_certificate /var/ytb-antivte-discourse/shared/standalone/ssl/ssl.crt;
ssl_certificate_key /var/ytb-antivte-discourse/shared/standalone/ssl/ssl.key;
ssl_dhparam /var/ytb-antivte-discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # 从默认的 3m 提升至 5m
location / {
proxy_pass http://unix:/var/ytb-antivte-discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
站点2的 nginx 配置
server {
listen 80; listen [::]:80;
server_name bbs.antivte.com; # <-- 请修改此处
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name bbs.antivte.com; # <-- 请修改此处
# ssl on;
ssl_certificate /var/bbs-antivte-discourse/shared/standalone/ssl/bbs.antivte.com.cer;
ssl_certificate_key /var/bbs-antivte-discourse/shared/standalone/ssl/bbs.antivte.com.key;
ssl_dhparam /var/bbs-antivte-discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # 从默认的 3m 提升至 5m
location / {
proxy_pass http://unix:/var/bbs-antivte-discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
以及
/var/ytb-antivte-discourse/discourse-setup
端口 80 似乎已被占用。
这将显示正在使用端口 80 的命令
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 4255 root 6u IPv4 22842780 0t0 TCP *:http (LISTEN)
nginx 4255 root 7u IPv6 22842781 0t0 TCP *:http (LISTEN)
nginx 4256 nobody 6u IPv4 22842780 0t0 TCP *:http (LISTEN)
nginx 4256 nobody 7u IPv6 22842781 0t0 TCP *:http (LISTEN)
如果您尝试将 Discourse 与 Apache 或 nginx 等其他 Web 服务器同时运行,
您需要绑定到不同的端口。
请参阅 https://meta.discourse.org/t/17247
如果您正在重新配置已配置好的 Discourse,请使用
./launcher stop app
在重新配置之前停止 Discourse,然后重试。