30 分钟完成自部署:Docker Compose 一键启动 ShopFaaS
部署实战 · 第 1 篇 · 约 8 分钟阅读
很多人对"自部署独立站"的印象停留在"难、复杂、需要专业运维"。事实上,以 ShopFaaS 为例,从一台干净的 Ubuntu 服务器到能接订单的独立站,完整流程只需要 30 分钟。本文把每一步都写出来,你照着做就行。
本文假设你有一台 Ubuntu 22.04 LTS 服务器(2 核 4G 起步,推荐 4 核 8G)、一个域名、SSH 访问权限。不假设你有专业运维背景。
第一步:安装 Docker 与 Docker Compose(5 分钟)
SSH 登录服务器,执行以下命令安装 Docker 与 Docker Compose:
# 更新包索引
sudo apt update
# 安装 Docker
curl -fsSL https://get.docker.com | sudo sh
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录使组权限生效
exit
# 重新 SSH 登录
# 验证安装
docker --version
docker compose version看到版本号输出就说明 Docker 与 Docker Compose 已安装完成。
第二步:克隆 ShopFaaS 仓库并配置环境变量(5 分钟)
克隆仓库并复制环境变量模板:
git clone https://github.com/shopfaas/shopfaas.git
cd shopfaas
cp .env.example .env
nano .env打开 .env 文件后,修改以下关键变量:
# 数据库密码(改成你自己的强密码)
POSTGRES_PASSWORD=your_strong_password_here
# JWT 密钥(用 openssl rand -hex 32 生成)
JWT_SECRET=your_jwt_secret_here
# 域名(改成你的实际域名)
PUBLIC_DOMAIN=shop.example.com
# 管理员邮箱
ADMIN_EMAIL=admin@example.com
# 邮件服务(SMTP,推荐用 Resend、SendGrid 或自建 Postfix)
SMTP_HOST=smtp.resend.com
SMTP_PORT=465
SMTP_USER=resend
SMTP_PASSWORD=your_smtp_password
SMTP_FROM=noreply@example.com
# 对象存储(本地存储或 S3 兼容服务)
STORAGE_DRIVER=local
STORAGE_LOCAL_PATH=/app/storages保存退出。环境变量配置完成。
第三步:启动服务并初始化数据库(10 分钟)
启动所有服务(Web 应用、PostgreSQL、Redis):
# 后台启动所有服务
docker compose up -d
# 查看服务状态(应全部为 healthy)
docker compose ps
# 初始化数据库表结构
docker compose exec web bun run db:migrate
# 初始化管理员账号与示例数据
docker compose exec web bun run db:seed等待数据库迁移完成,看到 "Migration completed" 字样就说明数据库已就绪。默认管理员账号是 admin@shopfaas.local,密码 Admin@123456,登录后请立即修改密码。
此时通过 http://服务器IP:4322 已经能访问站点。但我们要的是 https://shop.example.com,继续下一步。
第四步:配置 Nginx 反向代理与 SSL 证书(10 分钟)
安装 Nginx 与 Certbot(Let's Encrypt 客户端):
sudo apt install -y nginx certbot python3-certbot-nginx创建 Nginx 配置文件 /etc/nginx/sites-available/shopfaas:
server {
listen 80;
server_name shop.example.com;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:4322;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}启用配置并申请 SSL 证书:
# 启用站点
sudo ln -s /etc/nginx/sites-available/shopfaas /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# 申请 SSL 证书(Certbot 会自动修改 Nginx 配置)
sudo certbot --nginx -d shop.example.com
# 按提示输入邮箱、同意条款、选择是否重定向 HTTP 到 HTTPSCertbot 会自动配置 SSL 证书并设置自动续期。完成后访问 https://shop.example.com,你应该能看到 ShopFaaS 首页,且浏览器地址栏显示安全锁图标。
第五步:配置邮件服务(可选,5 分钟)
邮件服务用于发送订单确认、密码重置、营销邮件。推荐用第三方 SMTP 服务(Resend、SendGrid、Mailgun),免费额度足够小规模使用。
以 Resend 为例:注册账号 → 在控制台创建 API Key → 将 SMTP_HOST 设为 smtp.resend.com,SMTP_PORT 设为 465,SMTP_USER 设为 resend,SMTP_PASSWORD 设为 API Key,SMTP_FROM 设为你在 Resend 验证过的域名邮箱。
修改完 .env 后重启服务:
docker compose restart web运维清单:让站点长期稳定运行
部署完成只是开始。要让站点长期稳定运行,需要建立以下运维习惯:
日常运维
- 每周检查
docker compose logs是否有异常错误 - 每月检查服务器磁盘空间(
df -h),日志与图片占用大头 - 每季度更新 ShopFaaS 版本(
git pull && docker compose up -d)
数据备份
- 数据库每日自动备份到对象存储(S3 或兼容服务),脚本示例见 部署文档
- 图片与文件每周备份到独立的存储桶
- 每月验证备份可恢复(在测试环境恢复一次)
监控告警
- 用 UptimeRobot 或类似服务监控站点可用性(免费版够用)
- 设置服务器 CPU、内存、磁盘告警阈值(CPU > 80% 持续 5 分钟告警)
- ShopFaaS 自带
/health与/health/ready端点,可对接监控系统
安全加固
- SSH 禁用密码登录,只允许密钥登录
- 防火墙只开放 80、443、22 端口
- 定期更新系统(
sudo apt update && sudo apt upgrade) - 修改默认管理员密码,启用两步验证
常见问题
Q1:为什么我访问站点显示 502 Bad Gateway?
通常是 Web 服务还没启动完成。执行 docker compose logs web 查看启动日志,等待 "Server started" 字样出现。如果持续 502,检查 .env 中的数据库连接配置是否正确。
Q2:SSL 证书申请失败怎么办?
确保域名 A 记录已正确解析到服务器 IP,且 80 端口未被防火墙拦截。用 dig shop.example.com 验证 DNS 解析,用 curl -I http://shop.example.com 验证 HTTP 可达。Let's Encrypt 有频率限制,失败 5 次后需等待 1 小时再重试。
Q3:如何升级到新版本?
git pull
docker compose pull
docker compose up -d
docker compose exec web bun run db:migrate升级前务必备份数据库。升级后检查 docker compose logs 是否有迁移错误。
Q4:邮件发不出去怎么办?
先用 docker compose exec web curl -v smtp://smtp.resend.com:465 测试 SMTP 连通性。如果连通但发不出,检查 SMTP_FROM 是否为在 SMTP 服务商验证过的域名邮箱。Gmail、QQ 邮箱等个人邮箱不适合做 SMTP 发件地址,会被识别为垃圾邮件。
下一步
部署完成后,你可以:
- 登录后台
https://shop.example.com/admin,配置店铺信息、添加商品、设置支付通道 - 阅读 支付通道接入指南,接入 Stripe、支付宝、微信、PayPal
- 阅读 独立站 SEO 实战清单,从冷启动开始积累搜索流量
有问题可以发邮件到 support@shopfaas.com,或在 GitHub Issues 提问。我们的目标:让自部署像 SaaS 一样简单,但保留开源的全部自由。