ะัะธะฒะตั!
์ ์ด๋ฆ์ Sergey์ด๊ณ Tinkoff.ru ํ๋ซํผ์ API ํ์์ ์ธํ๋ผ ์์ง๋์ด๋ก ์ผํ๊ณ ์์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ์ฐ๋ฆฌ ํ์ด ๋ฐธ๋ฐ์๋ฅผ ์ค๋นํ ๋ ์ง๋ฉดํ๋ ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
Nginx๋ ๋ค๊ธฐ๋ฅ์ด๋ฉฐ ํ๋ฐํ ๊ฐ๋ฐ๋๊ณ ์๋ ํ๋ก์ ์๋ฒ์
๋๋ค. ๋ง์ ์์ ๋ชจ๋์ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ,
์ฐ๋ฆฌ๋ ํน์ Linux ๋ฐฐํฌํ์์ ์คํ๋๋ ํ์ ๋ชจ๋ ์ธํธ๋ฅผ ๊ฐ์ถ ์๋ก์ด ๋ฒ์ ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๋ deb ๋ฐ rpm ๊ธฐ๋ฐ ์์คํ ์ ๋๋ค. ์ด ๋ฌธ์์์๋ ์ปจํ ์ด๋ ์ต์ ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐธ๋ฐ์์ ๊ธฐ๋ฅ์ ์ ์ํ๊ฒ ๋ณ๊ฒฝํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ฆ์ ์ง๋ฌธ์ด ์๊น๋๋ค. ๊ฐ๋ฅํ ํ ์ ์ ์์์ ์๋นํ๋ฉด์ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์ ํํ ์์ ์ ๋ ฅ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ ์ ์๊ณ ์ถ๋ ฅ์์ โโ์ํ๋ OS์ ๋ํ deb/rpm ํจํค์ง ํ์์ ์ํฐํฉํธ๋ฅผ ์์ ํ ์ ์๋๋ก ํ๋ก์ธ์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ข์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๊ณต์ํ๋ ์ ์์ต๋๋ค.
- ํญ์ ์ต์ ๋ฒ์ ์ Nginx๊ฐ ํฌํจ๋ ํจํค์ง๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค.
- ํ์ ๋ชจ๋์ด ํฌํจ๋ ํจํค์ง๊ฐ ์์ต๋๋ค.
- ํจํค์ง๋ฅผ ์๋์ผ๋ก ์ปดํ์ผํ๊ณ ๋น๋ํ๋ ๊ฒ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ๋งค์ฐ ์ง๋ฃจํฉ๋๋ค.
- ์ด Nginx ์ธ์คํด์ค๊ฐ ์ด๋ป๊ฒ ์กฐ๋ฆฝ๋๋์ง์ ๋ํ ์ค๋ช ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์์ ์ฌ์์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ Nginx ํจํค์ง๋ฅผ ์กฐํฉํ๋ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
๋ฐฉ๋ํ Github์์ ์ ํฉํ ์ต์
์ ์ฐพ์ง ๋ชปํด ์ฐ๋ฆฌ๋ ์์ฒด ๋๊ตฌ๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ช ์ธ์
์ฐ๋ฆฌ ๋๊ตฌ์์๋ ์ฝ๋ ํ์์ผ๋ก ์ฌ์์ ๋ํ ์ค๋ช ์ ์์ฑํ์ฌ Git ์ ์ฅ์์ ๋ฃ์ ์ ์๊ธฐ๋ฅผ ์ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์์ ์ ์ต์ํ ํ์์ธ yaml์ ์ ํํ์ต๋๋ค. ์ฌ์ ์:
nginx_version: 1.14.1
output_package: deb
modules:
- module:
name: nginx-auth-ldap
git_url: https://github.com/kvspb/nginx-auth-ldap.git
git_branch: master
dependencies:
- libldap2-dev
- module:
name: ngx_http_substitutions_filter_module
git_url: https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
- module:
name: headers-more-nginx-module
web_url: https://github.com/openresty/headers-more-nginx-module/archive/v0.261.zip
- module:
name: nginx-module-vts
git_url: https://github.com/vozlt/nginx-module-vts.git
git_tag: v0.1.18
- module:
name: ngx_devel_kit
git_url: https://github.com/simplresty/ngx_devel_kit.git
git_tag: v0.3.0
- module:
name: ngx_cache_purge
git_url: https://github.com/FRiCKLE/ngx_cache_purge.git
- module:
name: ngx_http_dyups_module
git_url: https://github.com/yzprofile/ngx_http_dyups_module.git
- module:
name: nginx-brotli
git_url: https://github.com/eustas/ngx_brotli.git
git_tag: v0.1.2
- module:
name: nginx_upstream_check_module
git_url: https://github.com/yaoweibin/nginx_upstream_check_module.git
- module:
name: njs
git_url: https://github.com/nginx/njs.git
git_tag: 0.2.5
config_folder_path: nginx
์ฌ๊ธฐ์๋ ํ์ ๋ชจ๋ ์ธํธ๊ฐ ํฌํจ๋ Nginx ๋ฒ์ 1.14.2์ deb ํจํค์ง๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ ๊ฒ์ ๋ํ๋ ๋๋ค. ๋ชจ๋์ด ์๋ ์น์ ์ ์ ํ ์ฌํญ์ ๋๋ค. ๊ฐ๊ฐ์ ๋ํด ๋ค์์ ์ค์ ํ ์ ์์ต๋๋ค.
- ์ด๋ฆ์ ๋๋ค.
- ๋ฐ์ ์ ์๋ ์ฃผ์:
- Git ์ ์ฅ์. ๋ถ๊ธฐ๋ ํ๊ทธ๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.
- ์์นด์ด๋ธ ์น ๋งํฌ.
- ์์นด์ด๋ธ์ ๋ํ ๋ก์ปฌ ๋งํฌ.
์ผ๋ถ ๋ชจ๋์๋ ์ถ๊ฐ ์ข ์์ฑ์ ์ค์นํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด nginx-auth-ldap์๋ libldap2-dev๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค. ๋ชจ๋์ ์ค๋ช ํ ๋ ํ์ํ ์ข ์์ฑ์ ์ง์ ํ ์๋ ์์ต๋๋ค.
ํ๊ฒฝ
์ฐ๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ, ํจํค์ง ์ด์ ๋ธ๋ฆฌ ๋ฐ ๊ธฐํ ๋ณด์กฐ ์ํํธ์จ์ด์ฉ ์ ํธ๋ฆฌํฐ๊ฐ ์ค์น๋ ํ๊ฒฝ์ ๋น ๋ฅด๊ฒ ์ป์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์๋ ํ์ํ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ Docker ์ปจํ ์ด๋๊ฐ ์ด์์ ์ ๋๋ค(์ ์ฅ์์๋ ์ด๋ฏธ ubuntu ๋ฐ centos์ฉ Docker ํ์ผ์ ๋ช ๊ฐ์ง ์๊ฐ ์์ต๋๋ค).
์ฌ์์ด ์์ฑ๋๊ณ ํ๊ฒฝ์ด ์ค๋น๋ ํ ์ด์ ์ ์ข ์์ฑ์ ์ค์นํ ๋น๋๋ฅผ ์์ํฉ๋๋ค.
pip3 install -r requirements.txt
./main.py build -f [ะบะพะฝัะธะณ_ัะฐะนะป].yaml -r [ะฝะพะผะตั_ัะตะฒะธะทะธะธ]
์ฌ๊ธฐ์ ๊ฐ์ ๋ฒํธ๋ ์ ํ ์ฌํญ์ด๋ฉฐ ์ด์
๋ธ๋ฆฌ ๋ฒ์ ๊ด๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ํจํค์ง์ ๋ฉํ ์ ๋ณด์ ๊ธฐ๋ก๋๋ฏ๋ก ์๋ฒ์์ ์ฝ๊ฒ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๋ก๊ทธ๋ฅผ ํตํด ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. ์ฃผ์ ์ฌํญ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
builder - INFO - Parse yaml file: example.config.yaml
builder - INFO - Download scripts for build deb package
builder - INFO - Downloading nginx src...
builder - INFO - --> http://nginx.org/download/nginx-1.14.1.tar.gz
builder - INFO - Downloading 3d-party modules...
builder - INFO - Module nginx-auth-ldap will download by branch
builder - INFO - -- Done: nginx-auth-ldap
builder - INFO - -- Done: ngx_http_substitutions_filter_module
builder - INFO - Module headers-more-nginx-module will downloading
builder - INFO - Module nginx-module-vts will download by tag
builder - INFO - -- Done: nginx-module-vts
builder - INFO - Module ngx_devel_kit will download by tag
builder - INFO - -- Done: ngx_devel_kit
builder - INFO - -- Done: ngx_cache_purge
builder - INFO - -- Done: ngx_http_dyups_module
builder - INFO - Downloading dependencies
builder - INFO - Building .deb package
builder - INFO - Running 'dh_make'...
builder - INFO - Running 'dpkg-buildpackage'...
dpkg-deb: building package 'nginx' in '../nginx_1.14.1-1_amd64.deb'.
๋ฐ๋ผ์ ๋ช ๊ฐ์ง ๋ช ๋ น๋ง์ผ๋ก ํ๊ฒฝ๊ณผ ํ์ํ Nginx ์ด์ ๋ธ๋ฆฌ๋ฅผ ์์ฑํ๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋๋ ํฐ๋ฆฌ์ ํจํค์ง๊ฐ ๋ํ๋ฉ๋๋ค.
์๋ฒ ๋ฉ
๋ํ ๋๊ตฌ๋ฅผ CI/CD ํ๋ก์ธ์ค์ ํตํฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋๋ ์กด์ฌํ๋ ๋ง์ CI ์์คํ
์ค ํ๋๊ฐ ์ด์ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก Git ์ ์ฅ์์ ์ฌ์์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ํฐํฉํธ ๋น๋๊ฐ ์๋์ผ๋ก ์์๋ฉ๋๋ค. ๊ฐ์ ๋ฒํธ๋ ๋น๋ ์คํ ์นด์ดํฐ์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
์๊ฐ์ด ์ข ๋ ์์ผ๋ฉด ๋ก์ปฌ ํจํค์ง ์ ์ฅ์, Nexus, Artifactory ๋ฑ์ผ๋ก ์ ์ก๋๋๋ก ์ํฐํฉํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ถ๊ฐ์ ์ธ ์ด์ ์ yaml ๊ตฌ์ฑ ํ์ผ์ Ansible ๋๋ ๋ค๋ฅธ ์๋ ๊ตฌ์ฑ ์์คํ ์ ์ฐ๊ฒฐํ ์ ์๊ณ ๊ฑฐ๊ธฐ์์ ๋ฐฐํฌํ๋ ค๋ ๋ฒ์ ๋ฒํธ์ ํจํค์ง ์ ํ์ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์ ๋จ๊ณ
ํ๋ก์ ํธ๊ฐ ์์ง ์๋ฃ๋์ง ์์์ต๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ณ ์๋ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ ํ์ฅํ๋ ๋์์ ๊ฐ๋ฅํ ํ ๋จ์ํ๊ฒ ์ ์งํฉ๋๋ค. ๋ ๊ฐ๋ง ํ์ํ๊ณ ๋๋จธ์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํฉํ๋ค๋ฉด ์ฒ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ปดํ์ผ ํ๋๊ทธ(์ด์ ๋ด๋ถ ๊ตฌ์ฑ ํ์ผ src/config.py์์ ๋ณ๊ฒฝํ ์ ์์), ์ค์น ๊ฒฝ๋ก ๋ฐ ์์ ์ฌ์ฉ์๊ฐ ํฌํจ๋ฉ๋๋ค.
- ๋ค์ํ ์ํฐํฉํธ ์ ์ฅ์์ ํจํค์ง๋ฅผ ์๋์ผ๋ก ๋ณด๋ด๋ ์ต์ ์ ์ถ๊ฐํ๊ณ ์์ต๋๋ค.
- ๋ชจ๋์ ๋ก๋ํ ๋ ์ฌ์ฉ์ ์ ์ ๋ช
๋ น์ ์คํํฉ๋๋ค(์:
github.com/nginx-modules/nginx_upstream_check_module ๋จผ์ ํน์ ๋ฒ์ ์ ํจ์น๋ฅผ ์ ์ฉํด์ผ ํฉ๋๋ค) - ํ
์คํธ ์ถ๊ฐ:
- ํจํค์ง๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์์ต๋๋ค.
- Nginx์๋ ํ์ ๋ฒ์ ์ด ์์ผ๋ฉฐ ํ์ ํ๋๊ทธ ๋ฐ ๋ชจ๋๋ก ๋น๋๋์์ต๋๋ค.
- ํ์ํ ๊ฒฝ๋ก, ๊ณ์ ๋ฑ์ด ์์ฑ๋ฉ๋๋ค.
ํ์ง๋ง ์ด์ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ์ ์ฌํญ์ ์ ์ํ ์๋ ์์ต๋๋ค.
์ถ์ฒ : habr.com