GNU/Linux >> Linux の 問題 >  >> Debian

Nginxと無料でDiscourseForumをインストールする方法Debian11でSSLを暗号化する

Discourseは、Ruby言語を使用して構築されたオープンソースのコミュニティディスカッションプラットフォームです。フォーラム、チャットソフトウェア、またはメーリングリストとして機能するように設計されています。他のプラットフォームと簡単に統合でき、プラグインを使用して機能を拡張できます。

このチュートリアルでは、Debian11ベースのサーバーにNginxサーバーを使用してDiscourseForumをインストールする方法を学習します。

前提条件
  • 1GB以上のRAMと1コアのCPUを搭載したDebian11を実行しているサーバー。 Discourseのセットアップでは、RAMが1GB以下のシステムにスワップパーティションが自動的に作成されます。したがって、2GB以上のRAMを搭載したシステムにインストールすることをお勧めします。

  • sudo権限を持つroot以外のユーザー。

  • ドメイン名(discourse.example.com )サーバーを指しています。

  • すべてが更新されます。

    $ sudo apt update && sudo apt upgrade
    
  • システムに必要なパッケージはほとんどありません。

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

    これらのパッケージの一部は、システムにすでにインストールされている可能性があります。

ステップ1-ファイアウォールを構成する

最初のステップは、ファイアウォールを構成することです。 Debianにはufw(Uncomplicated Firewall)が付属しています。

ファイアウォールが実行されているかどうかを確認します。

$ 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 "[email protected]"
ステップ3-Dockerをインストールする

Dockerの最新バージョンをインストールするには、Dockerの公式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権限が必要です。 sudoの使用を避けたい場合 dockerを実行するたびに コマンドで、ユーザー名をdockerに追加します グループ。

$ sudo usermod -aG docker $(whoami)

この変更を有効にするには、サーバーからログアウトして、同じユーザーとして再度ログインする必要があります。

ステップ4-談話をダウンロード

Discourseのルートディレクトリを作成します。

$ sudo mkdir /var/discourse

公式のDiscourseDockerGithubリポジトリのクローンを作成します。

$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
ステップ5-談話を構成する

構成ファイルapp.ymlを作成します サンプルのstandalone.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"へ 。これにより、ポート80でNginxを使用するため、Discourseの外部HTTPポートが8080に変更されます。"443:443"をコメントアウトします。 SSLを外部にインストールするためです。

expose:
  - "8080:80"   # http
  #- "443:443" # https
SMTP設定を構成する

使用しているトランザクションメールサービスに応じて、次の変数を入力します。変数DISCOURSE_DEVELOPER_EMAILSを使用して、管理者アカウントの電子メールを設定します 。この手順は必須です。それ以外の場合、フォーラムはブートストラップされません。

..
DISCOURSE_DEVELOPER_EMAILS: '[email protected]'
..
DISCOURSE_SMTP_ADDRESS: smtp.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [email protected]
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: [email protected]    # (address to send notifications from)

メモリ設定(オプション)

サーバーのRAMが少ない場合は、それに応じて次の変数を構成して、Discourseのメモリフットプリントを減らすことができます。

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

談話アプリケーションを開始します。

$ sudo ./launcher start app

URL http://yourserver_IP:8080にアクセスすると、フォーラムにアクセスできます。 またはhttp://discourse.example.com:8080 ブラウザで。次の画面が表示されます。

登録をクリックします ボタンをクリックして続行します。 app.ymlで設定されたメールID ファイルは事前に入力されます。

登録をクリックします 管理者アカウントを登録するためのボタン。メール確認画面に進みます。

SMTP設定が正しい場合は、アカウントをアクティブ化するためのメールが届きます。メールのリンクをクリックして、アカウントの設定を完了してください。

アクティブ化をクリックします ボタンをクリックしてインストールを完了します。

Discourseのセットアップウィザード画面が表示されます。スキップしてフォーラムに直接進むか、ウィザード全体を実行することができます。

Discourseフォーラムの準備が整いました。次のステップは、SSLをインストールし、フォーラムをNginxサーバーの背後に配置することです。

ステップ7-SSLをインストールする

Let's 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 [email protected] -d discourse.example.com

上記のコマンドは、証明書を/etc/letsencrypt/live/discourse.example.comにダウンロードします。 サーバー上のディレクトリ。

Diffie-Hellmanグループを生成します 証明書。

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

Let'sEncryptの自動更新用のチャレンジWebルートディレクトリを作成します。

$ 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

インストールを確認します。必ずsudoを使用してください DebianでNginxコマンドを実行するたび。そうしないと、機能しません。

$ 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-談話コマンド コマンドラインからDiscourseAdministratorをアクティブ化します

アクティベーションメールが届かない場合は、コマンドラインから管理者アカウントをアクティベートできます。

Discourseディレクトリに切り替えます。

$ cd /var/discourse

談話コンテナシェルに入ります。

$ sudo ./launcher enter app

コマンドrails cを入力します Railsコマンドプロンプトにアクセスします。

[email protected]:/var/www/discourse# rails c

次のプロンプトが表示されます。

[1] pry(main)> 

コマンドを入力して、管理者アカウントを見つけます。

[1] pry(main)>  User.find_by_email("[email protected]")
=> #<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と入力します シェルに戻るために2回。管理者アカウントがアクティブ化され、使用できるようになります。

アップグレード談話

フォーラムをアップグレードするには、2つの方法のいずれかを使用できます。最初の方法は、管理者ダッシュボードを介してアップグレードすることです。 2番目の方法は、コマンドラインを使用することです。

Discourseディレクトリに切り替えます。

$ cd /var/discourse

Githubから最新のファイルを取得して、Discourseのインストールを更新します。

$ git pull

談話を再構築します。

$ sudo ./launcher rebuild app

app.ymlに変更を加えるたびに、Discourseを再構築する必要があります ファイル。変更を加えたら、上記のコマンドを実行します。古いコンテナを破棄し、新しいコンテナをブートストラップして起動します。

談話を停止
$ sudo ./launcher stop
談話ログを表示
$ sudo ./launcher logs
結論

これでチュートリアルは終了です。 Debian11サーバー上のNginxWebサーバーの背後にあるDockerを使用してDiscourseフォーラムをインストールしました。ご不明な点がございましたら、下のコメント欄に投稿してください。


Debian
  1. Lets Encrypt and Secure Nginx with SSL/TLSをDebian9にインストールする

  2. Nginxを使用してAutomadCMSをインストールし、Debian10でSSLを暗号化できるようにします

  3. ElkArteフォーラムをApacheでインストールし、Debian10で暗号化する方法

  1. Nginxを使用してOpenCartをインストールし、Debian10で暗号化する方法

  2. Drupal 9をNginxでインストールし、Debian10でSSLを暗号化する方法

  3. Nginxを使用してNodeBBフォーラムをインストールし、Ubuntu20.04LTSでSSLを暗号化する方法

  1. ApacheでJoomlaをインストールし、Debian10でSSLを暗号化する方法

  2. DrupalをApacheでインストールし、Debian11でSSLを暗号化する方法

  3. SuiteCRMをApacheと無料でインストールする方法Debian11でSSLを暗号化する