Zulip 开发环境安装指南:Vagrant、WSL 2、直接安装与远程开发的完整路线图
【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip
本指南是 Zulip 开源项目开发环境的安装总览篇,系统梳理从「本机安装」到「远程开发」的全部官方路径:推荐新手使用的 Vagrant(macOS/Linux)与 WSL 2(Windows)方案、面向有经验开发者的 Linux 直接安装方案,以及针对网络不佳场景的远程虚拟机方案。读完本文,你将掌握 Zulip 开发环境的最低硬件要求、各安装方式的适用场景与取舍原则、./tools/provision与./tools/run-dev的核心用法,并能根据自身网络、存储和操作系统条件选择最合适的落地路径。
安装前的硬性要求
无论选择哪种安装方式,Zulip 开发环境的安装都有两条不可妥协的前提:
- 内存:至少 2GB 可用 RAM。这是官方对宿主机(或远程虚拟机)的最低要求,Vagrantfile 中的默认配置也与之对应——分配 2 个 CPU 与 2 GiB 内存给客户机。
- 网络:全程需要稳定且速度合理的互联网连接。安装过程会下载数百兆字节的依赖(Ubuntu 基础镜像、Python 依赖、前端包等),如果网络受限,需要提前配置代理(详见下文「代理配置」)。
从平台支持看,Zulip 开发环境可在macOS、Windows 和 Linux上安装,官方推荐 Debian 或 Ubuntu 系的 Linux 发行版作为宿主系统。
三种安装路线总览
官方将安装方式划分为三条主线,它们的取舍逻辑非常清晰:
| 安装方式 | 适用平台 | 核心机制 | 优点 | 适用人群 |
|---|---|---|---|---|
| Vagrant 开发环境 | macOS、Linux(Windows 走 VM 路线时为备选) | 创建 Linux 容器(默认 Docker provider)或虚拟机,Zulip 服务器及全部相关服务在其中运行 | 隔离性好、易安装/更新/卸载、久经测试、性能良好 | 首次贡献者首选 |
| WSL 2 开发环境 | Windows | 在 Windows 子系统 Linux 中直接运行 | 比 VM 更轻量,接近原生 Linux 体验 | Windows 用户的官方首选 |
| 直接安装 | Ubuntu/Debian/CentOS/Fedora 等 Linux | 在宿主 Linux 系统上直接运行./tools/provision | 无虚拟化开销,启动最快 | 有经验的 Linux 用户、网络较慢者 |
官方对首次贡献者的明确建议是:macOS 和 Linux 用户使用 Vagrant 方案,Windows 用户使用 WSL 2 方案。
为什么推荐 Vagrant/WSL 2
Vagrant 方案的核心设计思想是:创建一个容器或虚拟机,并把包含你源代码的 Git 仓库以挂载方式同步进其中。Zulip 服务器和所有相关服务(PostgreSQL、Redis、RabbitMQ、Memcached 等)都在隔离环境内运行。这样做换来的是极强的可移植性和可靠性——官方文档明确指出,Vagrant/Docker 与 WSL 2 这两项技术是他们在服务了数千名开发环境使用者之后,基于实际经验挑选出的「最可靠」组合。Vagrant 唯一的代价是给开发服务器带来少量额外开销,但换来的是易于安装、更新和卸载:一个vagrant destroy即可彻底清理环境。
推荐路线一:Vagrant 开发环境
平台前置条件
不同平台的前置条件各不相同(详见 docs/development/setup-recommended.md):
- macOS:安装最新版 Vagrant 与最新版 Docker Desktop。若使用旧版 Docker Desktop,可能需要取消勾选 "Use gRPC FUSE for file sharing" 并回退到
osxfs (legacy)文件共享模式,否则 provision 会失败(典型报错如ERR_PNPM_LINKING_FAILED)。 - Ubuntu/Debian:通过 HashiCorp APT 源安装 Vagrant,再执行
sudo apt install docker.io git安装 Docker 与 Git;Fedora 使用sudo yum install vagrant git moby-engine;Arch 从 AUR 安装 Vagrant(如yay -S vagrant)。 - 其他 Linux 发行版:只要支持 Git、Vagrant 和 Docker 即可,可参照 Ubuntu/Debian 步骤操作。
所有平台都要求至少 2GB 可用 RAM和宽带网络。
获取 Zulip 代码
安装依赖之前,先完成 Git 与 GitHub 的准备(Step 0):安装 Git、注册 GitHub 账号、创建 SSH key 并添加到账号。然后 fork 官方仓库并克隆到本地:
$ git clone --config pull.rebase git@github.com:YOURUSERNAME/zulip.git $ cd zulip $ git remote add -f upstream https://github.com/zulip/zulip.git--config pull.rebase让后续git pull默认采用 rebase 策略,这是 Zulip 协作规范的一部分。upstreamremote 用于与官方主仓库保持同步。
启动与首次 provisioning
在 zulip 目录下执行:
$ vagrant up --provider=docker首次运行耗时较长,Vagrant 会依次完成:下载 Ubuntu 22.04 基础镜像 → 配置容器/虚拟机 → 建立共享目录(把你的 Zulip 代码克隆挂载进客户机的~/zulip)→ 在客户机内运行./tools/provision脚本,下载全部依赖、搭建 Python 环境、初始化默认测试数据库。整个 provisioning 过程称为 "provisioning",细节记录在 docs/subsystems/dependencies.md。
Provisioning 完成后,通过vagrant ssh进入环境。注意命令提示符应以(zulip-server) vagrant@开头——(zulip-server)前缀是 provisioning 成功的标志;如果只有vagrant@,说明 provisioning 失败,需要回到故障排查章节。
$ vagrant ssh Welcome to Ubuntu 22.04.3 LTS ... (zulip-server) vagrant@vagrant:/srv/zulip$ ./tools/run-dev启动成功后会看到这样的输出,其中 9991–9994 是开发环境的四个内部端口:
Starting Zulip on: http://localhost:9991/ Internal ports: 9991: Development server proxy (connect here) 9992: Django 9993: Tornado 9994: webpack Tornado server (re)started on port 9993 frontend (webpack 5.89.0) compiled successfully in 8054 ms这些端口分工在 tools/run-dev 中定义:base_port = 9991,9991 是统一入口的开发服务器代理,9992 运行 Django,9993 运行 Tornado,9994 是 webpack 前端构建服务。在浏览器打开http://localhost:9991/devlogin即可看到 Zulip 开发环境登录页。
如果vagrant up因网络不稳定在 provisioning 阶段失败,可重试vagrant provision——首次之后vagrant up只负责启动客户机、不再重复 provisioning。
Vagrant 生命周期管理
- 更新:
vagrant provision可随时重新应用最新配置;官方建议 rebase 到新版本后出现莫名错误时先重新 provision(约一分钟即可完成)。 - 暂停/恢复:
vagrant halt关机,vagrant up重新启动;重启后重新执行vagrant ssh进入环境。 - 重建:先
vagrant destroy再重新vagrant up,即可从零重建干净环境。 - 卸载:
vagrant destroy即完成卸载——这是直接安装方案不具备的便利。
Windows 上的 Vagrant 备选(VirtualBox / Hyper-V)
如果不想用 WSL 2,Windows 用户还有两条基于 Vagrant 的备选路线(docs/development/setup-advanced.md):
- VirtualBox 方案:安装 Git for Windows、VirtualBox、Vagrant,BIOS 开启硬件虚拟化(VT-x/AMD-V)。注意必须始终以管理员身份运行 Git BASH,且要在克隆代码前执行
git config --global core.symlinks true启用原生符号链接——Zulip 代码库包含大量 symlink,这是开发环境能正常工作的前提。启动命令为vagrant up --provider=virtualbox,还需安装vagrant-vbguest插件。 - Hyper-V 方案(beta):仅限 Windows Enterprise/Pro/Education。以管理员权限执行
vagrant up --provider=hyperv,过程中会提示输入 Windows 管理员凭据;因 Hyper-V 机器的 IP 每次重启都会变化,每次启动都需重新设置EXTERNAL_HOST环境变量(例如export EXTERNAL_HOST="$(hostname -I | xargs):9991"),这也是该方案标记为实验性的原因之一。
推荐路线二:Windows 上的 WSL 2
WSL 2 是 Windows 平台官方首推的开发环境方案(要求 WSL 2 版本 ≥ 0.67.6),流程如下:
BIOS 开启虚拟化(VT-x 或 AMD-V)。
安装 WSL 2及一个 Ubuntu WSL 发行版。官方建议为 Zulip新建独立的 WSL 实例,避免与已有环境中的
node等软件冲突;同时必须启用 WSL 2 的 systemd(用于管理数据库、缓存等服务),随后重启 WSL。以管理员身份打开 Ubuntu shell,更新系统并安装服务依赖:
$ sudo apt update && sudo apt upgrade $ sudo apt install rabbitmq-server memcached redis-server postgresql编辑
/etc/rabbitmq/rabbitmq-env.conf,确认末尾包含以下两行(RabbitMQ 只在本机监听 5672 端口):NODE_IP_ADDRESS=127.0.0.1 NODE_PORT=5672务必在 WSL 磁盘内操作(
cd ~),不要在 Windows 挂载盘(如/mnt/c/...)上运行./tools/provision,否则会遭遇权限问题。为 WSL 虚拟机新建 SSH key并添加到 GitHub——Windows 主机上的 SSH key 在 WSL 虚拟机会失效。
随后克隆代码并启动环境:
$ ./tools/provision $ source .venv/bin/activate $ ./tools/run-dev激活后提示符应出现(zulip-server)前缀。日常使用中,WSL 2 不需要显式关闭,直接关闭终端窗口即可;也可用 PowerShell 执行wsl --terminate <环境名>终止。恢复开发时只需重新打开 Git BASH、进入 zulip 目录并确认(zulip-server)前缀在,缺失时执行source .venv/bin/activate。推荐安装 VS Code 的 Remote - WSL 扩展,在 WSL 目录内用code .即可获得无缝的远程编辑体验。
推荐路线三:Linux 直接安装
对于 Linux 用户(或网络条件不允许下载虚拟机镜像的场景),可以直接在宿主系统上安装(docs/development/setup-advanced.md)。官方目前支持的平台包括:
- Ubuntu 22.04 / 24.04 / 26.04
- Debian 12 / 13
- CentOS 7(beta)、RHEL 7(beta)
- Fedora 43 / 44(beta)
注意事项:
- 直接安装没有官方支持的卸载流程——这是与 Vagrant 方案最本质的差异。文档明确警告:如果希望随时干净卸载,请改用 Vagrant。
- 不要以 root 用户运行安装(远程服务器场景需先创建带 sudo 权限的普通用户,见 docs/development/remote.md)。
- CentOS/Fedora/RHEL 需先安装 python3(如
yum install python),Debian/Ubuntu 已内置。
安装命令极其简洁,全部围绕仓库内的 provision 脚本展开:
# 从 zulip.git 克隆目录内执行 ./tools/provision source .venv/bin/activate ./tools/run-dev # 启动开发服务器provision 与 run-dev:开发环境的两个核心脚本
./tools/provision是整个安装体系的中枢,Vagrant、WSL 2、直接安装三条路线最终都汇聚到这个脚本上。它负责下载全部依赖、搭建 Python 虚拟环境(.venv)、初始化默认测试数据库。从源码结构看,provision 的逻辑主要由 tools/lib/provision.py 与 scripts/lib/setup-apt-repo 实现,官方甚至在文档中提示:若你使用的 Debian/Ubuntu 新版本尚未被支持,只需修改这两个文件中的少量代码即可自行添加支持并提交 PR。
./tools/run-dev则是开发服务器入口(tools/run-dev),其命令行参数包括--interface(设置代理监听的 IP 或主机名)与--behind-https-proxy(配合反向代理的 HTTPS 模式)等。启动后它会代理 9991 端口,并自动管理 Django/Tornado/webpack 三个子服务。
后续维护
直接安装方案更新环境同样靠./tools/provision重跑;切换分支后官方也建议重跑一次(若无变更,数秒内即可完成)。环境使用细节统一参考 Step 4: Developing 章节(忽略其中 Vagrant 相关内容即可)。
网络不佳怎么办:两条替代路线
官方针对慢速网络给出了两条替代路线(docs/development/overview.md):
- 放弃 Vagrant,改用直接安装:Vagrant 需要额外下载整个 Ubuntu 虚拟机/容器镜像,慢速网络下这是最大的时间黑洞;直接安装在 Linux 系统上可跳过这一步。
- 租用云服务器远程开发:见下一节。
远程开发:把开发环境放到云服务器上
Zulip 开发环境在远程虚拟机上运行良好(docs/development/remote.md),尤其适合网络差或本地存储/内存有限的人。官方建议给 Zulip 开发环境独立的虚拟机(至少 2GB 内存):
- 若虚拟机只跑 Zulip,推荐直接安装(省去虚拟化层开销);
- 若虚拟机还跑别的服务、需要随时卸载 Zulip,推荐Vagrant方案。
连接与用户配置
用ssh连接远程主机(macOS/Linux 自带,Windows 使用 Git for Windows 附带的 Bash)。网络不稳定时可用 Mosh 替代 SSH 以获得更可靠的体验。首次使用需创建带 sudo 权限的非 root 用户:
$ adduser zulipdev # 按提示设置密码 $ usermod -aG sudo zulipdev # 加入 sudo 组 $ su - zulipdev # 切换到该用户关键差异:EXTERNAL_HOST 与 --interface
远程开发与本地安装相比,核心差异是必须让开发服务器监听对外地址。在运行run-dev前先设置环境变量:
export EXTERNAL_HOST=<REMOTE_IP>:9991若服务器有静态 IP,官方建议把该命令写入~/.bashrc以免每次忘记。然后启动:
./tools/run-dev --interface=''--interface=''让 Zulip 开发环境可从任意 IP 访问(默认只监听 localhost,更安全但只适合本机开发)。启动后在浏览器访问http://<REMOTE_IP>:9991/devlogin即可看到 Zulip 开发环境登录页(该页面截图见 docs/images/zulip-devlogin.png)。
更安全的替代:SSH 端口转发
把开发服务器直接暴露到公网接口有安全风险。更稳妥的做法是用 SSH 端口转发:
ssh -L 3000:127.0.0.1:9991 <username>@<remote_server_ip> -N随后在本地浏览器访问http://127.0.0.1:3000即可,流量全程走加密的 SSH 隧道,无需向公网开放任何端口。
远程环境下的代码编辑与同步
远程开发有两种编辑模式:
- 本地编辑 + Git 同步:在本地克隆 Zulip 并用熟悉编辑器改代码,
git push origin branchname推到 GitHub 后,在远程实例执行git fetch origin && git merge origin/branchname拉取变更。 - 远程直接编辑:可选命令行编辑器(vim/nano)、桌面 GUI 编辑器插件(如 VS Code Remote - SSH、rmate),或 Web IDE(文档以 Codeanywhere 为例)。新手若想快速上手,官方推荐 Web IDE 方案。
HTTPS 场景:nginx 反向代理
某些集成开发(如调试 Facebook 的 OAuth2 回调)要求开发环境具备合法 SSL 证书,而run-dev本身不支持 HTTPS。解决办法是在run-dev前架设 nginx 反向代理:先用仓库内的 certbot 封装脚本 scripts/setup/setup-certbot 申请证书(方法可选 standalone),再将 tools/droplets/zulipdev 这份 nginx 站点配置软链到sites-enabled,最后以 HTTPS 模式启动:
env EXTERNAL_HOST="hostname.example.com" ./tools/run-dev --behind-https-proxy --interface=''通过 ~/.zulip-vagrant-config 定制环境
Vagrant 方案的各项关键参数都可以通过~/.zulip-vagrant-config配置文件定制。该文件的解析逻辑定义在 Vagrantfile,支持以下键:
| 配置键 | 默认值 | 作用 |
|---|---|---|
UBUNTU_MIRROR | 全局官方镜像 | 指定 Ubuntu 镜像源,加速首次下载 |
HTTP_PROXY/HTTPS_PROXY/NO_PROXY | 无 | 代理设置(需配合vagrant-proxyconf插件) |
HOST_PORT | 9991 | 宿主机访问开发服务器的端口 |
HOST_IP_ADDR | 127.0.0.1 | 宿主机监听 IP,设为 0.0.0.0 可从其他机器访问 |
GUEST_CPUS | 2 | 分配给客户机的 CPU 数(仅 VM 型 provider 生效) |
GUEST_MEMORY_MB | 2048 | 分配给客户机的内存(仅 VM 型 provider 生效) |
指定 Ubuntu 镜像源
默认情况下 Vagrant 从全局镜像http://archive.ubuntu.com/ubuntu/下载 Ubuntu 包,离镜像源较远会明显拖慢首次安装。在~/.zulip-vagrant-config中添加本地镜像即可加速:
UBUNTU_MIRROR http://us.archive.ubuntu.com/ubuntu/该值会通过UBUNTU_MIRROR构建参数传给 Docker provider(见 Vagrantfile)。
指定代理
需要代理才能上网时,先安装插件再写配置:
$ vagrant plugin install vagrant-proxyconf然后在~/.zulip-vagrant-config中写入(未安装插件会导致 Vagrant 直接退出并打印提示):
HTTP_PROXY http://proxy_host:port HTTPS_PROXY http://proxy_host:port NO_PROXY localhost,127.0.0.1,.example.com,.zulipdev.com需要认证的代理写法类似http://userName:userPassword@192.168.1.1:8080。务必仔细核对(常见错误是代理只支持http://却写成https://)——无效的代理配置会产生各种难以理解的异常,排查时最先检查它。若此前vagrant up失败过,需先vagrant destroy清理;不再需要代理时删除对应两行并vagrant reload即可。
自定义 CPU 与内存
Docker 等容器型 provider 无需显式分配资源(该配置会被忽略),但 VirtualBox、VMware Fusion 这类 VM provider 必须显式分配:
GUEST_CPUS 4 GUEST_MEMORY_MB 8192上述配置分配 4 个 CPU 与 8 GiB 内存。修改后执行vagrant reload重启客户机生效;想恢复默认,删除这两行即可。
自定义端口与对外访问
默认宿主机端口 9991(对应开发服务器代理)与客户机 9991 端口映射(Vagrantfile 同时映射了 9994/9995 给 webpack 等服务)。修改端口:
HOST_PORT 9971执行vagrant reload后,访问http://localhost:9971/即可。若希望从宿主机之外的其他机器访问开发环境,设置:
HOST_IP_ADDR 0.0.0.00.0.0.0是特殊值,表示允许任意 IP 连接。
故障排查要点
绝大多数安装问题都能通过重新 provision解决:Vagrant 环境内执行vagrant provision(或在客户机内./tools/provision),WSL 实例内执行~/zulip下的./tools/provision。常用排障工具与信息(详见 docs/development/setup-recommended.md):
tools/diagnose:在客户机/WSL 实例内运行,输出环境诊断信息。- provision 日志:Vagrant 虚拟机在
/var/log/provision.log,WSL 实例在~/zulip/var/log/provision.log。向社区报告问题时,官方特别要求贴出错误输出的开头部分(而非仅最后几行),并附上:宿主操作系统、安装方式(Vagrant/WSL)、是否使用代理。
常见问题速查:macOS 上 provision 失败报ERR_PNPM_LINKING_FAILED等错误时,把 Docker Desktop 文件共享切回osxfs (legacy);Hyper-V 报Hyper-V could not initialize memory时先关闭其他程序释放内存再重试;首次./tools/run-dev请耐心等待前端编译完成。
安装完成后的下一步
开发环境就绪后,官方建议按以下顺序阅读后续文档:
- 使用开发环境:编辑/刷新工作流——Django/Tornado 进程在 Python 代码保存后自动重启,CSS 修改经 webpack 热更新即时生效,JS 与 Handlebars 模板改动会触发浏览器自动刷新;数据库 schema 变更(
zerver/models/*.py)则需走 Django migrations 流程。 - 测试 与 为 fork 配置 CI:测试套件支持单文件/单用例快速运行,配合 CI 可大幅优化贡献流程。
- 远程开发用户可继续阅读 远程开发专题 中的编辑器与同步技巧。
至此,你已经掌握了 Zulip 开发环境从选型、安装、定制到排障的完整链路,可以按照自身平台和网络条件选择最优路径,开始为 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),仅供参考