NGINX 동적 모듈 사용을 위한 패키지 만들기
이 포스트는 NGINX 동적 모듈 을 사용하는 방법에 대한 2부작 시리즈의 일부입니다.
NGINX 1.11.5 및 NGINX Plus R11부터 NGINX 자체와 독립적으로 NGINX 동적 모듈 을 컴파일하기 위한 지원을 도입했습니다. 이를 통해 NGINX 및 NGINX Plus 사용자는 NGINX 리포지토리의 공식 빌드를 사용하고 필요한 동적 모듈을 로드할 수 있습니다.
이 포스트는 NGINX 및 NGINX Plus와 함께 타사 NGINX 동적 모듈 을 사용하는 데 중점을 둡니다. 프로덕션 환경에서 동적 모듈을 빌드, 배포 및 업그레이드하기 위한 모범 사례에 대해 논의합니다. 개발 및 테스트 환경에 적합한 기본 모듈 컴파일 지침에 대한 자세한 내용은 NGINX 및 NGINX Plus용 타사 동적 모듈 컴파일 참조하십시오.
목차
1. .so 파일의 문제점
2. 종속성이 있는 동적 모듈 패키징
3. 원활한 업그레이드를 위한 개인 저장소 설정
4. 개인 저장소에서 모듈 설치
5. 원활한 업그레이드
6. 요약
1. .so 파일의 문제점
NGINX 동적 모듈 을 컴파일할 때 원시 출력은 공유 개체(.so 파일)입니다. 시작 및 다시 로드 시 NGINX 및 NGINX Plus는 load_module 지시문(일반적으로 기본 구성 파일인 nginx.conf에 있음)으로 명명된 각 공유 개체를 로드합니다. 공유 객체의 일반적인 디렉토리는 /etc/nginx/modules입니다.
NGINX은 NGINX 및 NGINX Plus의 공식 빌드와 바이너리 호환됩니다. 그러나 이 바이너리 호환성에는 제한이 있습니다. 동적 모듈은 로드되는 동일한 버전의 NGINX에 대해 컴파일되어야 합니다. NGINX Plus의 경우 NGINX Plus가 빌드된 NGINX Open Source 버전에 대해 동적 모듈을 컴파일해야 합니다. 즉, 일치하는 버전에 대해 빌드된 동적 모듈의 새 버전을 먼저 설치하지 않고 NGINX 또는 NGINX Plus를 업그레이드하면 업그레이드가 실패합니다.
NGINX와 해당 동적 모듈 간의 종속성을 수동으로 관리하면 오류가 발생하기 쉽습니다. 동적 모듈 .so 파일은 빌드된 NGINX의 버전을 나타내지 않으므로 수동으로 파일을 복사하는 프로세스가 다소 불안정합니다. 개발 환경에서는 일반적으로 허용되지만 프로덕션 환경에서는 종속성을 보호하고 업그레이드를 자동화해야 합니다.
목표는 모듈이 NGINX, 인증 모듈 공급업체 또는 타사 제공업체에서 제공되었는지 여부에 관계없이 NGINX 또는 NGINX Plus를 업그레이드할 때 모든 동적 모듈이 자동으로 업그레이드되는 것입니다.
2. 종속성이 있는 NGINX 동적 모듈 패키징
NGINX 또는 NGINX Plus의 공식 리포지토리를 사용하는 경우 패키지 관리자를 사용하여 NGINX를 설치하고 업그레이드하는 데 이미 익숙합니다. Red Hat/CentOS의 경우 yum, Ubuntu/Debian의 경우 apt. 공식 NGINX 및 NGINX Plus 리포지토리에는 여러 NGINX 동적 모듈 에 대한 설치 가능한 패키지도 포함되어 있습니다. 동적 모듈 패키지의 메타데이터는 모듈이 컴파일된 NGINX 버전을 나타내며 NGINX 또는 NGINX Plus 업그레이드 중에 모듈 업그레이드를 자동으로 트리거합니다.
타사 NGINX 동적 모듈 에 설치 가능한 패키지를 사용하는 것은 NGINX와의 종속성을 존중하고 업그레이드 실패를 방지하며 원활한 업그레이드를 용이하게 하는 핵심입니다.
NGINX는 자동화 도구를 사용하여 공식 리포지토리용 동적 모듈 패키지를 생성합니다. pkg-oss라고 하는 이 도구는 타사 모듈용으로 설치 가능한 패키지를 만드는 데에도 사용할 수 있습니다.
pkg‑oss 도구를 사용하여 모든 동적 모듈에 대해 설치 가능한 패키지를 만들 수 있습니다. 또한 NGINX 또는 NGINX Plus에 대한 올바른 종속성이 있는 설치 가능한 패키지를 만드는 방법의 예로 프로세스를 자동화하는 스크립트 build_module.sh가 포함되어 있습니다. NGINX 또는 NGINX Plus의 버전과 동적 모듈 소스의 위치를 지정하기만 하면 됩니다. 모듈 소스는 로컬 디스크에 있거나 GitHub 리포지토리를 가리키거나 일반 다운로드 링크일 수 있습니다. 다음 예제는 Ubuntu/Debian에서 NGINX Plus R11용 RTMP 모듈을 빌드합니다.
$ wget https://hg.nginx.org/pkg-oss/raw-file/default/build_module.sh
$ chmod a+x build_module.sh
$ ./build_module.sh -r 11 https://github.com/arut/nginx-rtmp-module.git
...
build_module.sh: INFO: Module packages created
~/debuild/nginx-plus-module-rtmp_1.11.5_amd64.deb
~/debuild/nginx-plus-module-rtmp-dbg_1.11.5_amd64.deb
파일 이름은 모듈이 NGINX Plus R11(1.11.5)용 기본 NGINX 버전에 대해 빌드되었음을 나타내며 패키지 메타데이터를 검사하여 확인할 수 있습니다.
$ dpkg-deb -f ~/debuild/nginx-plus-module-rtmp_1.11.5_amd64.deb Depends
libc6 (>= 2.14), nginx-plus (>> 1.11.4), nginx-plus (<< 1.11.6)
build_module.sh 스크립트를 사용할 때 다음 사항에 유의하십시오.
- 빌드 환경에서 스크립트 실행
프로덕션 환경에서는 올바른 작동에 필요한 소프트웨어만 설치하는 것이 가장 좋습니다. 여기에는 NGINX 동적 모듈 을 컴파일하고 패키징하는 데 필요한 도구가 포함되지 않습니다. 별도의 빌드 환경에서 프로덕션과 동일한 플랫폼에서 build_module.sh 스크립트를 실행하는 것이 좋습니다. - 스크립트가 모든 모듈에서 작동하지 않습니다.
이 스크립트는 NGINX에 사용할 수 있는 대부분의 타사 모듈에서 성공적으로 테스트되었습니다. 정적 모듈을 동적 모듈로 즉석에서 업그레이드하려고 시도하기도 합니다. 그러나 일부 모듈에는 스크립트가 예측할 수 없거나 다른 소프트웨어 구성 요소와 함께 패키징해야 하는 추가 컴파일 시간 종속성이 있습니다. - 설치 가능한 패키지는 재배포용이 아닙니다.
이 스크립트는 내부용으로 설치 가능한 패키지를 생성합니다. 패키지에는 저작권, 라이센스 또는 문서가 포함되어 있지 않습니다. 모듈을 설치 가능한 패키지로 재배포하려는 경우 pkg-oss 도구를 사용하여 사용자 정의 패키지를 정의할 수 있습니다. - 원활한 업그레이드에는 yum 또는 apt 저장소가 필요합니다.
이 스크립트는 NGINX 동적 모듈 을 위한 설치 가능한 패키지를 빌드하는 편리한 방법을 제공하지만 패키지가 yum 또는 apt 리포지토리에서 설치되지 않는 한 원활한 업그레이드 솔루션을 자동으로 제공하지 않습니다. 이 문서의 나머지 부분에서는 원활한 업그레이드를 달성하는 방법에 대해 설명합니다.
3. 원활한 업그레이드를 위한 개인 저장소 설정
많은 조직에서 소프트웨어 배포를 위해 개인 리포지토리를 사용합니다. NGINX pkg‑oss 도구로 생성된 .deb 또는 .rpm 파일을 이러한 리포지토리에 복사한 후 NGINX 및 NGINX Plus를 설치하는 데 사용하는 것과 동일한 패키지 관리자를 사용하여 동적 모듈을 설치, 제거 및 업그레이드할 수 있습니다. 개인 리포지토리가 없는 경우 서버에 로컬로 만드는 것은 간단한 연습입니다.
이 프로세스를 설명하기 위해 각각 apt(8) 또는 yum(8)을 사용하여 동적 모듈을 설치할 수 있도록 Ubuntu/Debian 및 Red Hat/CentOS용 개인 리포지토리를 생성하는 방법을 보여줍니다. 이 단계에는 root 액세스가 필요합니다. 또한 이 섹션에서는 복사 및 붙여넣기를 용이하게 하기 위해 명령 프롬프트를 생략했습니다.
1. 종속성을 준비하고 패키지 관리자를 위한 로컬 리포지토리를 만듭니다.
- Ubuntu 및 Debian:
$ mkdir /opt/deb
$ echo "deb file:/opt deb/" > /etc/apt/sources.list.d/local.list
- Red Hat 및 CentOS:
$ yum install createrepo
$ mkdir /opt/rpm
$ cat << EOF > /etc/yum.repos.d/localrepo.repo
[localrepo]
name=Dynamic modules for NGINX
baseurl=file:///opt/rpm
gpgcheck=0
enabled=1
EOF
2. 동적 모듈의 설치 가능한 패키지를 로컬 리포지토리에 복사합니다.
- Ubuntu 및 Debian:
$ cp ~/debuild/nginx-plus-module-rtmp_1.11.5_amd64.deb /opt/deb
- Red Hat 및 CentOS:
$ cp ~/rpmbuild/RPMS/x86_64/nginx-plus-module-rtmp-1.11.5-1.el7.centos.ngx.x86_64.rpm /opt/rpm
3. 동적 모듈 패키지를 인식하도록 패키지 관리자를 업데이트하십시오.
- Ubuntu 및 Debian:
$ cd /opt && dpkg-scanpackages deb | gzip > deb/Packages.gz
$ apt-get update
- Red Hat 및 CentOS:
$ createrepo -v /opt/rpm
$ yum clean all
$ yum update
4. 개인 저장소에서 NGINX 동적 모듈 설치
동적 모듈이 개인 저장소에 저장되면 로컬 패키지 관리자를 사용하여 설치할 수 있습니다.
- Ubuntu 및 Debian:
$ apt-get install nginx-plus-module-rtmp
- Red Hat 및 CentOS:
$ yum install nginx-plus-module-rtmp
패키지 이름은 버전 및 플랫폼 정보 없이 빌드 스크립트에서 생성된 파일 이름과 동일합니다.
설치가 완료되면 새로 설치된 동적 모듈을 로드하도록 NGINX를 구성하는 방법을 설명하는 배너가 표시됩니다.
----------------------------------------------------------------------
The rtmp dynamic module for nginx has been installed.
To enable this module, add the following to /etc/nginx/nginx.conf
and reload nginx:
load_module modules/ngx_rtmp_module.so;
----------------------------------------------------------------------
5. 원활한 업그레이드
이러한 방식으로 동적 모듈을 설치하면 NGINX 또는 NGINX Plus 업그레이드 중에 버전 불일치로부터 보호됩니다. 설치된 동적 모듈이 업그레이드되기 전에 NGINX 또는 NGINX Plus 업그레이드를 시도하면 로컬 패키지 관리자가 문제를 보고합니다.
- Ubuntu 및 Debian:
$ apt install nginx-plus
...
The following packages will be REMOVED
nginx-plus-module-rtmp
The following packages will be upgraded:
nginx-plus
Do you want to continue? [Y/n]
- Red Hat 및 CentOS:
$ yum install nginx-plus
...
Error: Package: nginx-plus-module-rtmp-1.11.5-1.el7.centos.ngx.x86_64 (@localrepo)
Requires: nginx-plus = 1.11.5
원활한 업그레이드를 보장하려면 먼저 업그레이드하려는 NGINX 또는 NGINX Plus 버전에 대해 동적 모듈의 새 버전을 빌드하십시오. 다음 예는 RTMP 동적 모듈이 설치된 상태에서 NGINX Plus를 R11에서 R12로 업그레이드하는 데 필요한 단계를 보여줍니다.
1. NGINX Plus R12용 동적 모듈을 빌드합니다.
$ ./build_module.sh -r 12 https://github.com/arut/nginx-rtmp-module.git
...
build_module.sh: INFO: Module packages created
~/debuild/nginx-plus-module-rtmp_1.11.10_amd64.deb
~/debuild/nginx-plus-module-rtmp-dbg_1.11.10_amd64.deb
2. 원활한 업그레이드를 위한 개인 저장소 설정의 2단계와 3단계를 반복하여 새 동적 모듈로 개인 저장소를 업데이트하십시오.
3. NGINX Plus를 업그레이드하십시오.
- Ubuntu 및 Debian:
$ apt-get install nginx-plus
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
nginx-plus nginx-plus-module-rtmp
2 to upgrade, 0 to newly install, 0 to remove
Need to get 2,571 kB/2,731 kB of archives.
After this operation, 411 kB of additional disk space will be used.
Do you want to continue? [Y/n]
- Red Hat 및 CentOS:
$ yum install nginx-plus
...
Resolving Dependencies
--> Running transaction check
---> Package nginx-plus.x86_64 0:1.11.5-1.el7.ngx will be updated
--> Processing Dependency:
---> Package nginx-plus-module-rtmp.x86_64 0:1.11.5-1.el7.centos.ngx will be updated
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================
Package Arch Version Repository Size
=========================================================================
Updating:
nginx-plus x86_64 1.11.10-3.el7.ngx nginx-plus 2.4 M
Updating for dependencies:
nginx-plus-module-rtmp x86_64 1.11.10-1.el7.centos.ngx localrepo 176 k
Transaction Summary
=========================================================================
Upgrade 1 Package (+1 Dependent package)
Total download size: 2.6 M
Is this ok [y/d/N]:
6. NGINX 동적 모듈 요약
NGINX 및 NGINX Plus용 동적 모듈을 사용하면 NGINX의 사전 빌드 및 테스트 패키지를 활용하면서 필요한 특정 확장만 컴파일할 수 있습니다. pkg-oss 도구 및 build_module.sh 스크립트는 생성, 설치에 대한 간단한 솔루션을 제공합니다. 그리고 NGINX 및 NGINX Plus의 생산 배포를 위한 타사 모듈 업그레이드.
NGINX Plus를 사용 보시려면 지금 무료 30일 평가판을 시작하거나 당사에 연락하여 사용 사례에 대해 논의하십시오.
사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.