Ubuntu 22.04 安装 SQLPage 0.47.0 指南
Ubuntu 22.04.5 LTS 安装 SQLPage v0.47.0 实测:官方二进制下载与 SHA-256 校验、/opt/sqlpage 目录布局与专用账号、text/list/table 三组件首页、systemd 托管开机自启与 HTTP 验收。
Ubuntu 22.04 安装 SQLPage 0.47.0 指南
目标:在一台 Ubuntu 22.04.5 LTS 服务器上完成 SQLPage v0.47.0 的生产化安装——下载官方预编译二进制并做 SHA-256 完整性校验、规划
/opt/sqlpage目录布局、创建专用系统账号、编写第一个由 text/list/table 三个组件渲染的 SQL 页面,最后交给 systemd 托管并验证开机自启。全部命令与输出均为实测回显;选型背景见《SQLPage 0.47.0 介绍与选型指南》(https://www.quzuo.net/document/qeGaJyffJQTk)。
一、安装方式与环境准备
1.1 安装方式选择
SQLPage 官方的分发形态是 GitHub Releases 上的预编译二进制压缩包,按平台提供 sqlpage-linux.tgz、sqlpage-macos.tgz、sqlpage-windows.zip 与 AWS Lambda 部署包四种产物(来源:GitHub Releases v0.47.0 资产清单,查询日期 2026-10-28)。Ubuntu 服务器上的生产安装路径就是:下载 linux 版压缩包 → 校验 → 布置目录 → systemd 托管。整个过程不需要任何语言运行时,也不需要编译工具链。
本篇实测环境:
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| 目标版本 | SQLPage v0.47.0(2026-10-16 发布的最新稳定版) |
| 安装目录 | /opt/sqlpage |
| 监听端口 | 8080(默认) |
| 执行账号 | sqlpage(系统账号,无可登录 shell) |
1.2 环境准备
确认基础工具与外网连通性(下载走 GitHub Releases):
uname -m # 确认架构,x86_64 下载 sqlpage-linux.tgz
which curl sha256sum useradd
curl -sI --max-time 10 https://github.com | head -1
实测输出:
x86_64
/usr/bin/curl
/usr/bin/sha256sum
/usr/sbin/useradd
HTTP/2 200
如果服务器计划对外开放,记得放行端口(默认监听 8080):
ufw allow 8080/tcp # 使用 ufw 的场景;云服务器还需在安全组放行
二、下载与校验官方二进制
2.1 下载压缩包
mkdir -p /tmp/sqlpage-dl && cd /tmp/sqlpage-dl
curl -sL -o sqlpage-linux.tgz \
https://github.com/sqlpage/SQLPage/releases/download/v0.47.0/sqlpage-linux.tgz
ls -la sqlpage-linux.tgz
实测输出:
-rw-r--r-- 1 root root 12970149 Oct 28 01:49 sqlpage-linux.tgz
2.2 SHA-256 完整性校验
GitHub Releases API 会公布每个资产的 digest 字段(sha256)。v0.47.0 的 sqlpage-linux.tgz 官方摘要为 b566a5d609e2894cf7658c5a421828de3a3b0bc993f405713ee2d2513d27ae5c(来源:GitHub API releases/latest 的 assets[].digest,查询日期 2026-10-28)。下载后本地计算比对:
sha256sum sqlpage-linux.tgz
实测输出:
b566a5d609e2894cf7658c5a421828de3a3b0bc993f405713ee2d2513d27ae5c sqlpage-linux.tgz
与官方摘要一致,校验通过。升级到新版本时必须重复这一步,摘要值随版本变化。
2.3 解压与包内容
tar tzf sqlpage-linux.tgz
实测输出(包内容清单):
sqlpage.bin
sqlpage/migrations/
sqlpage/migrations/README.md
sqlpage/templates/
sqlpage/templates/README.md
sqlpage/sqlpage.json
包里只有两样东西:主程序 sqlpage.bin(解压后 34 114 328 字节)和一个 sqlpage/ 资源目录(官方资源配置样例、空的模板与迁移目录)。
三、安装布局与专用账号
3.1 目录布局
生产环境建议固定如下布局(职责分离,后续配置与运维都基于它):
/opt/sqlpage/
├── bin/sqlpage # 主程序(sqlpage.bin 改名,便于调用)
├── conf/ # sqlpage.toml 配置文件(见配置篇)
├── data/ # SQLite 数据库文件
├── www/ # web root:.sql 页面与静态资源
└── resources/ # 发布包自带的 sqlpage/ 资源目录
执行安装:
cd /tmp/sqlpage-dl
tar xzf sqlpage-linux.tgz
useradd -r -s /usr/sbin/nologin -d /opt/sqlpage sqlpage
mkdir -p /opt/sqlpage/{bin,conf,data,www}
cp sqlpage.bin /opt/sqlpage/bin/sqlpage
cp -r sqlpage /opt/sqlpage/resources
chown -R sqlpage:sqlpage /opt/sqlpage
ls -la /opt/sqlpage
实测输出:
/opt/sqlpage:
total 24
drwxr-xr-x 6 sqlpage sqlpage 4096 Oct 28 01:50 .
drwxr-xr-x 1 root root 4096 Oct 28 01:50 ..
drwxr-xr-x 2 sqlpage sqlpage 4096 Oct 28 01:50 bin
drwxr-xr-x 2 sqlpage sqlpage 4096 Oct 28 01:50 conf
drwxr-xr-x 4 sqlpage sqlpage 4096 Oct 28 01:50 resources
drwxr-xr-x 2 sqlpage sqlpage 4096 Oct 28 01:50 www
确认版本:
/opt/sqlpage/bin/sqlpage --version
实测输出:
sqlpage 0.47.0
四、第一个 SQL 页面
4.1 index.sql:text + list + table 三组件
在 web root 写入 index.sql。文件里每条 SELECT 的第一列 component 指定渲染组件,其余列是组件参数:
-- /opt/sqlpage/www/index.sql
SELECT 'text' AS component,
'由 SQL 驱动的第一个页面' AS title,
'本页面没有任何传统后端代码,仅由一条 SELECT 语句渲染。' AS contents_md;
SELECT 'list' AS component,
'页面用到的组件' AS title;
SELECT 'text' AS title, '输出一段富文本' AS description
UNION ALL
SELECT 'list' AS title, '渲染无序列表' AS description
UNION ALL
SELECT 'table' AS title, '渲染查询结果表格' AS description;
-- 内置 SQLite 演示表
CREATE TABLE IF NOT EXISTS demo_product (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price REAL NOT NULL
);
INSERT OR IGNORE INTO demo_product (id, name, price) VALUES
(1, 'SQLite', 0.0),
(2, 'PostgreSQL', 0.0),
(3, 'MySQL', 0.0);
SELECT 'table' AS component,
'内置 SQLite 演示表' AS title;
SELECT id, name, price FROM demo_product ORDER BY id;
三个组件各司其职:text 输出标题与 Markdown 富文本;list 把查询结果逐行渲染成列表;table 把查询结果渲染成可排序的表格。注意 CREATE TABLE IF NOT EXISTS 与 INSERT OR IGNORE 保证了页面可重复刷新——每次请求都会执行整个文件。
五、systemd 托管与开机自启
5.1 编写 unit 文件
# /etc/systemd/system/sqlpage.service
[Unit]
Description=SQLPage web server
After=network.target
[Service]
User=sqlpage
Group=sqlpage
WorkingDirectory=/opt/sqlpage
ExecStart=/opt/sqlpage/bin/sqlpage --web-root /opt/sqlpage/www
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
--web-root 显式指向页面目录;WorkingDirectory 决定了相对路径(自动创建的配置目录 ./sqlpage)的落点。启动并设置自启:
systemctl daemon-reload
systemctl enable --now sqlpage
实测输出:
Created symlink /etc/systemd/system/multi-user.target.wants/sqlpage.service → /etc/systemd/system/sqlpage.service.
5.2 状态确认
systemctl status sqlpage --no-pager -l | head -15
实测输出:
● sqlpage.service - SQLPage web server
Loaded: loaded (/etc/systemd/system/sqlpage.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-10-28 01:51:08 UTC; 3s ago
Main PID: 165 (sqlpage)
Tasks: 9 (limit: 2932)
Memory: 3.6M
CPU: 21ms
CGroup: /system.slice/sqlpage.service
└─165 /opt/sqlpage/bin/sqlpage --web-root /opt/sqlpage/www
Oct 28 01:51:08 sqlpage systemd[1]: Started SQLPage web server.
注意 Memory: 3.6M——空闲常驻内存仅 3.6 MB,这是选型篇里资源对比的实测依据。
5.3 启动日志解读
journalctl -u sqlpage --no-pager -o cat | head -5
实测输出:
ts=2026-10-28T01:51:08.657Z level=info msg="Configuration directory does not exist, creating it: ./sqlpage" target=sqlpage::app_config
ts=2026-10-28T01:51:08.657Z level=info msg="No DATABASE_URL provided, /opt/sqlpage/sqlpage/sqlpage.db is writable, creating a new database file." target=sqlpage::app_config
ts=2026-10-28T01:51:08.657Z level=info msg="Configuration loaded from ./sqlpage" target=sqlpage::app_config
ts=2026-10-28T01:51:08.657Z level=info msg="Not applying database migrations because './sqlpage/migrations' does not exist" target=sqlpage::webserver::database::migrations
四行日志各有信息量:
- SQLPage 自动创建了配置目录
/opt/sqlpage/sqlpage/(配置目录默认是工作目录下的./sqlpage); - 未配置
database_url时自动在配置目录创建 SQLite 文件库——零配置即可跑; - 迁移目录不存在则跳过迁移。
这套"自动配置目录 + 自动建库"是默认行为的起点,配置篇会把它规范化为显式配置文件与独立数据目录。
六、页面验收与常见安装问题
6.1 HTTP 验收
curl -s -o /dev/null -w "index: HTTP %{http_code}\n" http://127.0.0.1:8080/
curl -s http://127.0.0.1:8080/ | grep -oE "(由 SQL 驱动的第一个页面|页面用到的组件|<table)" | sort -u
curl -s -o /dev/null -w "missing: HTTP %{http_code}\n" http://127.0.0.1:8080/missing.sql
实测输出:
index: HTTP 200
<table
由 SQL 驱动的第一个页面
页面用到的组件
missing: HTTP 404
三个断言全部通过:首页 200、text/list/table 组件内容出现在 HTML 中、不存在的路径正确返回 404。外部机器访问 http://<服务器IP>:8080/ 应得到同样结果(不通则检查防火墙/安全组与 listen_on 配置)。
6.2 常见安装问题实录
- 架构下错包:ARM 服务器下载了 x86_64 包,运行时报"cannot execute binary file"。先
uname -m再选包,aarch64 同样使用sqlpage-linux.tgz(包内含通用 Linux 构建)。 - 8080 被占用:启动失败且日志出现地址绑定错误。
ss -ltnp | grep 8080找到占用进程,或改用配置项listen_on/环境变量LISTEN_ON换端口(见配置篇与命令运维篇)。 - 权限不足导致库文件建不出来:若把
WorkingDirectory指到 sqlpage 用户不可写目录,自动建库会失败。要么按本篇布局chown -R sqlpage:sqlpage /opt/sqlpage,要么显式配置database_url到可写路径。 - 下载校验失败:sha256 与官方不一致通常是下载不完整或被代理篡改,重新下载;生产环境建议把摘要比对写进发布脚本。
安装到此完成。下一步把默认行为规范化为显式配置文件,请继续阅读《SQLPage 0.47.0 配置详解与参数生效验证》;日常升级、日志与备份操作见《SQLPage 0.47.0 常用 CLI 命令与运维实战》。