-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
157 lines (140 loc) · 5.8 KB
/
Copy pathdocker-compose.yml
File metadata and controls
157 lines (140 loc) · 5.8 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
name: retriever-python
# 실행하려는 서비스(컨테이너)들을 정의합니다.
services:
# 서비스의 논리적인 이름 (여기서는 'rabbitmq'로 지정)
rabbitmq:
# 사용할 Docker 이미지 (docker run ... rabbitmq:4-management 부분)
# latest RabbitMQ 4.x 버전의 management 플러그인 포함 이미지
image: rabbitmq:4-management
# 컨테이너의 이름을 'rabbitmq'로 고정합니다 (--name rabbitmq 부분)
container_name: rabbitmq
# 호스트와 컨테이너 간의 포트를 매핑합니다 (-p 5672:5672 -p 15672:15672 부분)
# 형식: "호스트_포트:컨테이너_포트"
ports:
- "5672:5672" # AMQP 프로토콜 포트 (애플리케이션 클라이언트 접속용)
- "15672:15672" # Management UI 포트 (웹 관리자 페이지 접속용)
# (선택 사항) 재시작 정책 설정
# Docker 데몬이 시작되거나, 컨테이너가 예기치 않게 종료됐을 때 자동으로 다시 시작합니다.
restart: unless-stopped
# (선택 사항) 데이터 영구 보관을 위한 볼륨 설정
# 이 부분을 주석 해제하면 컨테이너를 내려도(down) 데이터(큐, 메시지 등)가 보존됩니다.
volumes:
- rabbitmq_data:/var/lib/rabbitmq
neo4j:
image: neo4j:latest
volumes:
- ./neo4j_data/logs:/logs
- ./neo4j_data/config:/config
- ./neo4j_data/data:/data
- ./neo4j_data/plugins:/plugins
environment:
- NEO4J_AUTH=${NEO4J_USER}/${NEO4J_PASSWORD}
ports:
- "7474:7474"
- "7687:7687"
restart: always
weaviate:
container_name: retriever-weaviate-server
command:
- --host
- 0.0.0.0
- --port
- '8888'
- --scheme
- http
image: cr.weaviate.io/semitechnologies/weaviate:latest
ports:
- "8888:8888"
- "50051:50051"
volumes:
- weaviate_data:/var/lib/weaviate
restart: on-failure:0
environment:
QUERY_DEFAULTS_LIMIT: 10000 # 10000이 최대인듯. 100000으로 하면 maximum result exceeded 오류 발생
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'text2vec-huggingface'
ENABLE_MODULES: 'text2vec-huggingface, reranker-cohere'
TRANSFORMERS_INFERENCE_API: 'http://text2vec-transformers:8080' # 추론 컨테이너 주소
ENABLE_API_BASED_MODULES: 'true'
CLUSTER_HOSTNAME: 'node1'
text2vec-transformers: # 모델을 실행할 별도 추론 컨테이너
build: # 'image:' 대신 'build:' 사용
context: . # 현재 디렉터리
dockerfile: Dockerfile.transformers # 1단계에서 만든 파일 지정
image: my-bge-m3-korean-inference # (선택사항) 빌드된 이미지에 이름 부여
environment:
ENABLE_CUDA: '0' # GPU가 있다면 '1'로 변경
worker-search:
build:
context: .
dockerfile: Dockerfile
target: celery-base-worker # 기본 의존성만 포함된 스테이지 사용
command: uv run celery -A celery_app.app worker --pool=solo -l info -Q search -P threads -c 2 -n worker.search@%h
depends_on: [rabbitmq, neo4j]
worker-crawl:
build:
context: .
dockerfile: Dockerfile
target: celery-base-worker # 기본 의존성만 포함된 스테이지 사용
command: uv run celery -A celery_app.app worker --pool=solo -l info -Q crawl -P threads -c 2 -n worker.crawl@%h
depends_on: [rabbitmq, neo4j]
worker-analyze:
build:
context: .
dockerfile: Dockerfile
target: celery-base-worker # 기본 의존성만 포함된 스테이지 사용
# aggregator task이므로, -c 1 옵션을 통해 worker가 1개만 동작하도록 보장
command: uv run celery -A celery_app.app worker --pool=solo -l info -Q analyze -P threads -c 1 -n worker.analyze@%h
depends_on: [rabbitmq, neo4j]
worker-telegram:
build:
context: .
dockerfile: Dockerfile
target: celery-base-worker # 기본 의존성만 포함된 스테이지 사용
command: uv run celery -A celery_app.app worker --pool=solo -l info -Q telegram -c 2 -P threads -n worker.telegram.channel@%h
depends_on: [rabbitmq, neo4j]
environment:
# 이 변수들이 .env 파일이나 쉘에 없으면 에러 발생
TELEGRAM_API_ID: ${TELEGRAM_API_ID:?필수 값 TELEGRAM_API_ID 가 설정되지 않았습니다.}
TELEGRAM_API_HASH: ${TELEGRAM_API_HASH:?필수 값 TELEGRAM_API_HASH 가 설정되지 않았습니다.}
TELEGRAM_SESSION_STRING: ${TELEGRAM_SESSION_STRING:?필수 값 TELEGRAM_SESSION_STRING 이 설정되지 않았습니다.}
NEO4J_HOST: "neo4j"
worker-poll:
build:
context: .
dockerfile: Dockerfile
target: celery-base-worker # 기본 의존성만 포함된 스테이지 사용
command: uv run celery -A celery_app.app worker --pool=solo -l info -Q poll -P threads -c 1 -n worker.poll@%h
depends_on: [rabbitmq, neo4j]
environment:
NEO4J_HOST: "neo4j"
beat:
build:
context: .
dockerfile: Dockerfile
target: celery-base-worker # 기본 의존성만 포함된 스테이지 사용
command: uv run celery -A celery_app.app beat -l info
depends_on: [rabbitmq, neo4j]
profiles:
- "prod"
fastapi:
build:
context: .
dockerfile: Dockerfile
target: fastapi-app
command: uv run uvicorn main:app --host 0.0.0.0 --port 8000
ports:
- "8000:8000"
depends_on: [neo4j, weaviate, text2vec-transformers]
environment:
NEO4J_HOST: "neo4j"
WEAVIATE_HTTP_HOST: "weaviate"
WEAVIATE_HTTP_PORT: "8888"
WEAVIATE_GRPC_HOST: "weaviate"
WEAVIATE_GRPC_PORT: "50051"
# (선택 사항) 위에서 사용한 볼륨(rabbitmq_data)을 명시적으로 정의합니다.
volumes:
rabbitmq_data:
driver: local
weaviate_data: