Nginx 설치 방법과 마주한 에러 해결 방법
미래에 다른 가상환경에 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 &
< Nginx 설치 과정시 발생한 libpython 의존성 문제 해결 방법 >
저처럼 바로 설치를 시도하시면... 바로 되시면 다행인데 저처럼 libpython3.10-miniaml 관련한 의존성 문제가 발생한다면 이 글이 도움이 될 것 같아 공유합니다. 이건 Nginx의 문제는 아니고 gunicorn 설치할 때도 발생했던 문제인 것으로 보아 아마 에러에도 나와있지만 libpython 의존성 문제인듯 합니다.
# 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 version의 nginx-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++;
아래 부분들은 이고잉 님께서 설명해주신 것들 중에서 설치와 진행에 필요한 것들만 요약한 것이기에 자세한 설명을 보고 싶으시다면 참고 자료에 있는 생활코딩 사이트를 방문하시길 추천드립니다.
< 설치 단계 요약 >
- configure : 환경설정
- make : 설치파일을 컴파일
- 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 구동 >
sudo /usr/local/nginx/sbin/nginx;
성공했다면 아무런 메세지도 출력되지 않을 것입니다.
이후 크롬 주소창에 localhost라고 입력하여 아래처럼 뜬다면 성공적으로 구동한 것입니다!
< 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 설치시 참고하시면 좋습니다.
설치시 libpython3.10-miniaml 의존성 문제 발생시 아래 사이트 참고하여 진행하시면 도움될 것 같습니다.