ืื ื• ืžืจื›ื™ื‘ื™ื ืืช ื”-Nginx ืฉืœื ื• ืขื ื›ืžื” ืคืงื•ื“ื•ืช

ื”ื™ื™!
ืฉืžื™ ืกืจื’ื™ื™, ืื ื™ ืขื•ื‘ื“ ื›ืžื”ื ื“ืก ืชืฉืชื™ืช ื‘ืฆื•ื•ืช ื”-API ืฉืœ ืคืœื˜ืคื•ืจืžืช tinkoff.ru.

ื‘ืžืืžืจ ื–ื” ืื“ื‘ืจ ืขืœ ื”ื‘ืขื™ื•ืช ืฉืขืžืŸ ื”ืชืžื•ื“ื“ ื”ืฆื•ื•ืช ืฉืœื ื• ื‘ืขืช ื”ื›ื ืช ืžืื–ื ื™ื ืขืœ ืกืžืš nginx ืœืคืจื•ื™ืงื˜ื™ื ืฉื•ื ื™ื. ืืกืคืจ ืœื›ื ื’ื ืขืœ ื”ื›ืœื™ ืฉืืคืฉืจ ืœื™ ืœื”ืชื’ื‘ืจ ืขืœ ืจื•ื‘ื.

Nginx ื”ื•ื ืฉืจืช ืคืจื•ืงืกื™ ืจื‘ ืชื›ืœื™ืชื™ ื•ืžืคืชื— ื‘ืื•ืคืŸ ืคืขื™ืœ. ื”ื•ื ื›ื•ืœืœ ืžืกืคืจ ืจื‘ ืฉืœ ืžื•ื“ื•ืœื™ื, ื–ื• ืื™ื ื” ืจืฉื™ืžื” ืžืœืื”. ื›ืœ ืคืจื•ื™ืงื˜ ืžื˜ื™ืœ ื“ืจื™ืฉื•ืช ืžืกื•ื™ืžื•ืช ืขืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืžืื–ืŸ ื•ื’ืจืกืช Nginx (ืœื“ื•ื’ืžื”, ื ื•ื›ื—ื•ืช ืฉืœ http/2 ื•-grpc proxying), ื•ื”ืจื›ื‘ ื”ืžื•ื“ื•ืœื™ื ืฉืœื•.

ืื ื• ืจื•ืฆื™ื ืœืจืื•ืช ื’ืจืกื” ื—ื“ืฉื” ืขื ืกื˜ ื”ืžื•ื“ื•ืœื™ื ื”ื ื“ืจืฉ, ื”ืคื•ืขืœืช ืชื—ืช ื”ืคืฆืช ืœื™ื ื•ืงืก ืกืคืฆื™ืคื™ืช. ื‘ืžืงืจื” ืฉืœื ื•, ืžื“ื•ื‘ืจ ื‘ืžืขืจื›ื•ืช ืžื‘ื•ืกืกื•ืช deb ื•-rpm. ื”ืืคืฉืจื•ืช ืขื ืžื›ื•ืœื•ืช ืื™ื ื” ื ื—ืฉื‘ืช ื‘ืžืืžืจ ื–ื”.

ืื ื—ื ื• ืจื•ืฆื™ื ืœืฉื ื•ืช ื‘ืžื”ื™ืจื•ืช ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืื™ื–ื•ื ื™ื ืฉืœื ื•. ื•ื›ืืŸ ืžื™ื“ ืขื•ืœื” ื”ืฉืืœื”: ืื™ืš ืœื”ืฉื™ื’ ื–ืืช ืชื•ืš ื”ื•ืฆืืช ื›ืžื” ืฉืคื—ื•ืช ืžืฉืื‘ื™ื? ืขื“ื™ืฃ ืืคื™ืœื• ืœื”ื’ื“ื™ืจ ืืช ื”ืชื”ืœื™ืš ื›ืš ืฉื ื•ื›ืœ ืœืฆื™ื™ืŸ ืžืกืคืจ ืกื•ืคื™ ืฉืœ ืคืจืžื˜ืจื™ ืงืœื˜, ื•ื‘ื™ืฆื™ืื” ืœืงื‘ืœ ื—ืคืฅ ื‘ืฆื•ืจืช ื—ื‘ื™ืœืช deb/rpm ืขื‘ื•ืจ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ืจืฆื•ื™ื”.

