Skip to content

Commit 0111b66

Browse files
authored
Add ragnarok-breaker mail-send-worker (staging-web2) (#3511)
- chart: mail-send-worker Deployment + ClusterIP Service (internal HTTP /enqueue), envFrom ragnarok-breaker-env, tcpSocket probes, default enabled:false. - values: mailSendWorker block (image, service.port/deployment.port 3100, resources). - staging-web2: enable + tag placeholder. Shares one Redis DB with the existing worker via REDIS_URL but a distinct BullMQ prefix ('mail-send' vs 'worker'). Prereqs before it runs on staging: (1) bump image tag to the git-<sha> built by petpop build:mail-send-worker (after petpop !1210 merges to main), (2) add MAIL_SENDER_V8_*, MAIL_SEND_SLACK_WEBHOOK, MAIL_SEND_LIMITER_* keys to AWS SM ragnarok-breaker/staging-web2.
1 parent 8c6932e commit 0111b66

3 files changed

Lines changed: 121 additions & 0 deletions

File tree

9c-internal/ragnarok-breaker-staging-web2/values.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,15 @@ bqAnalyticsWorker:
3030
enabled: false
3131
image:
3232
tag: git-35a74b3660456b21eb29b1342bc3d835070b815b
33+
34+
# 메일 지급 워커 — staging 검증용 활성화.
35+
# ⚠️ tag placeholder: ragnarok-breaker-mail-send-worker 이미지는 petpop MR !1210(build:mail-send-worker
36+
# CI 잡 신설) 이 petpop main 에 머지되어 빌드·push 된 뒤에 존재한다. 그 git-<sha> 로 아래 tag 를
37+
# bump 해야 ImagePullBackOff 없이 뜬다.
38+
# ⚠️ AWS SM ragnarok-breaker/staging-web2 에 다음 키 선행 추가 필요: MAIL_SENDER_V8_ACCOUNT,
39+
# MAIL_SENDER_V8_VERSE(=staging-w2 verse), MAIL_SENDER_V8_ENV, MAIL_SENDER_V8_AUTH,
40+
# MAIL_SEND_SLACK_WEBHOOK, MAIL_SEND_LIMITER_MAX, MAIL_SEND_LIMITER_MS (REDIS_URL 은 기존 공유).
41+
mailSendWorker:
42+
enabled: true
43+
image:
44+
tag: git-PENDING-CI-BUILD
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{{- if .Values.mailSendWorker.enabled }}
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: mail-send-worker
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
app: mail-send-worker
9+
app.kubernetes.io/instance: {{ .Release.Name }}
10+
app.kubernetes.io/component: mail-send-worker
11+
spec:
12+
replicas: {{ .Values.mailSendWorker.deployment.replicas }}
13+
# 단일 큐 소비자 + 전용 mail-sender 세션 → 롤아웃 중 두 파드 동시 소비 방지.
14+
strategy:
15+
type: Recreate
16+
selector:
17+
matchLabels:
18+
app: mail-send-worker
19+
template:
20+
metadata:
21+
labels:
22+
app: mail-send-worker
23+
spec:
24+
{{- if .Values.imagePullSecret.secretKey }}
25+
imagePullSecrets:
26+
- name: {{ .Values.imagePullSecret.name }}
27+
{{- end }}
28+
containers:
29+
- name: mail-send-worker
30+
image: "{{ .Values.mailSendWorker.image.repository }}:{{ .Values.mailSendWorker.image.tag }}"
31+
imagePullPolicy: {{ .Values.mailSendWorker.image.pullPolicy }}
32+
ports:
33+
- name: http
34+
containerPort: {{ .Values.mailSendWorker.deployment.port }}
35+
env:
36+
# HTTP /enqueue 서버 포트. 나머지 env(MAIL_SENDER_V8_*, MAIL_SEND_SLACK_WEBHOOK,
37+
# MAIL_SEND_LIMITER_*, REDIS_URL) 는 ragnarok-breaker-env(AWS SM) 에서 주입.
38+
- name: MAIL_SEND_HTTP_PORT
39+
value: {{ .Values.mailSendWorker.deployment.port | quote }}
40+
envFrom:
41+
- secretRef:
42+
name: ragnarok-breaker-env
43+
# mail-send 는 별도 health 엔드포인트가 없으므로 TCP 로 포트 리스닝만 확인.
44+
readinessProbe:
45+
tcpSocket:
46+
port: {{ .Values.mailSendWorker.deployment.port }}
47+
initialDelaySeconds: 10
48+
periodSeconds: 10
49+
failureThreshold: 3
50+
livenessProbe:
51+
tcpSocket:
52+
port: {{ .Values.mailSendWorker.deployment.port }}
53+
initialDelaySeconds: 30
54+
periodSeconds: 15
55+
failureThreshold: 3
56+
resources:
57+
{{- toYaml .Values.mailSendWorker.deployment.resources | nindent 12 }}
58+
{{- with .Values.nodeSelector }}
59+
nodeSelector:
60+
{{- toYaml . | nindent 8 }}
61+
{{- end }}
62+
restartPolicy: Always
63+
---
64+
apiVersion: v1
65+
kind: Service
66+
metadata:
67+
name: mail-send-worker
68+
namespace: {{ .Release.Namespace }}
69+
labels:
70+
app: mail-send-worker
71+
app.kubernetes.io/instance: {{ .Release.Name }}
72+
app.kubernetes.io/component: mail-send-worker
73+
spec:
74+
# 내부 전용(ClusterIP) — 운영자는 port-forward 로 /enqueue 에 POST. 외부 노출 없음.
75+
type: ClusterIP
76+
selector:
77+
app: mail-send-worker
78+
ports:
79+
- name: http
80+
port: {{ .Values.mailSendWorker.service.port }}
81+
targetPort: {{ .Values.mailSendWorker.deployment.port }}
82+
protocol: TCP
83+
{{- end }}

charts/ragnarok-breaker/values.yaml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,32 @@ anticheatAlertWorker:
194194
cpu: 500m
195195
memory: 512Mi
196196

197+
# === Mail payout worker (BullMQ mail-send consumer + HTTP /enqueue) ===
198+
# recipient 1인 = job 1개 소비 → 전용 mail-sender V8 세션으로 sendMailIdempotent 호출.
199+
# HTTP /enqueue 는 운영자 mail.send 토큰 검증 후 job 투입. 기본 off — env 별 override 에서 enable.
200+
# 다른 워커(services/worker, BullMQ prefix 'worker')와 같은 Redis DB(REDIS_URL)를 공유하되
201+
# prefix 'mail-send' 로 키 공간 분리. 필요 env(ragnarok-breaker-env AWS SM): MAIL_SENDER_V8_ACCOUNT,
202+
# MAIL_SENDER_V8_VERSE, MAIL_SENDER_V8_ENV, MAIL_SENDER_V8_AUTH[, MAIL_SENDER_V8_REMOTE_URL],
203+
# MAIL_SEND_SLACK_WEBHOOK, MAIL_SEND_LIMITER_MAX, MAIL_SEND_LIMITER_MS, REDIS_URL.
204+
mailSendWorker:
205+
enabled: false
206+
image:
207+
repository: planetariumhq/ragnarok-breaker-mail-send-worker
208+
tag: develop
209+
pullPolicy: IfNotPresent
210+
service:
211+
port: 3100
212+
deployment:
213+
replicas: 1
214+
port: 3100
215+
resources:
216+
requests:
217+
cpu: 50m
218+
memory: 128Mi
219+
limits:
220+
cpu: 500m
221+
memory: 512Mi
222+
197223
# === External payment backend → BigQuery analytics ingest gateway ===
198224
# Thin HTTP gateway (Bun.serve): POST /v1/events (Bearer auth) validates the
199225
# envelope and enqueues a bq_event job onto the bq-analytics-events BullMQ

0 commit comments

Comments
 (0)