跳转到主要内容

fh-fablib

项目描述

使用

  1. 安装pipx

  2. 使用pipx安装uv

  3. 安装fh-fablib

    1. 如果您对包装版本满意,请使用pipx install fh_fablib

    2. 如果您想从本地git checkout安装,请使用pipx install ~/Projects/fh-fablib

  4. 将一个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)
  5. 运行fl hook以提供默认的pre-commit配置(或使用fl hook --force覆盖dotfiles)。

  6. 运行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-dbfl 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.runConnection.run的包装器,始终设置一些有用的参数(在编写时为echo=Truepty=Truereplace_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控制单元。

项目详情


版本历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

fh_fablib-1.0.20241002.tar.gz (25.3 kB 查看哈希值)

上传时间

构建分布

fh_fablib-1.0.20241002-py3-none-any.whl (22.1 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面