ื›ืชื•ืฆืื” ืžื›ืš, ื ื™ืชืŸ ืœื’ื‘ืฉ ืžืกืคืจ ื‘ืขื™ื•ืช:

  • ืœื ืชืžื™ื“ ื™ืฉ ื—ื‘ื™ืœื•ืช ืขื ื”ื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืฉืœ Nginx.
  • ืื™ืŸ ื—ื‘ื™ืœื•ืช ืขื ื”ืžื•ื“ื•ืœื™ื ื”ื ื“ืจืฉื™ื.
  • ืงื•ืžืคื™ืœืฆื™ื” ื•ื‘ื ื™ื™ื” ื™ื“ื ื™ืช ืฉืœ ื—ื‘ื™ืœื” ื’ื•ื–ืœืช ื–ืžืŸ ื•ืžื™ื™ื’ืขืช ืžืžืฉ.
  • ืื™ืŸ ืชื™ืื•ืจ ื›ื™ืฆื“ ืžื•ืจื›ื‘ ืžื•ืคืข Nginx ื–ื” ืื• ืื—ืจ.

ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื•ืช ื”ืœืœื•, ืžืชืขื•ืจืจ ื”ืฆื•ืจืš ื‘ื›ืœื™ ืฉื™ืงื— ื›ืงืœื˜ ืžืคืจื˜ ื‘ืคื•ืจืžื˜ ืงืจื™ื ืœืื“ื ื•ืžืจื›ื™ื‘ ื—ื‘ื™ืœืช Nginx ืขื ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื“ืจื•ืฉื” ืขืœ ื‘ืกื™ืกื”.

ืœื ืžืฆืื ื• ืืคืฉืจื•ืช ืžืชืื™ืžื” ืขื‘ื•ืจื ื• ื‘ืžืจื—ื‘ ื”ืขืฆื•ื ืฉืœ Github, ื”ื—ืœื˜ื ื• ืœื™ืฆื•ืจ ื›ืœื™ ืžืฉืœื ื• - nginx-builder.

ืžืคืจื˜ื™ื

ื‘ื›ืœื™ ืฉืœื ื•, ืจืฆื™ื ื• ืœื™ืฆื•ืจ ืชื™ืื•ืจ ืฉืœ ื”ืžืคืจื˜ ื‘ืฆื•ืจื” ืฉืœ ืงื•ื“, ืฉืื•ืชื• ืืคืฉืจ ืœื”ื›ื ื™ืก ืœืžืื’ืจ 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

ื›ืืŸ ืื ื• ืžืฆื™ื™ื ื™ื ืฉืื ื• ืจื•ืฆื™ื ืœืจืื•ืช ื—ื‘ื™ืœืช deb ืขื ื’ืจืกื” 1.14.2 ืฉืœ Nginx ืขื ืกื˜ ื”ืžื•ื“ื•ืœื™ื ื”ื ื“ืจืฉ. ื”ืงื˜ืข ืขื ื”ืžื•ื“ื•ืœื™ื ื”ื•ื ืื•ืคืฆื™ื•ื ืœื™. ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžื”ื ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ:

  • ืฉื.
  • ื›ืชื•ื‘ืช ืื™ืคื” ืืชื” ื™ื›ื•ืœ ืœื”ืฉื™ื’ ืืช ื–ื”:
    • ืžืื’ืจ Git. ืืชื” ื™ื›ื•ืœ ื’ื ืœืฆื™ื™ืŸ ืกื ื™ืฃ ืื• ืชื’.
    • ืงื™ืฉื•ืจ ืื™ื ื˜ืจื ื˜ ืœืืจื›ื™ื•ืŸ.
    • ืงื™ืฉื•ืจ ืžืงื•ืžื™ ืœืืจื›ื™ื•ืŸ.

