为实验室部署
一个实验室,一个数据库。
BioManager 可以在你自己的电脑上运行,两分钟就能用上;也可以放在服务器上,全实验室用任何浏览器和手机打开。 本页列出所有的部署方式、各自的费用,以及具体的设置步骤。大多数实验室一分钱都不用花。
第一部分
从这里开始
桌面版还是服务器?
两种情况下 BioManager 都是同一个程序,区别只在于数据库放在哪里、谁能访问它。
💻 桌面版
给一个人用
下载 macOS、Windows 或 Linux 版,打开就能用。数据库是那台电脑上的一个文件,只属于这台电脑。 不用安装别的东西,也不用另外运行什么。
🌐 实验室服务器(网页版)
给整个实验室用
由一台机器运行 BioManager,其他人都在浏览器里打开:笔记本电脑、鼠房里的电脑、笼架旁的手机都可以。 大家看到的是同一份记录,实时更新,而且每晚自动备份。
| 手机 | 手机打开的是服务器,不能连桌面版。Android:安装 BioManager 应用 (.apk),输入一次服务器地址即可;它的扫描(Scan)按钮可以读取笼卡。 iPhone 和 iPad:用 Safari 打开服务器,点分享 → 添加到主屏幕(Share → Add to Home Screen)。 它会有自己的图标,像应用一样全屏打开,可以用相机扫描笼卡。 |
|---|---|
| 混合使用 | 先在自己的笔记本电脑上用桌面版。等实验室其他人加入时,一步就能把同一个数据库 迁到服务器上,什么都不用重新录入。 |
| 浏览器 | 任何较新版本的 Safari、Chrome、Edge 或 Firefox。浅色和深色模式跟随系统设置。 |
选择方式
回答三个问题就能定下来:
- 只有你自己用?用桌面版(A)就行了。
- 所有人都在同一栋楼、同一个网络里?可以用实验室网络里的一台电脑(B), 或者向 IT 部门申请学校的服务器(C)。
- 有人在家里、用手机流量,或者分布在不同地点?用配合 Tailscale 的云虚拟机(D):私密、免费,在哪里都能访问。我们向大多数实验室推荐这种方式。 只有当你想要一个不装任何应用也能打开的普通网址时,才用自己的 域名(E)。
| 谁能访问 | 费用 | 设置时间 | 你需要 | |
|---|---|---|---|---|
| A · 单台电脑 | 只有这台电脑 | 免费 | 2 分钟 | 什么都不需要 |
| B · 实验室网络里的一台电脑 | 实验室或校园网络里(或连着 VPN)的任何人 | 有闲置电脑就免费;买一台 Mac mini 或小型主机,一次性花费 $300–600 | 1 小时 | 一台一直开着的电脑;Docker |
| C · 学校的服务器 | 校园网络和 VPN | 通常免费;有些 IT 部门会收费 | 取决于 IT 部门 | 向 IT 部门提一个申请 |
| D · 云虚拟机 + Tailscale 推荐 | 你的实验室,在哪里都能访问,其他人都不能 | 免费(Oracle Cloud 的 Always Free 虚拟机 + Tailscale 免费套餐),付费虚拟机大约每月 $5–7 | 1 小时 | 一个云服务账号;每台设备装上 Tailscale |
| E · 云虚拟机 + 自己的域名 | 任何知道网址的人(仍然需要账号才能登录) | 虚拟机同 D,另加一个域名,每年大约 $10–15 | 1–2 小时 | 一个域名 |
价格是这些服务在 2026 年 9 月的收费,注册前请再核实。 所有服务器方式(B–E)都包含每晚备份、每周恢复测试和 HTTPS。
host/load-image.sh 替你下载。不需要注册账号,也不需要镜像仓库。A · 单台电脑:桌面版
- 为你的电脑下载 BioManager:macOS(Apple 芯片或 Intel)、Windows 或 Linux。
- Mac:解压后把 BioManager 拖到“应用程序”文件夹,第一次打开时右键点按 → 打开 → 打开(right-click → Open → Open)。 Windows:解压 zip,打开 BioManager.exe,出现警告时选择更多信息 → 仍要运行(More info → Run anyway)。 Linux:给 AppImage 加上可执行权限,然后打开。
- 创建你的账号,回答设置问题。详见用户指南。
你的数据存放在应用之外(Mac 上是 ~/Library/Application Support/Biomanager/,
Windows 上是 %APPDATA%\Biomanager\,Linux 上是 ~/.local/share/Biomanager/),所以更新
永远不会动到它。请用 Time Machine 或“文件历史记录”备份这个文件夹,并且千万不要把它放在 Dropbox、
OneDrive、Google Drive 或 iCloud Drive 里:同步会损坏数据库。
同一网络里的几个人不用服务器也能共用一台电脑上的实验室:设置 → 设备 → 在网络上共享这个实验室 (Settings → Devices → Share this lab on the network)会把这台电脑设为实验室的主副本,其他人用它显示的地址打开。 这台电脑必须一直开着,不会像服务器那样每晚备份,而且连接没有加密:在你信任的实验室网络里没问题, 要求更高就用服务器(设备)。
B · 实验室网络里的一台电脑
任何一直开着的电脑都可以当服务器:一台 Linux 电脑、一台旧台式机,或者一台 Mac mini。实验室成员
用类似 https://192.168.1.50 的地址打开它。除非学校的 VPN 能把人接入这个网络,
否则从网络外面访问不到它。
- 给这台电脑一个固定地址。向 IT 部门申请一个固定 IP 地址或 DNS 名称(例如
biomanager.bio.youruni.edu),让地址不会变。关闭睡眠。 - 安装 Docker。Linux:运行
curl -fsSL https://get.docker.com | sudo sh,然后运行sudo usermod -aG docker $USER,再重新登录。Mac:安装 Docker Desktop(教育用途和小型 组织免费)或 OrbStack,并设为登录时启动。 - 把服务器安装包放到
/opt/biomanager:sudo mkdir -p /opt/biomanager && sudo chown "$USER" /opt/biomanager curl -fsSL -o /tmp/biomanager-server.tar.gz \ https://github.com/gaspolymerase/biomanager/releases/latest/download/biomanager-server.tar.gz tar -xzf /tmp/biomanager-server.tar.gz -C /opt/biomanager cd /opt/biomanager/Biomanager/deploy host/load-image.sh # downloads the app for this machine (Intel or ARM) cp .env.example .env && chmod 600 .env - 填写
.env,用文本编辑器打开(nano .env):
如果 IT 部门为这个名称提供了证书,就改用DOMAIN=192.168.1.50 # or the DNS name IT gave you TLS=internal # BioManager makes its own certificate POSTGRES_PASSWORD=... # paste the output of: openssl rand -hex 24 TZ=America/New_York # your time zone BACKUP_DIR=/opt/biomanager/backups # better: a folder on a second diskTLS=files,把证书放在certs/server.crt和certs/server.key:这样就可以跳过第 7 步。 - 启动:
docker compose up -d docker compose logs app | grep "setup code" - 创建管理员账号。在服务器本机上打开
https://DOMAIN/register,输入上一步得到的 设置码(setup code)。第一个账号就是实验室的管理员。 - 在每台设备上信任它的证书,只需一次。先导出证书:
docker compose exec caddy cat /data/caddy/pki/authorities/local/root.crt > biomanager-root.crt然后安装这个文件:- Mac:双击它,然后在“钥匙串访问”里打开它,把信任 → 始终信任(Trust → Always Trust)选上。
- Windows:双击 → 安装证书 → 本地计算机 → 受信任的根证书颁发机构(Install Certificate → Local Machine → Trusted Root Certification Authorities)。
- iPhone/iPad:用隔空投送或邮件发过去,在设置 → 通用 → VPN与设备管理(Settings → General → VPN & Device Management)里安装描述文件,然后在设置 → 通用 → 关于本机 → 证书信任设置(Settings → General → About → Certificate Trust Settings)里打开它。
- Android:设置 → 安全 → 加密与凭据 → 安装证书 → CA 证书(Settings → Security → Encryption & credentials → Install a certificate → CA certificate)。
- 让大家能连进来:在这台电脑的防火墙里允许 443 端口的入站连接,然后把地址发给实验室成员。
在 Linux 上,还要安装看门狗和每周自动更新:运行
sudo host/install.sh(在deploy文件夹里)。
BACKUP_DIR 放在第二块硬盘上,并且
把备份再复制到别的地方,见保护数据安全。C · 学校或院系的服务器
很多大学会在校园网络上给实验室提供虚拟机。把下面这段申请发给 IT 部门:
“我们需要一台小型 Linux 虚拟机(Ubuntu 24.04,2 vCPU,4 GB RAM,40 GB 硬盘),装好 Docker,
配一个 DNS 名称,例如 biomanager.ourdept.university.edu,以及这个名称的 TLS 证书,并对校园网络和 VPN
开放 443 端口。它在 Docker 容器里运行 BioManager,一个实验室数据库。”
然后从 B 的第 3 步开始照做,使用 TLS=files,把 IT 部门给的证书放在 certs/ 里。
实验室的设备上什么都不用装。如果 IT 部门提供虚拟机备份,就用上:多一层保护总是好的。
D · 配合 Tailscale 的云虚拟机 推荐
服务器是云上的一台虚拟机。Tailscale 在你实验室的各台设备之间
建立一个私有网络:服务器在互联网上没有任何开放端口,但实验室成员无论连着哪里的 Wi-Fi
还是手机信号,都能用一个普通的 HTTPS 地址打开它,比如 https://biomanager.tail1234.ts.net,
证书是正规的,不用手动信任任何东西。
| 虚拟机 | Oracle Cloud Always Free:一台 Ampere A1 虚拟机(最多 4 核、24 GB 内存)和 200 GB 硬盘,永久免费。也可以用任何 Ubuntu 24.04 虚拟机:Hetzner(大约 €4/月)、DigitalOcean 或 AWS Lightsail (大约 $5–7/月)。 |
|---|---|
| Tailscale | 小团队用 Personal 套餐免费;人数再多,可以把服务器单独共享给每位 成员自己的免费 Tailscale 账号,同样不花钱。 |
| 每位成员 | 安装一次 Tailscale(Mac、Windows、Linux、iPhone、Android)并登录。 |
1. 账号
- 注册一个免费的 Oracle Cloud 账号(会要求绑定银行卡 来验证身份;Always Free 资源永远不会收费)。选一个离你近的主区域(home region):选定后不能更改。
- 注册一个免费的 Tailscale 账号,可以用实验室或个人的 Google、 Microsoft 或 GitHub 账号登录。
- 在你自己的电脑上,下载服务器
安装包,解压后用文本编辑器打开
Biomanager/deploy/cloud-init.yaml。下一步要把它粘贴进去。
2. 创建虚拟机
- 在 Oracle Cloud 里:Compute → Instances → Create instance。
- Image(镜像):Canonical Ubuntu 24.04。Shape(规格):Ampere VM.Standard.A1.Flex,2 OCPU、12 GB (或 4 OCPU、24 GB)。如果 Oracle 提示容量不足,稍后再试,或者换一个可用性域(availability domain)。
- Networking(网络):新建一个公共子网,分配一个公网 IPv4 地址(只在第一次 SSH 登录时需要)。
- SSH keys(SSH 密钥):上传你的公钥(
ssh-keygen -t ed25519可以生成一对;.pub文件就是公钥)。 - Advanced options → Management → Initialization script:粘贴
cloud-init.yaml的内容。 它会在第一次启动时安装 Docker、Tailscale 和安全更新。 - 创建后等几分钟。也可以在 Billing 里把账号升级为 Pay As You Go(按量付费):Always Free 资源仍然免费,而且 Oracle 从此不会回收闲置的免费虚拟机。
3. 接入 Tailscale
ssh ubuntu@<the VM's public IP>
ls /var/lib/biomanager-ready # exists once first-boot set-up has finished
sudo tailscale up --ssh --hostname=biomanager
打开它输出的链接并登录。然后在 Tailscale 管理控制台里:
- Machines → biomanager → ⋯ → Disable key expiry(关闭密钥过期,否则 180 天后它会掉线);
- DNS:打开 MagicDNS 和 HTTPS Certificates。记下你的 tailnet 名称,类似
tail1234.ts.net。
从现在起,通过 Tailscale 用 ssh ubuntu@biomanager 连接。
4. 启动 BioManager
curl -fsSL -o /tmp/biomanager-server.tar.gz \
https://github.com/gaspolymerase/biomanager/releases/latest/download/biomanager-server.tar.gz
tar -xzf /tmp/biomanager-server.tar.gz -C /opt/biomanager
cd /opt/biomanager/Biomanager/deploy
host/load-image.sh # downloads the app for this machine (Intel or ARM)
cp .env.example .env && chmod 600 .env
nano .env
DOMAIN=biomanager.tail1234.ts.net # biomanager + your tailnet name
TLS=tailscale
COMPOSE_FILE=compose.yaml:compose.tailscale.yaml
POSTGRES_PASSWORD=... # openssl rand -hex 24
TZ=America/New_York
BACKUP_DIR=/opt/biomanager/backups
docker compose up -d
docker compose ps # wait until app and backup say "healthy"
docker compose logs app | grep "setup code"
sudo host/install.sh # watchdog, weekly updates and phone alerts
在一台装了 Tailscale 的设备上打开 https://DOMAIN/register,用设置码创建管理员账号。
install.sh 会输出一个 ntfy 主题:在 ntfy 应用里订阅它,
一旦网站、备份或硬盘需要你处理,就会收到通知。
5. 关上门
在 Oracle Cloud 里打开这台虚拟机的子网 → Security list(安全列表),删除 22 端口的入站规则。服务器 现在在互联网上没有任何开放端口;SSH 和网站都走 Tailscale。
6. 邀请实验室成员
- 每位成员安装 Tailscale,然后要么加入你的 tailnet(Users → Invite),要么(不管多少人都更简单) 由你把服务器单独共享给他们自己的 Tailscale 账号:Machines → biomanager → Share。
- 他们打开地址,选择创建账号(Create account),你在管理用户(Manage users)里批准。
- 手机:先打开 Tailscale 应用,然后用 BioManager Android 应用;iPhone 上用 Safari → 添加到主屏幕(Add to Home Screen)。
实验室以外的人如果只需要看几天,不用装 Tailscale:见访客通行码。
E · 用自己域名的云虚拟机
大家不用装任何应用,直接访问 https://biomanager.yourlab.org。这份方便的代价是:
登录页面暴露在公开的互联网上。BioManager 为此做了准备:新注册要等管理员批准,密码输错会被限速,
改密码后已登录的会话会失效,并启用了严格的内容安全策略。但仍然请使用强密码,并考虑用 Google 或 Microsoft 登录。
- 从 Cloudflare、Porkbun 或 Namecheap 等注册商购买一个域名(或者用院系给你的 子域名)。
- 按 D 的第 1–2 步创建虚拟机(Tailscale 可装可不装,但它仍是 SSH 登录最安全的方式)。
- 在注册商那里添加一条 DNS A 记录:
biomanager→ 虚拟机的公网 IP。 - 在云防火墙里(Oracle:子网的安全列表)允许来自任何地址的 TCP 80 和 443 入站连接。 Let's Encrypt 签发证书需要用到 80 端口。
- 按 D 的第 4 步获取安装包并填写
.env,其中:
然后运行DOMAIN=biomanager.yourlab.org TLS=acme [email protected] # Let's Encrypt writes here before a certificate expiresdocker compose up -d。Caddy 会自动获取并续期证书。 - 用设置码在
https://biomanager.yourlab.org/register创建管理员账号,然后运行sudo host/install.sh(在deploy文件夹里)。
其他方式
- 访客通行码:进来待几天,不用 Tailscale
- 在 Tailscale 服务器(D)上,管理员可以让实验室以外的人临时进来。在账号菜单的访客(Guests)里
生成一个通行码,然后用 Tailscale Funnel 把服务器开放到互联网:
sudo deploy/host/internet-access.sh on(第一次运行时,Tailscale 会输出一个允许 Funnel 的链接)。 访客打开https://DOMAIN:8443/guest并输入通行码;其他人在那里只能看到输入通行码的页面。 运行internet-access.sh off就会重新关上。详见用户指南。 - Cloudflare Tunnel
- 和 E 一样是一个普通网址,但不用开放任何端口:服务器上的
cloudflared主动向外连接 Cloudflare,而 Cloudflare Access 可以要求先用实验室邮箱登录,才能看到 BioManager(最多 50 人 免费)。它需要一个托管在 Cloudflare 上的域名。我们还没有把它做成现成方案;AI 指南里有一些说明, 供 AI 助手设置时参考。 - 不用 Docker
- BioManager 是一个运行在 PostgreSQL 上的 Python 网页应用(gunicorn),前面可以接任何 HTTPS 代理,所以也能在普通服务器上运行。 有了 Docker,备份、更新和恢复都只要一条命令,所以我们推荐用 Docker。
第三部分
运行之后
运行起来以后
- 设置实验室
- 管理员第一次登录时会打开设置问卷:勾选实验室要管理的内容,BioManager 就只建这些 数据库。详见用户指南。
- 人员
- 新注册的账号在管理用户(Manage users)里等待批准。管理员还可以在那里把其他人设为管理员、停用离开的人的账号、重置 密码,以及给动物房工作人员分配动物饲养(Animal care)或动物房主管(Facility manager)角色 (各角色能做什么)。
- 用 Google、Microsoft 或学校账号登录
- 可选,每一种只需在
deploy/.env里加几行再重启(安装包里的deploy/README.md有具体步骤)。学校自己的统一登录可以通过 OpenID Connect 接入(Okta、Keycloak、Azure AD、Shibboleth 的 OIDC 插件):请 IT 部门登记 BioManager,回调地址填https://DOMAIN/auth/institution/callback, 然后设置BIOMANAGER_OIDC_ISSUER、_CLIENT_ID、_CLIENT_SECRET和BIOMANAGER_OIDC_NAME(登录按钮上显示的文字)。只支持 SAML 的大学(InCommon、eduGAIN) 可以通过 CILogon 接入:设置BIOMANAGER_CILOGON_CLIENT_ID和_SECRET,再用BIOMANAGER_CILOGON_IDP直接跳转到你的学校。 - 带二维码的笼卡
- 在服务器上,任何能访问服务器的手机扫笼卡上的二维码,就能打开那个笼。实验室网络里的 Zebra 标签打印机 可以直接从服务器接收标签(方法),前提是服务器能连到它: 云上的服务器连不到你实验室里的打印机,除非打印机也接入了 Tailscale。
- 告警
install.sh给出的 ntfy 主题会在网站无响应、某个容器停止、硬盘快满 或备份停止时通知你。deploy/RUNBOOK.md写了每种情况该怎么处理。- 更新
- 操作系统的安全补丁每晚自动安装,容器每周日刷新。升级到新版 BioManager
只要三条命令:
你的cd /opt/biomanager/Biomanager/deploy docker compose exec backup backup.sh # a fresh backup first curl -fsSL -o /tmp/b.tar.gz https://github.com/gaspolymerase/biomanager/releases/latest/download/biomanager-server.tar.gz \ && tar -xzf /tmp/b.tar.gz -C /opt/biomanager && host/load-image.sh && docker compose up -d --build.env和备份从来不在安装包里,所以直接解压覆盖也会保留它们。新版本启动时会 自动把数据库升级到最新;每个版本发布前都测试过从之前每个版本建立的实验室升级上来。
保护数据安全
鼠群的记录是多年的心血。BioManager 保留多份相互独立的副本,所以任何单一故障, 无论是虚拟机被删、硬盘损坏、笔记本被偷,还是一次有问题的更新,都不会让数据丢失。
| 1 · 每晚 | 服务器备份数据库和上传的文件,检查每份备份都能读取, 并保留最近 30 份。所有服务器都自动进行。 |
|---|---|
| 2 · 每周 | 把最新的备份恢复到一个临时数据库里并检查,这样你就知道 备份真的能用,而不只是存在。自动进行。 |
| 3 · 异地 | 加密副本存放在云存储里,按 30 天、12 周和 24 个月保留;如果打开存储桶的
Object Lock,即使有人控制了服务器也删不掉。Backblaze B2 的前 10 GB 免费,够存一个实验室好几年的备份。
一条命令即可:sudo deploy/host/offsite-setup.sh。 |
| 4 · 每台实验室电脑上 | 桌面版可以保留整个实验室的一份副本:在服务器上,
用设置 → 实验室副本 → 生成密钥(Settings → Copies of the lab → Make a key)为一台电脑生成密钥;在那台电脑的桌面版里,打开设置 → 保留实验室服务器的副本
(Settings → Keep a copy of your lab server),填入地址和密钥。桌面版打开期间,它每天拉取一份新副本,检查副本
完整无缺,保留最近 14 份,并同步每个上传的文件。管理员能看到哪些电脑存有副本、副本有多新。
在几台实验室电脑上装好桌面版,即使服务器和异地副本都没了,实验室的数据也能保住。
(管理员可以在实验室设置(Lab setup)里允许成员也保留副本。)管理员的 Mac 还可以通过 SSH 拉取服务器自己的每晚
备份:使用安装包里的 deploy/mac/install.sh。 |
| 5 · 每个人 | 每个表格都有导出(Export)按钮,导出当前显示内容的 CSV,可以用 Excel 打开; 设置 → 导出我的数据(Settings → Export my data)随时可以下载你自己的小鼠和质粒(CSV 格式)以及你的实验记录本页面。 |
| 6 · 撤销与历史 | 针对的是失误,而不是灾难:每一次批量修改都可以在批次(Batches)里撤销, 审计日志(Audit log)显示每一次编辑、是谁改的,以及改之前是什么。 |
恢复也只要一条命令,而且绝不会删掉被替换的数据,见 deploy/RUNBOOK.md。
从桌面版迁到服务器
你在桌面版里录入的所有内容都会一起带过去:记录、历史、编号。用同样的步骤,也能从一台实验室电脑上的副本
重建丢失的服务器:改用它 lab-copies/…/db 文件夹里最新的 .db,以及它的
uploads 文件夹。请在服务器第一次启动之前操作(副本要导入一个空数据库):
- 退出桌面版,把它的数据文件夹(见 A)复制到服务器上,例如用
scp复制到/tmp/lab。 - 在服务器上,进入 deploy 文件夹,运行过
host/load-image.sh并填好.env之后:docker compose up -d db docker compose run --rm --no-deps -v /tmp/lab/biomanager.db:/import/lab.db:ro app \ sh -c 'python scripts/migrate-to-postgres.py /import/lab.db "$DATABASE_URL"' docker compose up -d docker compose cp /tmp/lab/uploads/. app:/data/uploads/ - 用你原来的账号登录。在脚本名后面加
--dry-run可以先全部检查一遍,不做任何改动。
在已运行的服务器上,主副本也可以不走这些步骤,直接转到桌面版再转回来:管理员在设置 → 设备(Settings → Devices) 里交出主副本,桌面版之后也在那里交还。桌面版持有主副本期间,服务器是只读的,并会显示实验室现在在哪里(设备)。
第四部分
帮助
让 AI 助手来设置
能使用终端的 AI 编程助手(Claude Code、Cursor、Codex 等)可以替你完成 D 或 E 的大部分工作。我们
专门为它写了一份指南,包括相关事实、准确的命令、每一步之后要检查什么,以及安全规则,放在
deploy-with-ai.md。把下面这段话粘贴给你的助手:
只有你能做的部分仍由你掌控:注册云服务和 Tailscale 账号、批准登录,以及 输入密钥和密码。指南会让助手在每一处都停下来问你。
常见问题
- 免费的云虚拟机真的免费吗?
- Oracle 的 Always Free 资源不收费。绑定银行卡是为了验证身份;除非你创建 付费资源,否则不会扣费。免费账号的虚拟机如果闲置一周,可能会被回收;把账号升级为 Pay As You Go(按量付费)就不会被回收,Always Free 资源也仍然不收费。
- Tailscale 用来传实验室数据安全吗?
- Tailscale 用 WireGuard 加密直接连接各台设备,它自己看不到传输的内容。不在你 tailnet 里的人 根本看不到这台服务器,比一个公开的登录页面难攻击得多。
- 服务器需要多大?
- 一个有几万只动物的实验室,数据库也远不到 1 GB。最小的虚拟机就绰绰有余。
- 能在一台服务器上运行几个实验室吗?
- 可以每个实验室运行一个 BioManager(各用自己的文件夹和域名),也可以整个动物平台共用一个,每个实验室保留 自己的数据库。
- 谁能帮忙?
- 提交一个 issue, 说明你在做什么、卡在了哪一步。