Docker 灵活部署问题求助

11 小时 45 分钟前
 Kinnikuman

我的项目是这样的,后端可以直接用 Docker 部署。后端用到了 minio ,想支持一键部署,也就是 docker-compose.yml 中有两个服务,一个 app 服务和一个 minio 服务。

但同时允许用户使用其他的 minio 服务器,如果用户在 .env 中指定了其他的 minio 服务器,那么 docker 中就不需要创建这个 minio 服务了。

于是我的配置如下:

# 使用内置 MinIO 服务
MINIO_ENDPOINT=http://minio
# 或者使用外部 MinIO 服务
# MINIO_ENDPOINT=http://your-minio-server
# MinIO API 端口映射(仅用于内置 MinIO 服务)
MINIO_PORT=9000
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
version: '3.8'

services:
  app:
    build: .
    ports:
      - "3210:3210"
    env_file:
      - .env
    volumes:
      - ./prisma:/app/prisma
      - ./logs:/app/logs
      - sqlite_data:/app/prisma
      - log_data:/app/logs
    depends_on:
      minio:
        condition: service_started
        required: false

  # MinIO 服务仅在未指定外部 MINIO_ENDPOINT 时启用
  minio:
    image: minio/minio
    ports:
      - "${MINIO_PORT}:9000"  # API 端口
      - "9002:9001"           # Console 端口
    env_file:
      - .env
    volumes:
      - minio_data:/data
    command: server /data --console-address ":9001"
    profiles:
      - with-minio

volumes:
  minio_data:
  sqlite_data:
  log_data:

这样可以通过脚本来判断 .env ,如果指定了非 http://minio, 那么直接 docker compose up -d app, 如果是默认的 http://minio,则使用 docker compose --profile with-minio up -d 来启动两个服务。

但是这样有一个问题,后端程序返回给前端的 api 会是 http://minio 这样的 docker 内部服务地址,用户没有办法直连。并且也不希望从后端进行转发上传或者下载的流量。

所以有什么办法来解决这个问题?

634 次点击
所在节点    程序员
3 条回复
hefish
11 小时 43 分钟前
做两个 docker-compose.yml
gneko
11 小时 25 分钟前
你的问题是自建 minio 怎样暴露给外部吧?
我有一个类似的个人项目,做法是自建 minio 需要手动配置 Nginx 反代对外公开 minio api ,然后额外加一个环境变量,例如 `MINIO_PUBLIC_ENDPOINT`,然后做一个简单的判断,如果为空就返回 `MINIO_ENDPOINT`
Kinnikuman
11 小时 17 分钟前
@gneko 我理解了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1107088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX