discourse论坛安装教程,自定义安装discourse论坛教程,discourse端口冲突的解决办法

首先,确保你的系统是最新的:

sudo apt update && sudo apt upgrade -y

安装需要用到的软件包:

sudo apt install docker.io
sudo apt install git

克隆discourse_docker项目:

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

如果一个服务器只是一个站点,且不准备创建其他站点的的话可执行一下命令:

启动安装工具

./discourse-setup

出现提示时回答以下问题:

Hostname for your Discourse? [discourse.example.com]: 
Email address for admin account(s)? [me@example.com,you@example.com]: 
SMTP server address? [smtp.example.com]: 
SMTP port? [587]: 
SMTP user name? [user@example.com]: 
SMTP password? [pa$word]: 
Let's Encrypt account email? (ENTER to skip) [me@example.com]: 
Optional Maxmind License key () [xxxxxxxxxxxxxxxx]:

您将从电子邮件设置中获得SMTP详细信息,请确保完成该部分。注意事项:邮件端口 465 无效 请不要使用这个端口

Let’s Encrypt 帐户设置是为您的网站提供免费的HTTPS证书,如果您希望您的网站安全,请确保进行设置。

这将代表您生成一个app.yml配置文件,然后启动引导程序。引导需要2-8分钟来设置你的话语。如果在引导后需要更改这些设置,则可以运行/再次设置话语(它将重复使用文件中以前的值)或使用nano手动编辑 /containers/app.yml,然后 ./launcher rebuild app,否则您的更改将不会生效。

如果你想一个服务器创建多个站点的话:

方法一:采用的宝塔面板安装示例:

使用宝塔面板编辑配置文件

  1. 通过宝塔面板登录并导航到文件管理器
  2. 找到 app.yml 文件,路径是 /var/discourse/containers/app.yml
  3. 点击编辑,根据需要修改文件中的配置,特别是电子邮件部分。
  4. 寻找
expose:
  - "80:80"   # http [修改这个前面的80 如3000:80]
  - "443:443" # https [修改这个前面的443 如4433:443]

启动 Discourse

  • 1.使用指令
cd /var/discourse
sudo ./launcher bootstrap app 
sudo ./launcher start app
  • 2.配置宝塔面板
  1. 登录宝塔面板
  2. 添加新网站
  • 域名:你的域名
  1. 配置反向代理
  • 目标地址https://127.0.0.1:4433
    image
  1. 配置ssl
server
{
    listen 80;
    listen 443 ssl http2 ;
    server_name techexchangeforum.com www.techexchangeforum.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/techexchangeforum.com;
    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    include /www/server/panel/vhost/nginx/well-known/techexchangeforum.com.conf;
    #CERT-APPLY-CHECK--END
    
    #301跳	
    if ($host ~ '^techexchangeforum.com'){
    return 301 https://www.techexchangeforum.com$request_uri;
    }       

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    ssl_certificate    /www/server/panel/vhost/cert/techexchangeforum.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/techexchangeforum.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;



    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    ###清理缓存规则

    location ~ /purge(/.*) {
        proxy_cache_purge cache_one $host$1$is_args$args;
        #access_log  /www/wwwlogs/techexchangeforum.com_purge_cache.log;
    }
	#引用反向代理规则,注释后配置的反向代理将无效
	include /www/server/panel/vhost/nginx/proxy/techexchangeforum.com/*.conf;

	include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/techexchangeforum.com.conf;
    #REWRITE-END
    

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    

    
    access_log  /www/wwwlogs/techexchangeforum.com.log;
    error_log  /www/wwwlogs/techexchangeforum.com.error.log;
}

以上就是使用宝塔面板安装discourse论坛的方法了。

方法二:通用安装

复制配置文件并编辑:

cp samples/standalone.yml containers/app.yml
nano containers/app.yml

注释掉如下配置模板:

#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"

增加如下配置模板:

- "templates/web.socketed.template.yml"

注释掉暴露的80、443端口:

#expose:
#  - "80:80"
#  - "443:443"

如果需要修改文件上传大小,在params下面增加如下配置:

params:
  upload_size: "100m"

接着修改如下配置,你需要事先准备好一个smtp服务器:

DISCOURSE_HOSTNAME: 'discourse.example.com'
DISCOURSE_DEVELOPER_EMAILS: 'imlala@example.com'
DISCOURSE_SMTP_ADDRESS: mx1.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: smtp@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_NOTIFICATION_EMAIL: smtp@example.com

使用刚才的配置创建discourse容器:

./launcher bootstrap app

新建nginx配置:

nano /etc/nginx/sites-available/discourse

写入如下配置:

server {
    listen 80;
    server_name discourse.example.com;
    client_max_body_size 100m;

    location / {
        proxy_pass http://unix:/var/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 $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

启用新的nginx配置:

ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/discourse

签发ssl证书:

certbot --nginx

ps:

Discourse 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"
  ## 取消下一行的注释以启用 IPv6 监听器
  #- "templates/web.ipv6.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 自动设置,或者您可以手动覆盖。
  db_shared_buffers: "2048"

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

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

  ## 最大上传大小(默认值:10m)
  upload_size: 50m

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

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

  ## TODO: Discourse实例将响应的域名
  ## 必填项。Discourse无法使用裸IP地址。
  DISCOURSE_HOSTNAME: 你的IP地址

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

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

  ## TODO: 用于验证新帐户并发送通知的SMTP邮件服务器
  # SMTP地址、用户名和密码是必需的
  # 警告:SMTP密码中的字符 '#' 可能会引起问题!
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: 你的邮箱
  DISCOURSE_SMTP_PASSWORD: "你邮箱的key"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认值为 true)
  DISCOURSE_SMTP_DOMAIN: gmail.com
  DISCOURSE_NOTIFICATION_EMAIL: 你的邮箱

  ## 如果您添加了 Let's Encrypt 模板,请取消下面的注释以获取免费的SSL证书
  LETSENCRYPT_ACCOUNT_EMAIL: 你的邮箱

  ## 此 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           # (管理器)


    - exec:
        cd: $home/plugins/discourse-animated-avatars
        raise_on_fail: false
        cmd:
          - $home/plugins/discourse-animated-avatars/scripts/install.sh

## 构建后运行的任何自定义命令
run:
  - exec: echo "Beginning of custom commands"
  ## 如果您想为首次注册设置 "发件人 "电子邮件地址,请取消注释并更改:
  ## 收到第一封注册电子邮件后,重新注释该行。只需运行一次.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

注意事项:邮件端口 465 无效 请不要使用这个端口