使用Fly发布数据的Datasette插件
项目描述
datasette-publish-fly
Datasette插件,用于将Datasette实例部署到Fly.io.
项目背景: 使用SQLite和Datasette与Fly Volumes
安装
在Datasette相同的环境中安装此插件。
$ datasette install datasette-publish-fly
部署只读数据
首先,根据他们的说明安装flyctl命令行工具。
运行flyctl auth signup
在该处创建账户,或者如果您已经有了,运行flyctl auth login
。
现在您可以使用datasette publish fly
发布一个或多个SQLite数据库文件
datasette publish fly my-database.db --app="my-data-app"
您传递给--app
的参数将用于应用程序的URL: my-data-app.fly.dev
。
要更新应用程序,运行发布命令,并将相同的应用程序名称传递给--app
选项。
Fly有一个免费层,超出这个范围,他们将对每个实时应用程序按月收费。他们的定价详情可以在他们的网站上找到。
您的应用程序将部署在https://your-app-name.fly.io/
- 注意,首次部署时可能需要几分钟才能开始工作。
使用Fly卷存储可写数据库
Fly 卷为Fly应用程序提供持久磁盘存储。卷大小可以是1GB或更大,Fly免费层包括3GB的卷空间。
如datasette-uploads-csvs和datasette-tiddlywiki之类的Datasette插件可以部署到Fly,并将它们可变数据存储在卷中。
:警告: 如果您的数据库接受写入,则应仅运行一个应用程序实例。Fly 对在不同地理区域运行多个实例具有出色的支持,但使用卷的
datasette-publish-fly
还不兼容此模式。您可能需要使用 Fly PostgreSQL。
以下是使用 datasette-auth-passwords
提供的认证部署 datasette-tiddlywiki
的方法。
首先,您需要创建一个根密码哈希,用于登录实例。
您可以通过安装插件并运行 datasette hash-password
命令来完成此操作,或者使用此托管工具。
哈希应类似于 pbkdf2_sha256$...
- 您将需要此哈希进行下一步操作。
在此示例中,我们还将部署一个名为 content.db
的只读数据库。
为您的应用程序选择一个名称,然后运行以下命令
datasette publish fly \
content.db \
--app your-application-name \
--create-volume 1 \
--create-db tiddlywiki \
--install datasette-auth-passwords \
--install datasette-tiddlywiki \
--plugin-secret datasette-auth-passwords root_password_hash 'pbkdf2_sha256$...'
这将创建新的应用程序,部署 content.db
只读数据库,为该应用程序创建一个 1GB 的卷,在该卷中创建一个名为 tiddlywiki.db
的新数据库,然后安装两个插件并配置您指定的密码。
更新使用卷的应用程序
一旦您已部署使用卷的应用程序,您就可以更新该应用程序,无需使用 --create-volume
或 --create-db
选项。要将 datasette-graphql 插件添加到您的已部署应用程序中,请运行以下命令
datasette publish fly \
content.db \
--app your-application-name \
--install datasette-auth-passwords \
--install datasette-tiddlywiki \
--install datasette-graphql \
--plugin-secret datasette-auth-passwords root_password_hash 'pbkdf2_sha256$...' \
由于应用程序名称相同,因此不需要 --create-volume
或 --create-db
选项 - 这些选项将在部署之间自动持久化。
您确实需要指定您想要安装的所有插件的完整列表以及任何插件密钥。
您还需要包含任何属于实例的只读数据库文件 - 例如,此示例中的 content.db
- 否则,新部署将不包括它们。
高级卷使用
datasette publish fly
将添加一个名为 datasette
的卷到您的 Fly 应用程序。您可以使用 --volume name custom_name
选项自定义名称。
可以使用 Fly 来扩展应用程序,在世界上多个地区的多个区域运行多个实例。这对于只读 Datasette 工作得很好,但目前在使用卷的 Datasette 中不建议使用,因为每个 Fly 副本都需要自己的卷,并且在一个实例中存储的数据在其他实例中不可见。
如果您想使用带有卷的多实例,您需要直接切换到使用 flyctl
命令。下面描述的 --generate-dir
选项可以帮助您完成此操作。
生成而不部署
使用 --generate-dir
选项生成可以部署到 Fly 的目录,而不是直接部署
datasette publish fly my-database.db \
--app="my-generated-app" \
--generate-dir /tmp/deploy-this
然后,您可以手动使用以下命令部署您生成的应用程序
cd /tmp/deploy-this
flyctl apps create my-generated-app
flyctl deploy
datasette publish fly --help
Usage: datasette publish fly [OPTIONS] [FILES]...
Deploy an application to Fly that runs Datasette against the provided database
files.
Usage example:
datasette publish fly my-database.db --app="my-data-app"
Full documentation: https://datasette.io/plugins/datasette-publish-fly
Options:
-m, --metadata FILENAME Path to JSON/YAML file containing metadata to
publish
--extra-options TEXT Extra options to pass to datasette serve
--branch TEXT Install datasette from a GitHub branch e.g.
main
--template-dir DIRECTORY Path to directory containing custom templates
--plugins-dir DIRECTORY Path to directory containing custom plugins
--static MOUNT:DIRECTORY Serve static files from this directory at
/MOUNT/...
--install TEXT Additional packages (e.g. plugins) to install
--plugin-secret <TEXT TEXT TEXT>...
Secrets to pass to plugins, e.g. --plugin-
secret datasette-auth-github client_id xxx
--version-note TEXT Additional note to show on /-/versions
--secret TEXT Secret used for signing secure values, such as
signed cookies
--title TEXT Title for metadata
--license TEXT License label for metadata
--license_url TEXT License URL for metadata
--source TEXT Source label for metadata
--source_url TEXT Source URL for metadata
--about TEXT About label for metadata
--about_url TEXT About URL for metadata
--spatialite Enable SpatialLite extension
--region TEXT Fly region to deploy to, e.g sjc - see
https://fly.io/docs/reference/regions/
--create-volume INTEGER RANGE Create and attach volume of this size in GB
[x>=1]
--create-db TEXT Names of read-write database files to create
--volume-name TEXT Volume name to use
-a, --app TEXT Name of Fly app to deploy [required]
-o, --org TEXT Name of Fly org to deploy to
--generate-dir DIRECTORY Output generated application files and stop
without deploying
--show-files Output the generated Dockerfile, metadata.json
and fly.toml
--setting SETTING... Setting, see
docs.datasette.io/en/stable/settings.html
--crossdb Enable cross-database SQL queries
--help Show this message and exit.
开发
要为此工具做出贡献,首先检出代码。然后创建一个新的虚拟环境
cd datasette-publish-fly
python -m venv venv
source venv/bin/activate
或者如果您使用的是 pipenv
pipenv shell
现在安装依赖项和测试依赖项
pip install -e '.[test]'
要运行测试
pytest
集成测试
在 tests/test_integration.py
中的测试会实际调用 Fly 来部署测试应用程序。
默认情况下会跳过这些测试。如果您已安装并配置了 flyctl
,可以像这样运行集成测试
pytest --integration -s
这里的 -s
选项确保输出部署信息将可见给您 - 否则,可能会看起来像测试挂起了。
测试将在 Fly 上创建以 publish-fly-temp-
为前缀的应用程序,然后在运行结束时删除它们。
项目详细信息
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
datasette-publish-fly-1.3.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4d780018cdf489814fb6f5a95d4b96fae22c9dc2ee48b8a3747e4c5142ebbbff |
|
MD5 | 81a9fee5de0a80f72dffb9386ae1a172 |
|
BLAKE2b-256 | 2e6945cd1660b86a66fc818d469f49e7cae247064ded3ab04bd9785992347356 |
datasette_publish_fly-1.3.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a40bd4ade6c4feab0645e273bb7a9e158bb30a42e05e37eb5236726e35806b59 |
|
MD5 | 153b738fe7201a6d20230060feafe128 |
|
BLAKE2b-256 | 7daaad7e536df1f7266d73f49c3d286e295addc1a21911bfa75a0ee7f915e9ad |