跳到主要内容

裸机安装

直接在 Linux 服务器上部署 Collei,使用 systemd 管理服务。部署脚本基于 UV 作为 Python 包管理器,自动完成所有配置。

前置条件

项目要求
操作系统使用 systemd 的 Linux 发行版(Ubuntu 20+、Debian 11+、CentOS 8+、RHEL 8+ 等)
权限root(脚本需安装系统包和创建 systemd 服务)
网络可访问 GitHub(拉取代码和前端发布包)

脚本会自动安装 gitcurlUV,无需手动准备。

一键部署

curl -fsSL https://raw.githubusercontent.com/collei-monitor/collei/master/deploy.sh \
-o deploy.sh
sudo bash deploy.sh

脚本会依次执行以下步骤:

  1. 检测系统环境 — 识别架构、发行版和包管理器
  2. 安装 UV — Python 包管理器
  3. 克隆后端代码 — 从 GitHub 拉取到安装目录
  4. 创建虚拟环境 — 使用 Python 3.12,安装所有依赖
  5. 下载前端 — 从 GitHub Releases 下载预构建前端
  6. 配置数据目录与密钥 — 生成 SECRET_KEYCA_MASTER_KEY,复制 GeoIP 数据
  7. 数据库迁移 — 执行 alembic upgrade head
  8. 配置 systemd 服务 — 创建、启用并启动 collei.service

部署完成后,脚本会打印:

════════════════════════════════════════════════════
Collei 部署完成!
════════════════════════════════════════════════════

访问地址: http://<服务器IP>:22333
安装目录: /opt/collei
数据目录: /var/lib/collei
密钥文件: /var/lib/collei/.secrets
配置文件: /opt/collei/.env

自定义参数

sudo bash deploy.sh \
--install-dir /opt/collei \
--data-dir /var/lib/collei \
--port 22333 \
--frontend-version v0.0.1
参数默认值说明
--install-dir/opt/collei应用安装目录(后端代码 + 虚拟环境)
--data-dir/var/lib/collei数据持久化目录(数据库、密钥、GeoIP)
--port22333HTTP 监听端口
--frontend-versionlatest前端版本号(如 v0.0.1
--skip-systemd跳过 systemd 服务配置

目录结构

部署完成后的文件布局:

/opt/collei/                  # 安装目录(--install-dir)
├── .env # 环境变量配置文件
├── .venv/ # Python 虚拟环境
├── main.py # 应用入口
├── app/ # 后端源码
├── alembic/ # 数据库迁移
├── frontend/dist/ # 前端构建产物
└── data/ # 内置数据文件

/var/lib/collei/ # 数据目录(--data-dir)
├── collei.db # SQLite 数据库
├── .secrets # 密钥文件(chmod 600)
├── *.mmdb # GeoIP 数据库
├── themes/ # 自定义主题
└── ssh_ca_key.* # SSH CA 密钥对

环境变量

配置文件位于 <install-dir>/.env,所有变量以 COLLEI_ 为前缀:

变量默认值说明
COLLEI_SECRET_KEY自动生成JWT 签名密钥
COLLEI_CA_MASTER_KEY自动生成SSH CA 加密主密钥
COLLEI_DATABASE_URLsqlite+aiosqlite:///<data-dir>/collei.db数据库连接字符串
COLLEI_DATA_DIR<data-dir>数据目录路径
COLLEI_DEBUGfalse调试模式
COLLEI_DEFAULT_ADMIN_USERNAMEadmin初始管理员用户名
COLLEI_DEFAULT_ADMIN_PASSWORD自动生成初始管理员密码
COLLEI_COOKIE_SECUREfalseCookie 是否仅通过 HTTPS 发送
COLLEI_TRUSTED_PROXIES127.0.0.1可信反代 IP
COLLEI_ACCESS_TOKEN_EXPIRE_MINUTES1440Token 有效期(分钟)
COLLEI_SESSION_EXPIRE_DAYS7会话有效期(天)
信息

修改 .env 后需重启服务:sudo systemctl restart collei

systemd 服务

脚本自动创建 /etc/systemd/system/collei.service,内容如下:

[Unit]
Description=Collei Server Monitor
After=network.target

[Service]
Type=exec
WorkingDirectory=/opt/collei
EnvironmentFile=/opt/collei/.env
ExecStart=/opt/collei/.venv/bin/uvicorn main:app --host 0.0.0.0 --port 22333 --workers 1
Restart=always
RestartSec=5

# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/lib/collei
ReadWritePaths=/opt/collei
PrivateTmp=true

[Install]
WantedBy=multi-user.target

常用管理命令:

# 查看状态
sudo systemctl status collei

# 启动 / 停止 / 重启
sudo systemctl start collei
sudo systemctl stop collei
sudo systemctl restart collei

# 查看日志
sudo journalctl -u collei -f

# 查看最近 100 行日志
sudo journalctl -u collei -n 100 --no-pager

# 开机自启(部署脚本已自动启用)
sudo systemctl enable collei

CLI 管理工具

激活虚拟环境后可使用 collei CLI:

cd /opt/collei

# 重置管理员密码(自动生成新密码)
.venv/bin/collei passwd

# 指定用户名和密码
.venv/bin/collei passwd --username admin --password new-password

# 关闭用户的两步验证
.venv/bin/collei disable-2fa --username admin

反向代理

裸机部署同样建议配置反向代理以启用 HTTPS,配置方式与 Docker 部署一致,请参阅 Docker 部署 — 反向代理

配置完成后更新环境变量:

# 编辑 /opt/collei/.env
COLLEI_TRUSTED_PROXIES=127.0.0.1
COLLEI_COOKIE_SECURE=true

然后重启服务:

sudo systemctl restart collei

手动部署(不使用脚本)

如果你希望完全手动执行部署,以下是逐步操作:

# 1. 安装 UV
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"

# 2. 克隆代码
git clone --depth 1 https://github.com/collei-monitor/collei.git /opt/collei
cd /opt/collei

# 3. 创建虚拟环境并安装依赖
uv venv --python 3.12
uv pip install .

# 4. 下载前端(替换 VERSION 为实际版本号)
VERSION=latest
mkdir -p frontend/dist
curl -fsSL "https://github.com/collei-monitor/collei-web/releases/download/${VERSION}/collei-web-${VERSION}.tar.gz" \
| tar xz -C frontend/dist

# 5. 创建数据目录
mkdir -p /var/lib/collei
cp data/*.mmdb /var/lib/collei/

# 6. 生成密钥和 .env
SECRET_KEY=$(.venv/bin/python -c "import secrets; print(secrets.token_urlsafe(64))")
CA_KEY=$(.venv/bin/python -c "import secrets; print(secrets.token_urlsafe(32))")

cat > .env <<EOF
COLLEI_SECRET_KEY=${SECRET_KEY}
COLLEI_CA_MASTER_KEY=${CA_KEY}
COLLEI_DATABASE_URL=sqlite+aiosqlite:////var/lib/collei/collei.db
COLLEI_DATA_DIR=/var/lib/collei
COLLEI_DEFAULT_ADMIN_USERNAME=admin
COLLEI_DEFAULT_ADMIN_PASSWORD=change-me
COLLEI_COOKIE_SECURE=false
EOF
chmod 600 .env

# 7. 数据库迁移
set -a; . .env; set +a
.venv/bin/alembic upgrade head

# 8. 启动
.venv/bin/uvicorn main:app --host 0.0.0.0 --port 22333