Skip to content

Commit a048b7b

Browse files
authored
Merge pull request #485 from boostcampwm-2024/fix/prod-redis-init
🐛 fix: redis acl 사용자 초기화 스크립트 구문 추가
2 parents 4953f5e + 64c7cd7 commit a048b7b

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

.github/workflows/deploy_infra.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: 코드 체크아웃
1919
uses: actions/checkout@v4
2020

21-
- name: 인프라 환경변수 최신화
21+
- name: 인프라 환경변수 및 설정 파일 최신화
2222
run: |
2323
sudo mkdir -p /var/prod_config/infra
2424
sudo install -m 600 /dev/null /var/prod_config/infra/.env.prod
@@ -30,12 +30,14 @@ jobs:
3030
echo "MYSQL_USER=${{ secrets.PRODUCT_DB_USERNAME }}"
3131
echo "MYSQL_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}"
3232
echo "RABBITMQ_USERNAME=${{ secrets.PRODUCT_RABBITMQ_USERNAME }}"
33-
echo "RABBITMQ_PASSWORD=${{ secrets.PRODUCT_RABBITMQ_PASSWORD }}"
34-
echo "RABBITMQ_HOST=${{ secrets.PRODUCT_RABBITMQ_HOST }}"
35-
echo "RABBITMQ_PORT=${{ secrets.PRODUCT_RABBITMQ_PORT }}"
36-
echo "RABBITMQ_MANAGEMENT_PORT=${{ secrets.PRODUCT_RABBITMQ_MANAGEMENT_PORT }}"
33+
echo "RABBITMQ_PASSWORD=${{ secrets.PRODUCT_RABBITMQ_PASSWORD }}"
34+
echo "RABBITMQ_HOST=${{ secrets.PRODUCT_RABBITMQ_HOST }}"
35+
echo "RABBITMQ_PORT=${{ secrets.PRODUCT_RABBITMQ_PORT }}"
36+
echo "RABBITMQ_MANAGEMENT_PORT=${{ secrets.PRODUCT_RABBITMQ_MANAGEMENT_PORT }}"
3737
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
3838
39+
sudo chmod +x docker-compose/redis-init.sh
40+
3941
- name: 인프라 서비스 재시작
4042
run: |
4143
docker compose -f "$COMPOSE_FILE" down

docker-compose/docker-compose.prod.infra.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,12 @@ services:
6161
- "6379:6379"
6262
volumes:
6363
- denamu-redis:/data
64+
- ./redis-init.sh:/usr/local/bin/redis-init.sh:ro
6465
networks:
6566
- Denamu
6667
env_file:
6768
- /var/prod_config/infra/.env.prod
68-
entrypoint:
69-
[
70-
"sh",
71-
"-c",
72-
"redis-server & sleep 5 && echo 'ACL SETUSER ${REDIS_USER} on >${REDIS_PASSWORD} allkeys allcommands' | redis-cli && tail -f /dev/null",
73-
]
69+
entrypoint: ["/usr/local/bin/redis-init.sh"]
7470
healthcheck:
7571
test: ["CMD", "redis-cli", "ping"]
7672
interval: 10s

docker-compose/redis-init.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/sh
2+
set -e
3+
4+
# Redis 서버를 백그라운드에서 시작
5+
redis-server --daemonize yes
6+
7+
# Redis가 완전히 시작될 때까지 대기
8+
sleep 5
9+
10+
# 환경변수를 사용하여 ACL 사용자 생성
11+
# 컨테이너 내부에서 실행되므로 env_file로 주입된 환경변수 사용 가능
12+
if [ -n "$REDIS_USER" ] && [ -n "$REDIS_PASSWORD" ]; then
13+
# heredoc을 사용하여 비밀번호 노출 방지
14+
if redis-cli <<EOF
15+
ACL SETUSER $REDIS_USER on >$REDIS_PASSWORD allkeys allcommands
16+
ACL SAVE
17+
EOF
18+
then
19+
echo "Redis ACL user created and saved: $REDIS_USER"
20+
else
21+
echo "Error: Failed to create Redis ACL user"
22+
exit 1
23+
fi
24+
else
25+
echo "Warning: REDIS_USER or REDIS_PASSWORD not set"
26+
echo "Error: Redis credentials are required"
27+
exit 1
28+
fi
29+
30+
# ACL 설정이 완료되었으므로 Redis를 안전하게 종료
31+
redis-cli shutdown
32+
# Redis가 완전히 종료될 때까지 대기
33+
sleep 2
34+
35+
# 포그라운드로 Redis 재시작 (컨테이너가 종료되지 않도록)
36+
exec redis-server

0 commit comments

Comments
 (0)