ImageFlow

前后端分离版本部署

部署 ImageFlow

ImageFlow 支持多种部署方式。这里我们将介绍使用 Docker Compose 进行前后端分离部署的方法。这种方式将后端 API 服务和前端 Web UI 分开运行,提供了更好的灵活性和可扩展性。

您可以选择使用预构建的 Docker 镜像或者从源代码自行构建。

1. 使用预构建镜像部署 (推荐)

这种方法最简单快捷,适用于快速启动或不想处理构建过程的用户。

前提条件:

  • 已安装 Docker
  • 已安装 Docker Compose

步骤:

  1. 下载编排文件: 获取 docker-compose-separate.yaml 文件。您可以从项目仓库下载,或直接复制以下内容保存为 docker-compose-separate.yaml

    # 内容来自 @docker-compose-separate.yaml
    version: '3.8'
     
    services:
      backend:
        image: soyorins/imageflow-backend:latest
        container_name: imageflow-backend
        ports:
          - "8686:8686"
        volumes:
          - ./static/images:/app/static/images
          - ./config:/app/config
        environment:
          - API_KEY=${API_KEY:-default_api_key} # 请务必修改为强密码
          - STORAGE_TYPE=${STORAGE_TYPE:-local}
          - LOCAL_STORAGE_PATH=/app/static/images
          # ... (其他 S3, Redis 等配置,根据需要修改) ...
        restart: unless-stopped
        depends_on:
          - redis
        networks:
          - imageflow-network
     
      frontend:
        image: soyorins/imageflow-frontend:latest
        container_name: imageflow-frontend
        ports:
          - "3000:3000"
        environment:
          - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://localhost:8686}
          - NEXT_PUBLIC_REMOTE_PATTERNS=${NEXT_PUBLIC_REMOTE_PATTERNS:-localhost:8686}
        depends_on:
          - backend
        restart: unless-stopped
        networks:
          - imageflow-network
     
      redis:
        image: redis:alpine
        container_name: imageflow-redis
        ports:
          - "6379:6379" # 可以取消注释以从宿主机访问 Redis,但不推荐在生产环境这样做
        volumes:
          - redis_data:/data
        restart: unless-stopped
        networks:
          - imageflow-network
     
    networks:
      imageflow-network:
        driver: bridge
     
    volumes:
      redis_data:
  2. 创建配置文件和目录:docker-compose-separate.yaml 文件所在的目录下:

    • 创建一个 .env 文件用于存放敏感配置和环境变量。
    • 创建一个 static/images 目录用于本地存储(如果 STORAGE_TYPE=local)。
    • (可选) 创建一个 config 目录并放入自定义的 config.yaml (如果需要覆盖默认配置)。
  3. 配置环境变量: 复制示例环境文件并进行编辑:

    cp .env.example .env
    # 编辑 .env 文件进行配置

    详细配置请参见 配置指南

  4. 启动服务: 在包含 docker-compose-separate.yaml.env 文件的目录中运行:

    docker-compose -f docker-compose-separate.yaml up -d
  5. 访问:

    • 前端 UI: http://<your_server_ip_or_domain>:3000
    • 后端 API: http://<your_server_ip_or_domain>:8686 (主要供前端调用)

2. 从源代码构建部署

这种方法允许您自定义代码或使用最新开发版本。

前提条件:

  • 已安装 Docker
  • 已安装 Docker Compose
  • 项目源代码 (包含 Dockerfile.backendDockerfile.frontend)

步骤:

  1. 获取源代码和编排文件: 克隆项目仓库或下载源代码,确保包含 Dockerfile.backend, Dockerfile.frontenddocker-compose-separate-build.yaml 文件。

    # 内容来自 @docker-compose-separate-build.yaml
    version: '3.8'
     
    services:
      backend:
        build:
          context: .
          dockerfile: Dockerfile.backend
        container_name: imageflow-backend
        ports:
          - "8686:8686"
        volumes:
          - ./static/images:/app/static/images
          - ./config:/app/config
        environment:
          - API_KEY=${API_KEY:-default_api_key} # 请务必修改为强密码
          # ... (其他配置与 docker-compose-separate.yaml 类似) ...
        restart: unless-stopped
        depends_on:
          - redis
        networks:
          - imageflow-network
     
      frontend:
        build:
          context: .
          dockerfile: Dockerfile.frontend
          args:
            NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://backend:8686}
            NEXT_PUBLIC_REMOTE_PATTERNS: ${NEXT_PUBLIC_REMOTE_PATTERNS:-backend:8686}
        container_name: imageflow-frontend
        ports:
          - "3000:3000"
        # 运行时环境变量 (也可以在 .env 中设置,但构建时参数优先)
        environment:
          - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://backend:8686}
          - NEXT_PUBLIC_REMOTE_PATTERNS=${NEXT_PUBLIC_REMOTE_PATTERNS:-backend:8686}
        depends_on:
          - backend
        restart: unless-stopped
        networks:
          - imageflow-network
     
      redis:
        # ... (与 docker-compose-separate.yaml 相同) ...
        image: redis:alpine
        container_name: imageflow-redis
        ports:
          - "6379:6379"
        volumes:
          - redis_data:/data
        restart: unless-stopped
        networks:
          - imageflow-network
     
    networks:
      imageflow-network:
        driver: bridge
     
    volumes:
      redis_data:
  2. 创建配置文件和目录: 与使用预构建镜像类似,创建 .env, static/images, 和可选的 config 目录。

  3. 配置环境变量: 复制示例环境文件并进行编辑:

    cp .env.example .env
    # 编辑 .env 文件进行配置

    详细配置请参见 配置指南

  4. 构建并启动服务: 在项目根目录(包含 Dockerfile 文件和 docker-compose-separate-build.yaml)中运行:

    docker-compose -f docker-compose-separate-build.yaml up -d --build

    --build 参数会强制 Docker Compose 重新构建镜像。

  5. 访问: 与使用预构建镜像相同。

注意事项

  • 安全性: 务必设置强 API_KEY。不要将 Redis 端口 6379 暴露给公网,除非有严格的防火墙和密码保护。
  • 反向代理: 在生产环境中,强烈建议使用 Nginx 或 Caddy 等反向代理来处理 TLS 加密 (HTTPS)、域名绑定、请求路由和负载均衡。前端可以直接通过域名访问,反向代理将请求转发到后端的 http://localhost:8686。同时,应配置 CUSTOM_DOMAIN 环境变量。
  • 环境变量: Docker Compose 会自动加载同目录下 .env 文件中的环境变量。这是配置敏感信息的推荐方式。
  • 存储: 确保 volumes 中映射的宿主机目录 (./static/images) 具有正确的读写权限。如果使用 S3,请确保 S3 凭证和配置正确。
  • 前端 API URL: NEXT_PUBLIC_API_URL 是前端应用在浏览器中调用后端 API 时使用的地址。它必须是浏览器可访问的地址。如果使用 docker-compose-separate-build.yaml 构建,Dockerfile 会将此变量构建到前端代码中,因此修改 .env 后需要重新构建前端镜像 (docker-compose -f docker-compose-separate-build.yaml build frontend) 并重启服务。

On this page