发布数据

Datasette 包含用于将您的数据发布和部署到互联网的工具。 datasette publish 命令会将包含您的数据库的新 Datasette 实例直接部署到 Heroku 或 Google Cloud 托管账户。您也可以使用 datasette package 创建一个 Docker 镜像,将您的数据库与用于提供服务的 datasette 应用程序捆绑在一起。

datasette publish

一旦您创建了 SQLite 数据库(例如使用 csvs-to-sqlite),您就可以使用一个命令将其部署到托管账户。

您需要一个 HerokuGoogle Cloud 的托管账户。创建账户后,您需要安装和配置 herokugcloud 命令行工具。

发布到 Google Cloud Run

Google Cloud Run 允许您在零扩展环境中发布数据,因此您的应用程序将在收到第一个请求时开始运行,并在流量停止时再次关闭。这意味着您只需为提供服务的时间付费。

警告

Cloud Run 是经济实惠地托管小型、低流量项目的好选择 - 但对于处理大量请求的项目来说,成本可能会增加。

如果您的项目中有包含大量行的表格,请特别小心。为每一行建立索引的搜索引擎爬虫可能会导致高额账单。

可以使用 datasette-block-robots 插件请求搜索引擎爬虫跳过抓取您的网站,这有助于避免此问题。

您首先需要按照 这些说明 安装和配置 Google Cloud CLI 工具。

然后,您可以使用以下命令将一个或多个 SQLite 数据库文件发布到 Google Cloud Run

datasette publish cloudrun mydatabase.db --service=my-database

Cloud Run **服务**是一个单独的托管应用程序。您指定的服务名称将用作 Cloud Run URL 的一部分。如果您部署到过去使用过的服务名称,您的新部署将替换之前的部署。

如果您省略 --service 选项,部署期间将互动式地要求您选择一个服务名称。

您可能需要与工具的提示进行交互。如果您想避免这些提示,许多提示要求的值可以作为 Google Cloud SDK 的属性 进行设置。

例如,可以使用以下命令设置部署实例的默认区域

gcloud config set run/region us-central1

您应该将 us-central1 替换为您所需的区域。或者,您可以通过设置 CLOUDSDK_RUN_REGION 环境变量来指定区域。

完成后,它将输出类似这样的 URL

Service [my-service] revision [my-service-00001] has been deployed
and is serving traffic at https://my-service-j7hipcg4aq-uc.a.run.app

Cloud Run 提供一个 .run.app 域上的 URL,但您也可以将您自己的域名或子域名指向您的 Cloud Run 服务 - 详情请参阅 Cloud Run 文档中的映射自定义域名

有关此命令的完整选项列表,请参阅 datasette publish cloudrun

发布到 Heroku

要使用 Heroku 发布您的数据,请先在那里创建一个账户,然后安装并配置 Heroku CLI 工具

您可以使用以下命令将一个或多个数据库发布到 Heroku

datasette publish heroku mydatabase.db

这将输出有关新部署的一些详细信息,包括类似这样的 URL

https://limitless-reef-88278.herokuapp.com/ deployed to Heroku

您可以通过向 publish 命令传递 -n my-app-name 来指定自定义应用程序名称。这也允许您覆盖现有应用程序。

您可以使用 --generate-dir 选项将要部署的文件输出到目录,而不是直接部署

datasette publish heroku mydatabase.db --generate-dir=/tmp/deploy-this-to-heroku

有关此命令的完整选项列表,请参阅 datasette publish heroku

发布到 Vercel

Vercel - 之前称为 Zeit Now - 提供了基于 AWS Lambda 的一层,可以实现快速的零扩展部署。您可以使用 datasette-publish-vercel 插件将 Datasette 实例部署到 Vercel。

pip install datasette-publish-vercel
datasette publish vercel mydatabase.db --project my-database-project

并非所有功能都支持:有关更多详细信息,请参阅 datasette-publish-vercel README

发布到 Fly

Fly 是一个价格具有竞争力的 Docker 兼容托管平台,支持在全球分布式数据中心运行应用程序,靠近您的最终用户。您可以使用 datasette-publish-fly 插件将 Datasette 实例部署到 Fly。

pip install datasette-publish-fly
datasette publish fly mydatabase.db --app="my-app"

有关更多详细信息,请参阅 datasette-publish-fly README

自定义元数据和插件

datasette publish 接受许多附加选项,可用于进一步自定义您的 Datasette 实例。

您可以定义自己的 元数据 并将其与您的实例一起部署,如下所示

datasette publish cloudrun --service=my-service mydatabase.db -m metadata.json

如果您只想设置标题、许可证或源信息,可以使用 datasette publish 的额外选项直接进行设置

datasette publish cloudrun mydatabase.db --service=my-service \
    --title="Title of my database" \
    --source="Where the data originated" \
    --source_url="http://www.example.com/"

您还可以指定要安装的插件。例如,如果您想包含 datasette-vega 可视化插件,可以使用以下命令

datasette publish cloudrun mydatabase.db --service=my-service --install=datasette-vega

如果插件有任何 Secret configuration values,您可以使用 --plugin-secret 选项在发布时设置这些秘密。例如,在使用 Heroku 和 datasette-auth-github 时,您可能运行以下命令

$ datasette publish heroku my_database.db \
    --name my-heroku-app-demo \
    --install=datasette-auth-github \
    --plugin-secret datasette-auth-github client_id your_client_id \
    --plugin-secret datasette-auth-github client_secret your_client_secret

datasette package

如果您的设备上安装了 Docker(例如使用 Docker for Mac),您可以使用 datasette package 命令在您的本地仓库中创建一个新的 Docker 镜像,其中包含 datasette 应用程序以及一个或多个 SQLite 数据库。

datasette package mydatabase.db

以下是 package 命令的示例输出

$ datasette package parlgov.db --extra-options="--setting sql_time_limit_ms 2500"
Sending build context to Docker daemon  4.459MB
Step 1/7 : FROM python:3.11.0-slim-bullseye
 ---> 79e1dc9af1c1
Step 2/7 : COPY . /app
 ---> Using cache
 ---> cd4ec67de656
Step 3/7 : WORKDIR /app
 ---> Using cache
 ---> 139699e91621
Step 4/7 : RUN pip install datasette
 ---> Using cache
 ---> 340efa82bfd7
Step 5/7 : RUN datasette inspect parlgov.db --inspect-file inspect-data.json
 ---> Using cache
 ---> 5fddbe990314
Step 6/7 : EXPOSE 8001
 ---> Using cache
 ---> 8e83844b0fed
Step 7/7 : CMD datasette serve parlgov.db --port 8001 --inspect-file inspect-data.json --setting sql_time_limit_ms 2500
 ---> Using cache
 ---> 1bd380ea8af3
Successfully built 1bd380ea8af3

您现在可以像这样运行生成的容器

docker run -p 8081:8001 1bd380ea8af3

这将容器内部的 8001 端口暴露为宿主机器上的 8081 端口,因此您可以通过 http://localhost:8081/ 访问应用程序

您可以使用 --port 选项自定义容器暴露的端口

datasette package mydatabase.db --port 8080

通过运行 datasette package --help 可以查看完整的选项列表

有关此命令的完整选项列表,请参阅 datasette package