ಪ್ರೊಹೋಸ್ಟರ್ > Блог > ಆಡಳಿತ > ನಾವು ನಮ್ಮ Nginx ಅನ್ನು ಒಂದೆರಡು ಆಜ್ಞೆಗಳೊಂದಿಗೆ ಜೋಡಿಸುತ್ತೇವೆ
ನಾವು ನಮ್ಮ Nginx ಅನ್ನು ಒಂದೆರಡು ಆಜ್ಞೆಗಳೊಂದಿಗೆ ಜೋಡಿಸುತ್ತೇವೆ
ಹಾಯ್!
ನನ್ನ ಹೆಸರು ಸೆರ್ಗೆ, ನಾನು tinkoff.ru ಪ್ಲಾಟ್ಫಾರ್ಮ್ನ API ತಂಡದಲ್ಲಿ ಮೂಲಸೌಕರ್ಯ ಎಂಜಿನಿಯರ್ ಆಗಿ ಕೆಲಸ ಮಾಡುತ್ತೇನೆ.
ಈ ಲೇಖನದಲ್ಲಿ ನಾನು ಬ್ಯಾಲೆನ್ಸರ್ಗಳನ್ನು ಆಧರಿಸಿ ನಮ್ಮ ತಂಡವು ಎದುರಿಸಿದ ಸಮಸ್ಯೆಗಳ ಬಗ್ಗೆ ಮಾತನಾಡುತ್ತೇನೆ ಎನ್ನಿಕ್ಸ್ ವಿವಿಧ ಯೋಜನೆಗಳಿಗೆ. ಅವುಗಳಲ್ಲಿ ಹೆಚ್ಚಿನದನ್ನು ಜಯಿಸಲು ನನಗೆ ಅನುಮತಿಸಿದ ಸಾಧನದ ಬಗ್ಗೆ ನಾನು ನಿಮಗೆ ಹೇಳುತ್ತೇನೆ.
Nginx ಬಹುಕ್ರಿಯಾತ್ಮಕ ಮತ್ತು ಸಕ್ರಿಯವಾಗಿ ಅಭಿವೃದ್ಧಿ ಹೊಂದುತ್ತಿರುವ ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ ಆಗಿದೆ. ಇದು ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ಇದು ಸಂಪೂರ್ಣ ಪಟ್ಟಿ ಅಲ್ಲ. ಪ್ರತಿಯೊಂದು ಯೋಜನೆಯು ಬ್ಯಾಲೆನ್ಸರ್ನ ಕ್ರಿಯಾತ್ಮಕತೆ ಮತ್ತು Nginx ನ ಆವೃತ್ತಿಯ ಮೇಲೆ ಕೆಲವು ಅವಶ್ಯಕತೆಗಳನ್ನು ವಿಧಿಸುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, http/2 ಮತ್ತು grpc ಪ್ರಾಕ್ಸಿಯಿಂಗ್ ಉಪಸ್ಥಿತಿ), ಮತ್ತು ಅದರ ಮಾಡ್ಯೂಲ್ಗಳ ಸಂಯೋಜನೆ.
ನಿರ್ದಿಷ್ಟ ಲಿನಕ್ಸ್ ವಿತರಣೆಯ ಅಡಿಯಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಮಾಡ್ಯೂಲ್ಗಳ ಅಗತ್ಯವಿರುವ ಸೆಟ್ಗಳೊಂದಿಗೆ ತಾಜಾ ಆವೃತ್ತಿಯನ್ನು ನೋಡಲು ನಾವು ಬಯಸುತ್ತೇವೆ. ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಇವು deb- ಮತ್ತು rpm ಆಧಾರಿತ ವ್ಯವಸ್ಥೆಗಳಾಗಿವೆ. ಧಾರಕಗಳೊಂದಿಗಿನ ಆಯ್ಕೆಯನ್ನು ಈ ಲೇಖನದಲ್ಲಿ ಪರಿಗಣಿಸಲಾಗುವುದಿಲ್ಲ.
ನಮ್ಮ ಬ್ಯಾಲೆನ್ಸರ್ಗಳ ಕಾರ್ಯವನ್ನು ತ್ವರಿತವಾಗಿ ಬದಲಾಯಿಸಲು ನಾವು ಬಯಸುತ್ತೇವೆ. ಮತ್ತು ಇಲ್ಲಿ ಪ್ರಶ್ನೆ ತಕ್ಷಣವೇ ಉದ್ಭವಿಸುತ್ತದೆ: ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಖರ್ಚು ಮಾಡುವಾಗ ಇದನ್ನು ಹೇಗೆ ಸಾಧಿಸುವುದು? ಪ್ರಕ್ರಿಯೆಯನ್ನು ಹೊಂದಿಸುವುದು ಇನ್ನೂ ಉತ್ತಮವಾಗಿದೆ ಇದರಿಂದ ನಾವು ಸೀಮಿತ ಸಂಖ್ಯೆಯ ಇನ್ಪುಟ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು ಮತ್ತು ಔಟ್ಪುಟ್ನಲ್ಲಿ ಅಪೇಕ್ಷಿತ OS ಗಾಗಿ deb/rpm ಪ್ಯಾಕೇಜ್ನ ರೂಪದಲ್ಲಿ ಕಲಾಕೃತಿಯನ್ನು ಸ್ವೀಕರಿಸಬಹುದು.
ಪರಿಣಾಮವಾಗಿ, ಹಲವಾರು ಸಮಸ್ಯೆಗಳನ್ನು ರೂಪಿಸಬಹುದು:
Nginx ನ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಯಾವಾಗಲೂ ಪ್ಯಾಕೇಜ್ಗಳು ಇರುವುದಿಲ್ಲ.
ಅಗತ್ಯವಿರುವ ಮಾಡ್ಯೂಲ್ಗಳೊಂದಿಗೆ ಯಾವುದೇ ಪ್ಯಾಕೇಜ್ಗಳಿಲ್ಲ.
ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಕಂಪೈಲ್ ಮಾಡುವುದು ಮತ್ತು ನಿರ್ಮಿಸುವುದು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಸರಳವಾಗಿ ಬೇಸರದ ಸಂಗತಿಯಾಗಿದೆ.
ಈ ಅಥವಾ ಆ Nginx ನಿದರ್ಶನವನ್ನು ಹೇಗೆ ಜೋಡಿಸಲಾಗಿದೆ ಎಂಬುದರ ಕುರಿತು ಯಾವುದೇ ವಿವರಣೆಯಿಲ್ಲ.
ಈ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು, ಮಾನವ-ಓದಬಹುದಾದ ಸ್ವರೂಪದಲ್ಲಿ ನಿರ್ದಿಷ್ಟತೆಯನ್ನು ಇನ್ಪುಟ್ನಂತೆ ತೆಗೆದುಕೊಳ್ಳುವ ಮತ್ತು ಅದರ ಆಧಾರದ ಮೇಲೆ ಅಗತ್ಯವಾದ ಕಾರ್ಯನಿರ್ವಹಣೆಯೊಂದಿಗೆ Nginx ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಜೋಡಿಸುವ ಉಪಕರಣದ ಅಗತ್ಯವು ಉದ್ಭವಿಸುತ್ತದೆ.
ಗಿಥಬ್ನ ವಿಶಾಲತೆಯ ಮೇಲೆ ನಮಗೆ ಸೂಕ್ತವಾದ ಆಯ್ಕೆಯನ್ನು ಕಂಡುಹಿಡಿಯಲಾಗಲಿಲ್ಲ, ನಾವು ನಮ್ಮ ಸ್ವಂತ ಸಾಧನವನ್ನು ರಚಿಸಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ - nginx-ಬಿಲ್ಡರ್.
ವಿಶೇಷಣಗಳು (ಸಂಪಾದಿಸಿ)
ನಮ್ಮ ಟೂಲ್ನಲ್ಲಿ, ಕೋಡ್ನ ರೂಪದಲ್ಲಿ ನಿರ್ದಿಷ್ಟತೆಯ ವಿವರಣೆಯನ್ನು ರಚಿಸಲು ನಾವು ಬಯಸಿದ್ದೇವೆ, ನಂತರ ಅದನ್ನು Git ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ಇರಿಸಬಹುದು. ಇದನ್ನು ಮಾಡಲು, ನಾವು ಅಂತಹ ವಿಷಯಗಳಿಗೆ ಪರಿಚಿತ ಸ್ವರೂಪವನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ್ದೇವೆ - yaml. ನಿರ್ದಿಷ್ಟ ಉದಾಹರಣೆ:
ಅಗತ್ಯವಿರುವ ಮಾಡ್ಯೂಲ್ಗಳೊಂದಿಗೆ Nginx ಆವೃತ್ತಿ 1.14.2 ನೊಂದಿಗೆ ನಾವು ಡೆಬ್ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ನೋಡಲು ಬಯಸುತ್ತೇವೆ ಎಂದು ಇಲ್ಲಿ ನಾವು ಸೂಚಿಸುತ್ತೇವೆ. ಮಾಡ್ಯೂಲ್ಗಳೊಂದಿಗಿನ ವಿಭಾಗವು ಐಚ್ಛಿಕವಾಗಿರುತ್ತದೆ. ಅವುಗಳಲ್ಲಿ ಪ್ರತಿಯೊಂದಕ್ಕೂ ನೀವು ಹೊಂದಿಸಬಹುದು:
ಹೆಸರು.
ನೀವು ಅದನ್ನು ಪಡೆಯುವ ವಿಳಾಸ:
ಜಿಟ್ ರೆಪೊಸಿಟರಿ. ನೀವು ಶಾಖೆ ಅಥವಾ ಟ್ಯಾಗ್ ಅನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು.
ವೆಬ್ ಲಿಂಕ್ ಅನ್ನು ಆರ್ಕೈವ್ ಮಾಡಿ.
ಆರ್ಕೈವ್ಗೆ ಸ್ಥಳೀಯ ಲಿಂಕ್.
ಕೆಲವು ಮಾಡ್ಯೂಲ್ಗಳಿಗೆ ಹೆಚ್ಚುವರಿ ಅವಲಂಬನೆಗಳನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ nginx-auth-ldap ಗೆ libldap2-dev ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಅಗತ್ಯವಿದೆ. ಮಾಡ್ಯೂಲ್ ಅನ್ನು ವಿವರಿಸುವಾಗ ಅಗತ್ಯ ಅವಲಂಬನೆಗಳನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು.
ಪರಿಸರ
ನಮ್ಮ ಉಪಕರಣದಲ್ಲಿ ನೀವು ಸಂಕಲನ, ಪ್ಯಾಕೇಜ್ ಅಸೆಂಬ್ಲಿ ಮತ್ತು ಇತರ ಸಹಾಯಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ ಸ್ಥಾಪಿಸಲಾದ ಉಪಯುಕ್ತತೆಗಳೊಂದಿಗೆ ಪರಿಸರವನ್ನು ತ್ವರಿತವಾಗಿ ಪಡೆಯಬಹುದು. ನಿಮಗೆ ಅಗತ್ಯವಿರುವ ಎಲ್ಲವನ್ನೂ ಹೊಂದಿರುವ ಡಾಕರ್ ಕಂಟೇನರ್ ಇಲ್ಲಿ ಸೂಕ್ತವಾಗಿದೆ (ರೆಪೊಸಿಟರಿಯು ಈಗಾಗಲೇ ಉಬುಂಟು ಮತ್ತು ಸೆಂಟೋಸ್ಗಾಗಿ ಡಾಕರ್ ಫೈಲ್ಗಳ ಒಂದೆರಡು ಉದಾಹರಣೆಗಳನ್ನು ಹೊಂದಿದೆ).
ವಿವರಣೆಯನ್ನು ರಚಿಸಿದ ನಂತರ ಮತ್ತು ಪರಿಸರವನ್ನು ಸಿದ್ಧಪಡಿಸಿದ ನಂತರ, ನಾವು ನಮ್ಮ ಬಿಲ್ಡರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ, ಈ ಹಿಂದೆ ಅದರ ಅವಲಂಬನೆಗಳನ್ನು ಸ್ಥಾಪಿಸಿದ್ದೇವೆ:
ಇಲ್ಲಿರುವ ಪರಿಷ್ಕರಣೆ ಸಂಖ್ಯೆಯು ಐಚ್ಛಿಕವಾಗಿದೆ ಮತ್ತು ಆವೃತ್ತಿಯ ಅಸೆಂಬ್ಲಿಗಳಿಗೆ ಬಳಸಲಾಗುತ್ತದೆ. ಇದನ್ನು ಪ್ಯಾಕೇಜಿನ ಮೆಟಾ ಮಾಹಿತಿಯಲ್ಲಿ ಬರೆಯಲಾಗಿದೆ, ಸರ್ವರ್ಗಳಲ್ಲಿ ನವೀಕರಿಸಲು ಸುಲಭವಾಗುತ್ತದೆ.
ಲಾಗ್ಗಳಿಂದ ನೀವು ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು. ಮುಖ್ಯ ಅಂಶಗಳ ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:
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 ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ವಿವರಣೆಯು ಬದಲಾದಾಗ, ಕಲಾಕೃತಿಯ ನಿರ್ಮಾಣವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪ್ರಾರಂಭಿಸಲ್ಪಡುತ್ತದೆ. ಪರಿಷ್ಕರಣೆ ಸಂಖ್ಯೆಯನ್ನು ಬಿಲ್ಡ್ ಲಾಂಚ್ ಕೌಂಟರ್ಗೆ ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ.
ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಸಮಯದೊಂದಿಗೆ, ನಿಮ್ಮ ಸ್ಥಳೀಯ ಪ್ಯಾಕೇಜ್ ರೆಪೊಸಿಟರಿ, ನೆಕ್ಸಸ್, ಆರ್ಟಿಫ್ಯಾಕ್ಟರಿ ಇತ್ಯಾದಿಗಳಿಗೆ ಕಳುಹಿಸಲು ನೀವು ಕಲಾಕೃತಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು.
ಹೆಚ್ಚುವರಿ ಪ್ರಯೋಜನವೆಂದರೆ yaml ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ ಅನ್ನು ಅನ್ಸಿಬಲ್ ಅಥವಾ ಇನ್ನೊಂದು ಸ್ವಯಂಚಾಲಿತ ಕಾನ್ಫಿಗರೇಶನ್ ಸಿಸ್ಟಮ್ಗೆ ಸಂಪರ್ಕಿಸಬಹುದು ಮತ್ತು ಅಲ್ಲಿಂದ ನಾವು ನಿಯೋಜಿಸಲು ಬಯಸುವ ಆವೃತ್ತಿ ಸಂಖ್ಯೆ ಮತ್ತು ಪ್ಯಾಕೇಜ್ ಪ್ರಕಾರವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು.
ಮುಂದೆ ಏನು
ಯೋಜನೆ ಇನ್ನೂ ಪೂರ್ಣಗೊಂಡಿಲ್ಲ. ನಾವು ಈಗ ಏನು ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೇವೆ ಎಂಬುದು ಇಲ್ಲಿದೆ:
ನಾವು ಸಂರಚನೆಯ ಸಾಧ್ಯತೆಯನ್ನು ವಿಸ್ತರಿಸುತ್ತೇವೆ, ಆದರೆ ಅದೇ ಸಮಯದಲ್ಲಿ ಅದನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಸರಳವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಿ. ನಿಮಗೆ ಎರಡು ಮಾತ್ರ ಅಗತ್ಯವಿದ್ದರೆ ಸಾವಿರ ನಿಯತಾಂಕಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ನೀವು ಬಯಸುವುದಿಲ್ಲ, ಮತ್ತು ಉಳಿದವು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಸರಿಹೊಂದುತ್ತವೆ. ಇದು ಸಂಕಲನ ಫ್ಲ್ಯಾಗ್ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ (ಈಗ ನೀವು ಅವುಗಳನ್ನು ಆಂತರಿಕ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ src/config.py ನಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು), ಅನುಸ್ಥಾಪನಾ ಮಾರ್ಗ ಮತ್ತು ಲಾಂಚ್ ಬಳಕೆದಾರರನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
ವಿವಿಧ ಕಲಾಕೃತಿ ರೆಪೊಸಿಟರಿಗಳಿಗೆ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸಲು ನಾವು ಆಯ್ಕೆಗಳನ್ನು ಸೇರಿಸುತ್ತಿದ್ದೇವೆ.