30 分钟完成自部署:Docker Compose 一键启动 ShopFaaS
部署实战 · 第 1 篇 · 约 8 分钟阅读
很多人对"自部署独立站"的印象停留在"难、复杂、需要专业运维"。事实上,以 ShopFaaS 为例,从一台干净的 Ubuntu 服务器到能接订单的独立站,完整流程只需要 30 分钟。本文把每一步都写出来,你照着做就行。
需要先说明一点:ShopFaaS 提供的是 ShopFaaS Store 独立站应用的私有化部署——交付给客户的是一个打包好的 Docker 镜像部署包,而不是一份需要自己编译的源码。 你不需要在服务器上安装 Node.js、不需要 git clone、不需要 bun install/bun run build,唯一需要的运行时是 Docker 引擎。 部署后的独立站会通过 SUITE_API_URL 回连平台完成授权激活,并每 1 小时上报一次心跳,确保 License 合法有效。
本文假设你已从平台方拿到部署包(镜像 tar 文件 + docker-compose.standalone.yml + start-standalone.sh)与部署配置(SUITE_API_URL + DEPLOY_TOKEN)。服务器要求:Ubuntu 22.04+ / Debian 12+、Docker 24.0+,2 核 4G 起步,推荐 4 核 8G。
第一步:安装 Docker 与 Docker Compose(5 分钟)
SSH 登录服务器,执行以下命令安装 Docker 与 Docker Compose:
# 安装 Docker(Ubuntu / Debian)
curl -fsSL https://get.docker.com | sudo sh
# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录使组权限生效
exit
# 验证安装
docker --version
docker compose version看到版本号输出就说明 Docker 与 Docker Compose 已安装完成。
第二步:上传部署包并配置环境变量(5 分钟)
在服务器上创建部署目录并上传部署包中的文件:
mkdir -p /opt/shopfaas-store
cd /opt/shopfaas-store
# 将以下文件从本地上传到此目录:
# images-<版本号>-full.tar 全量正式包(首次部署用)
# docker-compose.standalone.yml
# Caddyfile 或 nginx.conf
# start-standalone.sh首次运行 start-standalone.sh 会自动生成 .env 模板(含随机密码)。你只需要手动填写两个必填的联动变量——它们必须来自平台方交付的部署配置:
nano .env
# === 平台联动(必填,从平台方获取) ===
SUITE_API_URL=https://platform.example.com
DEPLOY_TOKEN=your-deploy-token其他密码(POSTGRES_PASSWORD、JWT_SECRET、INTERNAL_API_KEY 等)由 start-standalone.sh自动生成,无需手动填写。注意:DEPLOY_TOKEN 是一次性令牌(48 小时有效),激活后即失效;首次部署后各密钥不可更改,请妥善备份 .env 文件。
第三步:一键启动(10 分钟)
chmod +x start-standalone.sh
./start-standalone.sh脚本会自动完成:
- 加载镜像包并启动 7 个服务(postgres / redis / rustfs / schema-init / store / chat / nginx 或 caddy)
schema-init智能引导数据库:空库时全量安装 schema 与演示数据,已有业务表时仅执行增量迁移(绝不 DROP 表)- store 容器启动时自动完成 License 激活(
POST /api/deploy/activate)、绑定实例指纹,并从平台拉取租户初始化配置 - 自动创建店主账号、安装默认主题、写入配额,并启动每小时心跳
等待健康检查通过(约 30-90 秒),看到日志出现 License 实例激活成功 与 provisionTenant 完成 即表示部署成功。
第四步:域名解析与 HTTPS(10 分钟)
在域名服务商处把主域名(以及 www 子域名)的 A 记录解析到服务器 IP。注意:不要使用 Cloudflare 等 CDN 代理,否则 Caddy 申请 Let's Encrypt 证书时 ACME 校验会失败。
# 验证 DNS 解析是否生效(两条都应返回服务器 IP)
dig example.com +short
dig www.example.com +short在 .env 中启用自动 HTTPS(推荐),填入域名与证书注册邮箱,然后重启:
nano .env
# 启用 HTTPS 自动证书模式
COMPOSE_PROFILES=https
AUTO_HTTPS=true
DOMAIN=example.com
HTTPS_EMAIL=admin@example.com
cd /opt/shopfaas-store
./start-standalone.shCaddy 会自动申请并续期 Let's Encrypt 证书。完成后访问 https://example.com,你应该能看到店铺首页,且浏览器地址栏显示安全锁图标。店主后台入口为 https://example.com/admin。
第五步:首次登录与邮件服务(可选,5 分钟)
店主账号的邮箱与初始密码由平台方在生成部署配置时指定,登录后请立即修改默认密码。邮件服务(SMTP)用于发送订单确认、密码重置与营销邮件,在店主后台「设置 → 邮件服务」页配置即可,无需改 .env。
运维清单:让站点长期稳定运行
部署完成只是开始。要让站点长期稳定运行,需要建立以下运维习惯:
日常运维
- 每周检查
docker compose -f docker-compose.standalone.yml logs是否有异常错误 - 每月检查服务器磁盘空间(
df -h),日志与图片占用大头 - 版本升级由平台方提供新的镜像包,执行
docker load后重启即可,无需手动迁移
数据备份
- 数据库每日自动备份:
docker exec shopfaas-postgres pg_dump -U shopfaas shopfaas_store > backup.sql - 同时备份
.env配置与对象存储目录(密钥首次部署后不可更改,备份即救命) - 每月验证备份可恢复(在测试环境恢复一次)
监控告警
- 用 UptimeRobot 或类似服务监控站点可用性(免费版够用)
- 设置服务器 CPU、内存、磁盘告警阈值(CPU > 80% 持续 5 分钟告警)
- ShopFaaS 自带
/health与/health/ready端点,可对接监控系统
安全加固
- SSH 禁用密码登录,只允许密钥登录
- 防火墙只开放 80、443、22 端口,数据库与 Redis 不暴露公网
- 定期更新系统(
sudo apt update && sudo apt upgrade) - 妥善保管
.env备份(内含数据库/应用密钥,丢失将无法访问数据)
常见问题
Q1:为什么启动失败,提示缺少 SUITE_API_URL / DEPLOY_TOKEN?
私有化部署采用强制联动模式:未配置 SUITE_API_URL + DEPLOY_TOKEN 的 store 会拒绝启动(这是 License 安全机制)。请确认这两个变量已从平台方交付的部署配置中正确填入.env。若令牌过期,联系平台方重新生成。
Q2:SSL 证书申请失败怎么办?
确保主域名与 www 的 A 记录已解析到服务器 IP(两条都要配),且 80 端口未被防火墙拦截。用 dig example.com 验证 DNS。若使用了 Cloudflare 等 CDN 代理,ACME 校验会失败,请关闭代理直连。Let's Encrypt 有频率限制,失败多次后需等待再重试。
Q3:如何升级到新版本?
# 从平台方获取新版本 update 镜像包
docker load -i images-<新版本号>-update.tar
docker compose -f docker-compose.standalone.yml down
docker compose -f docker-compose.standalone.yml up -d升级前务必备份数据库与 .env。schema-init 会自动执行增量迁移,不会清空已有业务数据。
Q4:邮件发不出去怎么办?
检查店主后台「设置 → 邮件服务」中的 SMTP 配置:主机、端口、账号、密码、发件人域名是否与邮件服务商要求一致。发件地址必须是你在 SMTP 服务商验证过的域名邮箱,Gmail、QQ 等个人邮箱不适合做发件地址,会被识别为垃圾邮件。
下一步
部署完成后,你可以:
- 登录店主后台
https://example.com/admin,配置店铺信息、添加商品、设置支付通道 - 阅读 支付通道接入指南,接入 Stripe、支付宝、微信、PayPal
- 阅读 独立站 SEO 实战清单,从冷启动开始积累搜索流量
有问题可以在留言表单联系我们,或在 GitHub Issues 提问。我们的目标:让自部署像 SaaS 一样简单,但把数据归属与成本控制握在自己手里。