Docker 部署
使用 Docker Compose 一键部署 ShopFaaS 私有化实例。含 docker-compose.yml 完整配置、部署流程、反向代理、升级与备份恢复。
Docker 部署是私有化部署的推荐方式,通过 Docker Compose 编排所有组件,简化安装与升级流程。
前置条件
- 已安装 Docker 24+
- 已安装 Docker Compose v2+
- 服务器满足最低配置要求
部署流程
-
准备部署目录
mkdir -p ~/shopfaas && cd ~/shopfaas -
创建 docker-compose.yml
services: postgres: image: pgvector/pgvector:pg18 container_name: shopfaas-postgres restart: unless-stopped environment: POSTGRES_DB: shopfaas POSTGRES_USER: shopfaas POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me-in-production} volumes: - postgres_data:/var/lib/postgresql ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U shopfaas"] interval: 10s timeout: 5s retries: 5 redis: image: redis:8-alpine container_name: shopfaas-redis restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD:-change-me-in-production} volumes: - redis_data:/data ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 rustfs: image: rustfs/rustfs:latest # 实际版本为 1.0.0-beta.10 container_name: shopfaas-rustfs restart: unless-stopped environment: RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY:-shopfaas} RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY:-change-me-in-production} volumes: - rustfs_data:/data ports: - "9000:9000" shopfaas: # 双 tag 策略:latest 指向最新稳定版,同时建议显式拉取 v${VERSION} 用于版本固定 image: shopfaas/shopfaas-store:latest container_name: shopfaas-app restart: unless-stopped # 需以 root 运行:挂载 docker.sock 实现一键自动更新 user: root depends_on: postgres: condition: service_healthy redis: condition: service_healthy rustfs: condition: service_started environment: DATABASE_URL: postgres://shopfaas:${POSTGRES_PASSWORD:-change-me-in-production}@postgres:5432/shopfaas REDIS_URL: redis://:${REDIS_PASSWORD:-change-me-in-production}@redis:6379 S3_ENDPOINT: http://rustfs:9000 S3_ACCESS_KEY_ID: ${RUSTFS_ACCESS_KEY:-shopfaas} S3_SECRET_ACCESS_KEY: ${RUSTFS_SECRET_KEY:-change-me-in-production} S3_BUCKET: shopfaas DEPLOY_MODE: private # 启用店内一键自动更新(通过 docker.sock 拉取并替换镜像) STORE_AUTO_UPDATE_ENABLED: "true" # 宿主机部署目录,用于挂载数据与配置(自动更新时仅替换镜像,不动此目录) HOST_DEPLOY_DIR: ${HOST_DEPLOY_DIR:-/opt/shopfaas} # 完整环境变量见 /docs/self-hosted/env-vars/ ports: - "4322:4322" volumes: - shopfaas_storages:/app/storages # 挂载 docker.sock 实现一键更新:店内点击「检查更新」即可拉取新镜像并重启 - /var/run/docker.sock:/var/run/docker.sock # 自动更新数据卷(存放拉取的镜像层、临时文件等) - shopfaas_update_data:/app/.update volumes: postgres_data: redis_data: rustfs_data: shopfaas_storages: shopfaas_update_data: name: shopfaas-update-data -
创建环境变量文件
cat > .env << 'EOF' # 数据库密码(生产环境必须修改) POSTGRES_PASSWORD=your-strong-password-here # Redis 密码 REDIS_PASSWORD=your-strong-password-here # 对象存储密钥 RUSTFS_ACCESS_KEY=shopfaas RUSTFS_SECRET_KEY=your-strong-secret-here # 宿主机部署目录(可选,默认 /opt/shopfaas) HOST_DEPLOY_DIR=/opt/shopfaas EOF -
启动服务
# 拉取镜像并启动 docker compose up -d # 查看启动状态 docker compose ps # 查看应用日志 docker compose logs -f shopfaas -
数据库自动初始化
数据库初始化已在镜像中完成,首次启动容器时自动执行(建表 + 写入 init-data),无需手动运行命令。
容器启动时会检测数据库是否已初始化,未初始化则自动按
docs/schemas/下的 SQL 文件创建表结构并写入种子数据(权限码、系统角色、默认配置),幂等可重复执行。 -
访问店铺
启动完成后,访问:
- 店铺前台:
http://your-server-ip:4322 - 店铺后台:
http://your-server-ip:4322/admin - 默认店长账号:
admin/admin123
- 店铺前台:
反向代理配置
生产环境建议使用 Nginx 反向代理并配置 HTTPS:
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:4322;
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;
}
}
升级
升级时仅替换镜像,数据库迁移由容器启动时自动执行:
# 1. 备份数据库
docker compose exec postgres pg_dump -U shopfaas shopfaas > backup_$(date +%Y%m%d).sql
# 2. 拉取新版本镜像
# - latest tag 滚动更新;若需固定版本,显式拉取 v${VERSION}:
# docker pull shopfaas/shopfaas-store:v1.2.0
# 并将 docker-compose.yml 中 image 改为 shopfaas/shopfaas-store:v1.2.0
docker compose pull shopfaas
# 3. 重启服务(容器启动时自动执行数据库迁移,无需手动 init-db)
docker compose up -d shopfaas
# 4. 查看迁移日志(可选)
docker compose logs -f shopfaas
备份与恢复
备份
# 数据库备份
docker compose exec postgres pg_dump -U shopfaas shopfaas > backup_$(date +%Y%m%d).sql
# 文件备份(对象存储)
docker compose exec rustfs tar czf - /data > rustfs_backup_$(date +%Y%m%d).tar.gz
恢复
# 数据库恢复
docker compose exec -T postgres psql -U shopfaas shopfaas < backup_20260101.sql
# 文件恢复
docker compose exec -T rustfs tar xzf - -C / < rustfs_backup_20260101.tar.gz
建议设置定时任务(cron)每日自动备份。
故障排查
服务无法启动
# 查看日志
docker compose logs postgres
docker compose logs redis
docker compose logs shopfaas
数据库连接失败
- 检查
DATABASE_URL中的密码是否与POSTGRES_PASSWORD一致 - 确认 PostgreSQL 容器健康:
docker compose ps postgres
对象存储连接失败
- 检查
S3_ACCESS_KEY_ID与RUSTFS_ACCESS_KEY是否一致 - 确认 RustFS 容器已启动
一键更新失败
- 确认
/var/run/docker.sock已正确挂载到 shopfaas 容器 - 确认
STORE_AUTO_UPDATE_ENABLED=true - 查看应用日志:
docker compose logs shopfaas