Puppet 으로 NGINX 및 NGINX Plus 자동화하기
이 포스트에서는 Puppet 을 사용하여 NGINX와 NGINX Plus 를 자동화하여 설치하는 방법을 설명합니다.
Puppet은 커뮤니티 기여 및 내부에서 개발된 다양한 모듈을 유지 관리하고 있어 시작하기가 매우 쉽습니다. James Fryman이 작성한 기본 NGINX 모듈은 매우 강력하며, 간단한 Manifest 파일에서 NGINX 구성 파일을 생성하는 내장 지원 기능을 갖추고 있습니다.
이 포스트에서는 해당 모듈을 사용하여 NGINX Open Source를 설치하는 방법과 NGINX Plus를 설치하고 구성하기 위한 필요한 수정 사항을 보여줍니다.
목차
1. Puppet 환경 준비
2. Puppet으로 NGINX 오픈소스 설치하기
3. NGINX Plus용 기본 Puppet 모듈 수정
4. Puppet Manifest 생성 및 NGINX Plus 설치
5. NGINX Plus 관리 기능을 위한 가상 서버 구성
6. ex-기본 프록시 구성 만들기
6-1. . 프록시 결과 확인
7. 요약
1. Puppet 환경 준비
데모 Puppet 환경을 간단하게 유지하기 위해, 우리는 puppet apply를 사용하여 작업을 수행할 것입니다.
puppet apply는 전체 Puppet 서버를 설정하지 않고도 로컬 노드에 manifest와 모듈을 적용할 수 있는 내장된 유틸리티입니다. puppet apply는 전체 Puppet 서버에 비해 기능적인 제한이 있지만, 여기서 수행하는 작업에는 전체 서버 설치가 필요하지 않습니다.
puppet apply를 실행하고 기본 NGINX 모듈을 사용하기 위해 필요한 패키지를 설치하는 방법에 대해 간단히 설명하겠습니다.
1. 패키지를 다운로드하고 설치하여 저장소를 활성화합니다.
$ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
$ sudo dpkg -i puppetlabs-release-pc1-trusty.deb
2. 다음 apt-get 명령어를 실행합니다.
$ sudo apt-get update
$ sudo apt-get install puppet
3. jfryman/nginx 모듈을 설치합니다.
$ sudo puppet module install jfryman-nginx
Notice: Preparing to install into /etc/puppet/modules ...
Notice: Downloading from https://forge.puppetlabs.com ...
Notice: Installing -- do not interrupt ...
/etc/puppet/modules
└─┬ jfryman-nginx (v0.3.0)
├── puppetlabs-apt (v2.2.2)
├── puppetlabs-concat (v2.2.0)
└── puppetlabs-stdlib (v4.12.0)
NGINX 모듈을 설치할 때 몇 가지 전제 조건 모듈도 함께 설치됩니다. 이제 Puppet을 사용하여 NGINX를 설치할 준비가 되었습니다.
2. Puppet으로 NGINX 오픈소스 설치하기
NGINX 오픈소스의 기본 Puppet 모듈을 사용하면 NGINX와 그 구성 파일을 쉽게 설치하고 관리할 수 있습니다.
먼저 노드에 실행되는 변수와 모듈의 그룹화인 기본 manifest를 생성해야 합니다. NGINX의 간단한 설치를 위해 가장 기본적인 manifest 파일인 /etc/puppet/manifests/nginx.pp에 다음 내용을 넣습니다.
# /etc/puppet/manifests/nginx.pp
class{"nginx": }
이제 NGINX를 설치하기 위해 다음 Puppet apply 명령을 실행하세요.
$ sudo puppet apply /etc/puppet/manifests/nginx.pp
Warning: Could not retrieve fact fqdn Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults Notice: Compiled catalog for puppet-test in environment production in 0.30 seconds Notice: /Stage[main]/Apt/Apt::Setting[conf-update-stamp]/File[/etc/apt/apt.conf.d/15update-stamp]/content: content changed '{md5}b9de0ac9e2c9854b1bb213e362dc4e41' to '{md5}0962d70c4ec78bbfa6f3544ae0c41974' Notice: /Stage[main]/Apt/File[preferences]/ensure: created Notice: /Stage[main]/Nginx::Package::Debian/Apt::Source[nginx]/Apt::Setting[list-nginx]/File[/etc/apt/sources.list.d/nginx.list]/ensure: created Notice: /Stage[main]/Apt::Update/Exec[apt_update]: Triggered 'refresh' from 1 events Notice: /Stage[main]/Nginx::Package::Debian/Package[nginx]/ensure: ensure changed 'purged' to 'present' Notice: /Stage[main]/Nginx::Config/File[/var/nginx]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/var/nginx/client_body_temp]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/var/nginx/proxy_temp]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/nginx.conf]/content: content changed '{md5}f7984934bd6cab883e1f33d5129834bb' to '{md5}2967baa174db82fcedda4f95f605a2d8' Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.stream.d]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.mail.d]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/sites-enabled]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/sites-available]/ensure: created Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.d/example_ssl.conf]/ensure: removed Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.d/default.conf]/ensure: removed Notice: /Stage[main]/Nginx::Service/Service[nginx]: Triggered 'refresh' from 1 events Notice: Finished catalog run in 14.98 seconds
출력에서 볼 수 있듯이, 이 모듈은 공식 NGINX 오픈소스 저장소를 추가하고, NGINX 패키지를 설치하며, 기본 구성 파일 세트를 생성합니다. 모듈이 작동하는 방식에 대한 더 자세한 정보는 해당 모듈의 GitHub 페이지를 참조하세요.
3. NGINX Plus용 기본 Puppet 모듈 수정
이제 기본 Puppet 모듈을 수정하여 NGINX Plus를 설치하고 구성할 수 있도록 할 것입니다.
기본 모듈을 수정하기 전에 변경 사항을 유지하는 방법을 결정해야 합니다.
기본적으로 Puppet Command line 도구는 새로 설치된 모듈의 모든 파일을 읽기 전용 권한으로 생성하여 실수로 변경되는 것을 방지합니다.
권한을 변경하고 파일을 수동으로 편집할 수도 있지만, 해당 예시는 로컬 머신에서 GitHub 저장소를 복제하고 복제본에서 필요한 모든 변경 사항을 수행한 후 tar 파일로 서버에 전송하는 것을 선호합니다. 그런 다음 CLI 명령을 사용하여 tar 파일에서 모듈을 설치할 수 있습니다.
또 다른 방법은 GitHub에서 내부 복사본으로 저장소를 복제하고 GitHub을 통해 변경 사항을 수행한 다음 Puppet을 내 저장소를 가리키도록 설정하여 모듈을 설치하는 것입니다.
NGINX Plus를 설치하기 위해 Puppet NGINX 모듈을 사용하려면 다음 단계를 수행하세요.
1. 접근할 수 있도록 NGINX Plus 저장소에 액세스하는 인증서와 키를 추가하는 저장소 구성 파일을 수정합니다. Debian/Ubuntu 및 RHEL/CentOS/Oracle Linux용으로 별도의 파일이 있습니다.
추가 콘텐츠를 nginx‑mainline과 passenger 섹션 사이에 넣는 것을 권장합니다.
마지막 file
블록은 content
지시문에 파일 내용을 단일 인수로 전달하여 인증서 및 키 파일인 nginx‑repo.crt 및 nginx‑repo.key를 생성합니다. 자체 인증서 및 키 파일의 내용으로 placeholder 인수를 대체하세요. 전체 리포지토리 구성 파일은 여기에서 찾을 수 있습니다.
- Debian/Ubuntu의 경우, 다음 내용을 /etc/puppet/modules/nginx/manifests/package/debian.pp에 추가하세요.
'nginx-plus': {
apt::source { 'nginx':
location => "https://plus-pkgs.nginx.com/${distro}",
repos => 'nginx-plus',
key => '573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62',
}
exec { 'download 90nginx file':
command => "/usr/bin/wget -q -O /etc/apt/apt.conf.d/90nginx https://cs.nginx.com/static/files/90nginx",
creates => "/etc/apt/apt.conf.d/90nginx"
}
file { '/etc/ssl/nginx':
ensure => directory,
mode => "0755",
owner => "root",
group => "root",
}
file { '/etc/ssl/nginx/nginx-repo.crt':
ensure => present,
mode => "0644",
owner => "root",
group => "root",
content => "Contents of your nginx‑repo.crt file here as one line",
}
file { '/etc/ssl/nginx/nginx-repo.key':
ensure => present,
mode => "0644",
owner => "root",
group => "root",
content => "Contents of your nginx‑repo.key file here as one line",
}
}
- RHEL/CentOS/Oracle Linux의 경우 다음 콘텐츠를 /etc/puppet/modules/nginx/manifests/package/redhat.pp 에 추가합니다.
'nginx-plus': {
yumrepo { 'nginx-release':
baseurl => "https://plus-pkgs.nginx.com/centos/${::operatingsystemmajrelease}/$basearch/",
descr => 'nginx-plus repo',
enabled => '1',
gpgcheck => '0',
priority => '1',
sslclientcert => '/etc/ssl/nginx/nginx-repo.crt',
sslclientkey => '/etc/ssl/nginx/nginx-repo.key',
before => Package['nginx'],
}
file { '/etc/ssl/nginx':
ensure => directory,
mode => "0755",
owner => "root",
group => "root",
}
file { '/etc/ssl/nginx/nginx-repo.crt':
ensure => present,
mode => "0644",
owner => "root",
group => "root",
content => "Contents of your nginx‑repo.crt file here as one line",
}
file { '/etc/ssl/nginx/nginx-repo.key':
ensure => present,
mode => "0644",
owner => "root",
group => "root",
content => "Contents of your nginx‑repo.key file here as one line",
}
}
2. 수정된 모듈을 Puppet에 가져옵니다. 이전에 언급한 대로 몇 가지 옵션이 있지만, 이 포스트에서는 tarball을 통해 설치합니다. 먼저 tar 파일을 생성하고 테스트 서버인 puppet‑test로 전송해야 합니다.
$ tar -czf jfryman-nginx-0.3.0.tar.gz puppet-nginx/
$ scp jfryman-nginx-0.3.0.tar.gz puppet-test:/tmp/
3. 테스트 서버에서 다음 명령을 실행하여 tar 파일을 설치합니다.
puppet-test $ sudo puppet module install /tmp/jfryman-nginx-0.3.0.tar.gz --force
Notice: Preparing to install into /etc/puppet/modules ...
Notice: Downloading from https://forge.puppetlabs.com ...
Notice: Installing -- do not interrupt ...
/etc/puppet/modules
└─┬ jfryman-nginx (v0.3.0)
├── puppetlabs-apt (v2.2.2)
├── puppetlabs-concat (v2.2.0)
└── puppetlabs-stdlib (v4.12.0)
주의: puppet module install 명령에 --force
플래그를 추가하고 있습니다. 이는 기본 모듈이 이미 설치되어 있더라도 모듈을 강제로 설치하기 위한 것입니다. 그렇지 않으면, 기본 모듈이 설치되어 있을 경우 puppet module install
명령은 다음과 같은 오류를 생성합니다.
Notice: Preparing to install into /etc/puppet/modules ...
Error: Could not install module 'jfryman-nginx' (v0.3.0)
Module 'jfryman-nginx' (v0.3.0) is already installed
Use `puppet module upgrade` to install a different version
Use `puppet module install --force` to re-install only this module
4. Puppet manifest 생성 및 NGINX Plus 설치
NGINX 오픈소스를 Puppet으로 설치하는 과정에서 매우 기본적인 manifest를 생성했습니다. NGINX Plus의 경우, 설정할 apt-repo와 설치할 패키지를 정의하는 두 가지 중요한 변수를 추가합니다. 해당 파일은 테스트 서버의 /etc/puppet/manifests/nginx-plus.pp에 저장됩니다.
# /etc/puppet/manifests/nginx-plus.pp
class{"nginx":
package_source => 'nginx-plus',
package_name => 'nginx-plus',
}
NGINX Plus를 설치하기 위해서는 다음과 같이 테스트 서버에서 puppet apply를 실행하기만 하면 됩니다.
puppet-test $ sudo puppet apply /etc/puppet/manifests/nginx_plus.pp
Warning: Could not retrieve fact fqdn
Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults
Notice: Compiled catalog for puppet-test in environment production in 0.31 seconds
Notice: /Stage[main]/Nginx::Package::Debian/File[/etc/ssl/nginx]/ensure: created
Notice: /Stage[main]/Nginx::Package::Debian/File[/etc/ssl/nginx/nginx-repo.crt]/ensure: created
Notice: /Stage[main]/Nginx::Package::Debian/File[/etc/ssl/nginx/nginx-repo.key]/ensure: created
Notice: /Stage[main]/Apt/Apt::Setting[conf-update-stamp]/File[/etc/apt/apt.conf.d/15update-stamp]/content: content changed '{md5}b9de0ac9e2c9854b1bb213e362dc4e41' to '{md5}0962d70c4ec78bbfa6f3544ae0c41974'
Notice: /Stage[main]/Nginx::Package::Debian/Exec[download 90nginx file]/returns: executed successfully
Notice: /Stage[main]/Apt/File[preferences]/ensure: created
Notice: /Stage[main]/Nginx::Package::Debian/Apt::Source[nginx]/Apt::Setting[list-nginx]/File[/etc/apt/sources.list.d/nginx.list]/ensure: created
Notice: /Stage[main]/Apt::Update/Exec[apt_update]: Triggered 'refresh' from 1 events
Notice: /Stage[main]/Nginx::Config/File[/var/nginx]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/var/nginx/client_body_temp]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/var/nginx/proxy_temp]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/nginx.conf]/content: content changed '{md5}945c4341b51292da0ffe0815b80ef3ea' to '{md5}2967baa174db82fcedda4f95f605a2d8'
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.stream.d]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.mail.d]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/sites-enabled]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/sites-available]/ensure: created
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.d/example_ssl.conf]/ensure: removed
Notice: /Stage[main]/Nginx::Config/File[/etc/nginx/conf.d/default.conf]/ensure: removed
Notice: /Stage[main]/Nginx::Service/Service[nginx]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 10.33 seconds
프로세스의 끝 부근에 example_ssl.conf와 default.conf라는 두 개의 기본 설정 파일이 제거되는 것을 주목하세요. 이로 인해 가상 서버가 구성되지 않으므로 브라우저에서 호스트 IP 주소에 액세스하거나 호스트에서 netstat
을 실행하면 포트 80에서 수신 대기 중인 것이 없는 것을 확인할 수 있습니다.
5. NGINX Plus 관리 기능을 위한 가상 서버 구성
NGINX Plus 구성에 가상 서버를 추가하려면 기본 manifest 파일을 수정합니다.
먼저 8080 포트에서 수신 대기하는 가상 서버를 구성하여 두 가지 NGINX Plus 관리 기능인 실시간 활동 모니터링과 동적 구성 API를 설정합니다. 기본 Puppet 모듈은 NGINX 오픈소스를 위한 것이며 NGINX Plus R13 이상에서는 이 두 가지 기능이 모두 NGINX Plus API에서 구현됩니다.
우리의 수정 사항은 변수 ($my_status_redirect
및 $my_status_config
)를 정의하고, 그런 다음 location_custom_cfg
및 vhost_cfg_prepend
와 같은 두 가지 내장된 Puppet 지시문을 사용하여 사용자 정의 코드를 구성에 적용하는 것으로 이루어져 있습니다. 이와 같은 내장된 Puppet 지시문을 사용하여 대부분의 NGINX Plus 기능을 활성화할 수 있습니다.
$my_status_redirect = {"return" => "301 /status.html"}
nginx::resource::vhost{'status_page':
listen_port => '8080',
location_custom_cfg => $my_status_redirect,
}
nginx::resource::location{'/status.html':
www_root => '/usr/share/nginx/html',
vhost => 'status_page',
}
$my_status_config = {
'status' => '',
'status_format' => 'json',
}
nginx::resource::location{'/status':
vhost => 'status_page',
location_custom_cfg => $my_status_config,
}
$my_upstream_conf = { 'upstream_conf' => '',}
nginx::resource::location{'/upstream_conf':
vhost => 'status_page',
location_custom_cfg => $my_upstream_conf,
}
이제 새로운 manifest로 puppet apply를 다시 실행합니다.
$ sudo puppet apply /etc/puppet/manifests/nginx_plus.pp
Warning: Could not retrieve fact fqdn Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults
Notice: Compiled catalog for puppet-test in environment production in 0.46 seconds
Notice:/Stage[main]/Main/Nginx::Resource::Vhost[status_page]/Concat[/etc/nginx/sites‑available/status_page.conf]/File[/etc/nginx/sites-available/status_page.conf]/ensure: defined content as '{md5}a7c1127d79ea9eb6c9645b779f0e35b8'
Notice: /Stage[main]/Main/Nginx::Resource::Vhost[status_page]/File[status_page.conf symlink]/ensure: created
Notice: /Stage[main]/Nginx::Service/Service[nginx]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.49 seconds
출력에서 확인할 수 있듯이, 새로운 구성 파일이 생성되고 NGINX Plus 서비스가 다시 로드(reload) 되었습니다. 이제 /etc/nginx/sites-enabled/status_page.conf 파일은 다음과 같이 보입니다.
# /etc/nginx/sites-enabled/status_page.conf
# MANAGED BY PUPPET
server {
listen *:8080;
server_name status_page;
index index.html index.htm index.php;
access_log /var/log/nginx/status_page.access.log combined;
error_log /var/log/nginx/status_page.error.log;
location / {
return 301 /status.html;
}
location /status {
status; # DEPRECATED
status_format json; # DEPRECATED
}
location /status.html {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
location /upstream_conf {
upstream_conf; # DEPRECATED
}
}
이제 브라우저를 통해 http://<서버 IP 주소>:8080으로 접속하면, http://<서버 IP 주소>:8080/status.html로 Redirection되어 NGINX Plus 실시간 활동 모니터링 대시보드 페이지를 볼 수 있습니다. 현재 이 페이지에는 제한된 정보만 표시되지만, 다음 섹션에서 NGINX Plus 구성을 구축하면 더 많은 정보가 표시될 것입니다.
6. ex – 기본 프록시 구성 만들기
NGINX Plus의 매우 일반적인 사용 사례 중 하나는 리버스 프록시로 사용하는 것입니다.
1. NGINX Plus가 프록시할 백엔드 서버를 생성하세요. 이를 위한 쉬운 방법은 Docker Hub에서 제공하는 NGINX Hello 이미지를 활용하는 것입니다. 이는 단순히 Docker 컨테이너의 호스트, IP 주소 및 포트를 표시하는 기본 NGINX 오픈소스를 실행하는 Docker 이미지입니다.
도커를 설치합니다.
$ sudo curl -sSL https://get.docker.com/ | sh
NGINX Hello 이미지를 다운로드하고 시작합니다.
$ sudo docker run -P -d nginxdemos/hello
2. NGINX Hello 이미지를 실행하는 Docker 컨테이너를 몇 개 더 가동하여 NGINX Plus에 로드 밸런싱을 제공합니다.
$ sudo docker run -P -d nginxdemos/hello
$ sudo docker run -P -d nginxdemos/hello
3. docker ps 명령을 실행하고 각 인스턴스의 포트 번호를 기록하여 NGINX Plus 구성에 추가할 수 있도록 해주세요. 여기에는 32773, 32771 및 32769가 있습니다 (이 샘플 출력에서 포트 번호를 쉽게 찾을 수 있도록 네 번째와 다섯 번째 필드 사이에 줄을 나누어 마지막 세 개의 필드를 별도의 줄로 이동했습니다).
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED ...
7be41c1165b1 nginxdemos/hello "nginx -g 'daemon off" 2 seconds ago ...
187df1f85f1f nginxdemos/hello "nginx -g 'daemon off" 9 seconds ago ...
90129216ffa2 nginxdemos/hello "nginx -g 'daemon off" 27 seconds ago ...
... STATUS PORTS NAMES
... Up 2 seconds 0.0.0.0:32773->80/tcp, 0.0.0.0:32772->443/tcp insane_austin
... Up 8 seconds 0.0.0.0:32771->80/tcp, 0.0.0.0:32770->443/tcp lonely_murdock
... Up 27 seconds 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp determined_babbage
4. NGINX Plus를 리버스 프록시로 구성하기 위해 /etc/puppet/manifests/nginx_plus.pp manifest 파일에 다음을 추가해주세요. (members 블록에는 컨테이너의 IP 주소와 포트를 대체해주세요.)
# addition to /etc/puppet/manifests/nginx_plus.pp
# Docker hello config
$my_zone = {"zone" => "docker-test 64k"}
nginx::resource::upstream { 'docker-test':
members => [
'127.0.0.1:32773',
'127.0.0.1:32771',
'127.0.0.1:32769',
],
upstream_cfg_prepend => $my_zone,
}
$my_docker_zone = {"status_zone" => "docker-test"}
nginx::resource::vhost{'docker-test.local':
listen_port => '80',
vhost_cfg_prepend => $my_docker_zone,
proxy => 'http://docker-test',
}
NGINX Plus 관리 기능을 위한 가상 서버를 구성하는 것과 마찬가지로, 이번에는 upstream_cfg_prepend 및 vhost_cfg_prepend 내장 Puppet 지시문과 변수를 사용하여 가상 서버에 status_zone 지시문과 upstream 그룹에 zone 지시문을 정의합니다. status_zone 지시문은 가상 서버가 라이브 활동 모니터링 대시보드의 서버 영역 탭에 표시되기 위해 필요하며, upstream 그룹의 zone 지시문은 Upstream 탭에서 사용되는 이름을 설정하는 것뿐만 아니라 NGINX 워커 프로세스가 해당 upstream 그룹에 대해 사용하는 공유 메모리 풀을 정의합니다.
5. 설정을 로드하기 위해 다시 puppet apply를 실행하세요.
$ sudo puppet apply /etc/puppet/manifests/nginx_plus.pp
Warning: Could not retrieve fact fqdn
Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults
Warning: You cannot collect exported resources without storeconfigs being set; the collection will be ignored on line 102 in file /etc/puppet/modules/nginx/manifests/resource/upstream.pp
Notice: Compiled catalog for puppet-test in environment production in 0.74 seconds
Notice: /Stage[main]/Main/Nginx::Resource::Vhost[docker-test.local]/Concat[/etc/nginx/sites-available/docker-test.local.conf]/File[/etc/nginx/sites-available/docker-test.local.conf]/ensure: defined content as '{md5}8757498b3e6d2f237e1e5a4ba8e121b1'
Notice: /Stage[main]/Main/Nginx::Resource::Vhost[docker-test.local]/Concat[/etc/nginx/sites-available/docker-test.local.conf]/File[/etc/nginx/sites-available/docker-test.local.conf]/ensure: defined content as '{md5}51047b07b58989722e62fb1b14db26ad'
Notice: /Stage[main]/Main/Nginx::Resource::Vhost[docker-test.local]/File[docker-test.local.conf symlink]/ensure: created
Notice: /Stage[main]/Nginx::Service/Service[nginx]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.62 seconds
다음은 puppet apply 명령어로 생성되는 NGINX 설정 파일인 /etc/nginx/sites-enabled/docker-test.local.conf입니다.
# /etc/nginx/sites-enabled/docker-test.local.conf
# MANAGED BY PUPPET
server {
listen *:80;
server_name docker-test.local;
status_zone docker-test;
index index.html index.htm index.php;
access_log /var/log/nginx/docker-test.local.access.log combined;
error_log /var/log/nginx/docker-test.local.error.log;
location / {
proxy_pass http://docker-test;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
이 명령은 또한 /etc/nginx/conf.d/docker-test-upstream.conf를 생성하여 upstream 그룹을 정의합니다.
# /etc/nginx/conf.d/docker-test-upstream.conf
# MANAGED BY PUPPET
upstream docker-test {
zone docker-test 64k;
server 127.0.0.1:32773 fail_timeout=10s;
server 127.0.0.1:32771 fail_timeout=10s;
server 127.0.0.1:32769 fail_timeout=10s;
}
6-1. 프록시 결과 확인
이제 80번 포트의 서버 IP 주소를 입력하면, NGINX Hello 이미지에 의해 생성된 페이지를 볼 수 있습니다.
이 페이지에는 Docker 컨테이너의 호스트명과 IP 주소가 표시됩니다. 페이지를 반복해서 새로고침하면, “My hostname is“와 “My address is” 필드의 값이 변경되어 세 개의 Docker 컨테이너 중 어느 것이 요청을 처리하는지 나타납니다.

NGINX Plus의 실시간 활동 모니터링 대시보드는 이제 하나의 Server zone과 하나의 Upstream 그룹이 정의되었음을 확인합니다.
![Screenshot of NGINX Plus live activity monitoring dashboard, confirming that the Puppet configuration of three Docker containers into an upstream group worked correctly [how to monitor NGINX]](https://i0.wp.com/www.nginx.com/wp-content/uploads/2016/08/puppet-nginx-plus-dashboard.png?w=640&ssl=1)
7. 요약
우리는 NGINX의 기본 Puppet 모듈을 살펴보기만 했을 뿐만 아니라, Puppet 전체에 대해서도 막 시작한 상태입니다. 그러나 이 포스트가 NGINX 및 NGINX Plus 인프라를 유지 관리하기 위해 Puppet을 활용하는 좋은 시작점이 되기를 바랍니다. 환경의 모든 측면을 관리하는 데 도움이 되는 많은 모듈들이 있습니다.
NGINX Plus를 Puppet과 함께 직접 사용해보세요. 오늘 무료 30일 체험을 시작하거나 사용 사례에 대해 논의하기 위해 NGINX STORE에 연락하세요.
아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.
댓글을 달려면 로그인해야 합니다.