发布数据¶
Datasette 包含用于将您的数据发布和部署到互联网的工具。 datasette publish
命令会将包含您的数据库的新 Datasette 实例直接部署到 Heroku 或 Google Cloud 托管账户。您也可以使用 datasette package
创建一个 Docker 镜像,将您的数据库与用于提供服务的 datasette 应用程序捆绑在一起。
datasette publish¶
一旦您创建了 SQLite 数据库(例如使用 csvs-to-sqlite),您就可以使用一个命令将其部署到托管账户。
您需要一个 Heroku 或 Google Cloud 的托管账户。创建账户后,您需要安装和配置 heroku
或 gcloud
命令行工具。
发布到 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。