本文介绍企业端从零到上线的完整流程。
1. 准备服务器
- 系统:Ubuntu 22.04 / 24.04,x86_64 或 arm64,4 核 8G 起;用中继分段同机再加 2 核 4G 余量。
- 网络:安装时要能访问 Docker Hub、npm、esm.sh(拉镜像与打包服务端函数)。纯内网机器请用安装脚本自带的离线参数,见下方「内网机器」。
- 地址:装完只保证
http://<服务器地址>:8000在内网可用。要跨公网走 https,自己在前面放反代(见第 3 节)。
服务器上已经有 Docker、运维不给 root 的,安装命令加 --docker-only 即可:不装系统包、不动 systemd,默认目录变成 ~/ditops。
2. 一键安装
一条命令即可:脚本取下载站上的最新版、按 latest.json 核对 sha256、解包,然后把参数原样交给安装脚本。安装包里是 compose、Kong 配置、邮件模板、数据库迁移与全部服务端函数,不需要另找仓库。
curl -fsSL https://downloads.ditops.cn/linux/enterprise/install-enterprise-web.sh \
| sudo bash -s -- --docker-only \
--org-name '某某科技有限公司' --admin-email admin@corp.example.com \
--host ditops.corp.example.com --scheme https
先看它要做什么,加 --dry-run 再跑一次即可(不装 docker、不起容器、不改数据库)。--version <x.y.z> 可以钉版本,这时要同时给 --sha256;内网取不到下载站时用 --base-url 指到自建镜像。
分步安装(想自己控制每一步时)
curl -fLO https://downloads.ditops.cn/linux/enterprise/ditops-installer-latest.tar.gz
tar xzf ditops-installer-latest.tar.gz -C /root
# 先空跑一遍,看它要写哪些文件(不装 docker、不起容器、不改数据库)
sudo /root/ditops-installer/scripts/install-enterprise.sh \
--org-name '某某科技有限公司' --host 10.0.0.10 --dry-run
# 确认无误后去掉 --dry-run
sudo /root/ditops-installer/scripts/install-enterprise.sh \
--org-name '某某科技有限公司' --host 10.0.0.10
--host 是对外地址(默认探测本机第一个非回环 IPv4)。--org-name 必填且不能是占位符:管理端首次登录会把企业名上报官方目录,登记后不可修改。
需要中继(RustDesk 会合 + 直连中继 + 检索)并且和数据库同机时,加 --only all(只装中继用 --only relay)。中继镜像由官方单独交付,要先 docker load 进来:
sudo /root/ditops-installer/scripts/install-enterprise.sh --only all \
--org-name '某某科技有限公司' --host ditops.corp.example.com --scheme https
装完屏幕上会打印四项,只出现这一次(同时写进 /opt/ditops/install-summary.txt,权限 0600):
- 企业服务器地址
- Anon Key
- 管理员账号与初始密码
- 设备绑定码
内网机器(拉不到 Docker Hub / npm / esm.sh)
在一台能出网的机器上先装一遍,把镜像与打好的函数带走:
mkdir -p ~/bundle/images
cd ~/ditops/enterprise
docker compose config --images | xargs docker save -o ~/bundle/images/enterprise.tar
tar czf ~/bundle/ditops-functions.tgz -C volumes functions
内网机器上解包,安装时带上两个参数:
cp -r ~/bundle/images ./images
tar xzf ~/bundle/ditops-functions.tgz # 得到 functions/
sudo ./scripts/install-enterprise.sh --docker-only \
--org-name '某某科技有限公司' --host 10.0.0.10 \
--images ./images --functions ./functions
用这种方式装的机器不要开自动更新(更新要在容器里重新打包函数,与离线前提冲突),升级按第 8 节手工做。
已有 Supabase 实例
已经有一套 Supabase、只想换 DitOps 需要的文件时,不用安装脚本:把包里的
supabase-enterprise/docker-compose.yml、supabase-enterprise/kong.yml 覆盖到位,
supabase-enterprise/mail-templates/ 挂给 GoTrue,再在 SQL Editor 里整文件执行
supabase-enterprise/supabase/migrations/00001_init.sql(幂等),最后用
supabase-enterprise/supabase/functions/ 部署服务端函数。这几样都不是可选项:
docker-compose.yml:多一个托管邮件模板的mail-templates服务,并把改邮箱的新旧地址双验证写死打开。kong.yml:官方这版 realtime 路由少了 Host 改写,不换的话服务端到客户端的实时推送会 401。mail-templates/:GoTrue 新版内置模板只发确认链接、不含 6 位验证码,而客户端要求用户输码;缺了模板登录和注册都会卡在输码那一步。
云托管(supabase.com)同理:在 Dashboard 的 SQL Editor 跑 00001_init.sql,再用 Supabase CLI 部署函数;数据库连接串请用 Dashboard 的 pooler 地址(直连地址是 IPv6-only)。云上没有 .env,验证码登录与告警邮件分别在哪配,见第 3 节第 2 条。
3. 装完还要人做的
-
改管理员密码:初始密码只在安装输出和
install-summary.txt里出现过。 -
配 SMTP(安装时没给
--smtp-*的话):验证码登录、邀请成员、改登录邮箱与告警邮件通知共用同一套发信账号,但两种库的配置位置不同:- 自部署(第 1–2 节的 Docker 企业库):改
/opt/ditops/enterprise/.env的SMTP_*(文件里带示例:465 是隐式 TLS,其它端口走 STARTTLS;QQ/163 填授权码),再docker compose up -d auth functions。只重启auth的话验证码能发,告警邮件仍按「未配置」失败。 - 云托管(Supabase 官方库):Dashboard → Authentication → Emails → SMTP 只服务于验证码与邀请;告警邮件读的是 Edge Functions → Secrets 里同名的那六个
SMTP_*键,两处互不相通。用provision-cloud.sh装的话,把六个键写进项目目录的.env重跑一次即可(SMTP_HOST与SMTP_ADMIN_EMAIL都给才会写)。
- 自部署(第 1–2 节的 Docker 企业库):改
-
反代与证书:脚本不碰证书。在前面放 NPM / Caddy,转发到
127.0.0.1:8000(企业库)或127.0.0.1:8080(中继),打开 WebSocket;中继必须用独立域名,不能挂子路径。配好后把.env里的SITE_URL、API_EXTERNAL_URL、SUPABASE_PUBLIC_URL改成 https 地址,再docker compose up -d。 -
备份:安装时默认已经配好每天 03:17 的
pg_dump -Fc到<安装根>/backups/(最近 7 份,--no-auto-backup可关)。但那份与主数据同盘,只防误操作与升级,不防盘坏:enterprise/volumes/db/data才是数据库本体,relay/data/rustdesk是 RustDesk 身份(丢了所有客户端拒连),这两样都要自己再往机外备一份。
(可选)启用企业统一登录(SSO / OIDC)
已经用 Keycloak / Entra ID / Okta / Authentik 等标准 IdP 管账号时,可以让成员用同一套账号登录 IT 管理端。在安装根目录执行一次:
sudo ./scripts/enable-enterprise-sso.sh --dir /opt/ditops \
--issuer https://sso.example.com/realms/corp --client-id ditops
脚本会补回调白名单、重启 auth、在企业库里登记 provider,登录页随即出现入口;client_secret 只存进 auth,不写进企业库。IdP 侧的回调地址填 https://<企业地址>/auth/v1/callback,断言里必须带 email_verified=true。成员要先由管理员邀请预置,没预置的邮箱登录会被拒。IdP 的域名必须能解析到公网地址(GoTrue 的 SSRF 校验会挡掉纯内网地址)。
4. 在 IT 管理端登记企业
企业管理员可下载 IT 管理端,或直接访问网页端(it.ditops.cn),在登录页选择「手动填写」,填入:
- 企业名称
- 企业服务器地址
- Anon Key
点击「测试并申请」,系统先测试连接,再自动完成登记,返回 6 位企业码。同一地址重复登记会返回已登记的编码与名称。
5. 注册管理员账号
企业管理员在 IT 管理端登录页注册第一个账号,自动成为该企业的管理员;之后管理员可在管理端按邮箱邀请成员加入。成员角色分管理员、技术员与只读——只读账号能看设备、告警、变更与补丁,但改不了任何东西,也拿不到凭据。
6. 等待审批
企业服务器能从公网以 https 访问时,登记后管理端会自动核验一次地址控制权,通过即「已通过」,通常不用等;内网地址或 http 地址无法自动核验,企业保持「待审批」,由官方人工审批后即可绑定设备。审批状态可在 IT 管理端登录页的「企业码获取」里实时查看。
7. 绑定设备上线
- 企业管理员在 IT 管理端设置绑定码。
- 桌面端 Agent 首次启动时,输入企业码与绑定码完成绑定,设备即上线并开始上报数据。
8. 升级与自动更新
官方发布新版后,企业端不必等人来装——安装脚本已经配好了:<安装根>/scripts/enterprise-auto-update.sh 每天 04:17 被 /etc/cron.d/ditops-auto-update-<项目名> 拉起,向官方目录要版本、验签、核对 SHA256,有已发布的新版就自动升级(先备份并迁移数据库,再换 compose 与函数)。装的时候加了 --no-auto-update 的机器不配(这个选择记在 <安装根>/.auto-update-disabled,以后重跑也不会自己打开;要重开加 --auto-update 或删掉那个文件);用 --images / --functions 离线装的机器本来就不配。
想先看看会装什么,手工跑一次:
sudo /opt/ditops/scripts/enterprise-auto-update.sh --dir /opt/ditops # 只检查
sudo /opt/ditops/scripts/enterprise-auto-update.sh --dir /opt/ditops --apply # 真装
不想让它自动装,用 --no-auto-update 重跑一次安装(会删掉那条 cron 并留下标记);只删 /etc/cron.d/ditops-auto-update-<项目名> 只能停到下次升级,升级时会被重建。也可以把条目里的 --apply 去掉,改成只报告。
脚本只认官方目录返回的、带数字签名的版本清单,下载后还会核对 SHA256;签名或校验和对不上就拒绝安装。安装顺序是「先备份并迁移数据库,再覆盖 compose 与服务端函数」,enterprise/.env 与数据目录始终不动。企业名由脚本从库里读出,cron 里不用写。本机版本记在 /opt/ditops/VERSION,与目录发布的版本一致时什么也不做。
默认不加 --apply 只报告,什么都不改——想先人工确认再装,就去掉 cron 里的 --apply,看日志里给出的版本号。离线安装的机器不要用它,按下面的手工方式升级。
安装/升级会把这一版企业端记录的版本号(bundle)与它还接受的最低客户端版本写进库里,客户端登录前就会读到:
- IT 管理端版本低于下限时,整页提示「当前版本过低」,只能在那一屏更新;
- 桌面端 Agent 继续运行,只在日志里提醒尽快升级(不中断采集);
- 目录端也不会把「要求更高企业端」的客户端版本下发给还没升级库的企业;
- Web 端会自动切到与当前企业库匹配的历史版本,不会拿新版页面去操作旧库。
所以企业端升级后,若管理端提示版本过低,更新 IT 管理端与 Agent 即可;升级客户端本身不影响企业库。
手工升级:
# 1. 库:默认只读,--apply 会先 pg_dump 备份到 <dir>/backups/ 再应用
sudo /root/ditops-installer/scripts/migrate-enterprise.sh --dir /opt/ditops --apply
# 2. compose 与函数:解新的安装包,用原来的安装命令重跑(覆盖文件、保留 .env 与数据)
sudo /root/ditops-installer/scripts/install-enterprise.sh \
--org-name '某某科技有限公司' --host 10.0.0.10
上线验证清单
- 安装脚本跑完,拿到企业地址、Anon Key、管理员账号、绑定码
- 企业状态为「已通过」
- 首个管理员账号已注册并改过密码
- 至少一台设备绑定成功并上报数据
- 已把数据库目录与中继密钥纳入备份
- 自动更新的 cron 条目在(
/etc/cron.d/ditops-auto-update-<项目名>),或是明确选了不配