我的项目是这样的,后端可以直接用 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 内部服务地址,用户没有办法直连。并且也不希望从后端进行转发上传或者下载的流量。
所以有什么办法来解决这个问题?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.