☰
Rallly CLI 自托管实战指南:一条命令完成安装、配置与日常运维
2026/10/13 1:57:07 网站建设 项目流程
  • 后端
  • 前端

【免费下载链接】rallly

Rallly is an open-source scheduling and collaboration tool designed to make organizing events and meetings easier.

项目地址:https://gitcode.com/gh_mirrors/ra/rallly
点击查看免费下载

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记录指向服务器 IPTraefik 首次启动会向 Let's Encrypt 申请证书
可用的 SMTP 服务用于发送魔法链接登录邮件与通知;官方建议使用事务邮件服务商(Resend、Postmark、Mailgun、Brevo 等),不推荐自建 SMTP,也不建议用 Gmail/Proton Mail 等个人邮箱——投递率与限流问题会直接影响登录邮件送达

一条命令完成安装

在满足前置条件的服务器上执行:

curl -fsSL https://get.rallly.co | bash

安装器会依次完成(对应 安装指南 中的流程):

  1. 检查 Docker 与所需端口是否可用;
  2. 将整套栈下载到/opt/rallly;
  3. 以交互方式引导配置(域名、支持邮箱、SMTP);
  4. 自动生成安全密钥(SECRET_PASSWORD等);
  5. 启动整套栈。

全程无需手工编辑任何文件。首次启动时 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认领管理员角色。具体步骤见控制面板指南:

  1. 用INITIAL_ADMIN_EMAIL对应的邮箱完成一次登录(创建账号);
  2. 访问/control-panel;
  3. 点击页面上的"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/falseSMTP 服务器;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 凭据

迁移流程概览:

  1. 保存密钥:从旧.env/config.env复制上述值;
  2. 备份数据库:docker compose exec -T rallly_db pg_dump -U postgres rallly | gzip > rallly-backup.sql.gz,并转移到服务器之外;
  3. 停旧栈:docker compose down;若旧栈前有 Nginx/Caddy 等外部代理,需停用并释放 80/443(sudo ss -tlnp | grep -E ':(80|443)\b'应无输出);
  4. 装新栈:执行curl -fsSL https://get.rallly.co | bash,交互时使用相同的DOMAIN,粘贴第 1 步保存的邮箱与 SMTP 配置;装完后先不要启动,编辑/opt/rallly/.env,把新生成的SECRET_PASSWORD替换为旧值,并补上交互安装未覆盖的 SSO 变量;
  5. 启动并恢复数据库:./rallly.sh start,等待数据库初始化(约 10 秒,./rallly.sh logs db出现database system is ready to accept connections后),执行上文"恢复"流程中的 drop/create/restore 命令;
  6. 验证:HTTPS 访问、用旧账号登录(若SECRET_PASSWORD保留正确,旧会话甚至可能仍有效)、打开旧投票确认数据完整、测试 SMTP 与各 SSO 登录;
  7. 清理:确认无误后再删除旧栈目录与孤儿 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.

项目地址:https://gitcode.com/gh_mirrors/ra/rallly
点击查看免费下载

相关推荐

上一篇:8步出图+2K高清:腾讯混元Image-2.1 GGUF版轻量化革命
下一篇:Magic.css终极指南:用70+专业CSS3动画打造惊艳数字展示效果

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询