github에 올릴 수 없는 환경변수는 어떻게 배포환경에 추가해야할까?

2025. 2. 22. 03:12·AlgoMate

오늘 크롤링 서버를 EC2에 배포하면서 github action을 사용해 CI/CD 워크 플로우를 구성하던 중, 비동기 작업을 처리하는 celery_worker 가 redis에 연결을 요청해서 작업 큐로 사용해야하는데 엄한 곳에다가 요청을 하는 소동이 벌어졌다. 분명히 로컬에서는 도커 컴포즈로 띄웠을 때 잘 작동하던 코드라 안될리가 없는데, 안돼서 당황스러움을 가득 안고 디버깅에 들어갔다. 


1. 에러 상황

개요는 이러했다.

이런 식으로 잘 연결되어야 하는 애가

celery_worker  | [INFO/MainProcess] Connected to redis://redis_celery:6379/0

바보마냥 연결해야할 엔드포인트를 잘 못 지정하고 있는 문제였다.

amqp와 5672포트로 연결하는 걸 미루어보아 기본으로 rabbitMQ에 연결하려고 하는 것 같다.

celery_worker  | [ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.
celery_worker  | Trying again in 2.00 seconds... (1/100)
celery_worker  | 
celery_worker  | [ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.
celery_worker  | Trying again in 2.00 seconds... (2/100)

2. 잘못된 점

이 연결 설정 정보를 지정하는 곳의 코드를 보자면 이 코드인데

환경 변수들을 .env파일에 모아놓고 저장하고 있어 os.getenv()와 같은 식으로 불러오고 있었다.

#CeleryConfig.py

load_dotenv()

BROKER_URL = os.getenv("CELERY_BROKER_URL")
BACKEND_URL = os.getenv("CELERY_RESULT_BACKEND")

# ✅ Redis 설정 (Celery와 연동)
celery_app = Celery(
    "scraper",
    broker=BROKER_URL, # 🔹 메시지 브로커 (현재 Redis 사용 중)
    backend=BACKEND_URL, # 🔹 작업 결과 저장을 위한 백엔드 추가
    include=["workers.scraping_tasks"]
)

분명 로컬에서는 잘 실행됐고, 컨테이너로 실행되는 환경이라서 어느 os에서도 잘 돌아가야하는데, 에러가 나는 게 이상했다. 

 

알고보니, 

나는 github actions를 사용해서 repo에 push한 github 코드를 기반으로 이미지를 만들고, 도커허브에 올려서 해당 이미지를 깃헙 액션이 pull 해와서 내 배포 서버에 올리는 과정이이었는데, 환경 변수 파일은 gitignore을 통해서 github에 올리는 건 제외해놨기 때문에 해당 github repo의 코드로 구운 이미지에는 환경변수 설정 파일이 포함되지 않아서 일어난 일이었다. 그래서 일단은 하드코딩으로 임시방편을 해놨는데 차후에 환경변수 파일을 추가하고 개선할 예정이다.

 

+ 

이후 배포를 마치고 해당 ec2 서버로 curl을 보내 확인해보려는데, 요청이 도달하지 못하는 이슈가 발생했다. 

대부분 이런 이슈는 보안그룹을 잘 못 지정하거나, 포트를 잘 못 지정해서 일어난 일이기에 

 

1. 보안그룹

2. 포트 포워딩, 포트 바인딩 

두가지 위주로 확인해보았다. 

 

보안그룹의 경우는 http 포트나 https: 두가 지 포트와 ssh 세가지 포트가 모두 잘 열려있는 걸 확인할 수 있었다. 

 

생각해보니 로컬에서 쓰던 docker-compose 를 사용해서 서버를 띄운거라 서버가 8000->8000 으로 포워딩 돼 있다는 걸 알 수 있었다. 그러나 내가 열어놓은 포트는 80 번 포트이기에 docker-compose.yml 에서 바인딩을 80으로 바꿔주고 포워딩을 80->8000으로 설정해주었더니 요청을 잘 받을 수 있었다. 

fastapi_app   | INFO:     Started server process [8]
fastapi_app   | INFO:     Waiting for application startup.
fastapi_app   | INFO:     Application startup complete.
fastapi_app   | INFO:     115.23.129.96:61030 - "GET / HTTP/1.1" 200 OK
fastapi_app   | INFO:     115.23.129.96:61030 - "GET /favicon.ico HTTP/1.1" 404 Not Found
fastapi_app   | INFO:     115.23.129.96:61034 - "GET /api/task-status/e4048591-8626-4329-80a1-d76171066162 HTTP/1.1" 200 OK
fastapi_app   | INFO:     54.196.247.85:54222 - "GET / HTTP/1.1" 200 OK

 

다음 포스팅이야 말로 제목에 어울리는 포스팅이 되겠다 쓰다보니 사담이 많이 들어가게 되어 구분하려고 한다,,, ㅎㅎ

읽어주셔서 감사합니다.. 

다음 시간에는 그러면 환경변수를 배포환경에 어떻게 안전하게 추가할 수 있는 지에 대해 포스팅을 하겠다.

'AlgoMate' 카테고리의 다른 글

host.docker.internal은 왜 운영환경에서 사용하기 어려울까⁉️  (0) 2025.02.19
🛠️ 컨테이너 내부에서 로컬 서버로 API 요청 보내는 방법 🚀  (0) 2025.02.19
Selenium을 통한 크롤링 시, 마주하는 reCAPTCHA 해결기  (0) 2025.02.19
Redis만으로도 비동기 처리는 가능하잖아‼️ 근데 왜 Celery+Redis를 사용해야 할까  (0) 2025.02.18
🚀 크롤링 서버 vs 메인 서버, 크롤링한 데이터를 어디서 저장해야 할까?  (0) 2025.02.17
'AlgoMate' 카테고리의 다른 글
  • host.docker.internal은 왜 운영환경에서 사용하기 어려울까⁉️
  • 🛠️ 컨테이너 내부에서 로컬 서버로 API 요청 보내는 방법 🚀
  • Selenium을 통한 크롤링 시, 마주하는 reCAPTCHA 해결기
  • Redis만으로도 비동기 처리는 가능하잖아‼️ 근데 왜 Celery+Redis를 사용해야 할까
SungHoJung
SungHoJung
  • SungHoJung
    HOLOUD
    SungHoJung
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • AlgoMate (13)
      • TroubleShooting (0)
      • 여러가지 모음집 (4)
      • Infra (17)
  • 링크

    • github
  • 인기 글

  • 태그

    celery+rabbitmq
    k8s
    bypass recaptcha
    ci-cd
    메세지 브로커
    docker-compose
    Kubernetes
    스왑 메모리 설정
    host.docker.internal
    크롤링한 데이터
    AWS
    ECS
    Celery
    IAM
    recaptcha 우회
    redis
    컨테이너 간 통신
    로컬 서버와 통신
    EC2
    celery+redis
  • hELLO· Designed By정상우.v4.10.3
SungHoJung
github에 올릴 수 없는 환경변수는 어떻게 배포환경에 추가해야할까?
상단으로

티스토리툴바