
我的项目是这样的,后端可以直接用 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 内部服务地址,用户没有办法直连。并且也不希望从后端进行转发上传或者下载的流量。
所以有什么办法来解决这个问题?
1 hefish 313 天前 做两个 docker-compose.yml |
2 gneko 313 天前 你的问题是自建 minio 怎样暴露给外部吧? 我有一个类似的个人项目,做法是自建 minio 需要手动配置 Nginx 反代对外公开 minio api ,然后额外加一个环境变量,例如 `MINIO_PUBLIC_ENDPOINT`,然后做一个简单的判断,如果为空就返回 `MINIO_ENDPOINT` |
3 Kinnikuman OP @gneko 我理解了。 |