V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Kinnikuman
V2EX  ›  程序员

Docker 灵活部署问题求助

  •  
  •   Kinnikuman · 8 小时 34 分钟前 · 609 次点击

    我的项目是这样的,后端可以直接用 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 内部服务地址,用户没有办法直连。并且也不希望从后端进行转发上传或者下载的流量。

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

    3 条回复    2025-01-22 15:55:09 +08:00
    hefish
        1
    hefish  
       8 小时 32 分钟前
    做两个 docker-compose.yml
    gneko
        2
    gneko  
       8 小时 14 分钟前
    你的问题是自建 minio 怎样暴露给外部吧?
    我有一个类似的个人项目,做法是自建 minio 需要手动配置 Nginx 反代对外公开 minio api ,然后额外加一个环境变量,例如 `MINIO_PUBLIC_ENDPOINT`,然后做一个简单的判断,如果为空就返回 `MINIO_ENDPOINT`
    Kinnikuman
        3
    Kinnikuman  
    OP
       8 小时 6 分钟前
    @gneko 我理解了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2390 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 16:01 · PVG 00:01 · LAX 08:01 · JFK 11:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.