라벨이 [Docker]인 게시물 표시

Django + ASGI + Docker 적용하기.

 Django + ASGI + Docker 적용하기. 지금까지 Django wsgi + uWSGI 를 사용하다가 장고 3.0 버전에서 ASGI 서버를 지원하게 되면서 그것에 대해 코드 적용 및 발생 하는 이슈에 대해서 적을까 합니다. 1. Gunicorn worker hanging issue docker 내부에서 gunicorn 사용할때 worker가 가동되는데 그 워커의 tmp directory가  /tmp 로 docker 내부에 있는 overlay 스토리지 타입으로 되어있어서,  docker 내에서 gunicorn worker 가동시 blocking 걸릴수도 있음. 따라서 gunicron 의 worker tmp directory path를 세팅해줌으로써 worker 가 hanging 걸리는 이슈 해결 gunicorn --worker-tmp-dir /dev/shm ....  2. uvicorn --relaod 사용시 high cpu usage uvicorn high cpu 의 경우 reload 사용시 모든 폴더 및 파일을 watching 하고 있어서 이슈가 발생. reload-dir을 어플리케이션 directory 로 세팅해주면  high cpu usage 이슈는 해결됨. 기존에 45% 까지 사용하던 CPU Usage가 25%까지 줄어들었음. uvicorn --reload-dir /app 3. too slow response Application 의 경우는 Django 3.1 을 사용해서 Async view만 적용 되어, ORM 쪽은 async 로직이 아직 적용 안되어있는 상태 따라서 DJANGO_ALLOW_ASYNC_UNSAFE 세팅 필요. settings.py 에 해당 라인 추가 os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" 그리고 지금 Application의 경우 graphql을 사용하고 있는데, 거기에 제공하는 playgorund를 통해 테스트 진행. 그리고 gun...

Axios request 사용시 self signed certificate chain Error

이미지
 기존에 Axios를 통해 request 를 요청하던중 self signed certificate chain 에러가 발생해서 코드가 다운 되는 이슈가 발생했습니다. 해당 이슈에 대해 확인 해보던 중에 알게 된 사실은 OpenSSL 이슈라는 걸 확인해서 찾아보던 중에 해결 방법으론 2가지가 있는데  1. axios instance 생성시에 httpsAgent 세팅을 통해서 해결 하는 방법 2. NODE_TLS_REJECT_UNAUTHORIZED Environment 세팅을 통해 해결     NODE_TLS_REJECT_UNAUTHORIZED=0 REFERENCES https://github.com/axios/axios/issues/535

Docker build시에 특정 라인 캐싱 제거하기.

이미지
 Docker 빌드 시에 특정 라인 캐싱 제거하기. Docker compose를 사용해서 여러개의 container를 동일한 Dockerfile 파일을 사용해서 만들때, ARGS에 따라서 다르게 빌드 되어야하는 경우, 캐싱처리로 인해서 올바르게 동작하지 않는 이슈가 발생하였습니다. 그래서 이 이슈를 해결 하기 위해 사용했던 방법에 대해서 적을까 합니다. --no-cache Argument 추가하기. docker build시에 --no-cache 추가하면 기존에 캐시 되는 Docker image를 제거 할수 있음. CACHEBUST Argument 사용하기. no-cache의 경우는 모든 Docker image cache를 제거 해서 파일은 업데이트 되는데 필요 없는 라인까지 업데이트 되는 경우가 발생.  CACHEBUST를 사용할 경우 해당 라인 밑에 있는 docker command에 대해서 캐시 처리 없이 항상 실행 됨. 저의 경우 barbel-node 를 사용하는데 그때 CACHEBUST를 추가해서 항상 코드가 업데이트 되도록 세팅함.