{"id":110306,"date":"2025-05-24T02:50:14","date_gmt":"2025-05-23T22:20:14","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/"},"modified":"2025-05-24T02:50:14","modified_gmt":"2025-05-23T22:20:14","slug":"scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/","title":{"rendered":"Scaling Express.js \u0628\u0627 \u062a\u0639\u0627\u062f\u0644 \u0628\u0627\u0631 nginx: \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f dockerized"},"content":{"rendered":"<div data-article-id=\"2519848\" id=\"article-body\">\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0648\u0628 \u0645\u062f\u0631\u0646 \u0628\u0627\u06cc\u062f \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u060c \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0627\u0634\u0646\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0624\u062b\u0631\u062a\u0631\u06cc\u0646 \u0631\u0627\u0647 \u0647\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0647\u062f\u0641 \u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Docker \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u06a9\u0631\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 NGINX \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u062a\u0639\u0627\u062f\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0628\u0627\u0631 \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a \u060c \u0645\u0646 \u0634\u0645\u0627 \u0631\u0627 \u0637\u06cc \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u0646 \u06cc\u06a9 API \u0628\u0627 \u0646\u0627\u0645 \u062a\u062c\u0627\u0631\u06cc Express.js \u0631\u0627 \u0633\u0627\u062e\u062a\u0645 \u060c \u0645\u062a\u0639\u0627\u062f\u0644 \u0628\u0627 nginx \u0648 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0647\u0646\u06af\u0633\u0627\u0632\u06cc Docker \u060c \u0627\u0631\u06a9\u0633\u062a\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%DA%86%D8%B1%D8%A7_%D8%AA%D8%B9%D8%A7%D8%AF%D9%84_%D8%A8%D8%A7%D8%B1_%D9%85%D9%87%D9%85_%D8%A7%D8%B3%D8%AA\" >\u0686\u0631\u0627 \u062a\u0639\u0627\u062f\u0644 \u0628\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D8%A7%D8%AC%D9%85%D8%A7%D9%84%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87\" >\u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc \u067e\u0631\u0648\u0698\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D9%86%D8%B5%D8%A8\" >\u0646\u0635\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%B1%D9%88%DA%98%D9%87\" >\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%A7%D8%AC%D8%B2%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\" >\u0627\u062c\u0632\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%AC%D8%B2%D8%A6%DB%8C%D8%A7%D8%AA_%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C\" >\u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u062c\u0631\u0627\u06cc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1\" >\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1_%D9%85%D8%AD%DB%8C%D8%B7\" >\u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%B9%DA%A9%D8%B3_%D9%81%D9%88%D8%B1%DB%8C_%D9%BE%D8%A7%D8%B3%D8%AE_API\" >\u0639\u06a9\u0633 \u0641\u0648\u0631\u06cc \u067e\u0627\u0633\u062e API<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%DA%86%D8%A7%D9%84%D8%B4_%D9%87%D8%A7_%D9%88_%D8%B1%D8%A7%D9%87_%D8%AD%D9%84_%D9%87%D8%A7\" >\u0686\u0627\u0644\u0634 \u0647\u0627 \u0648 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%A7%D9%85%D9%86%DB%8C%D8%AA_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1_%D9%85%D8%AD%DB%8C%D8%B7\" >\u0627\u0645\u0646\u06cc\u062a \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF_%D8%AA%D9%88%D8%A7%D8%B2%D9%86_%D8%A8%D8%A7%D8%B1\" >\u062a\u0623\u06cc\u06cc\u062f \u062a\u0648\u0627\u0632\u0646 \u0628\u0627\u0631<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/scaling-expressjs-with-nginx-load-balancing-a-dockerized-approach-4fhn\/#%D8%AA%D9%88%D8%B5%DB%8C%D9%87_%D9%87%D8%A7%DB%8C%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA_%D9%87%D8%A7%DB%8C_%D8%A2%DB%8C%D9%86%D8%AF%D9%87\" >\u062a\u0648\u0635\u06cc\u0647 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a \u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_%D8%AA%D8%B9%D8%A7%D8%AF%D9%84_%D8%A8%D8%A7%D8%B1_%D9%85%D9%87%D9%85_%D8%A7%D8%B3%D8%AA\"><\/span>\n<p>  \u0686\u0631\u0627 \u062a\u0639\u0627\u062f\u0644 \u0628\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<p><strong>\u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647<\/strong> &#8211; \u0628\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0634\u062a\u0646 \u0628\u0627\u0631 \u06a9\u0627\u0631.<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0648\u062f\u0646<\/strong> &#8211; \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0627\u0641\u0632\u0648\u0646\u06af\u06cc.<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0642\u06cc\u0627\u0633 \u0628\u0646\u062f\u06cc \u0627\u0641\u0642\u06cc \u0622\u0633\u0627\u0646 \u062a\u0631<\/strong> &#8211; \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0642\u0627\u0636\u0627 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0638\u0631\u0648\u0641 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0686\u0631\u062e\u0627\u0646\u06cc\u062f.<\/p>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D8%A7%D8%AC%D9%85%D8%A7%D9%84%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87\"><\/span>\n<p>  \u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc \u067e\u0631\u0648\u0698\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0646\u062d\u0648\u0647:<\/p>\n<ol>\n<li>\n<p>Containerize \u06cc\u06a9 API Express.js \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Docker.<\/p>\n<\/li>\n<li>\n<p>API \u0631\u0627 \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u0638\u0631\u0648\u0641 \u0645\u0642\u06cc\u0627\u0633 \u0645\u0642\u06cc\u0627\u0633 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0627\u0632 nginx \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0645\u0639\u06a9\u0648\u0633 \u0648 \u0638\u0631\u0648\u0641 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0648\u0627\u0644\u0627\u0646\u0633\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p>\u062a\u0648\u0632\u06cc\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a ROBIN ROBIN \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%B5%D8%A8\"><\/span>\n<p>  \u0646\u0635\u0628<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u060c \u0644\u0637\u0641\u0627\u064b \u067e\u0631\u0648\u0698\u0647 Express.js \u0631\u0627 \u06a9\u0644\u0648\u0646 \u06a9\u0646\u06cc\u062f \u060c \u06cc\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f API \u0628\u0627 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 Express.js \u062e\u0648\u062f \u0631\u0627 \u062a\u0648\u0633\u0639\u0647 \u062f\u0627\u062f\u0647 \u0648 \u067e\u0648\u0631\u062a \u0631\u0627 \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 compose.yml \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p><strong>\u06a9\u0644\u0648\u0646 \u0645\u062e\u0632\u0646:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   git clone https:\/\/github.com\/noruwa03\/express-js-nginx-lb\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0628\u0647 \u0641\u0647\u0631\u0633\u062a \u067e\u0631\u0648\u0698\u0647 \u0628\u0631\u0648\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   <span class=\"nb\">cd <\/span>express-js-nginx-lb\/app\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   npm <span class=\"nb\">install<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f:<\/strong><br \/>\u0627\u06cc\u062c\u0627\u062f a <code>.env<\/code> \u067e\u0631\u0648\u0646\u062f\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 <code>app<\/code> \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0627 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631:<\/p>\n<ul>\n<li>\n<code>PORT<\/code>  &#8211; \u0634\u0645\u0627\u0631\u0647 \u067e\u0648\u0631\u062a \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 Express.js<\/li>\n<li>\n<code>DB_CONN_LINK<\/code>  &#8211; \u0631\u0634\u062a\u0647 \u0627\u062a\u0635\u0627\u0644 postgreSQL \u0627\u0632 \u0646\u0626\u0648\u0646 db. \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0648 \u062c\u062f\u0627\u0648\u0644 \u0644\u0637\u0641\u0627\u064b \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f <strong>Express-test-db.sql<\/strong> \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 <code>app\/src\/db\/express-test-db.sql<\/code>\n<\/li>\n<\/ul>\n<p><strong>\u0633\u0631\u0648\u0631 \u062a\u0648\u0633\u0639\u0647 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   npm run dev\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%B1%D9%88%DA%98%D9%87\"><\/span>\n<p>  \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>express-js-nginx-lb\/\n\u251c\u2500\u2500 app\/\n\u2502   \u251c\u2500\u2500 src\/\n\u2502   \u2502   \u251c\u2500\u2500 controllers\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 create-post.ts\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 delete-post.ts\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 get-post-by-id.ts\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 get-posts.ts\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 update-post.ts\n\u2502   \u2502   \u251c\u2500\u2500 db\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 express-test-db.sql\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 index.ts\n\u2502   \u2502   \u251c\u2500\u2500 middlewares\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 post-validation.ts\n\u2502   \u2502   \u251c\u2500\u2500 routes\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 index.ts\n\u2502   \u2502   \u2514\u2500\u2500 app.ts\n\u2502   \u251c\u2500\u2500 .dockerignore\n\u2502   \u251c\u2500\u2500 package-lock.json\n\u2502   \u251c\u2500\u2500 package.json\n\u2502   \u2514\u2500\u2500 tsconfig.json\n\u251c\u2500\u2500 nginx\/\n\u2502   \u2514\u2500\u2500 nginx.conf\n\u251c\u2500\u2500 compose.yml\n\u2514\u2500\u2500 README.md\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B2%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\"><\/span>\n<p>  \u0627\u062c\u0632\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>express.js api<\/strong><\/p>\n<p>API Backend \u0628\u0627 \u0627\u06cc\u0646 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0635\u0644\u06cc CRUD \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0633\u062a \u0647\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>\n<p><code>GET \/post<\/code>  &#8211; \u0647\u0645\u0647 \u067e\u0633\u062a \u0647\u0627 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><code>GET \/post\/:id<\/code>  &#8211; \u06cc\u06a9 \u067e\u0633\u062a \u062e\u0627\u0635 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><code>POST \/create-post<\/code>  &#8211; \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0633\u062a \u062c\u062f\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><code>PATCH\/update-post\/:id<\/code>  &#8211; \u06cc\u06a9 \u067e\u0633\u062a \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><code>DELETE\/post\/:id<\/code>  &#8211; \u06cc\u06a9 \u067e\u0633\u062a \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062f\u0627\u06a9\u0631<\/strong>: compose.yml<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">services<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">myapp<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/app<\/span>\n    <span class=\"na\">deploy<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\n    <span class=\"na\">expose<\/span><span class=\"pi\">:<\/span> \n      <span class=\"pi\">-<\/span> <span class=\"m\">8080<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/app\/.env:\/etc\/express_env\/.env<\/span>\n\n  <span class=\"na\">nginx<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx:alpine<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">3000:80<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/nginx\/nginx.conf:\/etc\/nginx\/nginx.conf<\/span>\n    <span class=\"na\">depends_on<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">myapp<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0627\u06af\u0631 \u062f\u0631 \u062d\u0627\u0644 \u062a\u0648\u0633\u0639\u0647 API Backend.js \u062e\u0648\u062f \u062f\u0631 \u062d\u0627\u0644 \u062a\u0648\u0633\u0639\u0647 \u0647\u0633\u062a\u06cc\u062f \u060c \u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u067e\u0648\u0631\u062a \u0631\u0627 \u062f\u0631 \u0644\u06cc\u0633\u062a \u0627\u0641\u0634\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f<\/strong><\/p>\n<p><strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc nginx<\/strong>: nginx.conf \u0648\u0627\u0642\u0639 \u062f\u0631 <code>nginx<\/code> \u0641\u0647\u0631\u0633\u062a \u0631\u0627\u0647\u0646\u0645\u0627<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"s\">events {}<\/span>\n\n<span class=\"s\">http {<\/span>\n  <span class=\"s\">include mime.types;<\/span>\n\n  <span class=\"s\">upstream myapp {<\/span>\n    <span class=\"s\">server myapp:8080;<\/span>\n  <span class=\"s\">}<\/span>\n\n  <span class=\"s\">server {<\/span>\n    <span class=\"s\">listen 80;<\/span>\n    <span class=\"s\">location \/ {<\/span>\n      <span class=\"s\">proxy_pass http:\/\/myapp;<\/span>\n      <span class=\"s\">proxy_set_header Host $host;<\/span>\n      <span class=\"s\">proxy_set_header X-Real-IP $remote_addr;<\/span>\n    <span class=\"s\">}<\/span>\n  <span class=\"s\">}<\/span>\n<span class=\"err\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AC%D8%B2%D8%A6%DB%8C%D8%A7%D8%AA_%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C\"><\/span>\n<p>  \u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u062c\u0631\u0627\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0633\u062a\u0648\u0631\u0627\u062a Docker \u0648 \u0639\u06a9\u0633 \u0647\u0627\u06cc \u0641\u0648\u0631\u06cc \u062f\u0631 \u0632\u06cc\u0631 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>docker compose build\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>docker compose up\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftiliepcz43vstsw6wq96.PNG\" alt=\"Docker \u0622\u0647\u0646\u06af\u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f\" loading=\"lazy\" width=\"800\" height=\"341\" title=\"\"><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>docker ps\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqi8ru7vus4anq144kq3.PNG\" alt=\"Docker PS\" loading=\"lazy\" width=\"800\" height=\"379\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1\"><\/span>\n<p>  \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u062a\u0639\u0627\u062f\u0644 \u0628\u0627\u0631 \u062f\u0631 \u062d\u0627\u0644 \u06a9\u0627\u0631 \u0628\u0648\u062f \u060c \u0645\u0646 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \/\u067e\u06cc\u0646\u06af \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0638\u0631\u0641 \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">import<\/span> <span class=\"nx\">os<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">os<\/span><span class=\"dl\">\"<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/ping<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Request<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Response<\/span><span class=\"p\">):<\/span> <span class=\"nx\">any<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">status<\/span><span class=\"p\">(<\/span><span class=\"mi\">200<\/span><span class=\"p\">).<\/span><span class=\"nf\">json<\/span><span class=\"p\">({<\/span>\n    <span class=\"na\">message<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`Served by: <\/span><span class=\"p\">${<\/span><span class=\"nx\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">hostname<\/span><span class=\"p\">()}<\/span><span class=\"s2\">`<\/span><span class=\"p\">,<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">listen<\/span><span class=\"p\">(<\/span><span class=\"nx\">PORT<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">`Server running at port <\/span><span class=\"p\">${<\/span><span class=\"nx\">PORT<\/span><span class=\"p\">}<\/span><span class=\"s2\">.....`<\/span><span class=\"p\">);<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">`Served by: <\/span><span class=\"p\">${<\/span><span class=\"nx\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">hostname<\/span><span class=\"p\">()}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdxqlgfejmcqh8loxy93.PNG\" alt=\"\u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u06cc\u06a9\" loading=\"lazy\" width=\"800\" height=\"309\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hnkindxvlj8dx18sbrj.PNG\" alt=\"\u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0648\" loading=\"lazy\" width=\"800\" height=\"312\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1_%D9%85%D8%AD%DB%8C%D8%B7\"><\/span>\n<p>  \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u0628\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u062f\u0627\u0631\u0647 \u06a9\u0646\u0645 <code>.env<\/code> \u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>secrets<\/code> \u0648 \u0646\u0642\u0634\u0647 <code>.env<\/code> \u067e\u0631\u0648\u0646\u062f\u0647 \u062f\u0631 \u06cc\u06a9 \u062d\u062c\u0645 \u0628\u0647 \u0627\u0633\u0631\u0627\u0631 \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0622\u0647\u0646\u06af\u0633\u0627\u0632\u06cc Docker. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u0647\u0646\u06af\u0627\u0645 \u062f\u0648\u06cc\u062f\u0646 <code>docker compose -f compose.yml config<\/code> \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 compose.yml \u060c \u0628\u0627 \u062e\u0637\u0627\u06cc\u06cc \u0631\u0648\u0628\u0631\u0648 \u0634\u062f\u0645. \u0645\u0646 \u0646\u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u06a9\u067e\u06cc \u06a9\u0646\u0645 <code>.env<\/code> \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u0638\u0631\u0641 Docker \u0634\u0648\u06cc\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0646 \u0627\u0632 \u062c\u0644\u062f Docker \u0628\u0631\u0627\u06cc \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645 <code>app\/.env<\/code> \u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u0647 <code>\/etc\/express_env\/.env<\/code> \u0641\u0647\u0631\u0633\u062a \u062f\u0627\u062e\u0644 \u0638\u0631\u0641. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062d\u0633\u0627\u0633 \u0631\u0627 \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0648\u0631 \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0647\u0645 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>volumes:\n  - .\/app\/.env:\/etc\/express_env\/.env\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0628\u0627\u0632\u0631\u0633\u06cc \u0627\u0632 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0638\u0631\u0641 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-it<\/span> <container_id> \/bin\/sh\n<\/container_id><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">ls<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">cd<\/span> \/\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">cd <\/span>etc\/express_env\n<span class=\"nb\">ls<\/span> <span class=\"nt\">-a<\/span>\n<span class=\"nb\">exit<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8v1gwlrsnlffcm516wnk.PNG\" alt=\"\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\" loading=\"lazy\" width=\"800\" height=\"228\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B9%DA%A9%D8%B3_%D9%81%D9%88%D8%B1%DB%8C_%D9%BE%D8%A7%D8%B3%D8%AE_API\"><\/span>\n<p>  \u0639\u06a9\u0633 \u0641\u0648\u0631\u06cc \u067e\u0627\u0633\u062e API<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><code>\/api\/v1\/<\/code>  &#8211; \u0645\u0633\u06cc\u0631 \u0631\u06cc\u0634\u0647<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ue6a75uhxdg33r685nj.PNG\" alt=\"\u0645\u0633\u06cc\u0631 \u0631\u06cc\u0634\u0647\" loading=\"lazy\" width=\"800\" height=\"426\" title=\"\"><\/p>\n<p><code>\/api\/v1\/create-post<\/code>  &#8211; \u0627\u06cc\u062c\u0627\u062f \u0645\u0633\u06cc\u0631 \u067e\u0633\u062a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1b7901rsiud19gpqsvwe.PNG\" alt=\"\u0627\u06cc\u062c\u0627\u062f \u067e\u0633\u062a\" loading=\"lazy\" width=\"800\" height=\"426\" title=\"\"><\/p>\n<p><code>\/api\/v1\/post\/:id<\/code>  &#8211; \u0627\u0631\u0633\u0627\u0644 \u062a\u0648\u0633\u0637 \u0634\u0646\u0627\u0633\u0647<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k5rnv8qioi4uddsdkku.PNG\" alt=\"\u0627\u0631\u0633\u0627\u0644 \u062a\u0648\u0633\u0637 \u0634\u0646\u0627\u0633\u0647\" loading=\"lazy\" width=\"800\" height=\"416\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%A7%D9%84%D8%B4_%D9%87%D8%A7_%D9%88_%D8%B1%D8%A7%D9%87_%D8%AD%D9%84_%D9%87%D8%A7\"><\/span>\n<p>  \u0686\u0627\u0644\u0634 \u0647\u0627 \u0648 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%85%D9%86%DB%8C%D8%AA_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1_%D9%85%D8%AD%DB%8C%D8%B7\"><\/span>\n<p>  \u0627\u0645\u0646\u06cc\u062a \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>\u0686\u0627\u0644\u0634<\/strong>: \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u060c \u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u0627\u0632 \u0627\u0633\u0631\u0627\u0631 Docker \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 \u0627\u0645\u0627 \u0628\u0627 \u062e\u0637\u0627\u0647\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0631\u0648\u0628\u0631\u0648 \u0634\u062f\u0645.<\/p>\n<p><strong>\u0631\u0627\u0647 \u062d\u0644<\/strong>: \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u062c\u0645 \u060c \u0631\u0648\u0634 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0627\u06cc \u062a\u0632\u0631\u06cc\u0642 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0628\u062f\u0648\u0646 \u067e\u062e\u062a \u0622\u0646\u0647\u0627 \u062f\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0641\u0631\u0627\u0647\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF_%D8%AA%D9%88%D8%A7%D8%B2%D9%86_%D8%A8%D8%A7%D8%B1\"><\/span>\n<p>  \u062a\u0623\u06cc\u06cc\u062f \u062a\u0648\u0627\u0632\u0646 \u0628\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>\u0686\u0627\u0644\u0634<\/strong>: \u062a\u0623\u06cc\u06cc\u062f \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u062f\u0631 \u0648\u0627\u0642\u0639 \u062f\u0631 \u0638\u0631\u0648\u0641 \u062a\u0648\u0632\u06cc\u0639 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/p>\n<p><strong>\u0631\u0627\u0647 \u062d\u0644<\/strong>: \u0627\u062c\u0631\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \/\u067e\u06cc\u0646\u06af \u06a9\u0647 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f \u060c \u062a\u0623\u06cc\u06cc\u062f \u0628\u0635\u0631\u06cc \u0648\u0627\u0636\u062d \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D9%88%D8%B5%DB%8C%D9%87_%D9%87%D8%A7%DB%8C%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA_%D9%87%D8%A7%DB%8C_%D8%A2%DB%8C%D9%86%D8%AF%D9%87\"><\/span>\n<p>  \u062a\u0648\u0635\u06cc\u0647 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a \u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<p><strong>\u0646\u0638\u0627\u0631\u062a \u0648 \u0645\u0634\u0627\u0647\u062f\u0647:<\/strong> \u0646\u0638\u0627\u0631\u062a \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc API \u0628\u0627 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0627\u0632 \u062c\u0645\u0644\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627 \u060c \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0645\u062a\u0645\u0631\u06a9\u0632 \u0648 \u0631\u062f\u06cc\u0627\u0628\u06cc \u062a\u0648\u0632\u06cc\u0639 \u0634\u062f\u0647<\/p>\n<\/li>\n<li>\n<p><strong>\u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD:<\/strong> \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062e\u0637\u0648\u0637 \u0644\u0648\u0644\u0647 \u062e\u0648\u062f\u06a9\u0627\u0631 CI\/CD \u0628\u0627 \u0627\u0642\u062f\u0627\u0645\u0627\u062a GitHub \u0628\u0647 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u0647\u0627\u06cc \u0627\u0628\u0631\u06cc \u0645\u0633\u062a\u0642\u0631 \u0634\u0648\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u06cc\u0634\u0631\u0641\u062a \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc:<\/strong> \u062e\u0627\u062a\u0645\u0647 SSL\/TLS \u0631\u0627 \u062f\u0631 \u0644\u0627\u06cc\u0647 nginx \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0627\u0631\u062a\u0628\u0627\u0637\u0627\u062a API \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<\/ol><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0648\u0628 \u0645\u062f\u0631\u0646 \u0628\u0627\u06cc\u062f \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u060c \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0627\u0634\u0646\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0624\u062b\u0631\u062a\u0631\u06cc\u0646 \u0631\u0627\u0647 \u0647\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0647\u062f\u0641 \u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Docker \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u06a9\u0631\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 NGINX \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u062a\u0639\u0627\u062f\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0628\u0627\u0631 \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a \u060c \u0645\u0646 \u0634\u0645\u0627 \u0631\u0627 \u0637\u06cc \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u0646 \u06cc\u06a9 API &hellip;<\/p>\n","protected":false},"author":2,"featured_media":110307,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-110306","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/110306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=110306"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/110306\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/110307"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=110306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=110306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=110306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}