현제의 현재이야기

[DevOps] 도커에 Celery 및 서버 https 추가 본문

Infra

[DevOps] 도커에 Celery 및 서버 https 추가

현재의 현제 2023. 8. 8. 22:55

택시를 배정하는 로직을 비동기로 처리해야하는 소모가 발생했다.

비동기 처리를 위해 celery를 사용하기로 했고, 그에 따른 브로커를 redis로 이용하기로 했다.

Celery 해결해야 하는 의문점

처음에 redis_queue라는 컨테이너 이름으로 레디스를 6381포트로 띄어줬었다.

# docekr compose
redis_queue:
     image: redis:7
     ports:
         - "6381:6379"
         
#settings.py
CELERY_BROKER_URL = 'redis://redis_queue:6381/0'
CELERY_RESULT_BACKEND = 'redis://redis_queue:6381/0'

이렇게 하니깐 celery에서 redis를 찾지 못하더라. 왜지? 그래서 그냥 기존의 django channels를 위한 redis(port: 6379)에 달아줬더니 성공.

그리고 web 컨테이너(메인 서버)에 celery를 추가해줬다.

#!/bin/bash
 python manage.py collectstatic --no-input
 celery -A hackathon worker --loglevel=info & 
 daphne -b 0.0.0.0 -p 8000 hackathon.asgi:application

사실.. web 컨테이너에 celery와 asgi 모두 돌리는게 좋지 않아보인다. 하나만 뻑이나도 전체 컨테이너가 먹통되는 것이 아닌가?

이상적인 형태는 http 요청을 gunicorn - wsgi으로 이어지는 장고 서버 컨테이너 하나와, web socket 요청을 daphne - asgi로 이어지는 장고 채널 서버 컨테이너 하나, 그리고 마지막으로 비동기 처리용 celery 장고 컨테이너를 띄우는 것이다. 그리고 레디스도 다 분리하는게 좋아보이긴 한다. 지금은 시간이 별로 남지 않았으니, 다음에는 꼭 이렇게 컨테이너를 분리해보자!

Https 달기

인증서를 손수 ec2에 달아주려고 했는데 뭔가 설정 미스로 잘 되지 않았었다. 그래서 ec2 로드 밸런스를 통한 https 등록을 해보았다.

방법

처음에 도메인을 산 뒤에, Route 53으로 접속해서 호스팅 영역을 생성한다.

그 후에 도메인 이름에 구입했던 도메인을 적고 호스팅 영역 생성

레코드 생성을 눌러준 뒤에 값에 ec2 퍼블릭 ip를 넣어준다.

그 뒤에 생기는 네임서버 4개를 도메인 사이트에서 기입해준다. 여기서 마지막 . 은 빼고 저장하자.

 

그리고 AWS Certificate Manger에서 인증서를 요청한다.

여기서 api.~ www.~ 를 다 사용하고 싶으면 "*."를 넣고 요청한다.

그 뒤에 Route 53에서 레코드 신청을 하게되면 성공이 뜨게된다.

처음에는 kro.kr이라는 무료 도메인을 사용하였으나, 상태가 계속 발급이 되지 않는 상태였다. 그래서 co.kr 도메인을 산 뒤에 인증서를 요청했더니 바로 만들어졌다. 근데 나중에 kro.kr도 생성된거보니 시간만 오래걸리는 듯?

그후 EC2 Target Group으로 들어가서 대상 그룹 생성을 만들어준다.

여기서 중요한 것은 포트인데, 현재 메인 서버의 포트를 적어주면 된다. 중요한 점은 나는 지금 niginx를 웹서버로 WAS의 앞단에 두고 있기 때문에 80포트로 열어줬어야 했다. 8000포트로 계속 시도하다가 안 되었음. 나머지는 그냥 통과~

 

아래에 보류 중인 것으로 포함 누르고 등록을 해준다.

그리고 ALB로 로드밸런스 생성

현재 EC2 리전이 있는 곳에 VPC 매핑을 해준 뒤 보안 그룹도 ec2가 연결되어있는 곳으로 추가해준다.

그 뒤에 https도 추가해주고 대상 그룹에 아까 만든 대상 그룹을 추가해준다.

 

그 후 다시 Route53 들어가서 레코드를 생성 버튼을 누르고

이렇게 로드밸런스를 연결해주면 끝.

https://api.qrtaxi.co.kr

맛있다!

 

로드 밸런스에 대한 정보

 

☁️ ELB(Elastic Load Balancer) 구성 & 사용법 가이드

ELB (Elastic Load Balancer) 이란 ELB(Elastic Load Balancer)란 애플리케이션 트래픽을 여러 대상에 자동으로 분산시켜 안정적인 AWS서버 환경을 운용하는데에 도움을 주는 서비스다. EC2뿐만 아니라 컨테이너(

inpa.tistory.com

 

Comments