我的项目是这样的,后端可以直接用 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 8 小时 32 分钟前
做两个 docker-compose.yml
|
2
gneko 8 小时 14 分钟前
你的问题是自建 minio 怎样暴露给外部吧?
我有一个类似的个人项目,做法是自建 minio 需要手动配置 Nginx 反代对外公开 minio api ,然后额外加一个环境变量,例如 `MINIO_PUBLIC_ENDPOINT`,然后做一个简单的判断,如果为空就返回 `MINIO_ENDPOINT` |
3
Kinnikuman OP @gneko 我理解了。
|