Zulip是完全开源的,但是自托管版本有一些限制,详细对比可浏览这个网页查看。似乎只有移动推送通知限制10个用户有点蛋疼,其他的都不怎么影响体验。实际上如果配置了SMTP,离线用户是可以收到邮件通知的。

安装Docker:

apt -y update
apt -y install curl git
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh


克隆存储库:

cd /opt
git clone https://github.com/zulip/docker-zulip.git
cd docker-zulip


Zulip的compose编排使用了docker secrets来存储敏感数据。我们需要新建一个.env文件:

nano .env


至少写入以下内容,这里包括但不限于PG数据库密码、REDIS密码、您的SMTP邮件密码等:

ZULIP__POSTGRES_PASSWORD=example_postgres_password
ZULIP__MEMCACHED_PASSWORD=example_memcached_password
ZULIP__RABBITMQ_PASSWORD=example_rabbitmq_password
ZULIP__REDIS_PASSWORD=example_redis_password
ZULIP__SECRET_KEY=example_django_secret_key
ZULIP__EMAIL_PASSWORD=example_outgoing_email_password


编辑compose.override.yaml覆盖文件:

nano compose.override.yaml


在这个覆盖文件内至少需要修改以下内容:

services:
  zulip:
    environment:
      SETTING_EXTERNAL_HOST: "zulip.example.com"
      SETTING_ZULIP_ADMINISTRATOR: "imlala@example.com"
      TRUST_GATEWAY_IP: True
      SETTING_EMAIL_HOST: "mail.example.com"
      SETTING_EMAIL_HOST_USER: "smtp"
      SETTING_EMAIL_PORT: "587"
      SETTING_EMAIL_USE_SSL: False
      SETTING_EMAIL_USE_TLS: True
      SETTING_ZULIP_SERVICE_PUSH_NOTIFICATIONS: True
      SETTING_ZULIP_SERVICE_SUBMIT_USAGE_STATISTICS: False


编辑compose.yaml基础文件:

nano compose.yaml


我们使用反向代理,所以在这里注释掉Zulip容器的443端口,同时将对外暴露的80端口改为8089:

---
services:
  zulip:
    image: "ghcr.io/zulip/zulip-server:11.6-1"
    restart: unless-stopped
    build:
      context: .
    ports:
      - name: smtp
        target: 25
        published: 25
        app_protocol: smtp
      - name: http
        target: 80
        published: 8089
        app_protocol: http
#      - name: https
#        target: 443
#        published: 443
#        app_protocol: https


拉取镜像并初始化Zulip:

docker compose pull
docker compose run --rm zulip app:init


如果一切正常,您应该看到类似下图的回显:



如果输出结果并非以该内容结尾:

=== End Initial Configuration Phase ===


请仔细阅读输出结果以查找警告或错误。

现在就可以启动Zulip了:

docker compose up zulip --wait


配置Ferron反向代理:

nano /etc/ferron.kdl


写入如下内容:

zulip.example.com {
   proxy "http://127.0.0.1:8089/"
   proxy_request_header_replace "Host" "{header:Host}"
}


重载Ferron:

systemctl reload ferron


生成一个链接,在浏览器访问该链接创建新组织:

docker compose exec -u zulip zulip \
    /home/zulip/deployments/current/manage.py generate_realm_creation_link


如图所示:



效果:



关于移动推送通知,除了设置SETTING_ZULIP_SERVICE_PUSH_NOTIFICATIONS: True,还需要执行如下命令注册才能使用:

docker compose exec -u zulip zulip \
    /home/zulip/deployments/current/manage.py register_server


如果您的hostname(完全限定域名fqdn)之前已经注册过,可以使用下面的命令迁移注册:

docker compose exec -u zulip zulip \
    /home/zulip/deployments/current/manage.py register_server --registration-transfer


排查错误:

docker compose exec zulip bash
cat /var/log/zulip/errors.log