ืžื•ื“ื•ืœื™ื ืžืกื•ื™ืžื™ื ื“ื•ืจืฉื™ื ื”ืชืงื ื” ืฉืœ ืชืœื•ืช ื ื•ืกืคืช, ืœื“ื•ื’ืžื” nginx-auth-ldap ื“ื•ืจืฉ ื”ืชืงื ื” ืฉืœ libldap2-dev. ื ื™ืชืŸ ืœืฆื™ื™ืŸ ื’ื ืชืœื•ืช ื ื—ื•ืฆื•ืช ื‘ืขืช ืชื™ืื•ืจ ื”ืžื•ื“ื•ืœ.

ื”ืกื‘ื™ื‘ื”

ื‘ื›ืœื™ ืฉืœื ื• ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื‘ืžื”ื™ืจื•ืช ืกื‘ื™ื‘ื” ืขื ื›ืœื™ ืขื–ืจ ืžื•ืชืงื ื™ื ืขื‘ื•ืจ ืงื•ืžืคื™ืœืฆื™ื”, ื”ืจื›ื‘ืช ื—ื‘ื™ืœื•ืช ื•ืชื•ื›ื ื•ืช ืขื–ืจ ืื—ืจื•ืช. ืžื™ื›ืœ Docker ืขื ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ื”ื•ื ืื™ื“ื™ืืœื™ ื›ืืŸ (ื‘ืžืื’ืจ ื›ื‘ืจ ื™ืฉ ื›ืžื” ื“ื•ื’ืžืื•ืช ืฉืœ ืงื‘ืฆื™ Docker ืขื‘ื•ืจ ืื•ื‘ื•ื ื˜ื• ื•-centos).

ืœืื—ืจ ืขืจื™ื›ืช ื”ืžืคืจื˜ ื•ื”ื›ื ืช ื”ืกื‘ื™ื‘ื”, ืื ื• ืžืฉื™ืงื™ื ืืช ื”ื‘ื•ื ื” ืฉืœื ื•, ืœืื—ืจ ืฉื”ืชืงื™ื ื• ื‘ืขื‘ืจ ืืช ื”ืชืœื•ืช ืฉืœื•:

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 ื”ืจื‘ื•ืช ื”ืงื™ื™ืžื•ืช ื›ื™ื•ื ื™ื›ื•ืœื” ืœืขื–ื•ืจ ื‘ื›ืš, ืœืžืฉืœ ืขื™ืจ ืฆื•ื•ืช ืื• Gitlab CI.

ื›ืชื•ืฆืื” ืžื›ืš, ื‘ื›ืœ ืคืขื ืฉื”ืžืคืจื˜ ืžืฉืชื ื” ื‘ืžืื’ืจ Git, ื‘ื ื™ื™ืช ื”ื—ืคืฅ ืžื•ืคืขืœืช ืื•ื˜ื•ืžื˜ื™ืช. ืžืกืคืจ ื”ื’ืจืกื” ืžืงื•ืฉืจ ืœืžื•ื ื” ื”ืฉืงืช ื”ื‘ื ื™ื™ื”.
ืขื ืงืฆืช ื™ื•ืชืจ ื–ืžืŸ, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืืช ื”ื—ืคืฅ ืœื”ื™ืฉืœื— ืœืžืื’ืจ ื”ื—ื‘ื™ืœื•ืช ื”ืžืงื•ืžื™ ืฉืœืš, Nexus, Artifactory ื•ื›ืŸ ื”ืœืื”.

