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
これらのパッケージの一部は、システムにすでにインストールされている可能性があります。
最初のステップは、ファイアウォールを構成することです。 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)
デフォルトの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]"
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)
この変更を有効にするには、サーバーからログアウトして、同じユーザーとして再度ログインする必要があります。
Discourseのルートディレクトリを作成します。
$ sudo mkdir /var/discourse
公式のDiscourseDockerGithubリポジトリのクローンを作成します。
$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
構成ファイル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
使用しているトランザクションメールサービスに応じて、次の変数を入力します。変数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と入力します プロンプトが表示されたら。
次のコマンドを実行して、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サーバーの背後に配置することです。
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
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
アクティベーションメールが届かない場合は、コマンドラインから管理者アカウントをアクティベートできます。
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フォーラムをインストールしました。ご不明な点がございましたら、下のコメント欄に投稿してください。