AI写真接单从零起步:环境部署与自动交付流程
想用AI写真接单,核心不是先学绘画提示词,而是先把一套能稳定出图、能收单、能自动交付的环境搭起来。
本文面向零基础用户,按“服务器准备→部署生成服务→配置接单页面→打通订单流程→验证与排错”的顺序,给出可照做的命令和配置片段。
适用条件:有一台可公网访问的Linux服务器(建议2核4G以上、带GPU更佳),并已安装宝塔面板或习惯用命令行。
先定接单模式,再决定部署方式
AI写真接单常见两种模式:一是人工接单后手动跑图,适合刚起步、订单量少的情况;
二是页面自动接单、队列出图、邮件或网盘交付,适合有稳定流量后使用。
本文按第二种模式展开,因为自动交付能减少漏单,也方便后续统计。
部署前先确认三件事:
- 服务器能访问外网,且已放行80、443端口;
- 有一个域名并完成解析(没有域名可先用IP加端口测试,但不建议长期用IP接单);
- 准备好收款方式(微信/支付宝个人码或第三方收款接口),先手动对账,再考虑自动化。
如果服务器没有GPU,CPU跑图速度会明显变慢,建议先用小尺寸、低步数测试流程,再决定是否升级配置。
部署ComfyUI生成服务
ComfyUI是节点式AI绘图工具,可以理解为“把出图步骤连成流水线”。
以下命令在Ubuntu 22.04下验证思路,其他发行版请替换包管理命令。
先安装基础依赖:
sudo apt update
sudo apt install -y python3 python3-venv python3-pip git wget
拉取代码并创建虚拟环境:
cd /opt
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
将模型文件放入/opt/ComfyUI/models/checkpoints/,然后启动服务:
python main.py --listen 0.0.0.0 --port 8188
启动后浏览器访问http://服务器IP:8188,能看到节点界面即表示服务正常。
生产环境建议用宝塔“网站→反向代理”把8188端口代理到域名,并配置SSL。
配置接单页面与订单表
接单页面不需要复杂开发,用宝塔新建一个PHP站点,放置一个简单表单即可。
表单字段建议包含:称呼、联系方式、照片上传、风格选择、备注。
提交后写入MySQL订单表。
在宝塔“数据库”中新建库ai_order,执行建表语句:
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
contact VARCHAR(100),
photo_path VARCHAR(255),
style VARCHAR(50),
status TINYINT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
status字段用0表示待处理、1表示生成中、2表示已完成、3表示失败。
上传目录放在站点根目录外的/www/wwwroot/ai_order/uploads/,并在Nginx配置中禁止直接执行上传目录的PHP文件,降低安全风险。
打通自动出图与交付
自动化的关键是用脚本轮询订单表,发现status=0的订单就调用ComfyUI接口生成图片,完成后更新状态并发送交付链接。
ComfyUI提供HTTP接口,默认地址为http://127.0.0.1:8188/prompt,提交工作流JSON即可。
下面是一个PHP轮询脚本的核心逻辑,放在宝塔“计划任务”中每2分钟执行一次:
query("SELECT * FROM orders WHERE status=0 LIMIT 1");
$order = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$order) exit;
// 标记为生成中,防止重复处理
$pdo->prepare("UPDATE orders SET status=1 WHERE id=?")->execute([$order['id']]);
// 调用ComfyUI接口(工作流JSON需提前准备好)
$workflow = json_decode(file_get_contents('/www/wwwroot/ai_order/workflow.json'), true);
$payload = json_encode(['prompt' => $workflow]);
$ch = curl_init('http://127.0.0.1:8188/prompt');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true
]);
$res = curl_exec($ch);
curl_close($ch);
// 根据返回结果更新状态,成功后生成交付链接
$pdo->prepare("UPDATE orders SET status=2 WHERE id=?")->execute([$order['id']]);
实际使用时需要把workflow.json替换成你在ComfyUI界面中“保存(API格式)”导出的工作流,并处理好照片路径和风格参数的替换。
交付链接可以指向一个带随机文件名的下载页,避免被直接遍历。
常见报错与避坑要点
- ComfyUI启动报CUDA错误:先确认显卡驱动和CUDA版本匹配,没有GPU时改用
--cpu参数,但出图会变慢。 - 订单重复生成:轮询脚本必须先把状态从0改为1再调用生成接口,否则计划任务重叠时同一订单会被处理两次。
- 上传目录被执行:在Nginx站点配置中加入
location ~* /uploads/.*\.php$ { deny all; },防止恶意上传脚本被执行。 - 交付链接被猜测:文件名使用随机字符串,不要用订单号直接命名;交付页设置有效期,过期后需重新联系。
- 收款对账混乱:自动交付不代表自动收款,建议先保留人工确认环节,避免未付款就出图。
验证流程是否跑通
部署完成后按以下顺序验证:
- 在接单页面提交一条测试订单,检查数据库
orders表是否新增记录且status=0; - 手动执行一次轮询脚本,观察状态是否变为1再变为2;
- 打开交付链接,确认图片能正常下载且文件名随机;
- 故意提交一张无法处理的图片,确认脚本能记录失败并更新
status=3; - 用手机4G网络访问接单页和交付页,确认外网可访问。
如果某一步失败,先看宝塔计划任务的执行日志和PHP错误日志,再检查ComfyUI控制台输出。
大多数问题集中在路径写错、权限不足和接口地址未使用127.0.0.1。
两个容易被忽略的细节
照片隐私:客户上传的真人照片属于敏感数据,建议在接单页明确用途和保留期限,生成完成后定期清理原始上传文件,不要长期堆在服务器上。
生成耗时与超时:
计划任务默认可能有执行时间限制,
单张写真生成较慢时,
需要把PHP脚本的max_execution_time调大,
或者改为“提交任务后由回调更新状态”,
避免脚本被中断导致订单卡在“生成中”。
按以上步骤完整执行后,你就有了一个能接单、能出图、能交付的最小可用流程。
后续再根据订单量增加队列、限流和备份策略,不要一开始就堆太多功能。