如何在 Debian 11 上使用 Nginx 和 Free Lets Encrypt SSL 安装 Discourse Forum如何在 Debian 11 上使用 Nginx 和 Free Lets Encrypt SSL 安装 Discourse Forum如何在 Debian 11 上使用 Nginx 和 Free Lets Encrypt SSL 安装 Discourse Forum如何在 Debian 11 上使用 Nginx 和 Free Lets Encrypt SSL 安装 Discourse Forum
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 11 上使用 Nginx 和 Free Lets Encrypt SSL 安装 Discourse Forum

在此页

  1. 先决条件
  2. 第 1 步 - 配置防火墙
  3. 第 2 步 - 安装 Git
  4. 第 3 步 - 安装 Docker
  5. 第 4 步 - 下载 Discourse
  6. 第 5 步 - 配置 Discourse
    1. 设置域
    2. 配置公开端口
    3. 配置 SMTP 设置
    4. 内存设置(可选)
    5. GeoLite2 设置(可选)

    1. 从命令行激活 Discourse Administrator
    2. 升级话语
    3. 停止讨论
    4. 查看讨论日志

    Discourse 是一个使用 Ruby 语言构建的开源社区讨论平台。它旨在用作论坛、聊天软件或邮件列表。它很容易与其他平台集成,并且可以通过插件扩展其功能。

    在本教程中,您将学习如何在基于 Debian 11 的服务器上使用 Nginx 服务器安装 Discourse Forum。

    先决条件

    • A server running Debian 11 with a minimum of 1GB RAM and 1 Core CPU. Discourse setup will automatically create a swap partition on systems with 1GB or less RAM. Therefore, it is recommended to install it on a system with at least 2GB RAM.

    • A non-root user with sudo privileges.

    • A Domain name (discourse.example.com) pointing to the server.

    • Everything is updated.

      $ sudo apt update && sudo apt upgrade
      
    • Few packages that your system needs.

      $ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
      

      Some of these packages may already be installed on your system.

    第 1 步 - 配置防火墙

    第一步是配置防火墙。 Debian 带有 ufw(简单防火墙)。

    检查防火墙是否正在运行。

    $ sudo ufw status
    

    您应该得到以下输出。

    Status: inactive
    

    允许 SSH 端口,以便防火墙在启用时不会中断当前连接。

    $ sudo ufw allow OpenSSH
    

    也允许 HTTP 和 HTTPS 端口。

    $ sudo ufw allow 80/tcp
    $ sudo ufw allow 443/tcp
    

    启用防火墙

    $ sudo ufw enable
    Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
    Firewall is active and enabled on system startup
    

    再次检查防火墙的状态。

    $ sudo ufw status
    

    您应该会看到类似的输出。

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    80/tcp                     ALLOW       Anywhere
    443/tcp                    ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    80/tcp (v6)                ALLOW       Anywhere (v6)
    443/tcp (v6)               ALLOW       Anywhere (v6)
    

    第 2 步 - 安装 Git

    使用默认的 Appstream 安装 Git。

    $ sudo dnf install git
    

    确认安装。

    $ git --version
    git version 2.30.2
    

    运行以下命令来配置 Git 安装。

    $ git config --global user.name "Your Name"
    $ git config --global user.email ""
    

    第 3 步 - 安装 Docker

    要安装最新版本的 Docker,请添加 Dockers 官方 GPG 密钥。

    $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

    安装官方 Docker 存储库。

    $ 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
    

    更新 Debian 系统存储库。

    $ sudo apt update
    

    安装最新版本的 Docker。

    $ sudo apt install docker-ce docker-ce-cli containerd.io
    

    验证 Docker 是否正在运行。

    $ sudo systemctl status docker
    ? docker.service - Docker Application Container Engine
         Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
         Active: active (running) since Sat 2022-02-05 13:32:54 UTC; 1h ago
    TriggeredBy: ? docker.socket
           Docs: https://docs.docker.com
       Main PID: 5818 (dockerd)
          Tasks: 26
         Memory: 1.4G
            CPU: 5min 34.561s
         CGroup: /system.slice/docker.service
                 ?? 5818 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
                 ??12162 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -contai>
                 ??12169 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.17.0.2 -container-p>
    

    默认情况下,Docker 需要 root 权限。如果您想避免每次运行 docker 命令时都使用 sudo,请将您的用户名添加到 docker 组。

    $ sudo usermod -aG docker $(whoami)
    

    要启用此更改,您需要注销服务器并以同一用户身份重新登录。

    第 4 步 - 下载 Discourse

    为 Discourse 创建根目录。

    $ sudo mkdir /var/discourse
    

    克隆官方 Discourse Docker Github 存储库。

    $ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
    

    第 5 步 - 配置话语

    通过复制示例 standalone.yml 文件来创建配置文件 app.yml。

    $ sudo cp samples/standalone.yml containers/app.yml
    

    打开 app.yml 进行编辑。

    $ sudo nano containers/app.yml
    

    设置域

    将变量 DISCOURSE_HOSTNAME 设置为您为论坛选择的域名。如果您没有域名,可以在此处使用 IP 地址。

    DISCOURSE_HOSTNAME: 'discourse.example.com'
    

    配置暴露端口

    将 \80:80 行更改为 \8080:80\。这会将 Discourse 的外部 HTTP 端口更改为 8080,因为我们将在端口 80 使用 Nginx。注释掉 \443:443\ 行,因为我们将在外部安装 SSL。

    expose:
      - "8080:80"   # http
      #- "443:443" # https
    

    配置 SMTP 设置

    根据您使用的交易电子邮件服务填写以下变量。使用变量 DISCOURSE_DEVELOPER_EMAILS 为您的管理员帐户设置电子邮件。此步骤是强制性的,否则您的论坛将不会被引导。

    ..
    DISCOURSE_DEVELOPER_EMAILS: ''
    ..
    DISCOURSE_SMTP_ADDRESS: smtp.example.com
    DISCOURSE_SMTP_PORT: 587
    DISCOURSE_SMTP_USER_NAME: 
    DISCOURSE_SMTP_PASSWORD: your_smtp_password
    #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
    #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (required by some providers)
    DISCOURSE_NOTIFICATION_EMAIL:     # (address to send notifications from)
    

    内存设置(可选)

    如果您的服务器内存不足,您可以相应地配置以下变量以减少 Discourses 内存占用。

    db_shared_buffers: '128MB'
    UNICORN_WORKERS: 2
    

    变量 db_shared_buffers 通常设置为可用内存的 25%。

    GeoLite2 设置(可选)

    如果您想在 Discourse 上使用 IP 查找功能,请注册免费的 Maxmind Geolite2 帐户并获取许可证密钥。将该许可证密钥粘贴为以下变量的值。

    DISCOURSE_MAXMIND_LICENSE_KEY: your_maxmind_license_key
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    第 6 步 - 安装 Discourse

    运行以下命令来引导您的 Discourse 容器。

    $ sudo ./launcher bootstrap app
    

    启动 Discourse 应用程序。

    $ sudo ./launcher start app
    

    您可以通过访问网址 http://yourserver_IP:8080 或 http://discourse.example.com:8080 访问论坛浏览器。您将看到以下屏幕。

    单击注册按钮继续。 app.yml 文件中设置的电子邮件 ID 将为您预填。

    单击注册按钮注册管理员帐户。您将进入电子邮件确认屏幕。

    如果您的 SMTP 设置正确,您将收到一封激活帐户的邮件。单击电子邮件中的链接以完成帐户设置。

    单击激活按钮完成安装。

    您将进入 Discourses 设置向导屏幕。您可以跳过它直接进入论坛或完成整个向导。

    您的 Discourse 论坛已准备就绪。下一步是安装 SSL 并将论坛放在 Nginx 服务器后面。

    第 7 步 - 安装 SSL

    要使用 Lets Encrypt 安装 SSL 证书,我们需要安装 Certbot 工具。

    为此,我们将使用 Snapd 包安装程序。由于大多数 Debian 服务器不附带它,请安装 Snapd 安装程序。

    $ sudo apt install snapd
    

    确保您的 Snapd 版本是最新的。

    $ sudo snap install core && sudo snap refresh core
    

    安装 Certbot。

    $ sudo snap install --classic certbot
    

    使用以下命令通过创建指向 /usr/bin 目录的符号链接来确保可以运行 Certbot 命令。

    $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
    

    验证安装。

    $ certbot --version
    certbot 1.22.0
    

    生成 SSL 证书。

    $ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d discourse.example.com
    

    上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/discourse.example.com 目录。

    生成 Diffie-Hellman 组证书。

    $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
    

    为 Lets Encrypt 自动更新创建一个挑战 webroot 目录。

    $ sudo mkdir -p /var/lib/letsencrypt
    

    创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新。为此,首先,创建文件 /etc/cron.daily/certbot-renew 并打开它进行编辑。

    $ sudo nano /etc/cron.daily/certbot-renew
    

    粘贴以下代码。

    #!/bin/sh
    certbot renew --cert-name discourse.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    更改任务文件的权限以使其可执行。

    $ sudo chmod +x /etc/cron.daily/certbot-renew
    

    第 8 步 - 安装和配置 Nginx

    Debian 附带旧版本的 Nginx。您需要下载官方 Nginx 存储库以安装最新版本。

    导入官方 Nginx 签名密钥。

    $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    	 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    

    添加 Nginx 稳定版本的存储库。

    $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
        http://nginx.org/packages/debian `lsb_release -cs` nginx" \
        | sudo tee /etc/apt/sources.list.d/nginx.list
    

    更新 Debian 存储库。

    $ sudo apt update
    

    安装 Nginx。

    $ sudo apt install nginx
    

    验证安装。确保每次在 Debian 上运行 Nginx 命令时都使用 sudo。否则,它不会工作。

    $ sudo nginx -v
    nginx version: nginx/1.20.2
    

    创建并打开文件 /etc/nginx/conf.d/discourse.conf 进行编辑。

    $ sudo nano /etc/nginx/conf.d/discourse.conf
    

    将以下代码粘贴到其中。

    # enforce HTTPS
    server {
        listen       80; 
        listen 	[::]:80;
        server_name  discourse.example.com;
        return 301   https://$host$request_uri;
    }
    server {
        listen       443 ssl http2;
        listen 	[::]:443 ssl http2;
        server_name  discourse.example.com;
    
        access_log  /var/log/nginx/discourse.access.log;
        error_log   /var/log/nginx/discourse.error.log;
        
        # SSL
        ssl_certificate      /etc/letsencrypt/live/discourse.example.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/discourse.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/discourse.example.com/chain.pem;
        ssl_session_timeout  5m;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        resolver 8.8.8.8;
        
        client_max_body_size 100m;
        
        location / {
            proxy_pass http://discourse.example.com:8080/;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }    
    }
    

    完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    打开文件 /etc/nginx/nginx.conf 进行编辑。

    $ sudo nano /etc/nginx/nginx.conf
    

    在行 include /etc/nginx/conf.d/*.conf; 之前添加以下行。

    server_names_hash_bucket_size  64;
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    验证 Nginx 配置文件语法。

    $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    启动 Nginx 服务以启用新配置。

    $ sudo systemctl start nginx
    

    第 9 步 - 话语命令

    从命令行激活 Discourse Administrator

    如果您没有收到激活电子邮件,您可以从命令行激活管理员帐户。

    切换到 Discourse 目录。

    $ cd /var/discourse
    

    进入 Discourse 容器 Shell。

    $ sudo ./launcher enter app
    

    输入命令 rails c 以访问 Rails 命令提示符。

    :/var/www/discourse# rails c
    

    您将看到以下提示。

    [1] pry(main)> 
    

    输入命令找到管理员帐户。

    [1] pry(main)>  User.find_by_email("")
    => #<User:0x00005564492032a0
     id: 1,
     username: "username",
     created_at: Sun, 06 Feb 2022 14:46:58.451302000 UTC +00:00,
     updated_at: Sun, 06 Feb 2022 14:54:17.079564000 UTC +00:00,
     name: nil,
     seen_notification_id: 4,
     last_posted_at: nil,
     password_hash: "[FILTERED]",
     salt: "20d6012d3c98da70896dcfc27bc9d264",
     active: true,
     username_lower: "username",
     last_seen_at: Mon, 07 Feb 2022 08:34:12.435844000 UTC +00:00,
     admin: true,
     last_emailed_at: Sun, 06 Feb 2022 14:47:00.694121000 UTC +00:00,
     trust_level: 1,
     approved: false,
     approved_by_id: nil,
     approved_at: nil,
     previous_visit_at: Sun, 06 Feb 2022 15:40:35.804941000 UTC +00:00,
     suspended_at: nil,
     suspended_till: nil,
     date_of_birth: nil,
     views: 0,
     flag_level: 0,
     ip_address: #<IPAddr: IPv4:69.28.90.35/255.255.255.255>,
     moderator: false,
     title: nil,
     uploaded_avatar_id: 3,
    :
    

    输入q返回提示符,依次输入以下命令。

    [2] pry(main)> user.approved = true
    [3] pry(main)> user.save
    [4] pry(main)> EmailToken.confirm(user.email_tokens.first.token)
    

    键入 exit 两次以返回 shell。您的管理员帐户已激活并可以使用。

    升级话语

    要升级论坛,您可以使用以下两种方式之一。第一种方法是通过管理员仪表板升级它。第二种方法是使用命令行。

    切换到 Discourse 目录。

    $ cd /var/discourse
    

    通过从 Github 获取最新文件来更新 Discourse 安装。

    $ git pull
    

    重建话语。

    $ sudo ./launcher rebuild app
    

    每次在 app.yml 文件中进行任何更改时,都需要重建 Discourse。进行更改后,运行上面的命令。它销毁旧容器,引导一个新容器并启动它。

    停止话语

    $ sudo ./launcher stop
    

    查看讨论日志

    $ sudo ./launcher logs
    

    结论

    本教程到此结束。您已经在 Debian 11 服务器上的 Nginx Web 服务器后面使用 Docker 安装了 Discourse 论坛。如果您有任何问题,请在下面的评论中发表。

©2015-2025 艾丽卡 support@alaica.com