-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
98 lines (85 loc) · 4.15 KB
/
docker-compose.yml
File metadata and controls
98 lines (85 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# docker-compose.yml
version: '3.8' # 使用较新的 Compose 文件格式版本
services:
app:
build:
context: . # Dockerfile 所在的目录
dockerfile: Dockerfile
container_name: media_processor_app
restart: unless-stopped # 或 'always'
ports:
# 从 .env 文件读取主机端口 (APP_HOST_PORT),如果未设置则默认为 3000
# 容器端口从 .env 文件读取 (PORT),如果未设置则默认为 3000
- "${APP_HOST_PORT:-3000}:${PORT:-3000}"
volumes:
# 对于生产,强烈建议使用命名卷或云存储进行持久化
# 本地开发时,绑定挂载方便查看
- ./original_media:/usr/src/app/original_media:ro # 原始媒体只读挂载
- uploaded_media_volume:/usr/src/app/uploaded_media # 使用命名卷
- cached_outputs_volume:/usr/src/app/cached_outputs # 使用命名卷
- temp_video_outputs_volume:/usr/src/app/temp_video_outputs # 使用命名卷
# 开发时热重载 (如果 Dockerfile CMD 使用 "npm", "run", "dev"):
# - ./src:/usr/src/app/src:ro
# - ./config:/usr/src/app/config:ro
# - ./server.js:/usr/src/app/server.js:ro
# - ./public:/usr/src/app/public:ro
environment:
# Docker Compose 会自动加载项目根目录下的 .env 文件
# 这里可以覆盖 .env 中的值或提供默认值 (如果 .env 中没有)
- NODE_ENV=${NODE_ENV:-development}
- PORT=${PORT:-3000}
- APP_PUBLIC_URL=${APP_PUBLIC_URL:-http://localhost:3000}
# 本地源 (路径相对于容器内 /usr/src/app)
- ENABLE_LOCAL_SOURCE=${ENABLE_LOCAL_SOURCE:-true}
- LOCAL_MEDIA_BASE_PATH=/usr/src/app/original_media
# 上传源 (路径相对于容器内 /usr/src/app)
- UPLOAD_MEDIA_BASE_PATH=/usr/src/app/uploaded_media
- UPLOAD_IMAGES_SUBDIR=${UPLOAD_IMAGES_SUBDIR:-images}
- UPLOAD_VIDEOS_SUBDIR=${UPLOAD_VIDEOS_SUBDIR:-videos}
- UPLOAD_MAX_SIZE=${UPLOAD_MAX_SIZE:-52428800}
# HTTP 源
- HTTP_SOURCE_ALLOWED_DOMAINS=${HTTP_SOURCE_ALLOWED_DOMAINS}
- HTTP_SOURCE_TIMEOUT=${HTTP_SOURCE_TIMEOUT:-15000}
- HTTP_SOURCE_MAX_CONTENT_LENGTH=${HTTP_SOURCE_MAX_CONTENT_LENGTH:-26214400}
# AWS S3 (如果配置了 s3Main 源)
# - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} # 应通过更安全的方式管理
# - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} # 应通过更安全的方式管理
- AWS_S3_REGION=${AWS_S3_REGION}
- AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}
- S3_UPLOAD_MAX_SIZE=${S3_UPLOAD_MAX_SIZE:-104857600}
# 阿里云 OSS (如果配置了 ossMain 源)
- ALI_OSS_REGION=${ALI_OSS_REGION}
- ALI_OSS_ACCESS_KEY_ID=${ALI_OSS_ACCESS_KEY_ID} # 应通过更安全的方式管理
- ALI_OSS_ACCESS_KEY_SECRET=${ALI_OSS_ACCESS_KEY_SECRET} # 应通过更安全的方式管理
- ALI_OSS_BUCKET_NAME=${ALI_OSS_BUCKET_NAME}
- ALI_OSS_ENDPOINT=${ALI_OSS_ENDPOINT}
- ALI_OSS_INTERNAL=${ALI_OSS_INTERNAL:-false}
- ALI_OSS_UPLOAD_MAX_SIZE=${ALI_OSS_UPLOAD_MAX_SIZE:-104857600}
# 缓存
- CACHE_STRATEGY=${CACHE_STRATEGY:-memory}
- CACHE_DIR=/usr/src/app/cached_outputs # 用于 FileSystemCache
- CACHE_MEMORY_MAX_ITEMS=${CACHE_MEMORY_MAX_ITEMS:-500}
- CACHE_MEMORY_DEFAULT_TTL_MS=${CACHE_MEMORY_DEFAULT_TTL_MS:-1800000}
# 视频处理
- VIDEO_TEMP_OUTPUT_DIR=/usr/src/app/temp_video_outputs
depends_on: # 如果使用了外部服务如 Redis
# - redis_cache
networks:
- app_network
# redis_cache: # 可选: 如果使用 Redis 作为缓存策略
# image: redis:6-alpine
# container_name: media_processor_redis
# restart: unless-stopped
# volumes:
# - redis_data_volume:/data # 持久化 Redis 数据
# networks:
# - app_network
volumes: # 定义命名卷,用于数据持久化
original_media_volume: # 虽然上面用了绑定挂载,但也可以用命名卷预填充
uploaded_media_volume:
cached_outputs_volume:
temp_video_outputs_volume: # 临时文件目录也可以是命名卷,方便调试,但通常不需要持久
# redis_data_volume:
networks:
app_network:
driver: bridge # 默认的 bridge 网络