hohu init
安装项目标记中声明的组件依赖,并执行存在的组件初始化脚本。标准 Backend 会准备环境文件、迁移数据库并同步基础数据。
前提条件
完成 hohu create,所选目录均存在。在包含 .hohu/project.json 的项目根目录或子目录运行。按开发环境教程准备运行环境、PostgreSQL 和 Redis,核对目标数据库及连接配置。
首次环境文件与连接配置的处理步骤见教程。初始化可能连接数据库并修改其结构和基础数据。
所选组件需包含有效的 uv.lock 或 pnpm-lock.yaml。缺失时先用对应包管理器生成并审查,CLI 不自动解析最新版本。
用法
hohu init
hohu init -s mirror
hohu init --source official没有组件筛选参数。按项目标记中的顺序执行,缺失的组件目录会跳过。
依赖来源
--source 与 -s 等价,默认 auto,只影响当前初始化命令:
| 值 | 行为 |
|---|---|
auto | 保留已有源配置;公共官方包源下载超时、连接失败等传输错误时,尝试中国大陆镜像一次 |
official | 仅使用官方公共包源,不自动回退 |
mirror | 直接使用中国大陆公共镜像,不自动回退 |
| 依赖 | 官方包源 | 中国大陆镜像 |
|---|---|---|
| Python | PyPI | https://pypi.tuna.tsinghua.edu.cn/simple |
| Web / App | https://registry.npmjs.org/ | https://registry.npmmirror.com/ |
上述镜像为中国大陆访问官方包源困难的场景提供备选。请根据实际网络连通性选择;auto 根据下载失败情况回退,不检测用户所在地区。若只使用官方包源且不希望自动回退,可运行 hohu init -s official。
Python 已配置的自定义源,以及非公共 npm 默认源保持原样,使用 auto 安装且不自动覆盖。显式 official/mirror 与这些配置冲突时会提示处理配置。npm 的 scoped registry 和认证仍由 pnpm 保留。项目已配置 npmmirror 时直接使用它,不重复切换;整个过程不修改全局源配置。
包管理器自身重试结束后才判断是否回退。认证、证书、依赖冲突、构建、哈希或锁文件错误不会触发换源;镜像仍失败则停止。解释器下载、Git/固定 URL 依赖和构建脚本自行下载的文件不由公共包镜像替换,锁文件中的固定 tarball 地址也不会重写。
创建时的 hohu create -s gitee 只选择源码仓库,不决定依赖源;部署的 hohu deploy -s acr 只选择容器镜像。三者的配置分别生效,见配置与排错。
执行过程与结果
| 组件 | 首选依赖安装 | 初始化 |
|---|---|---|
| Backend | uv sync --locked | 使用组件 .venv 解释器执行存在的 scripts/init.py |
| Web | pnpm install --frozen-lockfile | 无额外 CLI 初始化脚本 |
| App | pnpm install --frozen-lockfile | 无额外 CLI 初始化脚本 |
Python 镜像安装通过 uv export --locked 导出锁定版本与哈希,再用 uv pip sync 显式安装到组件 .venv,保留原 uv.lock 和 editable 项目安装。这里使用的是 uv,不调用系统 pip。Web/App 始终使用 pnpm,不回退到 npm;pnpm-lock.yaml 保持冻结。
标准后端初始化会:
- 从
.env.example创建缺失的.env,生成应用密钥。 - 在未提供
HOHU_ADMIN_PASSWORD时生成首次管理员密码。 - 执行
alembic upgrade head,然后运行基础数据初始化。
已有 .env 会保留;基础数据同步保留已有管理员密码和用户自定义内容。凭据位于后端 .env,详见首次登录。初始化不启动开发服务或准备 Docker 部署配置。
完成后检查各组件安装输出、后端迁移和初始化结果,再运行 hohu dev,通过登录确认服务可用。无需重复运行内部初始化脚本。
失败后重试
修复错误后,在同一项目重新运行 hohu init。
安装命令、包管理器输出和换源提示会显示在终端,脱敏日志保存到各组件 .local/reports/install-*.log。日志位置也会在安装完成或失败时显示。
| 现象 | 处理方式 |
|---|---|
| 找不到项目 | 进入包含 .hohu/project.json 的目录 |
| 数据库或 Redis 连接失败 | 检查服务、数据库和 hohu-admin/.env,修正后重试 |
| 依赖安装失败 | 阅读出错组件输出,核对运行环境、网络和锁文件 |
| 公共包源下载超时 | 默认自动回退一次;也可使用 hohu init -s mirror,镜像失败后核对日志 |
| 自定义源与参数冲突 | 使用 hohu init -s auto 保留配置,或自行调整包管理器源设置 |
| 缺少或过期的锁文件 | 用项目包管理器生成或更新并审查锁文件,不能靠换源解决 |
| 目录或初始化脚本缺失 | 检查源码完整性;目录可能被跳过,缺失脚本可能仅产生警告 |
| Windows symlink 权限错误 | 开启 Windows 开发者模式,检查目录写入权限 |
最后一行提示不能代替对每个组件的核查。迁移失败后按实际错误恢复,不要通过删除数据库来重试。
