Zulip 服务器自托管安装完全指南:从基础服务器到生产就绪的完整实战教程
发布时间:2026/9/12 15:21:37 锦皓数字建站

Zulip 服务器自托管安装完全指南从基础服务器到生产就绪的完整实战教程【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip导读Zulip 是一款开源团队聊天软件其服务端与 Web 应用均来自当前仓库zulip项目。当你想把 Zulip 部署到自己掌控的服务器上时docs/production/install.md 就是官方给出的标准安装路径。本指南以该文档为主线结合仓库中的安装脚本、配置模板与源码实现带你完整走通准备基础服务器 → 下载发布包 → 运行安装器 → 创建组织并登录的四个步骤并深入解析每个安装器选项的底层行为、安装失败后的幂等重试机制以及装好之后的邮件、HTTPS、移动推送等生产级配置要点。托管方式选择自托管只是其中一条路在动手安装前Zulip 官方提供了四种托管选择install.md 开篇就做了对比方式适用场景说明按本文档自托管想完全掌控服务器在任意满足要求的 Ubuntu/Debian 系统上安装Docker 镜像偏好容器化参见 docs/production/docker.md预配置 DigitalOcean 镜像快速起步在 DigitalOcean 市场直接创建Zulip Cloud 托管不想运维官方托管服务按计划付费如果你的目标是数据迁移install.md 指出可以分别按 Slack 的导入指引操作。值得注意的是如果你正在做数据导入安装流程要停在第 2 步安装 Zulip之后、创建组织之前——先回到对应的导入文档导入完成后再继续否则会破坏导入流程。另外要区分清楚本文是自托管生产安装指南如果你是开发者想为项目贡献代码应当走开发环境搭建流程docs/contributing/contributing.md 与 docs/development/overview.md而不是用安装器。安装流程总览官方给出的完整安装流程只有四步安装器承担了绝大部分自动化工作第 0 步准备基础服务器第 1 步下载最新发布包第 2 步运行安装器安装 Zulip第 3 步创建 Zulip 组织并登录装完即用后续再按需参考 settings.md 做配置调优。第 0 步准备基础服务器安装器假定 Zulip 是这台系统上唯一运行的服务它会用apt安装 nginx、PostgreSQL、Redis 等系统包并配置为自己所用requirements.md 中明确说明了这一点。因此强烈建议使用云厂商的全新实例、全新 VM或专用裸机而不是与其它业务混跑的服务器——混跑场景官方不提供支持仅有少量经验性笔记见 docs/production/install-existing-server.md。硬件与系统要求以 docs/production/requirements.md 为准操作系统Ubuntu 22.04 / 24.04 / 26.04或 Debian 12 / 13如果使用 Docker 镜像则不受此限制。使用 Ubuntu 时需确保启用了 universe 软件源通常执行sudo add-apt-repository universe sudo apt update。CPU 架构x86-64 或 aarch64。内存至少 2 GB RAM低于 5 GB 时必须配置 swap官方建议 2 GB。预期 100 用户时建议 4 GB RAM 2 核 CPU。磁盘至少 10 GB 可用空间考虑系统占用总体磁盘约 25 GB建议 SSD避免 IOPS 受限的云存储后端因为磁盘主要用于 Zulip 数据库。网络与安全入站 HTTPS默认 443 端口可配置为其它端口入站 80 端口可选Zulip 只通过 HTTPS 提供内容会把 HTTP 请求重定向到 HTTPS若启用入站邮件集成需要开放 25 端口端口 4369 必须用防火墙保护防止暴露 Erlang 的epmd服务它不支持只绑定 localhost暴露后远程用户可无认证探测到服务器在运行 RabbitMQ 及其端口出站 HTTP(S)80/443用于图片/网站预览和移动推送出站 SMTP通常 587用于发送邮件Zulip 内置 Smokescreen 出站代理 防护 SSRF 攻击默认拦截对私网地址的请求。凭据一个域名如zulip.example.com、一张 SSL 证书、以及可用的 SMTP 发信凭据。规模化方面requirements.md 的缩放建议为25 日活用户 4 GB RAM、100 日活用户 8 GB、400 日活用户应用服务器 16 GB 数据库 16 GB、2000 日活用户各 32 GB。数百日活用户规模推荐使用远程 PostgreSQL 数据库更大规模可考虑 Tornado 实时推送服务的分片方案。第 1 步下载最新发布包登录到基础服务器后用如下命令下载并解压最新发布包cd $(mktemp -d) curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz tar -xf zulip-server-latest.tar.gz当前仓库版本为Zulip Server 12.2见 version.py 中的LATEST_RELEASE_VERSION。如需校验下载完整性可以对照官方的 SHA256SUMS.txt 校验文件核对 sha256 摘要。第 2 步运行安装器安装 Zulip2.1 基本安装命令先切换到root用户如尚未是 root[ $(whoami) ! root ] sudo -s然后以最常见配置运行安装器提供真实的维护者邮箱与用户可访问的域名./zulip-server-*/scripts/setup/install --push-notifications --certbot \ --emailYOUR_EMAIL --hostnameYOUR_HOSTNAME执行后安装器会立即弹出 Zulip 服务条款确认因为--push-notifications会把服务器注册到移动推送服务确认后继续。如果暂时不想注册推送服务去掉--push-notifications标志即可。整个安装过程需要几分钟期间会安装 Zulip 的全部依赖。2.2 安装脚本的底层结构仓库中的scripts/setup/install只是一个薄封装scripts/setup/install它强制要求以 root 运行先创建日志目录再把真正的安装逻辑 scripts/lib/install 的全部输出同时写入/var/log/zulip/install.log和终端。其核心价值在于失败诊断脚本失败时终端会提示 A log of this installation is available in /var/log/zulip/install.log方便排查。真正的安装器scripts/lib/install用getopt解析全部命令行选项并做了一系列前置校验这些校验逻辑正是本文档各选项约束的源码出处--hostname与--email是必填项除非同时使用了--no-init-db或--puppet-classes且不带--certbot占位示例值被拒绝安装器明确检查zulip.example.com与zulip-adminexample.com发现后直接报错退出对应 zerver/checks.py 中的后续校验非 ASCII 域名被拒绝提示必须使用 Punycodexn--前缀形式并尝试用 python3 给出转换建议--certbot与--self-signed-cert互斥同时传入会报错--push-notifications与--no-push-notifications互斥PostgreSQL 版本号低于 14 会被拒绝PostgreSQL 14 or newer is required两个标志都未传时默认--no-push-notifications只有启用推送时--no-submit-usage-statistics才有意义SERVICE_SUBMIT_USAGE_STATISTICS的取值由两者共同决定。安装器按 docs/production/deployment.md最终完成的工作包括创建zulip用户所有 Zulip 服务进程都以该用户运行、创建/home/zulip/deployments/目录并把代码树移动到其中、以符号链接/home/zulip/deployments/current指向当前部署版本、安装依赖、配置 PostgreSQL/RabbitMQ/Memcached/Redis 等第三方服务、初始化 Zulip 数据库。2.3 幂等性失败后直接重跑安装器被设计为幂等的如果脚本中途失败修正失败原因后直接重新运行脚本即可完整日志在/var/log/zulip/install.log。这也是scripts/setup/install封装脚本在失败提示中专门强调的。详细的故障排查见 docs/production/troubleshooting.md。2.4 安装器选项详解下表汇总了 install.md 中列出的全部标准选项并补充了仓库中 scripts/lib/install 的源码说明选项作用说明 / 源码依据--emailit-teamexample.com指定 Zulip 安装的维护者真实邮箱会显示在自动邮件、帮助页、错误页上同时写入ZULIP_ADMINISTRATOR设置并成为 Django 的SERVER_EMAIL与ADMINS见 zproject/default_settings.py。可后续用ZULIP_ADMINISTRATOR配置显示名--hostnamezulip.example.com用户访问本服务器的域名写入EXTERNAL_HOST设置非 ASCII 域名必须用 Punycode--certbot用 Certbot 自动获取并续期 SSL 证书配置 cron 定时续期也可手动提供证书见 ssl-certificates.md--push-notifications/--no-push-notifications注册/不注册移动推送服务注册会立即弹出服务条款确认不传时默认--no-push-notifications--no-submit-usage-statistics关闭使用统计上报仅在上报基础元数据之外关掉聚合统计未启用推送时该参数无意义--agree-to-terms-of-service预先同意服务条款跳过推送注册的交互式确认便于在脚本中无人值守运行--self-signed-cert生成自签名 SSL 证书仅适合测试或反代之后使用与--certbot互斥install.md 还提示读者更多高级安装选项参见 deployment.md 的 Advanced installer options 一节包括--postgresql-version18指定要安装的 PostgreSQL 版本目前支持 14–18默认 18--postgresql-database-namezulip/--postgresql-database-userzulip自定义数据库名与用户仅首次安装可设置--no-init-db跳过数据库初始化适用于已有 Zulip 数据库的场景--no-overwrite-settings保留/etc/zulip下已有的配置文件--puppet-classes指定要安装的 Puppet 类默认zulip::profile::standalone隐式启用--no-init-db。2.5 关于移动推送注册的重要提示使用--push-notifications注册时服务器会向推送转发服务上报两类数据详见 docs/production/mobile-push-notifications.md基础元数据必需用于计费与免费计划资格判定包括每组织在未认证GET /server_settingsAPI 上暴露的部分字段、组织类型与创建日期、各角色用户数量聚合使用统计默认开启消息发送/阅读总量、多口径活跃用户数等可通过--no-submit-usage-statistics或事后在/etc/zulip/settings.py中设置ZULIP_SERVICE_SUBMIT_USAGE_STATISTICSFalse关闭。Zulip Server 12.0 的推送通知使用端到端加密E2EElibsodiumcrypto_secretbox_easyXSalsa20-Poly1305推送服务只能转发密文无法读取消息内容与元数据。推送服务的注册与注销、密钥轮换、注册迁移等日常管理通过manage.py register_server源码见 zerver/management/commands/register_server.py完成。2.6 安装完成前的关键提醒如果你正在做数据导入请在这里停下先回到对应的导入指引Slack、以及官方备份恢复。导入完成后再继续下一步不要在此处直接创建组织。第 3 步创建 Zulip 组织并登录安装过程结束后安装脚本会打印一个安全的一次性组织创建链接。在浏览器中打开该链接并按提示操作即可完成组织设置并创建你自己的管理员账号——至此你的 Zulip 组织即可投入使用。如果链接遗失或需要再次生成可在服务器上执行su zulip -c /home/zulip/deployments/current/manage.py generate_realm_creation_link该命令对应管理命令源码 zerver/management/commands/generate_realm_creation_link.py它会先检查数据库是否已初始化否则报 The Zulip database does not appear to exist. Have you run initialize-database?再调用generate_realm_creation_url(by_adminTrue)生成带随机令牌的单次使用链接。若一台服务器上需要运行多个组织参考 docs/production/multiple-organizations.md。安装后的起步配置与运维要点安装完成只是开始要让 Zulip 真正运转起来还至少需要两件事配置出站邮件Zulip 需要能发送邮件用于新用户邮箱确认与各类通知docs/production/email.md。配置要点在/etc/zulip/settings.py中填写 Outgoing email (SMTP) settings 段落包括EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER无需认证的 SMTP 可留空将 SMTP 密码写入/etc/zulip/zulip-secrets.conf的email_password abcd1234Zulip 刻意不在 settings.py 中存放任何秘密信息所以 Django 文档中的EMAIL_HOST_PASSWORD对应到这里在 SMTP 服务端放行ZULIP_ADMINISTRATOR、NOREPLY_EMAIL_ADDRESS及默认开启的TOKENIZED_NOREPLY_EMAIL_ADDRESS三个发件地址用测试命令验证su zulip -c /home/zulip/deployments/current/manage.py send_test_email userexample.com成功会收到两封邮件默认发件地址与 noreply 地址各一封修改配置后重启服务器su zulip -c /home/zulip/deployments/current/scripts/restart-server。常见故障定位托管商防火墙可能封禁 SMTP 端口Zulip 每次发信都会记录到/var/log/zulip/send_email.log异常堆栈在/var/log/zulip/errors.log。没有现成 SMTP 时推荐 Mailgun、SendGrid、Amazon SES 等事务邮件服务的免费额度或临时用文件后端把邮件写到/var/log/zulip/emails便于原型调试。装好邮件后还可以引导团队成员按官方 getting started 文档 把组织用起来。订阅管理员公告建议服务器管理员订阅 Zulip 官方公告邮件列表该列表流量极低只发布重要公告如新版本发布与安全问题。此外settings.md、export-and-import.md 与 upgrade.md 分别覆盖了服务器配置、备份导入导出与升级流程是装完之后的三个高频参考页面。常见问题与进阶主题速查主题参考文档安装器失败排查docs/production/troubleshooting.mdSSL 证书的多种获取方式docs/production/ssl-certificates.mdCertbot 方式 / 手动安装 / 自签名反向代理部署docs/production/reverse-proxies.md非 443 端口部署docs/production/deployment.md#using-an-alternate-port独立数据库 / 服务拆分docs/production/postgresql.md 与 deployment.md服务器设置调优docs/production/settings.md从 Git 仓库升级docs/production/upgrade.md从裸机准备到组织上线官方安装器的自动化程度非常高四步即可完成真正需要投入精力的是安装前的硬件/网络评估以及安装后的邮件、HTTPS、推送与备份策略。本指南已把每一步的官方文档要点与仓库源码依据串在了一起按图索骥即可完成一套生产可用的 Zulip 自托管服务器。【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。