ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nginx 설치 방법과 마주한 에러 해결 방법
    개발에 필요한 기초 지식 2022. 5. 1. 14:22

     

    미래에 다른 가상환경에 Nginx를 설치하며 고생할 저를 위해 AWS 배포 과정에서 Nginx 설치 중에 마주했던 에러와 전체적인 설치 방법에 대해 쓰고자 합니다. 저는 Linux 환경에서 설치를 진행한 점 참고 부탁드립니다.

     

    보통 저와 같은 Python, Django를 활용하는 백엔드 개발자라면 gunicorn과 Nginx를 함께 설치할것이기에 gunicorn 설치부터 차례대로 진행하겠습니다.

     

     

    < gunicorn 설치 과정 >

    # 가상환경을 이용한다면 가상환경에 설치하면 된다.
    pip install gunicorn

    Django 해당 앱 디렉토리로 이동하여 아래 명령어 실행

    # 둘 중 한 가지 방법 선택 (백그라운드에서 실행 원하시면 2번 방법 선택)
    
    # 1. gunicorn --bind 0.0.0.0:8000 쟝고 앱 이름.wsgi 입력
    gunicorn --bind 0.0.0.0:8000 bangguseok_traveller.wsgi
    
    # 2. nohup 툴 사용하여 gunicorn 백그라운드 동작
    nohup gunicorn --bind=0.0.0.0:8000 앱 이름.wsgi &

    성공적으로 작동하고 있는 gunicorn

     

     

    < Nginx 설치 과정시 발생한 libpython 의존성 문제 해결 방법 >

    저처럼 바로 설치를 시도하시면... 바로 되시면 다행인데 저처럼 libpython3.10-miniaml 관련한 의존성 문제가 발생한다면 이 글이 도움이 될 것 같아 공유합니다. 이건 Nginx의 문제는 아니고 gunicorn 설치할 때도 발생했던 문제인 것으로 보아 아마 에러에도 나와있지만 libpython 의존성 문제인듯 합니다.

    nginx 설치시 발생한 의존성 문제 => 생활코딩 영상과 구글링으로 해결

    # Try removing the problematic packages ie libpython3.10-minimal libpython3.10-stdlib.
    sudo apt remove libpython3.10-minimal libpython3.10-stdlib
    
    # If this says to run --fix-broken then remove it manually ie like this.
    ls -l /var/lib/dpkg/info | grep -i libpython3.10-minimal
    
    # This shows the truncated file names which contain libpython3.10-minimal.
    # Now move it into a different directory.
    sudo mv /var/lib/dpkg/info/libpython3.10-minimal:amd64.* /tmp
    
    # Then do.
    sudo apt --fix-broken install

     

    < Nginx 설치 과정 >

    자 그러면 본격적으로 가상환경에 Nginx 설치를 진행해보겠습니다.

    저는 utils 라는 디렉토리를 생성하여 아래의 압축을 해제한 파일들을 모두 넣어뒀습니다.

     

    # Nginx 다운로드 및 압축 해제

    1. http://nginx.org/en/docs/install.html 접속하여 Installation on Linux 아래에 있는 packages 클릭

    2. 오른편에 있는 download 클릭

    3. Stable versionnginx-1.20.2 우클릭하여 링크 주소 복사 클릭 (version은 달라질 수 있습니다.)

    4. CLI(터미널)에서 원하는 디렉토리로 이동하여 wget 복사한 주소 붙여넣기 입력

    # 아래 명렁어 통해 다운로드 진행
    wget http://nginx.org/download/nginx-1.20.2.tar.gz
    
    # 아래 명령어 통해 압축 해제
    tar -xvf nginx-1.20.2.tar.gz

     

    # PCRE 다운로드 및 압축 해제

    1. http://pcre.org 접속하여 Download 아래 https://sourceforge.net/projects/pcre/files 클릭

    2. pcre 클릭 => pcre-8.45.tar.gz 우클릭하여 링크 주소 복사 클릭 (version은 달라질 수 있습니다.)

    # 아래 명렁어 통해 다운로드 진행
    wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz/download
    
    # 이렇게 받으니 파일명이 download로 되어 있어서 저는 파일명 pcre-8.45.tar.gz로 변경 후에 압축 해제 진행했습니다.
    
    # 아래 명령어 통해 압축 해제
    tar -xvf pcre-8.45.tar.gz

     

    # openssl 다운로드 및 압축 해제

    1. http://www.openssl.org/source 접속하여 중간쯤에 있는 3 version 우클릭하여 링크 주소 복사 클릭

    왜냐하면 1 version은 23년 11월까지만 지원이 된다고 하고 3 version은 26년 9월까지 지원이 된다고 하여 3 version으로 진행했습니다.

    # 아래 명렁어 통해 다운로드 진행
    wget https://www.openssl.org/source/openssl-3.0.2.tar.gz
    
    # 아래 명령어 통해 압축 해제
    tar -xvf openssl-3.0.2.tar.gz

     

    # zlib 다운로드 및 압축 해제

    1. http://zlib.net 접속하여 중간쯤에 있는 current release 부분의 tar.gz인 US (zlib.net) 우클릭하여 링크 주소 복사 클릭

    # 아래 명렁어 통해 다운로드 진행
    wget http://zlib.net/zlib-1.2.12.tar.gz
    
    # 아래 명령어 통해 압축 해제
    tar -xvf zlib-1.2.12.tar.gz

     

    # 외부 모듈인 echo module 다운로드 및 압축 해제

    1. http://wiki.nginx.org/3rdPartyModules 접속하여 HTTP Echo 검색하여 해당 github 링크로 이동

    2. download 검색하여 최신 버전이 있는 echo-nginx-module file list 클릭하여 이동

    3. 저의 경우 최신 버전인 v0.62 의 tar.gz 우클릭하여 링크 주소 복사 클릭

    # 아래 명렁어 통해 다운로드 진행
    wget https://github.com/openresty/echo-nginx-module/archive/refs/tags/v0.62.tar.gz
    
    # 아래 명령어 통해 압축 해제
    tar -xvf v0.62.tar.gz

     

    이렇게 하여 필요한 것들을 모두 다운로드 받고 압축도 해제했습니다.

     

    < 사용자 확인 및 추가 >

    저의 경우에는 ps aux | grep nginx를 터미널에서 실행해보니 이미 www-data가 있어서 별도로 추가하는 과정은 진행하지 않았습니다.

    혹시 없으시다면 ubuntu는 아래와 같이 진행하시면 됩니다.

    useradd --shell /usr/sbin/nologin www-data

     

    그 다음에 컴파일을 진행하기 위해서는 C, C++ 컴파일러가 필요하다고 하여 아래의 명령어로 설치하겠습니다.

    sudo apt-get install gcc g++;

     

    아래 부분들은 이고잉 님께서 설명해주신 것들 중에서 설치와 진행에 필요한 것들만 요약한 것이기에 자세한 설명을 보고 싶으시다면 참고 자료에 있는 생활코딩 사이트를 방문하시길 추천드립니다.

     

    < 설치 단계 요약 >

    1. configure : 환경설정
    2. make : 설치파일을 컴파일
    3. make install : 설치파일을 이용하여 설치

     

    < configure >

    nginx의 소스 디렉토리로 이동 (저의 경우 /home/bruno/utils/nginx-1.20.2 여기가 소스 디렉토리가 됩니다.)

    아래의 명령어에서 version을 나타내는 숫자들은 압축 해제 한 폴더명의 숫자(version)와 동일하게 변경해야 됩니다.

    sudo ./configure --with-zlib=../zlib-1.2.12 --with-pcre=../pcre-8.45 --with-openssl=../openssl-3.0.2 --with-http_ssl_module --with-debug --add-module=../echo-nginx-module-0.62 --prefix=/usr/local/nginx --user=www-data --group=www-data

     

    < 컴파일 >

    아래의 명령어를 치시면 오랜 시간 후에 컴파일이 완료될 것입니다.

    sudo make;

    이렇게 뜨면 컴파일은 성공적으로 끝난것입니다.

     

    < 설치 >

    sudo make install;

    Nginx 설치 완료

     

    < Nginx 구동 >

    sudo /usr/local/nginx/sbin/nginx;

    성공했다면 아무런 메세지도 출력되지 않을 것입니다.

     

    이후 크롬 주소창에 localhost라고 입력하여 아래처럼 뜬다면 성공적으로 구동한 것입니다!

    Nginx 성공적으로 구동한 화면

     

    < Nginx 명령어 >

    • service nginx start : 시작
    • service nginx stop : 정지
    • service nginx restart : 재시작
    • service nginx reload : 설정 파일 리로드
    • service nginx status : 현재 상태

     

     

    Nginx를 설치하는데 중간에 의존성 문제도 생기고 컴파일이란 것도 처음했어서 시간이 좀 걸렸기에

    이번에 이렇게 정리해서 다음번에 할 때는 좀 덜 헤매고 했으면 하는 마음에 이렇게 정리해봤습니다.

     

    다음번에 Nginx란 무엇이며 왜 쓰는지를 쉽고 자세하게 설명해주신 우리밋 님의 영상과 이에 대한 설명을 써볼 예정입니다.

    긴 글 읽어주셔서 감사합니다!

     

     

    < 참고 자료 >

    우선 아래의 생활코딩 영상을 기반으로 진행했으니 꼭 참고하시면 좋을 것 같습니다.

    https://opentutorials.org/module/384/4511

     

    gunicorn 설치시 참고하시면 좋습니다.

    https://yongineer.netlify.app/aws/gunicorn-&-nginx%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

     

    설치시 libpython3.10-miniaml 의존성 문제 발생시 아래 사이트 참고하여 진행하시면 도움될 것 같습니다.

    https://askubuntu.com/questions/1402410/sub-process-usr-bin-dpkg-returned-an-error-code-1-while-upgrading-python3-10

     

    댓글

Designed by Tistory.