diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index 7540aff..eb84e98 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -297,17 +297,21 @@ jobs: echo "Ensure redis container" - # 리프레시 토큰 저장소. 이미 떠 있으면 건드리지 않는다. - # 재시작해도 로그인 세션이 끊기지 않도록 배포마다 지우지 않는다. - if [ -z "$(docker ps -q -f name=^redis$)" ]; then - docker rm redis || true - docker run -d \ - --name redis \ - --restart unless-stopped \ - --network hackathon-network \ - redis:7-alpine \ - redis-server --save 60 1 --appendonly no - fi + # 리프레시 토큰 저장소. 이미 있으면 그대로 쓰고, 없을 때만 만든다. + # 배포마다 지우면 로그인 세션이 전부 끊긴다. + # + # 조건문에 명령 치환을 쓰지 않는다. 이 스크립트는 인용하지 않은 heredoc + # (<< EOF)으로 SSH 에 넘어가므로 $(...) 가 EC2 가 아니라 러너에서 평가된다. + # 러너에는 이 컨테이너가 없어 조건이 항상 참이 되고, 이미 떠 있는 컨테이너를 + # 다시 만들려다 이름 충돌로 배포가 죽는다. 실제로 한 번 겪었다. + # + # docker start 는 컨테이너가 있으면(멈춰 있어도) 성공하고 없으면 실패한다. + docker start redis 2>/dev/null || docker run -d \ + --name redis \ + --restart unless-stopped \ + --network hackathon-network \ + redis:7-alpine \ + redis-server --save 60 1 --appendonly no echo "Stop old container"