Prosodyは、Luaで記述された無料のオープンソースXMPPサーバーです。高速で軽量です。 XMPPは、インスタントメッセージングに最適なプロトコルです。このチュートリアルでは、Ubuntu20.04にProsodyXMPPサーバーをインストールして構成する方法を説明します。このチュートリアルを終了すると、独自のチャットサーバーが作成されます。
ステップ1:Ubuntu20.04にProsodyをインストールする
ProsodyはデフォルトのUbuntuリポジトリに含まれています。 Prosodyチームは、パッケージリポジトリも管理しています。最新バージョンを入手したい場合は、次のコマンドでProsodyリポジトリを追加する必要があります。
echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list
次に、次のコマンドを実行してProsody公開鍵をダウンロードおよびインポートします。これにより、APTパッケージマネージャーは、このリポジトリからダウンロードされたパッケージの整合性を検証できます。
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
次に、ローカルパッケージインデックスを更新し、最新バージョンのProsodyをインストールします。
sudo apt update sudo apt install prosody
インストールすると、Prosodyが自動的に起動します。次のコマンドでステータスを確認できます:
systemctl status prosody
出力:
● prosody.service - Prosody XMPP Server Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-04-19 13:58:40 UTC; 16s ago Docs: https://prosody.im/doc Main PID: 1894 (lua5.2) Tasks: 1 (limit: 1108) CGroup: /system.slice/prosody.service └─1894 lua5.2 /usr/bin/prosody -F Apr 19 13:58:40 localhost systemd[1]: Started Prosody XMPP Server.
実行されていない場合は、
で開始できます。sudo systemctl start prosody
システムの起動時に自動起動を有効にするには、
を実行します。sudo systemctl enable prosody
ステップ2:ファイアウォールでポートを開く
次のコマンドでわかるように、デフォルトでは、パブリックIPアドレスのTCPポート5269および5222でリッスンします。 (Ubuntuにnetstatコマンドがない場合は、sudo apt install net-tools
を使用してインストールできます。 。)
sudo netstat -lnptu | grep lua
- ポート5222は、クライアントからサーバーへの接続に使用されます。
- ポート5269は、サーバーからサーバーへの接続に使用されます。
UbuntuでUFWファイアウォールを有効にしている場合は、次のコマンドで上記のポートを開く必要があります。
sudo ufw allow 5222,5269/tcp
ステップ3:ProsodyXMPPサーバーを構成する
Nanoなどのコマンドラインテキストエディタを使用して、メインの構成ファイルを編集します。
sudo nano /etc/prosody/prosody.cfg.lua
module_enabled {...}
で セクションでは、行のコメントを解除して特定のモジュールを有効にしたり、行をコメントアウトして特定のモジュールを無効にしたりできます。各モジュールには、その機能を説明する説明があります。 Bの略であるBOSHモジュールを有効にすることをお勧めします。 idirection-streams O ver S 同期H TTP。 HTTPを介したXMPP通信を可能にします。
次に、構成ファイルを下にスクロールします。 XMPPクライアントからのアカウント登録を許可する場合は、allow_registration
を設定します。 本当に。これを行う前に、悪用を防ぐ方法を知っている必要があることに注意してください。 XMPPを初めて使用する場合は、XMPPクライアントが自分でアカウントを登録することを許可したくないでしょう。
allow_registration = true;
Prosodyは、暗号化された通信のみを許可します。これは、次の2行で示されています。
c2s_require_encryption = true s2s_require_encryption = true
ただし、接続を暗号化できるように、仮想ホストを作成してTLS証明書をインストールする必要があります。デフォルトでは、次の行に示すように、Prosodyにはlocalhostという1つの仮想ホストしかありません。
VirtualHost "localhost"
次に、chat.example.com
のような別の仮想ホストを作成します 。このファイルに次の行を追加します。
VirtualHost "chat.example.com"
ファイルを保存して閉じます。次に、Let’sEncryptから信頼できるTLS証明書を取得してインストールする必要があります。
ステップ4:Let’sEncryptから信頼できるTLS証明書を取得する
次のコマンドを発行して、Let’s Encryptクライアント(certbot)をUbuntuサーバーにインストールします。
sudo apt install certbot
Webサーバーをまだ実行していない場合は、他の方法を使用するよりもWebサーバーでTLS証明書を取得してインストールする方が簡単なため、Webサーバー(ApacheまたはNginx)をインストールすることをお勧めします。
Apache Webサーバーを使用する場合は、Apacheプラグインをインストールする必要があります。 (次のコマンドは、Apache Webサーバーがまだシステムにインストールされていない場合にインストールします。)
sudo apt install python3-certbot-apache
Nginx Webサーバーを使用している場合は、Nginxプラグインをインストールします。 (次のコマンドは、Nginx Webサーバーがまだシステムにインストールされていない場合にインストールします。)
sudo apt install python3-certbot-nginx
ApacheWebサーバーでTLS証明書を取得する
chat.example.com
用のApache仮想ホストが必要です Let'sEncryptTLS証明書を取得する前に。仮想ホストファイルを作成します:
sudo nano /etc/apache2/sites-available/prosody.conf
次に、次のテキストをファイルに貼り付けます。 chat.example.com
を置き換えます あなたの本当のドメイン名で。 DNSAレコードを設定することを忘れないでください。
<VirtualHost *:80> ServerName chat.example.com DocumentRoot /var/www/prosody </VirtualHost>
ファイルを保存して閉じます。次に、webrootディレクトリを作成します。
sudo mkdir /var/www/prosody
www-data
を設定します (Apacheユーザー)webrootの所有者として。
sudo chown www-data:www-data /var/www/prosody -R
この仮想ホストを有効にします。
sudo a2ensite prosody.conf
変更を有効にするためにApacheをリロードします。
sudo systemctl reload apache2
仮想ホストを作成して有効にしたら、次のコマンドを実行してLet’sEncryptTLS証明書を取得してインストールします。
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
赤いテキストを実際のデータに置き換えます。次のように表示されます。これは、証明書が正常に取得されたことを意味します。証明書が保存されているディレクトリも表示されます。
NginxWebサーバーでTLS証明書を取得する
chat.example.com
用のNginx仮想ホストが必要です Let'sEncryptTLS証明書を取得する前に。仮想ホストファイルを作成します:
sudo nano /etc/nginx/conf.d/prosody.conf
次に、次のテキストをファイルに貼り付けます。 chat.example.com
を置き換えます あなたの本当のドメイン名で。 DNSAレコードを設定することを忘れないでください。
server { listen 80; listen [::]:80; server_name chat.example.com; root /var/www/prosody/; location ~ /.well-known/acme-challenge { allow all; } }
ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。
sudo mkdir /var/www/prosody/
www-data
を設定します (Nginxユーザー)Webルートの所有者として。
sudo chown www-data:www-data /var/www/prosody -R
変更を有効にするためにNginxをリロードします。
sudo systemctl reload nginx
仮想ホストを作成して有効にしたら、次のコマンドを実行して、Let’sEncrypt証明書をNginxプラグインで取得してインストールします。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
次のように表示されます。これは、証明書が正常に取得されたことを意味します。証明書が保存されているディレクトリも表示されます。
ステップ5:ProsodyにTLS証明書をインストールする
メインの構成ファイルを編集します。
sudo nano /etc/prosody/prosody.cfg.lua
Prosody仮想ホストに移動し、TLS証明書とキーファイルを追加します。
ssl = { key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; }
このように:
ファイルを保存して閉じます。 ProsodyXMPPサーバーはprosody
として実行されるため ユーザーの場合、次のコマンドを使用して、韻律ユーザーがTLS証明書とキーファイルを読み取れるようにする必要があります。
sudo apt install acl sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/
ステップ6:ユーザーアカウントを作成する
Prosody XMPPサーバーのユーザーアカウントは、次のコマンドを使用して作成できます。パスワードの入力を求められます。
sudo prosodyctl adduser [email protected]
パスワードを変更するには、
を実行しますsudo prosodyctl passwd [email protected]
ステップ7:Prosodyを再起動します
次のコマンドを実行して、構成ファイルの構文を確認します。
sudo prosodyctl check config
構文が正しい場合は、変更を有効にするためにProsodyを再起動します。
sudo systemctl restart prosody
ステップ8:XMPPクライアントを構成する
このチュートリアルでは、XMPPクライアントとしてPidginインスタントメッセンジャーを使用します。共感はあなたが使うことができるもう一つのクライアントです。次のコマンドを実行して、Ubuntuデスクトップにインストールできます。
sudo apt install pidgin sudo apt install empathy
最初の起動時に、Pidginにアカウントを追加する必要があります。 追加をクリックします ボタン。
次に、プロトコルのリストからXMPPを選択し、ユーザー名、ドメイン、パスワードを入力します。
追加を押します ボタンをクリックするとログインします。
BOSHを設定する
前に説明したように、BOSHを使用すると、WebブラウザでXMPPoverHTTPを使用できます。たとえば、Jitsi Meetビデオ会議ソフトウェアはBOSHを使用してProsodyをWebページに統合しているため、参加者はオンラインビデオ会議に参加しながらテキストチャットを行うことができます。
BOSHモジュールを有効にした場合は、Prosody構成ファイル(/etc/prosody/prosody.cfg.lua
)を編集します。 )そして、構成ファイルの最後に次の2行を追加します。
consider_bosh_secure = true; cross_domain_bosh = true; https_ssl = { certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; }
場所:
- 最初の行は安全なHTTPS接続を強制します。
- 2行目は、BOSH応答にCORヘッダーを追加して、任意のドメインからのリクエストを許可します。
- https_sslパラメーターは、BOSHサービスのTLS証明書とキーファイルを指定します。
ファイルを保存して閉じます。次に、Prosodyを再起動します。
sudo systemctl restart prosody
UbuntuサーバーでUFWファイアウォールを有効にしている場合は、次のコマンドでポート5280と5281を開く必要があります。
sudo ufw allow 5280,5281/tcp
このチュートリアルを終了すると、BOSHエンドポイントは次のアドレスで利用できるようになります。ポート5280 プレーンテキストHTTP、ポート 5281用です HTTPSの場合。
http://chat.example.com:5280/http-bind
または
https://chat.example.com:5281/http-bind.
BOSHエンドポイントは、クライアントがHTTP経由でXMPPサーバーに接続するために使用するURLです。
マルチユーザーチャットルーム
MUC(マルチユーザーチャット)を有効にするには、Prosody構成ファイルに次の行を追加します。 conference.example.com
を置き換えます 好みのサブドメインで。
Component "conference.example.com" "muc" restrict_room_creation = "admin"
2行目では、管理者のみが部屋を作成できます。 XMPPサーバーの管理者を定義するには、最初にsudo prosodyctl adduser
を使用してアカウントを作成する必要があります 上記のようなコマンド。次に、構成ファイルで、アカウントをadmin {...}
に追加します。 以下のようなセクション。
admins = { "[email protected]", "[email protected]" }
次のコマンドを実行して、構成ファイルの構文を確認します。
sudo prosodyctl check config
構文が正しい場合は、変更を有効にするためにProsodyを再起動します。
sudo systemctl restart prosody
トラブルシューティング
Prosodyのメインログファイルは/var/log/prosody/prosody.log
です。 。エラーログ/var/log/prosody/prosody.err
もあります 。 Prosodyが期待どおりに機能しない場合は、エラーログを確認することをお勧めします。
TLS証明書の自動更新
Cronジョブを作成して、TLS証明書を自動的に更新できます。 rootユーザーのcrontabファイルを開きます。
sudo crontab -e
Apache Webサーバーを使用している場合は、ファイルの最後に次の行を追加します。
@daily certbot renew --quiet && systemctl reload postfix dovecot apache2
Nginx Webサーバーを使用している場合は、次の行を追加します。
@daily certbot renew --quiet && systemctl reload postfix dovecot nginx
これらのプログラムに新しい証明書と秘密鍵を取得させるには、Postfix、Dovecot、およびWebサーバーをリロードする必要があります。