Rocky Linux 9でDockerを使用してZulipチャットサーバーをインストールする方法
Rocky Linux 9でDockerを使用してZulipチャットサーバーをインストールする方法
このページで
- 前提条件
- ステップ1 - ファイアウォールを設定する
- ステップ2 - DockerとDocker Composeをインストールする
- ステップ3 - Nginxをインストールする
- ステップ4 - SSLをインストールする
- ステップ5 - SELinuxの設定
- ステップ6 - インストールのためにZulipを準備し、構成する
- ステップ7 - Zulipをインストールする
- ステップ8 - Nginxを設定する
- ステップ9 - Zulipインターフェースへのアクセス
- ステップ10 - Zulipサーバーコマンド
- ステップ11 - 送信メールのテスト
- ステップ12 - Zulipのアップグレード
- 結論
Zulipは、Microsoft Teams、Rocket Chat、またはSlackに似たオープンソースのチャットサーバーです。Pythonで書かれており、Django、PostgreSQL、およびJavaScriptを使用しています。Github、Jira、Stripe、Zendesk、Sentryなど、90以上のサードパーティプラグインとの統合が可能です。ZapierやIFTTTを使って統合を拡張できます。プライベートメッセージ、グループチャット、スレッド化された会話、カスタムチャンネル、ビデオ通話、ドラッグアンドドロップファイルアップロード、カスタム絵文字、Giphy統合、画像やツイートのプレビューなどの機能が備わっています。Zulipはすべてのプラットフォーム用のデスクトップおよびモバイルアプリが用意されており、プラットフォームに依存しません。
このチュートリアルでは、Rocky Linux 9 サーバーに Zulip Chat をインストールして設定する方法を教えます。
前提条件
Rocky Linux 9を実行しているサーバー。
100人未満のユーザーを想定する場合は、少なくとも2GBのRAMが必要です。100人以上のユーザーの場合は、4GBのRAMと2つのCPUを持つサーバーを用意してください。
sudo権限を持つ非ルートユーザー。
サーバーにポイントするように構成されたドメイン名、zulip.example.com。
すべてが更新されています。
sudo dnf update
あなたのシステムに必要ないくつかのパッケージ。
sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
これらのパッケージの一部は、すでにあなたのシステムにインストールされている可能性があります。
ステップ1 - ファイアウォールを設定する
パッケージをインストールする前に、最初のステップはファイアウォールを設定してHTTPおよびHTTPS用のポートを開くことです。Rocky LinuxはFirewalldファイアウォールを使用します。ファイアウォールの状態を確認してください。
sudo firewall-cmd --state
running
ファイアウォールは異なるゾーンで動作し、パブリックゾーンは私たちが使用するデフォルトのゾーンです。ファイアウォールでアクティブなすべてのサービスとポートをリストアップしてください。
sudo firewall-cmd --zone=public --list-all
次の出力を表示する必要があります。
public
target: default
icmp-block-inversion: no
interfaces: enp1s0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
ファイアウォールでHTTPおよびHTTPSポートを開いてください。
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --add-service=https
ファイアウォールの状態を再確認してください。
sudo firewall-cmd --zone=public --list-all
あなたは似たような出力を見るべきです。
public
target: default
icmp-block-inversion: no
interfaces: enp1s0
sources:
services: cockpit dhcpv6-client http https ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
すべての変更を永久的に行い、変更を有効にするためにファイアウォールを再読み込みしてください。
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload
ステップ2 - DockerとDocker Composeをインストールする
公式のDockerリポジトリをインストールします。
sudo dnf install yum-utils
sudo dnf config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Dockerをインストールしてください。
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Dockerデーモンを有効にして実行します。
sudo systemctl enable docker --now
Dockerサービスのステータスを確認してください。
sudo systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-02-06 07:17:33 UTC; 5s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 22302 (dockerd)
Tasks: 10
Memory: 31.3M
CPU: 198ms
CGroup: /system.slice/docker.service
??22302 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Dockerコマンドを実行する際にsudoを使用しないように、システムユーザーをDockerグループに追加してください。
sudo usermod -aG docker $(whoami)
変更を有効にするために、ログアウトした後にサーバーに再度ログインしてください。
ステップ3 - Nginxをインストールする
運用環境では、Nginxプロキシを使用してSynapseサーバーを実行することが推奨されます。
Rocky Linux 9は古いバージョンのNginxを搭載しています。最新バージョンをインストールするには、公式のNginxリポジトリを使用する必要があります。
/etc/yum.repos.d/nginx.repo ファイルを作成して編集のために開いてください。
sudo nano /etc/yum.repos.d/nginx.repo
そのコードをそこに貼り付けてください。
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
完了したら、Ctrl + Xを押してファイルを保存し、求められたときにYを入力してください。
Nginxのメインラインをインストールするので、それに対応するパッケージを有効にしてください。
sudo dnf config-manager --enable nginx-mainline
Nginxをインストールします。
sudo dnf install nginx -y
インストールを確認してください。
nginx -v
nginx version: nginx/1.25.3
Nginxサーバーサービスを有効にして開始します。
sudo systemctl enable nginx --now
サービスの状態を確認してください。
sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-02-06 07:18:56 UTC; 5s ago
Docs: http://nginx.org/en/docs/
Process: 22762 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 22763 (nginx)
Tasks: 5 (limit: 50339)
Memory: 4.9M
CPU: 16ms
CGroup: /system.slice/nginx.service
??22763 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??22764 "nginx: worker process"
??22765 "nginx: worker process"
??22766 "nginx: worker process"
??22767 "nginx: worker process"
ステップ4 - SSLをインストールする
SSL証明書を生成するためにCertbotをインストールする必要があります。それにはSnapdパッケージインストーラーを使用します。Rocky Linuxにはこれが含まれていないため、Snapdインストーラーをインストールしてください。これにはEPEL(Enterprise Linux用の追加パッケージ)リポジトリが必要です。
EPELリポジトリをインストールします。
sudo dnf install epel-release -y
Snapdパッケージをインストールします。
sudo dnf install snapd -y
スナップサービスを有効にして開始します。
sudo systemctl enable snapd --now
Snapコアパッケージをインストールし、Snapdのバージョンが最新であることを確認してください。
sudo snap install core && sudo snap refresh core
Snapdが動作するために必要なリンクを作成してください。
sudo ln -s /var/lib/snapd/snap /snap
echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Certbotをインストールします。
sudo snap install --classic certbot
次のコマンドを使用して、Certbot コマンドが /usr/bin ディレクトリへのシンボリックリンクを作成することで実行できることを確認してください。
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbotのバージョンを確認してください。
certbot --version
certbot 2.8.0
次のコマンドを実行してSSL証明書を生成します。
sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d zulip.example.com
上記のコマンドは、サーバーの/etc/letsencrypt/live/zulip.example.comディレクトリに証明書をダウンロードします。
ディフィー・ヘルマン群証明書を生成します。
sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Certbotの更新スケジューラーサービスを確認してください。
systemctl list-timers
snap.certbot.renew.serviceが実行されるようにスケジュールされたサービスの1つとして見つかります。
NEXT LEFT LAST PASSED UNIT ACTIVATES ----------------------------------------------------------------------------------------------------------------------------------
Tue 2024-02-06 07:30:00 UTC 6min left Tue 2024-02-06 07:20:11 UTC 3min 41s ago sysstat-collect.timer sysstat-collect.service
Tue 2024-02-06 08:22:43 UTC 58min left Tue 2024-02-06 07:22:39 UTC 1min 13s ago dnf-makecache.timer dnf-makecache.service
Tue 2024-02-06 09:36:00 UTC 2h 12min left - - snap.certbot.renew.timer snap.certbot.renew.service
プロセスのドライランを実行して、SSL更新が正常に動作しているか確認してください。
sudo certbot renew --dry-run
エラーが見当たらなければ、すべて準備完了です。あなたの証明書は自動的に更新されます。
ステップ5 - SELinuxの設定
外部ホストへの接続を許可するポリシーを適用してください。
sudo setsebool -P httpd_can_network_connect 1
NginxがPostgreSQLへのアクセスを許可するようにポリシーを適用してください。
sudo setsebool -P httpd_can_network_connect_db 1
ステップ6 - インストールのためにZulipを準備し、構成する
まず、Zulipのための秘密鍵を作成します。生成された鍵を保存してください。後で必要になります。
openssl rand -base64 32
sLIeucGPMCNbR0LwcRhyXafXmputmtse6+EYU04+9JY=
Zulip Docker Composeファイルのためのディレクトリを作成し、それに切り替えてください。
mkdir ~/docker-zulip
cd ~/docker-zulip
環境ファイルを作成して編集のために開いてください。
nano .env
そのコードをそこに貼り付けてください。
[email
EXTERNAL_HOST=zulip.example.com
ZULIP_AUTH_BACKENDS=EmailAuthBackend
ZULIP_PUSH_NOTIFICATION_BOUNCER_URL=https://push.zulipchat.com
DISABLE_HTTPS=true
SSL_CERTIFICATE_GENERATION=self-signed
EMAIL_HOST=email-smtp.us-west-2.amazonaws.com
EMAIL_HOST_USER=AMAZONSESUSERNAME
EMAIL_PASSWORD=AMAZONSESPASSWORD
EMAIL_PORT=465
EMAIL_USE_SSL=True
EMAIL_USE_TLS=False
[email
ZULIP_GIT_URL=https://github.com/zulip/zulip.git
ZULIP_GIT_REF=8.2
SECRET_KEY=sLIeucGPMCNbR0LwcRhyXafXmputmtse6+EYU04+9JY=
POSTGRES_USER=zulip
POSTGRES_DB=zulip
POSTGRES_PASSWORD=REPLACE_WITH_SECURE_POSTGRES_PASSWORD
REDIS_PASSWORD=REPLACE_WITH_SECURE_REDIS_PASSWORD
MEMCACHED_PASSWORD=REPLACE_WITH_SECURE_MEMCACHED_PASSWORD
RABBITMQ_DEFAULT_USER=zulip
RABBITMQ_DEFAULT_PASS=REPLACE_WITH_SECURE_RABBITMQ_PASSWORD
作業が完了したら、Ctrl + Xを押してファイルを保存し、求められたときにYを入力してください。
定義したすべての変数を見ていきましょう。
- ZULIP_ADMINISTRATOR - は、インストール中に作成された管理者アカウントの主なメールアドレスです。
- EXTERNAL_HOST - は、私たちのZulipインストールに使用するドメイン名です。
- ZULIP_AUTH_BACKENDS - ログイン方法を定義します。私たちは
EmailAuthBackendを使用しているため、Zulip はメールアドレスとパスワードを求めます。他にも、Google、GitHub、および Apple の認証情報を使用してログインする認証方法があります。詳細については、Zulip のドキュメントおよびデフォルトのsettings.pyファイルを参照してください。 - ZULIP_PUSH_NOTIFICATION_BOUNCER_URL - はZulipがモバイルプッシュ通知を送信するために使用するURLです。10人以下のユーザーを持つ組織向けのZulipコミュニティ版では、プッシュ通知は無料です。要件によっては、あなたの組織が無制限のプッシュ通知を無料で受け取る資格があるかもしれません。詳細についてはZulipの請求に関するドキュメントを確認してください。
- HTTPS無効 - ZulipのSSLを無効にするために、これをtrueに設定しました。コンテナの外で処理します。
- SSL_CERTIFICATE_GENERATION - 私たちはZulipのSSLを無効にしたため、自己署名証明書を生成するように設定する必要があります。
- EMAIL_HOST - メール通知を有効にするために必要なSMTPメールホストです。ここでは、チュートリアルのためにAmazon SESメールサービスを使用しています。
- EMAIL_HOST_USER - SMTPメールユーザー名です。
- EMAIL_PASSWORD - SMTPメールパスワード。
- EMAIL_PORT - SMTPメールポート。
- EMAIL_USE_SSL - SMTPホストがSSL認証をサポートしているかどうか。
- EMAIL_USE_TLS - SMTPホストがTLS認証をサポートしているかどうか。
- EMAIL_NOREPLY_ADD - 通知メールを送信するために使用されるノーリプライメールアドレスです。
- ZULIP_GIT_URL - 我々はZulipのDockerイメージを使用していますが、カスタムイメージをビルドしたい場合は、Zulip GitリポジトリのURLを入力する必要があります。
- ZULIP_GIT_REF - DockerイメージをビルドするためにGitリポジトリから使用するZulipのバージョン。
- SECRET_KEY - Zulipが認証に必要な強力な秘密鍵です。以前に作成した鍵を入力してください。
- POSTGRES_USER - PostgreSQLユーザーのユーザー名を選択してください。
- POSTGRES_DB - PostgreSQLデータベースのデータベース名を選択してください。
- POSTGRES_PASSWORD - PostgreSQLデータベース用に強力なパスワードを選択してください。
- REDIS_PASSWORD - Redisデータベースのために強力なパスワードを選んでください。
- MEMCACHED_PASSWORD - Memcachedサービスのために強力なパスワードを選択してください。
- RABBITMQ_DEFAULT_USER - RabbitMQサービスのユーザー名を選択してください。
- RABBITMQ_DEFAULT_PASS - RabbitMQサービスのために強力なパスワードを選択してください。
Docker Composeファイルを作成して編集のために開いてください。
nano docker-compose.yml
databaseサービスを定義するために、次のコードを追加します。
services:
database:
image: "zulip/zulip-postgresql:14"
container_name: zulip-db
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- "postgresql-14:/var/lib/postgresql/data:rw"
networks:
network:
ipv4_address: 10.5.0.2
データベースサービスには以下のオプションが含まれています:
- イメージ - これはDockerに
zulip-postgresql:14のイメージを取得するよう指示します。最新のZulipのバージョンはPostgreSQL 16をサポートしていますが、対応するDockerイメージはPostgreSQL 14のみをサポートしています。 - コンテナ名 - コンテナの名前を指定します。
- 再起動 - これはコンテナの再起動ポリシーを定義します。手動で停止されない限り、コンテナは自動的に再起動するように設定されています。
- 環境 - コンテナ用の環境変数を設定する必要があります。PostgreSQLデータベース、ユーザー名、およびパスワードを定義するために3つの変数を設定しました。
- ボリューム - ここでは、コンテナ内のPostgreSQLデータディレクトリを指す
postgresql-14という名前のボリュームを作成します。 - ネットワーク - これを使用して、他のコンテナからアクセスするために使用できる静的IPアドレスをコンテナに与えます。
次に、databaseサービスセクションの下に、memcachedサービスの定義を追加します。
memcached:
image: "memcached:alpine"
restart: unless-stopped
container_name: zulip-memcached
command:
- "sh"
- "-euc"
- |
echo 'mech_list: plain' > "$$SASL_CONF_PATH"
echo "zulip@$$HOSTNAME:$$MEMCACHED_PASSWORD" > "$$MEMCACHED_SASL_PWDB"
echo "zulip@localhost:$$MEMCACHED_PASSWORD" >> "$$MEMCACHED_SASL_PWDB"
exec memcached -S
environment:
SASL_CONF_PATH: "/home/memcache/memcached.conf"
MEMCACHED_SASL_PWDB: "/home/memcache/memcached-sasl-db"
MEMCACHED_PASSWORD: ${MEMCACHED_PASSWORD}
networks:
network:
ipv4_address: 10.5.0.3
このmemcachedサービスには、特有の以下の定義が含まれています:
- イメージ - ここでは、コンテナに
memcached:alpineイメージを使用します。アルパインイメージは、必要最低限のものだけが含まれているため、イメージのサイズが小さく保たれます。 - コマンド - ここでは、コンテナ作成後に実行されるいくつかのコマンドを実行して、Memcachedを設定し、Zulipの資格情報を設定します。これらのコマンドは、イメージによって宣言されたデフォルトのコマンドを上書きします。
- 環境 - ここでは、Memcachedの設定ファイル、パスワードデータベースファイル、およびパスワードの場所を設定します。
- ネットワーク - ここでは、DockerコンテナのためにユニークなプライベートIPアドレスを設定します。
次に、memcachedセクションの下にrabbitmqサービスの定義を追加してください。
rabbitmq:
image: "rabbitmq:alpine"
restart: unless-stopped
container_name: zulip-rabbitmq
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
volumes:
- "rabbitmq:/var/lib/rabbitmq:rw"
networks:
network:
ipv4_address: 10.5.0.4
このrabbitmqサービスには、特有の以下の定義が含まれています。
- 画像 - 前回と同様に、RabbitMQコンテナにはアルパインイメージを使用します。
- 環境 - 環境セクションを使用して、RabbitMQのデフォルトのユーザー名とパスワードを設定します。
- ボリューム - ここでは、コンテナ内のRabbitMQディレクトリを指す
rabbitmqという名前のボリュームを作成します。 - ネットワーク - 前と同じように、コンテナのためにユニークなIPアドレスを設定します。
次に、rabbitmqセクションの下にredisサービスの定義を追加します。
redis:
image: "redis:alpine"
restart: unless-stopped
container_name: zulip-redis
command:
- "sh"
- "-euc"
- |
echo "requirepass '$$REDIS_PASSWORD'" > /etc/redis.conf
exec redis-server /etc/redis.conf
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
- "redis:/data:rw"
networks:
network:
ipv4_address: 10.5.0.5
このredisサービスには、次のような特有の定義が含まれています。
- 画像 - ここではRedisコンテナのためにアルパインイメージを使用します。
- コマンド - Redisのパスワードを設定し、それを使用してサーバーを起動するためにコマンドを使用します。
- ボリューム - ここでは、コンテナ内のデータディレクトリを指す
redisという名前のボリュームを作成します。 - ネットワーク - 前と同じように、RedisコンテナのユニークなIPアドレスを設定します。
最後に、redis セクションの下に zulip サービスの定義を追加してください。
zulip:
image: "zulip/docker-zulip:8.2-0"
restart: unless-stopped
container_name: zulip
ports:
- "8080:80"
environment:
DB_HOST: "database"
DB_HOST_PORT: "5432"
DB_USER: ${POSTGRES_USER}
DISABLE_HTTPS: ${DISABLE_HTTPS}
SSL_CERTIFICATE_GENERATION: ${SSL_CERTIFICATE_GENERATION}
LOADBALANCER_IPS: 10.5.0.0/16
SETTING_MEMCACHED_LOCATION: "memcached:11211"
SETTING_RABBITMQ_HOST: "rabbitmq"
SETTING_REDIS_HOST: "redis"
SECRETS_email_password: ${EMAIL_PASSWORD}
SECRETS_rabbitmq_password: ${RABBITMQ_DEFAULT_PASS}
SECRETS_postgres_password: ${POSTGRES_PASSWORD}
SECRETS_memcached_password: ${MEMCACHED_PASSWORD}
SECRETS_redis_password: ${REDIS_PASSWORD}
SECRETS_secret_key: ${SECRET_KEY}
SETTING_EXTERNAL_HOST: ${EXTERNAL_HOST}
SETTING_ZULIP_ADMINISTRATOR: ${ZULIP_ADMINISTRATOR}
SETTING_EMAIL_HOST: ${EMAIL_HOST}
SETTING_EMAIL_HOST_USER: ${EMAIL_HOST_USER}
SETTING_EMAIL_PORT: ${EMAIL_PORT}
SETTING_EMAIL_USE_SSL: ${EMAIL_USE_SSL}
SETTING_EMAIL_USE_TLS: ${EMAIL_USE_TLS}
ZULIP_AUTH_BACKENDS: ${ZULIP_AUTH_BACKENDS}
SETTING_NOREPLY_EMAIL_ADDRESS: ${EMAIL_NOREPLY_ADD}
# Uncomment this when configuring the mobile push notifications service
# SETTING_PUSH_NOTIFICATION_BOUNCER_URL: ${ZULIP_PUSH_NOTIFICATION_BOUNCER_URL}
volumes:
- "zulip:/data:rw"
ulimits:
nofile:
soft: 1000000
hard: 1048576
networks:
network:
ipv4_address: 10.5.0.6
zulip サービスには、以下の特有の定義が含まれています:
- ポート - Zulipコンテナはプロセスの一部としてnginxを実行しています。ここでは、コンテナのポート80をホストサーバーのポート8080にマッピングしました。後で、コンテナの外でNginxをプロキシマネージャーとして設定するために使用します。
- 環境 - ここでは、Zulipを設定するための環境変数を構成します。ほとんどの環境変数は、先に説明した
.envファイルから取得されます。データベースホストはdatabaseコンテナサービスに設定され、ポートはデフォルトのPostgreSQLポート5432に設定されます。LOADBALANCER_IPS変数はDockerネットワークサブネットに設定されています。これは、リバースプロキシサーバーの背後でZulipを動作させるために必要です。MEMCACHED_LOCATIONは、デフォルトポート11211のmemcachedサービスに設定されています。同様に、RabbitMQとRedisホストもそれぞれのコンテナサービスを指すように設定されています。 - ボリューム - ここでは、名前付きボリュームを設定し、それを
/dataディレクトリに読み書きモードで設定します。 - ulimits - ここでは、コンテナのユーザーのリソース使用に対するソフトリミットとハードリミットを設定します。
- ネットワーク - 前と同様に、ZulipコンテナにユニークなIPアドレスを設定します。
そして最後に、次のコードを貼り付けます。
volumes:
zulip:
postgresql-14:
rabbitmq:
redis:
networks:
network:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
ここでは、以前に作成したコンテナ用の名前付きボリュームを定義します。次に、すべてのコンテナを接続し、サブネットとゲートウェイIPアドレスを提供するブリッジネットワークを定義します。
完了したら、Ctrl + Xを押してファイルを保存し、完了したらプロンプトが表示された時にYを入力してください。
完成したDocker Composeファイルは以下のようになります。
services:
database:
image: "zulip/zulip-postgresql:14"
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- "postgresql-14:/var/lib/postgresql/data:rw"
networks:
network:
ipv4_address: 10.5.0.2
memcached:
image: "memcached:alpine"
restart: unless-stopped
command:
- "sh"
- "-euc"
- |
echo 'mech_list: plain' > "$$SASL_CONF_PATH"
echo "zulip@$$HOSTNAME:$$MEMCACHED_PASSWORD" > "$$MEMCACHED_SASL_PWDB"
echo "zulip@localhost:$$MEMCACHED_PASSWORD" >> "$$MEMCACHED_SASL_PWDB"
exec memcached -S
environment:
SASL_CONF_PATH: "/home/memcache/memcached.conf"
MEMCACHED_SASL_PWDB: "/home/memcache/memcached-sasl-db"
MEMCACHED_PASSWORD: ${MEMCACHED_PASSWORD}
networks:
network:
ipv4_address: 10.5.0.3
rabbitmq:
image: "rabbitmq:alpine"
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
volumes:
- "rabbitmq:/var/lib/rabbitmq:rw"
networks:
network:
ipv4_address: 10.5.0.4
redis:
image: "redis:alpine"
restart: unless-stopped
command:
- "sh"
- "-euc"
- |
echo "requirepass '$$REDIS_PASSWORD'" > /etc/redis.conf
exec redis-server /etc/redis.conf
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
- "redis:/data:rw"
networks:
network:
ipv4_address: 10.5.0.5
zulip:
image: "zulip/docker-zulip:8.1-0"
restart: unless-stopped
#build:
# context: .
# args:
# ZULIP_GIT_URL: ${ZULIP_GIT_URL}
# ZULIP_GIT_REF: ${ZULIP_GIT_REF}
# Set this up if you plan to use your own CA certificate bundle for building
# CUSTOM_CA_CERTIFICATES: ${ZULIP_CUSTOM_CA_CERTIFICATES}
ports:
- "8080:80"
environment:
DB_HOST: 10.5.0.2
DB_HOST_PORT: "5432"
DB_USER: ${POSTGRES_USER}
DISABLE_HTTPS: ${DISABLE_HTTPS}
LOADBALANCER_IPS: 10.5.0.6
SSL_CERTIFICATE_GENERATION: ${SSL_CERTIFICATE_GENERATION}
SETTING_MEMCACHED_LOCATION: "memcached:11211"
SETTING_RABBITMQ_HOST: "rabbitmq"
SETTING_REDIS_HOST: "redis"
SECRETS_email_password: ${EMAIL_PASSWORD}
SECRETS_rabbitmq_password: ${RABBITMQ_DEFAULT_PASS}
SECRETS_postgres_password: ${POSTGRES_PASSWORD}
SECRETS_memcached_password: ${MEMCACHED_PASSWORD}
SECRETS_redis_password: ${REDIS_PASSWORD}
SECRETS_secret_key: ${SECRET_KEY}
SETTING_EXTERNAL_HOST: ${EXTERNAL_HOST}
SETTING_ZULIP_ADMINISTRATOR: ${ZULIP_ADMINISTRATOR}
SETTING_EMAIL_HOST: ${EMAIL_HOST}
SETTING_EMAIL_HOST_USER: ${EMAIL_HOST_USER}
SETTING_EMAIL_PORT: ${EMAIL_PORT}
SETTING_EMAIL_USE_SSL: ${EMAIL_USE_SSL}
SETTING_EMAIL_USE_TLS: ${EMAIL_USE_TLS}
ZULIP_AUTH_BACKENDS: ${ZULIP_AUTH_BACKENDS}
SETTING_NOREPLY_EMAIL_ADDRESS: ${EMAIL_NOREPLY_ADD}
# Uncomment this when configuring the mobile push notifications service
# SETTING_PUSH_NOTIFICATION_BOUNCER_URL: ${ZULIP_PUSH_NOTIFICATION_BOUNCER_URL}
volumes:
- "zulip:/data:rw"
ulimits:
nofile:
soft: 1000000
hard: 1048576
networks:
network:
ipv4_address: 10.5.0.6
volumes:
zulip:
postgresql-14:
rabbitmq:
redis:
networks:
network:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
ステップ7 - Zulipをインストールする
次のコマンドを使用してZulipコンテナを開始します。
docker compose up -d
以下のコマンドを使用してコンテナのステータスを確認してください。
docker ps
あなたは似たような出力を見るべきです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fea5d02f53d7 rabbitmq:alpine "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp zulip-rabbitmq
01cb77f16c1a zulip/zulip-postgresql:14 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 5432/tcp zulip-db
f5b6523a3a8c zulip/docker-zulip:8.2-0 "/sbin/entrypoint.sh…" 2 minutes ago Up 2 minutes 443/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp zulip
c0a358209b09 redis:alpine "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 6379/tcp zulip-redis
27be352a0a35 memcached:alpine "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 11211/tcp zulip-memcached
同じことのために次のコマンドも使用できます。
docker compose ps
この場合、あなたの出力は次のようになります。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
zulip zulip/docker-zulip:8.2-0 "/sbin/entrypoint.sh…" zulip About a minute ago Up About a minute 443/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp
zulip-db zulip/zulip-postgresql:14 "docker-entrypoint.s…" database About a minute ago Up About a minute 5432/tcp
zulip-memcached memcached:alpine "docker-entrypoint.s…" memcached About a minute ago Up About a minute 11211/tcp
zulip-rabbitmq rabbitmq:alpine "docker-entrypoint.s…" rabbitmq About a minute ago Up About a minute 4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp
zulip-redis redis:alpine "docker-entrypoint.s…" redis About a minute ago Up About a minute 6379/tcp
Zulipコンテナが動作を開始するまでに時間がかかります。以下のコマンドを使用して進捗を確認できます。
docker logs zulip --follow
コンテナをセットアップするために実行される長いコマンドのリストが表示されます。次の出力が表示されると、Zulipがインストールされたことを意味します。
2024-02-21 09:02:55,310 INFO success: go-camo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: smokescreen entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip-django entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip-tornado entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip_deliver_scheduled_emails entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip_deliver_scheduled_messages entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: process-fts-updates entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip_events_deferred_work entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip_events_digest_emails entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,311 INFO success: zulip_events_email_mirror entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_embed_links entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_embedded_bots entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_invites entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_email_senders entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_missedmessage_emails entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_missedmessage_mobile_notifications entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_outgoing_webhooks entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_user_activity entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_user_activity_interval entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-02-21 09:02:55,312 INFO success: zulip_events_user_presence entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Ctrl + Cを押して画面を終了します。Zulipはインストールされています。ただし、Zulipを提供するためにNginxを設定する必要があります。
ステップ8 - Nginxを設定する
ファイル /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 を入力します。
/etc/nginx/conf.d/zulip.conf ファイルを作成して編集のために開きます。
sudo nano /etc/nginx/conf.d/zulip.conf
そのコードをそこに貼り付けてください。
server {
listen 80;
listen [::]:80;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name zulip.example.com;
ssl_certificate /etc/letsencrypt/live/zulip.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zulip.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/zulip.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
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;
tcp_nopush on;
gzip on;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 20m;
proxy_pass http://127.0.0.1:8080;
}
}
作業が完了したら、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 restart nginx
ステップ9 - Zulipインターフェースへのアクセス
https://zulip.example.com/ をブラウザに訪問すると、以下の画面が表示されます。
新しい組織のリンクを使用すると、次のページに移動します。
ご覧のように、Zulipはフロントエンドから組織を作成することを許可していません。ターミナルに戻り、次のコマンドを実行して新しい組織ページのURLを作成してください。次のセクションでZulipコマンドの使い方について詳しく説明します。
docker compose exec -u zulip zulip /home/zulip/deployments/current/manage.py generate_realm_creation_link
Please visit the following secure single-use link to register your
new Zulip organization:
https://zulip.example.com/new/svvss33z4qmwewmanbbcalen
ブラウザでURL https://zulip.example.com/new/cjjivovgcillw44z7gsnobkv を開くと、次のページに移動します。
あなたの組織名、組織タイプ、言語、メールIDを入力して、組織の作成を開始してください。組織を作成 ボタンをクリックして続行します。
次の画面でアカウントの設定を求められます。
名前を入力し、ログイン用のパスワードを選択して、サインアップボタンをクリックして続行してください。
完了すると、Zulipダッシュボードが開き、使用を開始できます。
ステップ10 - Zulipサーバーコマンド
時々、Zulipサーバーのコマンドを実行するために、コンテナシェルへのアクセスが必要になります。zulipユーザーとしてシェルにアクセスするには、以下のコマンドを使用してください。
docker compose exec -u zulip zulip bash
または、次のコマンドを使用できます。
docker exec -itu zulip zulip bash
コンテナ内でコマンドを実行するには、次のように単一のコマンドを使用して実行できます。
docker compose exec -u zulip zulip \
/home/zulip/deployments/current/manage.py help <subcommand>
しかし、より簡単な方法があります。それはコマンドを実行するためのシェルスクリプトを作成することです。zulip_manage.shを作成して編集のために開きます。
nano zulip_manage.sh
そのコードをそこに貼り付けてください。
#!/bin/sh
docker compose exec -u zulip zulip /home/zulip/deployments/current/manage.py "$@"
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
スクリプトを実行可能にしてください。
chmod +x zulip_manage.sh
Zulipサーバーを停止するには、以下のコマンドを使用してください。
docker exec -u zulip zulip /home/zulip/deployments/current/scripts/stop-server
process-fts-updates: stopped
zulip-django: stopped
zulip-tornado: stopped
zulip-workers:zulip_events_deferred_work: stopped
zulip-workers:zulip_events_digest_emails: stopped
zulip-workers:zulip_events_email_mirror: stopped
zulip-workers:zulip_events_email_senders: stopped
zulip-workers:zulip_events_embed_links: stopped
zulip-workers:zulip_events_embedded_bots: stopped
zulip-workers:zulip_events_invites: stopped
zulip-workers:zulip_events_missedmessage_emails: stopped
zulip-workers:zulip_events_missedmessage_mobile_notifications: stopped
zulip-workers:zulip_events_outgoing_webhooks: stopped
zulip-workers:zulip_events_user_activity: stopped
zulip-workers:zulip_events_user_activity_interval: stopped
zulip-workers:zulip_events_user_presence: stopped
zulip_deliver_scheduled_emails: stopped
zulip_deliver_scheduled_messages: stopped
Zulip stopped successfully!
サーバーを再起動するには、以下のコマンドを使用してください。
docker exec -u zulip zulip /home/zulip/deployments/current/scripts/start-server
2024-02-21 09:18:52,932 start-server: Running syntax and database checks
System check identified no issues (28 silenced).
2024-02-21 09:18:54,944 start-server: Starting Tornado process
zulip-tornado: started
2024-02-21 09:18:56,089 start-server: Starting django server
zulip-django: started
2024-02-21 09:18:58,133 start-server: Starting workers
process-fts-updates: started
zulip-workers:zulip_events_deferred_work: started
zulip-workers:zulip_events_digest_emails: started
zulip-workers:zulip_events_email_mirror: started
zulip-workers:zulip_events_email_senders: started
zulip-workers:zulip_events_embed_links: started
zulip-workers:zulip_events_embedded_bots: started
zulip-workers:zulip_events_invites: started
zulip-workers:zulip_events_missedmessage_emails: started
zulip-workers:zulip_events_missedmessage_mobile_notifications: started
zulip-workers:zulip_events_outgoing_webhooks: started
zulip-workers:zulip_events_user_activity: started
zulip-workers:zulip_events_user_activity_interval: started
zulip-workers:zulip_events_user_presence: started
zulip_deliver_scheduled_emails: started
zulip_deliver_scheduled_messages: started
2024-02-21 09:19:19,571 start-server: Done!
Zulip started successfully!
サーバーを同様の方法で再起動してください。
docker exec -u zulip zulip /home/zulip/deployments/current/scripts/restart-server
Zulipに付属するmanage.pyスクリプトを使用して達成できる管理タスクがたくさんあります。
次のコマンドを使ってスクリプトを実行できます。可能なすべての操作をリストするために、helpサブコマンドを使用します。
./zulip_manage.sh help
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[analytics]
check_analytics_state
clear_analytics_tables
clear_single_stat
populate_analytics_db
update_analytics_counts
[django]
dbshell
makemigrations
migrate
shell
showmigrations
[zerver]
add_users_to_streams
archive_messages
audit_fts_indexes
backup
bulk_change_user_name
change_password
change_realm_subdomain
change_user_email
change_user_role
check_redis
checkconfig
compilemessages
convert_gitter_data
convert_mattermost_data
convert_rocketchat_data
convert_slack_data
create_default_stream_groups
create_realm
create_realm_internal_bots
create_stream
create_user
deactivate_realm
deactivate_user
delete_old_unclaimed_attachments
delete_realm
delete_user
deliver_scheduled_emails
deliver_scheduled_messages
edit_linkifiers
email_mirror
enqueue_digest_emails
enqueue_file
export
export_search
export_single_user
export_usermessage_batch
fetch_tor_exit_nodes
fill_memcached_caches
generate_realm_creation_link
get_migration_status
import
list_realms
logout_all_users
makemessages
merge_streams
process_queue
promote_new_full_members
purge_queue
query_ldap
rate_limit
reactivate_realm
realm_domain
register_server
remove_users_from_stream
reset_authentication_attempt_count
restore_messages
runtornado
scrub_realm
send_custom_email
send_password_reset_email
send_realm_reactivation_email
send_test_email
send_to_email_mirror
send_webhook_fixture_message
send_welcome_bot_message
show_admins
soft_deactivate_users
sync_ldap_user_data
transfer_uploads_to_s3
unarchive_stream
Dockerのentrypoint.shファイルには、他にもいくつかのオプションが提供されています。以下のコマンドを実行して、それらを確認してください。
docker exec -it zulip bash /sbin/entrypoint.sh app:help
次の出力が表示されるはずです。
Available commands:
> app:help - Show this help menu and exit
> app:version - Container Zulip server version
> app:managepy - Run Zulip's manage.py script (defaults to "shell")
> app:backup - Create backups of Zulip instances
> app:restore - Restore backups of Zulip instances
> app:certs - Create self-signed certificates
> app:run - Run the Zulip server
> [COMMAND] - Run given command with arguments in shell
ステップ11 - 送信メールのテスト
あなたの送信メール設定をテストするために、次のコマンドを使用してテストメールを送信できます。
~/docker-zulip/zulip_manage.sh send_test_email [email
If you run into any trouble, read:
https://zulip.readthedocs.io/en/latest/production/email.html#troubleshooting
The most common error is not setting `ADD_TOKENS_TO_NOREPLY_ADDRESS=False` when
using an email provider that doesn't support that feature.
Sending 2 test emails from:
* [email
* [email
Successfully sent 2 emails to [email
ステップ12 - Zulipのアップグレード
Zulipをアップグレードする最初のステップは、既存のコンテナを停止することです。
cd ~/docker-zulip
docker compose stop
docker-compose.ymlファイルを編集するために開いてください。
nano docker-compose.yml
ZulipのDockerHubタグページから最新のバージョンを確認してください。次のセクションのバージョンを修正します。
.....
zulip:
image: "zulip/docker-zulip:8.2-0"
restart: unless-stopped
container_name: zulip
....
必要な他の変更を行ってください。それにはZulipの変更履歴とZulipのDocker GitHubリポジトリを参照する必要があります。
完了したら、Ctrl + X を押してファイルを保存し、プロンプトが表示されたらYを入力します。
コンテナを再起動してください。Zulipコンテナは変更を加えて再作成されます。
docker compose up -d
古い容器を取り除いてください。
docker compose rm
結論
これでRocky Linux 9サーバーにZulip Chatサーバーをインストールして設定するためのチュートリアルは終了です。詳細についてはZulipの公式ドキュメントを参照してください。質問がある場合は、下のコメントに投稿してください。




