目标:在一台系统盘重启会被重置、但数据目录持久化的 Linux 机器上,用 Conda 把 ComfyUI 装到指定目录,配合两个常用插件(Crystools、Manager),并写一个重启后直接能跑的启动脚本。
一、背景与问题
环境特点:
- 系统重启后,
/root/.bashrc等 shell 配置会被重置,conda init写入的初始化代码会丢失。 - 但
/root/private_data/...这类目录是持久化的,代码和 Conda 环境放在这里不会丢。 - 系统自带 Python 3.10,而 ComfyUI 最新依赖要求 Python ≥ 3.11(推荐 3.12/3.13)。
因此整个部署要围绕两个原则:
- Conda 环境必须建在持久化目录,不要用默认的
envs位置。 - 启动脚本自己加载 conda 初始化,不依赖被重置的
.bashrc。
二、第一步:把 Conda 环境建到指定目录
Conda 默认把环境放在自己的 envs 文件夹里。要放到指定位置,用 --prefix(或 -p)参数,后面跟完整路径:
conda create --prefix /root/private_data/apprepo/model/venv python=3.12 -y
创建完成后,激活这个环境不能再用环境名,而要用完整路径:
conda activate /root/private_data/apprepo/model/venv
如果提示
invalid choice: 'activate',说明当前 shell 还没加载 conda 的 shell 函数。执行source /opt/conda/etc/profile.d/conda.sh即可,不需要依赖conda init。
三、第二步:克隆 ComfyUI 与两个插件
3.1 克隆 ComfyUI 时遇到的 TLS 报错
直接 git clone https://github.com/Comfy-Org/ComfyUI 时遇到:
error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet.
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
这是 HTTPS 传输较大数据包时连接被中断导致的。有效的解决顺序:
- 浅克隆(最省事,先拿到能用的代码):
git clone --depth 1 https://github.com/Comfy-Org/ComfyUI.git - 改用 SSH(绕过 HTTPS 的中间设备干扰):
git clone git@github.com:Comfy-Org/ComfyUI.git - 必须用 HTTPS 时,调整 Git 配置:
git config --global http.postBuffer 1048576000 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 git config --global http.version HTTP/1.1
3.2 克隆两个常用插件
进入 ComfyUI 的 custom_nodes 目录:
cd /root/private_data/apprepo/model/ComfyUI/custom_nodes
git clone https://github.com/crystian/ComfyUI-Crystools.git
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
- ComfyUI-Crystools:提供资源监控(CPU/GPU/内存/显存)、进度条、元数据查看等实用工具。
- ComfyUI-Manager:节点与模型的管理器,可安装/更新自定义节点、缺失节点自动提示等。
如果插件克隆也遇到 TLS 报错,同样可以加 --depth 1 浅克隆。
四、第三步:安装依赖时踩的 Python 版本坑
4.1 现象
在 Python 3.10 下安装依赖,pip 报:
ERROR: Ignored the following versions that require a different python version: ... Requires-Python >=3.11 ...
ERROR: Could not find a version that satisfies the requirement comfyui-workflow-templates-media-assets-02==0.1.17 (from comfyui-workflow-templates) (from versions: none)
ERROR: No matching distribution found for comfyui-workflow-templates-media-assets-02==0.1.17
4.2 原因
- ComfyUI 最新依赖大量要求
Python >=3.11或>=3.12,Python 3.10 会被 pip 直接跳过。 - 日志里的
(from versions: none)往往还叠加了国内镜像源同步不完整的问题:镜像里没有comfyui-workflow-templates-media-assets-02这个包。
4.3 解决
- 确认环境已经是 Python 3.12:
python --version - 临时切到官方源安装,绕过镜像同步问题:
官方源慢时可换腾讯云或中科大镜像:
cd /root/private_data/apprepo/model/ComfyUI python -m pip install -r requirements.txt -i https://pypi.org/simple/python -m pip install -r requirements.txt -i https://mirrors.cloud.tencent.com/pypi/simple/ - 仍失败时清缓存并强制重装模板包:
python -m pip cache purge python -m pip install --force-reinstall comfyui-workflow-templates -i https://pypi.org/simple/
关键习惯:用
python -m pip而不是裸pip,确保装进当前 Conda 环境。
五、第四步:可移植的启动脚本
系统重启会重置 .bashrc,所以脚本不能依赖 conda init 写入的内容,而要自己 source conda 的初始化脚本。
最终脚本(放在持久化目录,例如 /root/private_data/apprepo/model/run_comfyui.sh):
#!/bin/bash
# ============================================
# 启动ComfyUI
# ============================================
cd ./ComfyUI
OMP_NUM_THREADS=10
export OMP_NUM_THREADS=10
#export HF_ENDPOINT=https://hf-mirror.com
# 定义 Conda 环境(使用 --prefix 创建的持久化环境)
CONDA_ENV_PREFIX="/root/private_data/apprepo/model/venv"
# 加载 conda 的初始化脚本,让 conda activate 可用
source /opt/conda/etc/profile.d/conda.sh
conda activate "$CONDA_ENV_PREFIX"
# 定义运行命令
COMMAND="python main.py --listen 0.0.0.0 --port 8188"
# 无限循环以保持程序运行
while true; do
echo "Starting the application..."
$COMMAND
EXIT_CODE=$?
# 检查退出代码,如果不是正常退出(比如退出代码为0),则等待一段时间后重启
if [ $EXIT_CODE -ne 0 ]; then
echo "Application exited with code $EXIT_CODE. Restarting in 5 seconds..."
sleep 5
else
echo "Application exited normally."
break
fi
done
使用:
chmod +x run_comfyui.sh
./run_comfyui.sh
要点说明:
source /opt/conda/etc/profile.d/conda.sh是脚本能在非交互式 shell 里使用conda activate的关键。- 环境用
--prefix创建,激活时也必须用绝对路径。 cd ./ComfyUI是相对路径,要求脚本从model目录执行;想更通用可改成cd "$(dirname "$0")/ComfyUI"。- 无限循环 + 退出码判断:非 0 退出 5 秒后自动重启,正常退出则结束。
六、可选:开机自启动(systemd)
如果希望机器启动后自动拉起 ComfyUI,可以交给 systemd:
sudo nano /etc/systemd/system/comfyui.service
[Unit]
Description=ComfyUI Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/private_data/apprepo/model
ExecStart=/root/private_data/apprepo/model/run_comfyui.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable comfyui.service
sudo systemctl start comfyui.service
注意 systemd 里不要依赖相对路径,用 WorkingDirectory 固定工作目录,ExecStart 用绝对路径。
七、总结
| 问题 | 根因 | 解决 |
|---|---|---|
git clone TLS 报错 | HTTPS 传输大包被中断 | 浅克隆 / 改用 SSH / 调大 http.postBuffer |
conda activate 无效 | shell 未加载 conda 函数 | source /opt/conda/etc/profile.d/conda.sh |
| pip 找不到依赖 | Python 3.10 过低 + 镜像同步不全 | 用 Python 3.12,临时切官方源 |
| 重启后环境失效 | .bashrc 被重置 | 环境建在持久化目录,脚本自行 source conda |
| 插件安装 | — | 克隆到 custom_nodes 下,浅克隆兜底 |
核心思路一句话:环境放持久化目录,脚本自己初始化 Conda,不依赖系统 shell 配置。 这样无论重启多少次,跑一下脚本就能继续用,不需要重新安装。

评论