Ubuntu 22.04 安装 Datasette 0.65.5 指南
在 Ubuntu 22.04 上从零安装 Datasette 0.65.5:pipx 与 venv+pip 两种形态实测、systemd 托管、nginx 反向代理与端到端验证,含 tzdata 交互卡住等排障实录与卸载清理步骤。
Ubuntu 22.04 安装 Datasette 0.65.5 指南
目标:在 Ubuntu 22.04 服务器上从零安装 Datasette 0.65.5,覆盖 pipx 与 venv+pip 两种官方安装形态,并用 systemd 托管、nginx 反向代理对外发布,最后用一个自建 SQLite 库做端到端验证。全部命令与回显已在 Ubuntu 22.04.5 LTS(Python 3.10.12)实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Python:3.10.12(系统自带,
python3 --version实测) - pipx:1.0.0(Ubuntu 官方仓库)
- Datasette:0.65.5(PyPI 当前最新稳定版,2026-09-17 发布)
- 内嵌 ASGI 服务器:uvicorn 0.54.0(随 datasette 自动安装)
- SQLite:3.37.2(随 Python 3.10 标准库)
- nginx:1.18.0(Ubuntu 官方仓库,用于反向代理)
- 服务形态:
datasette专用用户运行,监听127.0.0.1:8001,nginx 监听80反代 - 数据与配置目录:
/srv/datasette/app;程序虚拟环境:/opt/datasette/venv
二、前置条件
开始安装前确认以下条件全部满足,避免中途返工:
- 一台可联网的 Ubuntu 22.04 机器,有 sudo 权限。
- Python 版本 ≥ 3.10(Datasette 0.65.5 的硬性要求,PyPI
requires_python字段)。实测本机:
python3 --version
Python 3.10.12
- 安装 venv 与 sqlite3 命令行(演示建库用):
sudo apt-get update
sudo apt-get install -y python3-venv sqlite3
⚠️ 注意:以下所有涉及对外服务的步骤默认你把 Datasette 绑定在
127.0.0.1,由 nginx 统一对外;不要一开始就把--host 0.0.0.0暴露到公网,见「十、常见问题」Q4。
三、版本选型说明
PyPI 上当前同时存在两条线(查询日期 2026-10-25):
| 版本线 | 最新版 | 发布日期 | 性质 | 建议 |
|---|---|---|---|---|
| 0.65.x | 0.65.5 | 2026-09-17 | 稳定版 | 生产与学习首选,本文实测对象 |
| 1.0 alpha | 1.0a41 | 2026-09-24 | 预发布版 | 仅体验新特性,勿上生产 |
可用 pip index versions datasette 或查看 PyPI 页面复核最新版本号。本文两条安装路线均安装 0.65.5。
四、方案 A:pipx 在线安装(官方推荐的命令行形态)
4.1 方案说明
pipx 会为每个 Python 命令行工具创建独立虚拟环境,并把可执行文件链接到 ~/.local/bin,既隔离依赖又不污染系统 Python。官方文档把 pipx 列为推荐的本地安装方式,适合在个人服务器上以 CLI 方式使用 Datasette。
4.2 安装 pipx
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y pipx
⚠️ 排障实录:直接
sudo apt-get install -y pipx时,依赖包 tzdata 会弹出交互式时区选择界面并停住:2. America 5. Arctic 8. Europe 11. US 3. Antarctica 6. Asia 9. Indian 12. Etc Geographic area:脚本化安装时会一直卡在这里。加
DEBIAN_FRONTEND=noninteractive前缀即可跳过交互,实测安装后时区保持Etc/UTC,需要调整可再跑dpkg-reconfigure tzdata。
验证:
pipx --version
1.0.0
4.3 用 pipx 安装 Datasette
pipx install datasette
实测回显(节选):
installed package datasette 0.65.5, installed using Python 3.10.12
These apps are now globally available
- datasette
done! ✨ 🌟 ✨
4.4 验证安装
datasette --version
which datasette
pipx list --short
实测回显:
datasette, version 0.65.5
/root/.local/bin/datasette
datasette 0.65.5
💡 说明:pipx 把可执行文件链接到当前用户的
~/.local/bin/(root 用户即/root/.local/bin/),虚拟环境本体在~/.local/pipx/venvs/datasette/。如果换用户登录发现找不到命令,确认该用户的PATH是否包含~/.local/bin。
五、方案 B:python3-venv + pip 安装(生产服务形态)
5.1 方案说明
要用 systemd 托管、以专用低权限用户长期运行 Datasette,更合适的形态是:建一个专用用户、一个固定位置的 venv、一份固定的数据目录,再由 systemd 拉起进程。本节完整走一遍这个流程。
5.2 创建专用用户与目录
sudo useradd --system --shell /usr/sbin/nologin datasette
sudo mkdir -p /opt/datasette /srv/datasette/app
sudo chown -R datasette:datasette /srv/datasette
验证用户已建好:
id datasette
实测回显:
uid=999(datasette) gid=999(datasette) groups=999(datasette)
5.3 创建 venv 并安装 Datasette
sudo python3 -m venv /opt/datasette/venv
sudo /opt/datasette/venv/bin/pip install --upgrade pip
sudo /opt/datasette/venv/bin/pip install datasette
pip install datasette 实测回显(节选,共 26 个依赖包):
Installing collected packages: typing_extensions, PyYAML, python-multipart, pluggy, platformdirs, mergedeep, MarkupSafe, janus, itsdangerous, idna, hupper, h11, click, certifi, aiofiles, uvicorn, Jinja2, httpcore, flexparser, flexcache, exceptiongroup, click-default-group, asgiref, asgi-csrf, anyio, httpx, datasette
Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.4 PyYAML-6.0.3 aiofiles-25.1.0 anyio-4.15.1 asgi-csrf-0.11 asgiref-3.12.1 certifi-2026.10.23 click-8.5.0 click-default-group-1.2.4 datasette-0.65.5 exceptiongroup-1.3.1 flexcache-0.3 flexparser-0.4 h11-0.16.0 httpcore-1.0.9 httpx-0.28.1 hupper-1.12.1 idna-3.20 itsdangerous-2.2.0 janus-2.0.0 mergedeep-1.3.4 platformdirs-4.12.4 pluggy-1.7.0 python-multipart-0.0.32 typing_extensions-4.16.0 uvicorn-0.54.0
验证 venv 内版本:
/opt/datasette/venv/bin/datasette --version
datasette, version 0.65.5
💡 说明:从回显可见 Datasette 的依赖很轻——核心是 uvicorn(ASGI 服务器)、Jinja2(模板)、click(CLI)、httpx(内部请求)、asgi-csrf 与 itsdangerous(安全签名)。没有重型科学计算依赖,安装体积很小。
5.4 systemd 托管
先为签名 cookie 生成一个随机密钥(用于 --root 登录链接、签名 cookie 等场景):
openssl rand -hex 32
实测输出(每次生成不同,此处为本机实测值):
a446cd535ccd575d8260b14e2a2dfd90b1b148d4306e0e793e393bd5b5d131cf
创建单元文件 /etc/systemd/system/datasette.service:
[Unit]
Description=Datasette data exploration service
Documentation=https://docs.datasette.io/
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=datasette
Group=datasette
WorkingDirectory=/srv/datasette/app
Environment="DATASETTE_SECRET=a446cd535ccd575d8260b14e2a2dfd90b1b148d4306e0e793e393bd5b5d131cf"
ExecStart=/opt/datasette/venv/bin/datasette /srv/datasette/app --host 127.0.0.1 --port 8001
Restart=on-failure
RestartSec=3
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
逐项说明:
User/Group=datasette:以低权限专用用户运行,配合NoNewPrivileges、PrivateTmp收敛权限;WorkingDirectory=/srv/datasette/app且ExecStart的第一个参数也是该目录:这是 Datasette 的「配置目录」模式——目录内的.db文件、metadata.json、settings.json、插件目录都会被自动识别(详见《Datasette 0.65.5 配置参数详解》);Environment="DATASETTE_SECRET=...":上一步生成的随机密钥,换成你自己的值;--host 127.0.0.1 --port 8001:只绑回环地址,对外流量由第七节 nginx 反代进来;Restart=on-failure+RestartSec=3:进程异常退出 3 秒后自动拉起。
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable datasette
sudo systemctl start datasette
验证运行状态:
sudo systemctl status datasette --no-pager
实测回显(节选):
● datasette.service - Datasette data exploration service
Loaded: loaded (/etc/systemd/system/datasette.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2026-10-25 10:07:58 UTC; 26min ago
Docs: https://docs.datasette.io/
Main PID: 5295 (datasette)
Tasks: 4 (limit: 3852)
Memory: 31.3M
└─5295 /opt/datasette/venv/bin/python3 /opt/datasette/venv/bin/datasette /srv/datasette/app --host 127.0.0.1 --port 8001
systemctl is-enabled datasette
systemctl is-active datasette
enabled
active
六、nginx 反向代理(对外发布)
Datasette 自身监听 127.0.0.1:8001,不直接对公网开放;用 nginx 在 80 端口反代,统一承接域名、TLS 与访问控制。
安装 nginx:
sudo apt-get install -y nginx
实测版本:
nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
新建站点配置 /etc/nginx/conf.d/datasette.conf:
server {
listen 80;
server_name _;
access_log /var/log/nginx/datasette.access.log;
error_log /var/log/nginx/datasette.error.log;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}
}
关键项说明:proxy_set_header Host $host 保证 Datasette 生成的绝对链接与 .json 端点里的 URL 主机名正确;X-Forwarded-Proto 为后续上 HTTPS 预留;proxy_read_timeout 60s 覆盖慢查询场景(Datasette 默认 SQL 超时 1000ms,正常查询远快于此)。
校验配置并 reload:
sudo nginx -t
sudo systemctl reload nginx
实测回显:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
端到端验证(经 nginx 访问首页):
curl -s -o /dev/null -w "homepage http_code=%{http_code}\n" http://127.0.0.1/
homepage http_code=200
确认监听分布符合预期(80 对全网、8001 仅回环):
ss -ltn | grep -E ':80 |:8001 '
LISTEN 0 2048 127.0.0.1:8001 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
七、最小数据演示与端到端验证
服务搭好后,用一个小库验证「建库 → 挂载 → 查询」全链路。新建演示目录并建库:
sudo mkdir -p /srv/datasette/demo && cd /srv/datasette/demo
sqlite3 demo.db "CREATE TABLE notes (id INTEGER PRIMARY KEY, title TEXT, created TEXT);"
sqlite3 demo.db "INSERT INTO notes (title, created) VALUES ('第一条笔记', datetime('now')), ('第二条笔记', datetime('now'));"
sqlite3 demo.db "select * from notes;"
实测回显:
1|第一条笔记|2026-10-25 10:35:24
2|第二条笔记|2026-10-25 10:35:24
用 --get 直接发一次 HTTP 请求验证渲染结果(该方式启动、请求、打印、退出一条龙,适合验证):
/opt/datasette/venv/bin/datasette serve demo.db --port 8006 --get /demo/notes.json
实测回显(节选):
{"database": "demo", "table": "notes", "is_view": false, "human_description_en": "", "rows": [[1, "第一条笔记", "2026-10-25 10:35:24"], [2, "第二条笔记", "2026-10-25 10:35:24"]], "truncated": false, "filtered_table_rows_count": 2, ... "columns": ["id", "title", "created"], "primary_keys": ["id"], ...}
返回 JSON 包含两行笔记与列定义,说明从进程启动到 SQL 执行再到 JSON 序列化的链路完全正常。日常使用时去掉 --get,直接 datasette serve demo.db 即可在浏览器访问 http://127.0.0.1:8001/。
💡 说明:把
demo.db放进/srv/datasette/app/即可被第五节 systemd 托管的实例自动挂载(配置目录模式),无需改启动命令;放完后sudo systemctl restart datasette生效。
八、方案对比与选择建议
| 维度 | 方案 A:pipx | 方案 B:venv + pip + systemd |
|---|---|---|
| 适用场景 | 个人 CLI 使用、临时起服务看数据 | 生产常驻服务、多实例、反向代理 |
| 安装位置 | ~/.local/pipx/venvs/datasette/ | /opt/datasette/venv/(固定路径) |
| 进程托管 | 无(前台或自己配) | systemd,开机自启 + 失败重启 |
| 运行身份 | 当前用户 | 专用低权限用户 datasette |
| 插件管理 | datasette install <插件> | venv/bin/pip install <插件> 或 datasette install |
| 升级方式 | pipx upgrade datasette | venv/bin/pip install -U datasette |
选择建议:先在本机用方案 A 体验和验证数据文件;确认要长期对外服务时,按方案 B 部署并用 nginx 反代。两者可以共存,互不干扰。
九、基础配置说明
本节只给「装上就能用」的最小配置,完整参数逐项实测见《Datasette 0.65.5 配置参数详解》。
- 元数据
metadata.json:放在/srv/datasette/app/下自动加载,可为实例/库/表挂标题、来源、许可证、默认排序与预定义查询; - 运行参数
settings.json:同目录自动加载,控制default_page_size、max_returned_rows、sql_time_limit_ms、allow_download等运行时护栏; - 命令行覆盖:任何 setting 都可用
--setting 名称 值临时覆盖,如datasette serve app --setting default_page_size 20; - 查看全部可配项:
datasette --help-settings列出 19 项运行时参数及默认值(实测输出见《Datasette 0.65.5 配置参数详解》)。
十、常见问题(FAQ)
Q1:apt-get install pipx 卡在时区选择界面?
tzdata 包的交互式提示所致。用 sudo DEBIAN_FRONTEND=noninteractive apt-get install -y pipx 跳过(见 4.2 排障实录);已卡住的终端输入对应数字回车即可继续。
Q2:datasette: command not found?
pipx 形态下确认 ~/.local/bin 在 PATH 中(pipx ensurepath 可自动修复);venv 形态下使用绝对路径 /opt/datasette/venv/bin/datasette。
Q3:启动报错 Address already in use?
8001 被占用。用 ss -ltnp | grep 8001 找到占用进程,或换端口 --port 8002。
Q4:可以直接 --host 0.0.0.0 对外吗?
可以但需先想清楚权限:Datasette 默认允许任何访问者执行只读 SQL 并下载整个库文件。对外发布前建议用元数据 allow 块收紧权限,或保持 127.0.0.1 由 nginx 反代并在 nginx 层加认证/限流,权限配置实测见《Datasette 0.65.5 配置参数详解》第七节。
Q5:服务启动了但首页看不到我的库?
配置目录模式下只有启动目录内的 .db 会被挂载;确认库文件路径与 WorkingDirectory 一致,且 datasette 用户对该文件有读权限(sudo -u datasette ls -l /srv/datasette/app/)。
十一、卸载与清理
pipx 形态:
pipx uninstall datasette
实测回显:
uninstalled datasette! ✨ 🌟 ✨
venv + systemd 形态(按顺序逐条执行):
sudo systemctl stop datasette
sudo systemctl disable datasette
sudo rm /etc/systemd/system/datasette.service
sudo systemctl daemon-reload
sudo rm -rf /opt/datasette/venv
sudo rm -rf /srv/datasette # 含数据与配置,确认备份后再删
sudo userdel datasette
nginx 反代配置按需保留或删除 /etc/nginx/conf.d/datasette.conf 后 sudo systemctl reload nginx。
十二、参考链接
- Datasette 官方安装文档:https://docs.datasette.io/en/stable/installation.html (查询日期 2026-10-25)
- Datasette 官方仓库:https://github.com/simonw/datasette (查询日期 2026-10-25)
- Datasette PyPI 页面:https://pypi.org/project/datasette/ (查询日期 2026-10-25)
- pipx 官方文档:https://pipx.pypa.io/ (查询日期 2026-10-25)
- nginx 反向代理官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html (查询日期 2026-10-25)