- 后端
- 前端
【免费下载链接】rallly
Rallly is an open-source scheduling and collaboration tool designed to make organizing events and meetings easier.
Rallly 是一个开源的日程协调工具,帮助团队快速确定会议时间(创建投票、分享链接、让参与者标记可用时间,无需来回邮件)。随着 v4.10 起自托管发行版形态的演进,官方引入了Rallly CLI(rallly.sh):它把安装、配置与日常运维统一收敛为一个命令行入口,并随栈捆绑了 PostgreSQL、Traefik 反向代理与 Garage 对象存储。本文将以官方公告 Introducing the Rallly CLI 为骨架,结合仓库内安装指南、管理指南、迁移指南与配置参考及源码实现,带你完整掌握从零部署、日常操作、升级备份到旧实例迁移的全流程。
背景:自托管从"手工配方"走向"产品化"
在 Rallly CLI 出现之前,自托管 Rallly 的典型路径是:复制一份示例docker-compose.yml、手工编辑、自行挑选反向代理、再为图片上传单独对接一个 S3 bucket。这条路可行,但每次安装都会因人而异——"我是不是漏配了哪一项?"成为支持邮箱里反复出现的问题。
CLI 的目标正是消除这种不确定性:安装、配置和日常运维全部由工具接管。从源码看,这一设计意图贯穿始终:仓库根目录的 docker-compose.yml 只是开发/示例形态,真正面向自托管的栈由安装器生成并托管在/opt/rallly,所有行为都通过.env与rallly.sh暴露,用户不再需要手写 Compose 文件。
前置要求:一次读清,避免踩坑
根据 安装指南,部署前请确认服务器满足以下条件:
| 要求 | 说明 |
|---|---|
| 至少 2 GB RAM | 栈内同时运行应用、数据库、代理与对象存储 |
| Docker 19.03+,含 Compose v2 | 安装器依赖 Compose 配置文件与 profiles 机制 |
| 开放 80 与 443 端口 | 仅供捆绑的 Traefik 使用;若自带反向代理可跳过(见下文"外部服务") |
域名 DNSA记录指向服务器 IP | Traefik 首次启动会向 Let's Encrypt 申请证书 |
| 可用的 SMTP 服务 | 用于发送魔法链接登录邮件与通知;官方建议使用事务邮件服务商(Resend、Postmark、Mailgun、Brevo 等),不推荐自建 SMTP,也不建议用 Gmail/Proton Mail 等个人邮箱——投递率与限流问题会直接影响登录邮件送达 |
一条命令完成安装
在满足前置条件的服务器上执行:
curl -fsSL https://get.rallly.co | bash安装器会依次完成(对应 安装指南 中的流程):
- 检查 Docker 与所需端口是否可用;
- 将整套栈下载到
/opt/rallly; - 以交互方式引导配置(域名、支持邮箱、SMTP);
- 自动生成安全密钥(
SECRET_PASSWORD等); - 启动整套栈。
全程无需手工编辑任何文件。首次启动时 Traefik 会为你的域名申请 Let's Encrypt 证书,通常需要最多一分钟;证书就绪后,实例即可通过https://<你的域名>访问。
开箱即用的完整栈
安装完成后,一个可运行的实例自动包含四部分:
- Rallly—— Web 应用本体;
- PostgreSQL—— 主数据库;
- Traefik—— 反向代理,自动签发与管理 Let's Encrypt 证书;
- Garage—— S3 兼容对象存储,头像与图片上传开箱即用。
栈中只有 Traefik 绑定宿主机的 80/443 端口,其余服务都隔离在 Docker 内部网络中。这与仓库内的开发栈结构一致:参考 docker-compose.dev.yml 可以看到 Garage 以--single-node --default-bucket单节点模式运行,并通过 docker/garage.toml(replication_factor = 1、sqlite 引擎)提供 S3 API;docker/cors.json 则配置了允许浏览器直接上传所需的 CORS 规则。
安装后的第一件事:认领管理员
栈启动后,第一个使用INITIAL_ADMIN_EMAIL指定邮箱登录的用户可以前往/control-panel认领管理员角色。具体步骤见控制面板指南:
- 用
INITIAL_ADMIN_EMAIL对应的邮箱完成一次登录(创建账号); - 访问
/control-panel; - 点击页面上的"Make me an admin"(让我成为管理员)按钮。
认领后即可管理用户与实例设置。若看到"Administrator access required"提示,通常是INITIAL_ADMIN_EMAIL未设置或不匹配当前登录邮箱——更新.env并./rallly.sh restart后重试即可。
日常运维:rallly.sh 命令详解
安装完成后,所有日常操作都通过栈目录(如/opt/rallly)下的rallly.sh完成。完整命令集见管理指南:
./rallly.sh start # 启动全部服务 ./rallly.sh stop # 停止全部服务 ./rallly.sh restart # 重启全部服务(应用 .env 变更) ./rallly.sh status # 查看服务状态 ./rallly.sh logs # 流式查看全部服务日志 ./rallly.sh logs web # 查看指定服务(web)日志 ./rallly.sh update # 拉取最新镜像并重建容器 ./rallly.sh backup # 备份数据库到 ./backups/几个要点:
restart即配置生效:修改.env后,一条./rallly.sh restart即可应用,无需手工逐个重启容器。logs支持按服务过滤:可用的服务名包括web、db、garage、traefik,例如排查证书问题用./rallly.sh logs traefik,排查应用启动失败用./rallly.sh logs web。backup生成带时间戳的.sql.gz文件,写入./backups/目录;这是最重要的恢复产物,应定期转移出服务器。
升级:一行命令搞定,数据与配置保留
./rallly.sh update该命令拉取最新 Docker 镜像并重建容器,数据与.env配置均被保留。默认情况下,栈跟踪lukevella/rallly:4标签,因此update会自动带来兼容的 4.x 系列最新发布版;如需锁定特定版本或切换主版本,可在.env中设置RALLLY_IMAGE(见配置参考)。
⚠️重要警告:不要编辑docker-compose.yml或其他栈文件。./rallly.sh update假定这些文件未被改动,且会覆盖本地修改。只有.env是安全的编辑对象。
官方公告中还提到一个长期收益:由于 CLI 对整套栈拥有更强控制力,未来可以继续追加新服务(例如队列、缓存等),而不会让安装过程变得更复杂,也无需用户再手动改 Compose 文件。
备份与恢复:从./backups/到一键还原
备份
./rallly.sh backup数据库备份以带时间戳的.sql.gz形式写入./backups/。需要注意:备份仅覆盖 PostgreSQL 数据库;上传的文件(头像等)存放在garage-dataDocker volume 中,若依赖上传功能需另行备份该卷。
恢复
完整恢复流程(来自管理指南):
# 1. 停止应用(保持 db 服务运行),释放数据库连接 docker compose stop web # 2. 删除并重建空数据库——连接 "postgres" 库才能删 "rallly" docker compose exec -T db psql -U postgres -d postgres -c "DROP DATABASE IF EXISTS rallly;" docker compose exec -T db psql -U postgres -d postgres -c "CREATE DATABASE rallly;" # 3. 还原——ON_ERROR_STOP=1 让首个错误立即失败,而非静默继续 gunzip < backups/rallly_20260101_120000.sql.gz | docker compose exec -T db psql -v ON_ERROR_STOP=1 -U postgres rallly # 4. 重新启动应用 ./rallly.sh start一切配置从.env出发
CLI 模式下,内部接线(数据库连接串、S3 endpoint、NEXT_PUBLIC_BASE_URL)由 Compose 栈自动推导,无需手工设置;用户只需维护.env。核心变量如下(完整参考见配置参考):
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
DOMAIN | ✅ | — | 实例服务域名(如rallly.example.com,不带协议与斜杠);Traefik 据此申请证书并路由流量 |
ACME_EMAIL | ✅ | — | Let's Encrypt 证书通知邮箱(过期提醒等) |
SECRET_PASSWORD | ✅ | — | 用于加密用户会话的随机密钥,至少 32 字符,可用openssl rand -base64 32生成 |
SUPPORT_EMAIL | ✅ | — | 展示给用户的支持联系邮箱 |
NOREPLY_EMAIL | — | 回退到SUPPORT_EMAIL | 所有事务邮件的发件地址 |
NOREPLY_EMAIL_NAME | — | Rallly | 事务邮件发件人名称 |
INITIAL_ADMIN_EMAIL | — | — | 首个可认领管理员角色的邮箱 |
SMTP_HOST/SMTP_PORT/SMTP_SECURE | ✅ | 587/false | SMTP 服务器;587/25 用 STARTTLS(SMTP_SECURE=false),465 用隐式 TLS(SMTP_SECURE=true) |
SMTP_USER/SMTP_PWD | — | — | SMTP 认证凭据(如启用) |
SMTP_REJECT_UNAUTHORIZED | — | true | 校验 TLS 证书;置false接受自签名证书(生产不推荐) |
SMTP_TLS_SERVERNAME | — | — | 当SMTP_HOST是 IP 或仅经/etc/hosts解析时,用于 TLS 证书校验的主机名 |
从源码可以印证SECRET_PASSWORD的关键地位:apps/web/src/env.ts 中它以z.string().min(32)做运行时校验(不足 32 字符将拒绝启动);同时它不止用于会话加密——在 apps/web/src/features/credentials/data.ts、通知模块与评论动作中,均通过encrypt/decrypt(..., env.SECRET_PASSWORD)加解密存储的 OAuth 凭据。迁移或备份时,这个值必须妥善保留。
修改.env后,执行./rallly.sh restart生效。
按需替换外部服务:捆绑容器自动"隐身"
CLI 栈的巧妙之处在于:捆绑的 Traefik、Postgres、Garage 只是默认选项,通过 Compose profiles 实现按需跳过——只要配置了对应外部端点,对应捆绑容器就不会启动,无需编辑任何栈文件。
外部反向代理
PROXY_MODE=external WEB_PORT=127.0.0.1:3000设置PROXY_MODE=external后,捆绑的 Traefik 被禁用,web容器改为发布到宿主机端口(WEB_PORT默认127.0.0.1:3000,仅回环地址,更安全)。TLS 终止与转发由你的 Nginx/Caddy/Cloudflare Tunnel 负责;需要对外暴露时可改为0.0.0.0:3000或更换端口。交互式安装时,在./rallly.sh setup的反向代理步骤选择选项 2("external")即可。
外部数据库
DATABASE_URL=postgres://user:password@db.example.com:5432/rallly设置DATABASE_URL指向托管 Postgres(RDS、Supabase、Neon 等)后,捆绑的db容器自动不启动。
外部对象存储
S3_ENDPOINT=https://s3.us-east-1.amazonaws.com S3_BUCKET_NAME=my-rallly-bucket S3_REGION=us-east-1 S3_ACCESS_KEY_ID=... S3_SECRET_ACCESS_KEY=...当S3_ENDPOINT指向非捆绑 Garage 的地址时(AWS S3、Cloudflare R2、MinIO 均可),捆绑的garage容器自动不启动。
从旧版本平滑迁移
如果你正运行手工编辑的docker-compose.yml或config.env,官方从v4.10起提供逐步迁移指南,可升级到 CLI 栈且不丢失数据。迁移前必须先完成数据库备份,并妥善保存以下值:
| 值 | 说明 |
|---|---|
SECRET_PASSWORD | 最关键,必须原样带过去。用于加密会话;一旦变更,所有现有会话全部失效 |
SUPPORT_EMAIL、NOREPLY_EMAIL | 邮箱相关 |
SMTP_HOST/SMTP_PORT/SMTP_SECURE/SMTP_USER/SMTP_PWD | 全部 SMTP 配置 |
ALLOWED_EMAILS、INITIAL_ADMIN_EMAIL | 如已设置 |
OIDC_*、GOOGLE_*、MICROSOFT_* | 你使用的 SSO 凭据 |
迁移流程概览:
- 保存密钥:从旧
.env/config.env复制上述值; - 备份数据库:
docker compose exec -T rallly_db pg_dump -U postgres rallly | gzip > rallly-backup.sql.gz,并转移到服务器之外; - 停旧栈:
docker compose down;若旧栈前有 Nginx/Caddy 等外部代理,需停用并释放 80/443(sudo ss -tlnp | grep -E ':(80|443)\b'应无输出); - 装新栈:执行
curl -fsSL https://get.rallly.co | bash,交互时使用相同的DOMAIN,粘贴第 1 步保存的邮箱与 SMTP 配置;装完后先不要启动,编辑/opt/rallly/.env,把新生成的SECRET_PASSWORD替换为旧值,并补上交互安装未覆盖的 SSO 变量; - 启动并恢复数据库:
./rallly.sh start,等待数据库初始化(约 10 秒,./rallly.sh logs db出现database system is ready to accept connections后),执行上文"恢复"流程中的 drop/create/restore 命令; - 验证:HTTPS 访问、用旧账号登录(若
SECRET_PASSWORD保留正确,旧会话甚至可能仍有效)、打开旧投票确认数据完整、测试 SMTP 与各 SSO 登录; - 清理:确认无误后再删除旧栈目录与孤儿 volume(删除前务必用
docker compose config --format json | jq -r .name确认新栈项目名,避免误删)。
迁移中不会带过去的内容:TLS 证书(Traefik 会重新签发)、自定义docker-compose.yml修改(新栈是受管形态)、外部 S3 bucket 中已有的上传文件(要么继续指向外部 S3,要么接受旧文件不会出现在新 Garage 实例中)。
常见问题排查
| 现象 | 排查要点 |
|---|---|
| SSL 证书未签发 | Let's Encrypt 首次签发最长 1 分钟;检查 DNSA记录是否指向服务器公网 IP、80/443 是否被防火墙拦截,用./rallly.sh logs traefik查看 ACME 错误 |
| 80/443 已被占用 | Nginx/Apache/其他 Docker 栈占用了端口,需停止或改绑,Traefik 需要两个端口 |
| 容器反复重启 | ./rallly.sh logs web与./rallly.sh logs db定位;常见原因:.env缺失或非法(如空SECRET_PASSWORD)、SMTP 不可达、数据库首次启动尚未就绪 |
| 首次启动数据库连接错误 | Postgres 初始化需数秒,应用会自动重试;持续报错则检查./rallly.sh logs db |
源码佐证:CLI 栈的运行机制
仓库源码可以印证上面描述的若干细节:
- 启动即迁移:scripts/docker-start.sh 是容器入口脚本——除非
MAINTENANCE_MODE=true(此时跳过以避免数据库不可达导致启动失败),否则启动时先执行npx prisma migrate deploy --config=./prisma.config.ts应用数据库迁移,再node apps/web/server.js启动 Next.js 服务端。这就是为什么恢复流程要求先停web、清空数据库再灌入旧数据。 - 自托管镜像裁剪:apps/web/Dockerfile 通过构建参数
SELF_HOSTED控制云功能裁剪,并显式ENV NEXT_TELEMETRY_DISABLED=1;健康检查使用curl --fail --noproxy '*' http://localhost:${PORT}/api/status,其中--noproxy '*'确保对自身回环地址的探测不受宿主机代理策略影响。 - 版本追踪:
update默认跟踪lukevella/rallly:4标签这一行为,在配置参考 中体现为RALLLY_IMAGE变量的默认值,意味着 4.x 系列的小版本更新无需任何手工干预。
从哪开始
- 全新安装:安装指南——从零部署到 HTTPS 就绪;
- 日常操作:管理指南——更新、备份、日志与恢复;
- 旧版本升级:迁移指南——不丢数据地迁移到 CLI 栈;
- 完整变量表:配置参考——含认证、品牌、SSO、企业网络代理等全部环境变量。
总的来说,Rallly CLI 的推出让自托管从"照着配方做"变成了"开箱即用的产品":一条命令完成安装,七条命令覆盖日常运维,数据与配置在升级中始终保留,外部服务也可按需替换。对于希望完全掌控数据、又不想陷入手工运维泥潭的团队,这是一个相当顺手的起点。
- 后端
- 前端
【免费下载链接】rallly
Rallly is an open-source scheduling and collaboration tool designed to make organizing events and meetings easier.
相关推荐
shadPS4 游戏打不开?保姆级补齐 PS4 固件 .sprx 到 sys_modules 目录
shadPS4 游戏打不开?保姆级补齐 PS4 固件 .sprx 到 sys_modules 目录 第一次在 shadPS4 里拉起游戏,窗口闪一下就退出,日志
虚拟化图形学FreshRSS 命令行工具(CLI)完全指南:从安装配置到批量运维的实战手册
FreshRSS 命令行工具(CLI)完全指南:从安装配置到批量运维的实战手册 FreshRSS 是一款免费、可自行托管的新闻聚合器,其 CLI 工具集把 We
后端前端CLIMoviePilot CLI 完全指南:本地源码模式的一体化安装、配置与运维命令手册
MoviePilot CLI 完全指南:本地源码模式的一体化安装、配置与运维命令手册 MoviePilot 是 NAS 媒体库自动化管理工具。 moviepil
后端AI AgentMCP 服务AI 技能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考