fh-fablib
项目描述
使用
安装pipx
使用pipx安装uv
安装fh-fablib
如果您对包装版本满意,请使用pipx install fh_fablib
如果您想从本地git checkout安装,请使用pipx install ~/Projects/fh-fablib
将一个fabfile.py文件添加到您的项目中。以下是一个最小示例
import fh_fablib as fl fl.require("1.0.20241002") fl.config.update(host="www-data@feinheit06.nine.ch") environments = [ fl.environment( "production", { "domain": "example.com", "branch": "main", "remote": "production", }, aliases=["p"], ), ] ns = fl.Collection(*fl.GENERAL, *fl.NINE, *environments)
运行fl hook以提供默认的pre-commit配置(或使用fl hook --force覆盖dotfiles)。
运行fl --list以获取命令列表。
配置值
app = "app":包含设置、资产等主要Django应用的名称。
base:指向项目基本目录的pathlib.Path对象。
branch:包含要部署代码的分支。
domain:网站的主域。数据库名和缓存键前缀由此值派生。
environments:环境的字典,见下文。
environment:活动环境的名称或"default"。
force:部署时始终强制推送。
host:SSH连接字符串(username@server)
remote:服务器的git远程名称。仅用于fetch任务。
添加或覆盖捆绑任务
为了举例,假设在部署后需要重新启动额外的进程。以下是一个自定义的deploy任务
# ... continuing the fabfile above
@fl.task
def deploy(ctx):
"""Deploy once 🔥"""
fl.deploy(ctx) # Reuse
with fl.Connection(fl.config.host) as conn:
fl.run(conn, "systemctl --user restart other.service")
ns.add_task(deploy)
多个环境
如果您需要多个环境,请按以下方式添加环境任务
import fh_fablib as fl
fl.require("1.0.20241002")
fl.config.update(host="www-data@feinheit06.nine.ch")
environments = [
fl.environment(
"production",
{
"domain": "example.com",
"branch": "main",
"remote": "production",
},
aliases=["p"],
),
fl.environment(
"next",
{
"domain": "next.example.com",
"branch": "next",
"remote": "next",
},
aliases=["n"],
),
]
ns = fl.Collection(*fl.GENERAL, *fl.NINE, *environments)
现在,fl production pull-db,fl next deploy和类似的命令应该按预期工作。
可用任务
fh_fablib.GENERAL
check:检查代码风格
cm:编译翻译目录
debug:启用debugpy后运行开发服务器
deploy:部署一次 🔥
dev:运行前端和后端的开发服务器
fetch:确保服务器存在远程,并获取
freeze:冻结虚拟环境的状态
github:在GitHub上创建仓库并推送代码
hook:安装预提交钩子
local:本地环境设置
mm:更新翻译目录
pull-db:拉取远程DB的本地副本并重置所有密码
pull-media:从远程同步文件夹到本地环境
reset-pw:将所有用户密码设置为"password"
reset-sq:重置所有PostgreSQL序列
update:更新虚拟环境和node_modules以匹配锁定文件
upgrade:使用所有库的最新版本重新创建虚拟环境
fh_fablib.NINE
nine:按顺序运行所有九个🌟设置任务
nine-alias-add:向九个manage-vhost虚拟主机添加别名
nine-alias-remove:从九个manage-vhost虚拟主机中删除别名
nine-checkout:在服务器上检出仓库
nine-db-dotenv:创建数据库并初始化.env。目前假设shell用户具有超级用户权限(通过PGUSER和PGPASSWORD环境变量或通过对等身份验证实现)
nine-disable:禁用虚拟主机,转储并删除数据库并停止gunicorn@单元
nine-reinit-from:从不同的环境重新初始化环境
九次重启:重启应用程序服务器
九次SSL:激活SSL
九次单元:启动并启用一个gunicorn@单元
九次虚拟环境:创建一个venv并从requirements.txt安装包
九次虚拟主机:使用nine-manage-vhosts创建一个虚拟主机
构建块
以下函数可用于构建自己的任务。它们不能直接从命令行执行。
运行命令
run(c, ...):围绕Context.run或Connection.run的包装器,始终设置一些有用的参数(在编写时为echo=True,pty=True和replace_env=False)
检查
_check_branch(ctx):如果检出分支与配置不匹配,则终止。
_check_no_uncommitted_changes(ctx):如果服务器上有未提交的更改,则终止。
辅助工具
_local_env(path=".env"):本地环境文件speckenv.env
_srv_env(conn, path):远程环境文件speckenv.env
_python3():返回Python 3可执行文件的路径。优先选择较新版本的Python。
_local_dotenv_if_not_exists():确保存在一个包含一些默认值的本地.env文件。如果.env已经存在,则不执行任何操作。
_local_dbname():确保存在一个本地.env文件,并返回数据库名称。
_dbname_from_dsn(dsn):从DSN中提取数据库名称。
_dbname_from_domain(domain):修改域名以产生适合用作数据库名称、数据库用户和缓存键前缀的字符串。
_concurrently(ctx, jobs):并发运行一系列shell命令,并等待所有命令终止(或Ctrl-C)。
_random_string(length, chars=None):返回一个长度为指定长度的随机字符串,适合生成密钥等。
require(version):如果fh_fablib版本较旧,则终止。
terminate(msg):使用错误消息终止处理。
部署
_deploy_django:更新Git检出,更新虚拟环境。
_deploy_staticfiles:收集静态文件。
_rsync_static:将本地的static/文件夹同步到远程,可选地删除本地不存在的内容。
_nine_restart:重启systemd控制单元。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。