快速开始

Lumo 的发布产物是单个静态二进制。目标机器上不需要 Go、Node,也不需要 Docker——一个 PostgreSQL 加一个可执行文件就够了。

环境要求

用途 需要
运行发布产物 PostgreSQL 17+,其余什么都不用
从源码构建 Go 1.26+、Node.js 24+、PostgreSQL 17+
源码构建的便利工具 Task、golangci-lint

方式一:用发布产物

发布归档由 goreleaser 打出,命名形如 lumo_0.1.0_linux_amd64.tar.gz(Windows 是 .zip),覆盖 linux / windows / darwin × amd64 / arm64 六个平台。

tar -xzf lumo_0.1.0_linux_amd64.tar.gz
cd lumo_0.1.0_linux_amd64
./lumo serve

容器镜像同样可用,多架构清单(linux/amd64 与 linux/arm64):

docker run -d --name lumo \
  -p 127.0.0.1:8080:8080 \
  -v lumodata:/data \
  ghcr.io/feibaikin/lumo:latest

注意 -v lumodata:/data 不能省。 主题、上传的附件、主密钥和安装产物都在这个目录里,不挂卷的话删容器就全丢了。

方式二:从源码构建

git clone https://github.com/FeiBaiKin/Lumo.git
cd Lumo

# 全量构建:Console 前端 + 后端二进制
task all

# 启动
./lumo serve

task all 会先构建 Console 前端到 internal/console/dist,再编译 Go 二进制——顺序不能反,因为前端是经 go:embed 嵌进二进制的,先编译后端会嵌进一个空目录。

开发时不需要每次全量构建:task run -- serve 直接跑后端,task console:dev 起带 HMR 的 Vite 开发服务器并代理接口到 8080。前端没构建时后端照样能启动,/console/ 会返回一句构建提示,不影响接口开发。

首次启动:安装向导

不需要预先准备任何配置。 直接启动:

./lumo serve

检测不到数据库连接信息时,程序会转入安装模式并在日志里打印一条地址:

level=WARN msg="尚未配置数据库,已进入安装向导模式" 向导=http://127.0.0.1:8080/console/install

服务端绑定 127.0.0.1 而你在另一台机器上访问时,用 SSH 端口转发,或临时改监听地址:

./lumo serve -addr 0.0.0.0:8080

向导四步,每步只问一件事:

  1. 数据库连接 —— 主机、端口、库名、账号口令。点「测试连接」会回报目标库真实的版本号、字符编码和已有用户数;库里已经有一个 Lumo 站点时,它会明确告诉你这是在接管而不是新建。
  2. 站点信息 —— 站名、副标题、站点地址与语言。站点地址决定 canonical、sitemap.xmlfeed.xml 里的绝对链接,要填最终对外访问的那个地址。
  3. 管理员账号 —— 第一个超级管理员的用户名、邮箱与口令。
  4. 执行安装 —— 依次跑迁移、建管理员、写站点设置,每一步都会显示实际耗时。

装完程序会自己优雅重启进入正常模式,不需要手动重启进程。安装接口随即锁定,再调用返回 409。

连接串会写进 data/install.json(权限 0600,含口令)。备份时请连 data/ 一起备份,否则恢复出来库里那些加密的口令解不开。

不走向导

凭据由编排系统统管时(systemd、Kubernetes、Ansible 等),预先设好环境变量再启动就能跳过向导:

export LUMO_DATABASE_DSN="postgres://user:password@127.0.0.1:5432/lumo?sslmode=disable"
./lumo serve

数据库连接串只走环境变量,不会写进任何配置文件;它的优先级也高于向导写入的值,运维随时可以盖掉。

这种情形下第一个管理员用命令行创建(口令从终端读取、不回显,因此必须在交互式终端里跑):

./lumo admin create-user -username admin -email you@example.com -role super-admin

口令里含 @ : / ? # % 等特殊字符时,DSN 的口令段要做百分号编码。做法是口令本身保持原样填给数据库,DSN 里单独写编码后的串。

数据落在哪

启动时会自动创建并维护 dataDir(默认 ./data):

data/
├── themes/      第三方主题;内置主题也会在这里解压一份
├── plugins/     插件包
├── uploads/     本地附件
├── cache/       缩略图与高亮缓存
├── logs/        日志
├── backups/     预留目录,程序不往里写
├── install.json 安装产物(含连接串,0600)
└── secret.key   加密主密钥(SMTP 口令、对象存储密钥)

用环境变量 LUMO_DATA_DIR 指定别处。data/ 与数据库是同等的备份对象——只备其一都不完整。

接下来

lumo serve       启动 HTTP 服务(-addr -config -no-migrate -debug-sql)
lumo migrate     管理数据库迁移:up(缺省)| status | version | down [来源]
lumo openapi     导出 OpenAPI 规范(-o 写文件,-3.0 出降级版本)
lumo admin       管理用户:create-user | reset-password | list-users
lumo version     输出版本信息

评论

还没有评论,来说两句。