@@ -3,15 +3,15 @@ services:
33 user-config-api :
44 build : ./user_config_api
55 container_name : user-config-api
6- # Docker内部ネットワークのみで使用( 外部公開不要)
6+ # Docker内部ネットワークのみで使用( 外部公開不要)
77 # テスト用に外部アクセスが必要な場合のみ、以下のコメントを外す
88 ports :
99 - " 8081:8080"
1010 environment :
1111 API_SERVER_KEY : ${API_SERVER_KEY:-your-secret-api-key-here}
1212
1313 web :
14- image : ' gitlab/gitlab-ce:latest '
14+ image : ' gitlab/gitlab-ce:18.5.3-ce.0 '
1515 restart : always
1616 ports :
1717 - ' 8080:80'
@@ -22,6 +22,12 @@ services:
2222 - ' ./gitlab/logs:/var/log/gitlab'
2323 - ' ./gitlab/data:/var/opt/gitlab'
2424 shm_size : ' 256m'
25+ healthcheck :
26+ test : ["CMD-SHELL", "curl -f http://localhost/-/health || exit 1"]
27+ interval : 30s
28+ timeout : 10s
29+ retries : 10
30+ start_period : 120s
2531
2632 rabbitmq :
2733 image : rabbitmq:3-management
@@ -35,5 +41,110 @@ services:
3541 volumes :
3642 - rabbitmq_data:/var/lib/rabbitmq
3743
44+ # Producer サービス - タスクを継続的に取得してキューに追加
45+ coding-agent-producer :
46+ build : .
47+ container_name : coding-agent-producer
48+ command : ["python", "main.py", "--mode", "producer", "--continuous"]
49+ depends_on :
50+ rabbitmq :
51+ condition : service_started
52+ user-config-api :
53+ condition : service_started
54+ web :
55+ condition : service_healthy
56+ environment :
57+ # 必須環境変数
58+ - TASK_SOURCE=${TASK_SOURCE:-github}
59+ - GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
60+ - GITLAB_PERSONAL_ACCESS_TOKEN=${GITLAB_PERSONAL_ACCESS_TOKEN:-}
61+ - GITLAB_API_URL=${GITLAB_API_URL:-https://gitlab.com/api/v4}
62+ - GITLAB_BOT_NAME=${GITLAB_BOT_NAME:-bot}
63+ - GITHUB_BOT_NAME=${GITHUB_BOT_NAME:-bot}
64+
65+ # RabbitMQ設定
66+ - RABBITMQ_HOST=rabbitmq
67+ - RABBITMQ_PORT=5672
68+ - RABBITMQ_USER=guest
69+ - RABBITMQ_PASSWORD=guest
70+
71+ # LLM設定
72+ - LLM_PROVIDER=${LLM_PROVIDER:-openai}
73+ - OPENAI_API_KEY=${OPENAI_API_KEY:-}
74+ - OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com/v1}
75+ - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o}
76+
77+ # ログ設定
78+ - LOGS=/app/logs/producer.log
79+ - DEBUG=${DEBUG:-false}
80+ volumes :
81+ - ./logs:/app/logs
82+ - ./contexts:/app/contexts
83+ - ./healthcheck:/app/healthcheck
84+ restart : unless-stopped
85+ # gracefulシャットダウンの猶予時間
86+ stop_grace_period : 300s
87+ healthcheck :
88+ test : ["CMD", "python", "-c", "import os, time; f='/app/healthcheck/producer.health'; exit(0 if os.path.exists(f) and time.time() - os.path.getmtime(f) < 600 else 1)"]
89+ interval : 300s
90+ timeout : 10s
91+ retries : 3
92+ start_period : 30s
93+
94+ # Consumer サービス - キューからタスクを継続的に取得して処理
95+ coding-agent-consumer :
96+ build : .
97+ container_name : coding-agent-consumer
98+ command : ["python", "main.py", "--mode", "consumer", "--continuous"]
99+ depends_on :
100+ rabbitmq :
101+ condition : service_started
102+ user-config-api :
103+ condition : service_started
104+ web :
105+ condition : service_healthy
106+ environment :
107+ # 必須環境変数
108+ - TASK_SOURCE=${TASK_SOURCE:-github}
109+ - GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
110+ - GITLAB_PERSONAL_ACCESS_TOKEN=${GITLAB_PERSONAL_ACCESS_TOKEN:-}
111+ - GITLAB_API_URL=${GITLAB_API_URL:-https://gitlab.com/api/v4}
112+ - GITLAB_BOT_NAME=${GITLAB_BOT_NAME:-bot}
113+ - GITHUB_BOT_NAME=${GITHUB_BOT_NAME:-bot}
114+
115+ # RabbitMQ設定
116+ - RABBITMQ_HOST=rabbitmq
117+ - RABBITMQ_PORT=5672
118+ - RABBITMQ_USER=guest
119+ - RABBITMQ_PASSWORD=guest
120+
121+ # LLM設定
122+ - LLM_PROVIDER=${LLM_PROVIDER:-openai}
123+ - OPENAI_API_KEY=${OPENAI_API_KEY:-}
124+ - OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com/v1}
125+ - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o}
126+
127+ # ログ設定
128+ - LOGS=/app/logs/consumer.log
129+ - DEBUG=${DEBUG:-false}
130+ volumes :
131+ - ./logs:/app/logs
132+ - ./contexts:/app/contexts
133+ - ./healthcheck:/app/healthcheck
134+ restart : unless-stopped
135+ # gracefulシャットダウンの猶予時間(タスク処理完了を待つ)
136+ # 注: タスク処理に時間がかかる場合(LLM呼び出し、ファイル操作等)、
137+ # 処理中のタスクを完了させるために十分な時間を確保する必要があります。
138+ # デフォルト: 300秒(5分)
139+ # - 短時間タスクが多い場合: 60s〜120s に短縮可能
140+ # max_llm_process_numの設定値と平均処理時間を考慮して調整してください。
141+ stop_grace_period : 300s
142+ healthcheck :
143+ test : ["CMD", "python", "-c", "import os, time; f='/app/healthcheck/consumer.health'; exit(0 if os.path.exists(f) and time.time() - os.path.getmtime(f) < 600 else 1)"]
144+ interval : 300s
145+ timeout : 10s
146+ retries : 3
147+ start_period : 30s
148+
38149volumes :
39150 rabbitmq_data :
0 commit comments