ื™ืชืจื•ืŸ ื ื•ืกืฃ ื”ื•ื ืฉื ื™ืชืŸ ืœื—ื‘ืจ ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ yaml ืœ-Ansible ืื• ืœืžืขืจื›ืช ืชืฆื•ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืื—ืจืช, ื•ืžืฉื ื ื•ื›ืœ ืœืงื—ืช ืืช ืžืกืคืจ ื”ื’ืจืกื” ื•ืกื•ื’ ื”ื—ื‘ื™ืœื” ืฉื ืจืฆื” ืœืคืจื•ืก.

ืžื” ื”ืœืื”

ื”ืคืจื•ื™ืงื˜ ืขื“ื™ื™ืŸ ืœื ื”ื•ืฉืœื. ื–ื” ืžื” ืฉืื ื—ื ื• ืขื•ื‘ื“ื™ื ืขืœื™ื• ืขื›ืฉื™ื•:

  • ืื ื• ืžืจื—ื™ื‘ื™ื ืืช ืืคืฉืจื•ืช ื”ืชืฆื•ืจื”, ืืš ื™ื—ื“ ืขื ื–ืืช ืฉื•ืžืจื™ื ืขืœ ื›ืš ืคืฉื•ื˜ ื›ื›ืœ ื”ืืคืฉืจ. ืืชื” ืœื ืจื•ืฆื” ืœื”ื’ื“ื™ืจ ืืœืฃ ืคืจืžื˜ืจื™ื ืื ืืชื” ืฆืจื™ืš ืจืง ืฉื ื™ื™ื, ื•ื”ืฉืืจ ืžืชืื™ื ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ื–ื” ื›ื•ืœืœ ื“ื’ืœื™ ืงื•ืžืคื™ืœืฆื™ื” (ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืื•ืชื ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื”ืคื ื™ืžื™ src/config.py), ื ืชื™ื‘ ื”ืชืงื ื” ื•ื”ืคืขืœื” ืฉืœ ืžืฉืชืžืฉ.
  • ืื ื• ืžื•ืกื™ืคื™ื ืืคืฉืจื•ื™ื•ืช ืœืฉืœื™ื—ืช ื—ื‘ื™ืœื” ืื•ื˜ื•ืžื˜ื™ืช ืœืžืื’ืจื™ ื—ืคืฆื™ื ืฉื•ื ื™ื.
  • ื‘ืฆืข ืคืงื•ื“ื” ืžื•ืชืืžืช ืื™ืฉื™ืช ื‘ืขืช ื˜ืขื™ื ืช ืžื•ื“ื•ืœ (ืœื“ื•ื’ืžื”, ืœืฉื™ืžื•ืฉ github.com/nginx-modules/nginx_upstream_check_module ืชื—ื™ืœื” ืขืœื™ืš ืœื”ื—ื™ืœ ืชื™ืงื•ืŸ ืฉืœ ื’ืจืกื” ืกืคืฆื™ืคื™ืช)
  • ื”ื•ืกืคืช ืžื‘ื—ื ื™ื:
    • ื”ื—ื‘ื™ืœื” ืžื•ืชืงื ืช ื›ื”ืœื›ื”.
    • ืœ-Nginx ื™ืฉ ืืช ื”ื’ืจืกื” ื”ื ื“ืจืฉืช ื•ื”ื™ื ื‘ื ื•ื™ื” ืขื ื”ื“ื’ืœื™ื ื•ื”ืžื•ื“ื•ืœื™ื ื”ื ื“ืจืฉื™ื.
    • ื ื•ืฆืจื™ื ื”ื ืชื™ื‘ื™ื ื”ื“ืจื•ืฉื™ื, ื”ื—ืฉื‘ื•ื ื•ืช ื•ื›ืŸ ื”ืœืื”.

ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื”ื–ื” ืขื›ืฉื™ื•, ื•ื’ื ืœื”ืฆื™ืข ืฉื™ืคื•ืจื™ื - github.com/TinkoffCreditSystems/Nginx-builder ื‘ืจื•ืš ื”ื‘ื!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”