코딩/기타

uWSGI 플러그인을 찾지 못하는 오류 해결

작은코딩 2022. 8. 9. 03:42

🌵 문제 발생

Docker를 사용해 django 애플리케이션을 nginx 웹서버와 uwsgi로 배포하는 과정에서 uwsgi의 플러그인을 찾지 못하는 에러가 발생했다. 

 

서버 환경 : AWS EC2 ubuntu

 

docker compose 실행시 에러 로그, uswgi.ini

 


🍀 해결방법

plugins = /usr/lib/uwsgi/plugins/python3

해결 방법은 간단했다. 내 상황에서는 plugins-dir에 경로를 명시해주는 방법은 도움이 안 됐고 plugins에 명시해주니 해결되었다.

(이거 때문에 밤을 새웠다니,,,)

 


🌱 해결 과정

이 문제를 처음 만났을 때 엄청 당황했다. 

 

그 이유는 정상적으로 작동하던 로직이 Error를 뱉었기 때문이다. 

 

처음에는 간단한 문제인 줄 알고 구글 검색으로 나온 방법을 시도했다. 

 

uwsgi.ini 파일에 plugins_dir 경로를 지정해주는 방법인데 당연히 문제가 해결될 줄 알았지만 여전히 같은 에러가 발생했다. 

 

그 이외에는 간단하게 찾을 수 있는 여러 방법을 시도해도 여전히 문제는 해결되지 않았다.

 

왜 에러가 발생하고 uswgi는 플러그인을 찾지 못할까?

 

문제를 고민하던 중 정상적으로 실행되던 게 왜 에러가 발생했는지 생각을 하게 되었고 

 

다행히 로그 기록을 남기고 있어서 이유를 찾을 수 있었다. 

 

docker-compose에서 컨테이너를 만들 때 Docker 파일로 이미지를 빌드하는데 마지막에 `RUN pipenv install uwsgi`를 하는 부분이 있다. 

 

이때 버전이 명시되어 있지 않아서 처음엔 2.0.19 버전의 uwsgi가 설치됐는데 이 에러가 발생할 때는 2.0.20 버전의 uwsgi가 설치되었다. 

 

물론 다시 버전 명시를 해줘도 에러가 해결되지는 않았지만,, 이 부분이 문제 발생의 트리거가 되지 않았나 싶다.

 

 

이제 다시 문제로 돌아와서 어떻게 하면 해결할 수 있을지 고민을 해보았다. 

 

플러그인이 없다고 하니 플러그인이 진짜로 있는지 없는지 여부를 먼저 파악하는 게 우선이라고 생각했고 다음 명령어를 통해서 파일이 실제 존재하는지 파악할 수 있었다. 

 

(파이썬 이미지가 실행되고 있는 backend 컨테이너 안에 들어가서 확인했다)

find / -path /mnt -prune -o -name python3_plugin.so 2>/dev/null

/usr/lib/uwsgi/plugins/python3_plugin.so

 

그렇다면 파일은 존재하는데 왜 못 찾는 걸까?

 

uwsgi 도큐먼트에 들어가서 정보를 찾아봤지만 명확한 이유는 찾지 못했다. 

 

다만 의심이 되는 정황으로는 uwsgi가 python 3.9 버전에서 호완이 안 되는 경우 하나와

 

AWS EC2 우분투 서버에는 파이썬이 기본적으로 설치되어 있는데 3.9 버전을 설치하면서 혼선이 생겼고 uwsgi가 플러그인을 찾지 못하는 이유 두 가지가 의심되었다. 

 

여기까지 생각을 이어 나가고 추적을 했지만 아직 명확한 문제를 해결할 수 있는 길은 보이지 않았다. 

 

마땅한 해결법이 보이지 않아서 안될 거라고 생각했지만 혹시나 하는 마음에

 

plugins-dir를 명시하는 다른 여러 답변들을 찾아서 입력을 해보았고 역시 문제는 해결되지 않았다. 

(내가 만든 컨테이너에 플러그인이 있는 경로가 아니라 답변자 상황의 경로기 때문에,,)

 

이 문제가 발생한 시점이 23PM이었고 07AM까지 문제를 해결하지 못해서 자기 전 마지막으로 그냥 plugins에 경로를 적어주면 어떻게 될지 궁금해서 시도를 해봤는데,,,

 

코레카!!

 

문제가 해결됐다...

 

plugins = /usr/lib/uwsgi/plugins/python3

 

왜 plugins-dir에 있는 경로를 찾지 못하고 plugins에 경로를 지정해줘야 해결이 되는지는 미스터리기 때문에 아직 숙제는 남아있다.

 

- 추가

스택오버플로우에 내 방법을 답변으로 남겨놨다. 해결은 간단했지만 시간을 너무 많이 뺏겨서 나와 비슷한 상황을 격는 다른 누군가에게 도움이 되었으면 한다.

https://stackoverflow.com/a/73281684/19719937

 

UNABLE to load uWSGI plugin: ./python3_plugin.so: cannot open shared object file: No such file or directory

On my Fedora workstation, I'm getting this error: !!! UNABLE to load uWSGI plugin: ./python3_plugin.so: cannot open shared object file: No such file or directory !!! But on the server (CentOS Lin...

stackoverflow.com