{"id":95012,"date":"2025-01-28T22:12:58","date_gmt":"2025-01-28T18:42:58","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/"},"modified":"2025-01-28T22:12:58","modified_gmt":"2025-01-28T18:42:58","slug":"%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/","title":{"rendered":"\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u0628\u0627 Docker"},"content":{"rendered":"<div data-article-id=\"2246794\" id=\"article-body\">\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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%85%D9%82%D8%AF%D9%85%D9%87\" >\u0645\u0642\u062f\u0645\u0647<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%DA%86%D8%B1%D8%A7_%D8%AF%D8%A7%DA%A9%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A2%D8%A8%DB%8C-%D8%B3%D8%A8%D8%B2%D8%9F\" >\u0686\u0631\u0627 \u062f\u0627\u06a9\u0631 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632\u061f<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%DA%86%D8%B1%D8%A7_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C_%D8%AA%D8%B3%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF%D8%9F\" >\u0686\u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u062a\u0633\u062a \u06a9\u0646\u06cc\u062f\u061f<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D8%AA%D8%B8%D8%A7%D9%87%D8%B1%D8%A7%D8%AA\" >\u062a\u0646\u0638\u06cc\u0645 \u062a\u0638\u0627\u0647\u0631\u0627\u062a<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%86%D9%82%D8%B4_%D8%AD%DB%8C%D8%A7%D8%AA%DB%8C_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A8%D9%87%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%AF%D8%B1_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A2%D8%A8%DB%8C-%D8%B3%D8%A8%D8%B2\" >\u0646\u0642\u0634 \u062d\u06cc\u0627\u062a\u06cc \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D8%B3%D9%84%D8%A7%D9%85%D8%AA%DB%8C\" >\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%86%D9%85%D8%A7%DB%8C_%D8%A8%D8%B5%D8%B1%DB%8C_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A2%D8%A8%DB%8C-%D8%B3%D8%A8%D8%B2\" >\u0646\u0645\u0627\u06cc \u0628\u0635\u0631\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%DA%86%D8%B1%D8%A7_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A8%D9%87%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%A8%D8%B3%DB%8C%D8%A7%D8%B1_%D9%85%D9%87%D9%85_%D8%A7%D8%B3%D8%AA\" >\u0686\u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0628\u0633\u06cc\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-9\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%85%D8%A4%D9%84%D9%81%D9%87_%D9%87%D8%A7_%D9%88_%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87_%D9%87%D8%A7\" >\u0645\u0624\u0644\u0641\u0647 \u0647\u0627 \u0648 \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A8%D9%87%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%AF%D8%B1_%D8%B9%D9%85%D9%84\" >\u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0639\u0645\u0644<\/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\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%DA%86%DA%AF%D9%88%D9%86%D9%87_%DA%A9%D8%A7%D8%B1_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF\" >\u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%86%D9%85%D9%88%D9%86%D9%87_%D8%A8%D8%B1%DA%AF%D8%B4%D8%AA_%D8%AE%D9%88%D8%AF%DA%A9%D8%A7%D8%B1\" >\u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u06af\u0634\u062a \u062e\u0648\u062f\u06a9\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%85%D8%AB%D8%A7%D9%84%D9%87%D8%A7\" >\u0645\u062b\u0627\u0644\u0647\u0627:<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/%d8%a7%d8%b3%d8%aa%d9%82%d8%b1%d8%a7%d8%b1-%d8%a2%d8%a8%db%8c-%d8%b3%d8%a8%d8%b2-%d8%af%d8%b1-%db%8c%da%a9-%d9%85%d8%ad%db%8c%d8%b7-%d9%85%d8%ad%d9%84%db%8c-%d8%a8%d8%a7-docker\/#%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\" >\u067e\u0627\u06cc\u0627\u0646<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%82%D8%AF%D9%85%D9%87\"><\/span>\n<p>  \u0645\u0642\u062f\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u06cc\u06a9 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u062e\u0631\u0627\u0628\u06cc \u0648 \u062e\u0637\u0631\u0627\u062a \u062f\u0631 \u062d\u06cc\u0646 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0634\u0627\u0645\u0644 \u0627\u062c\u0631\u0627\u06cc \u062f\u0648 \u0645\u062d\u06cc\u0637 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u060c \u0622\u0628\u06cc \u0648 \u0633\u0628\u0632 \u0627\u0633\u062a \u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u06cc\u06a9\u06cc \u062f\u0631 \u062e\u062f\u0645\u062a \u062a\u0631\u0627\u0641\u06cc\u06a9 (\u0645\u062d\u06cc\u0637 \u0641\u0639\u0627\u0644) \u0627\u0633\u062a \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u06cc\u06a9\u0627\u0631 \u06cc\u0627 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u0627\u0633\u062a. \u067e\u0633 \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0628\u06cc\u06a9\u0627\u0631 \u060c \u062a\u0631\u0627\u0641\u06cc\u06a9 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0627\u0632 \u062b\u0628\u0627\u062a \u0648 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u0627\u062e\u062a\u0644\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u060c \u0645\u0627 \u0646\u062d\u0648\u0647 \u0627\u062c\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Docker \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u0628\u0627 Laravel \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0645\u0648\u0646\u0647 \u0646\u0645\u0648\u0646\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0628\u0631\u0627\u06cc \u0627\u0647\u062f\u0627\u0641 \u0622\u0645\u0648\u0632\u0634\u06cc \u0645\u062a\u0646\u0627\u0633\u0628 \u0627\u0633\u062a \u0648 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0627\u0635\u0648\u0644 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc \u0633\u0628\u0632 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_%D8%AF%D8%A7%DA%A9%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A2%D8%A8%DB%8C-%D8%B3%D8%A8%D8%B2%D8%9F\"><\/span>\n<p>  \u0686\u0631\u0627 \u062f\u0627\u06a9\u0631 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Docker \u0631\u0648\u0634\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0631\u0627\u06cc \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0648 \u0634\u0628\u06cc\u0647 \u0633\u0627\u0632\u06cc \u0645\u062d\u06cc\u0637 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u062f\u0631 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0645\u062d\u0644\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0638\u0631\u0648\u0641 \u062f\u0627\u06a9\u0631 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0644 &#8220;\u0622\u0628\u06cc&#8221; \u0648 &#8220;\u0633\u0628\u0632&#8221; \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u060c \u0628\u0627 \u062e\u06cc\u0627\u0644 \u0631\u0627\u062d\u062a \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0628\u06cc\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0632 \u062f\u0627\u06a9\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>\u0631\u0641\u062a\u0627\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0631\u0627 \u0634\u0628\u06cc\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0631\u0648\u0646\u062f \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0634\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u062a\u062c\u0633\u0645 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0648 \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 \u060c \u0645\u0634\u0627\u0628\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f AWS ECS \u06cc\u0627 Kubernetes.<\/li>\n<\/ul>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0642\u0631\u0627\u0631\u0647\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u060c \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0648 \u0648\u0636\u0648\u062d \u0645\u062a\u0645\u0631\u06a9\u0632 \u0627\u0633\u062a \u0648 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0631\u0627 \u0628\u062f\u0648\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u0647\u0627\u06cc \u0627\u0628\u0631\u06cc \u062f\u0631\u06a9 \u06a9\u0646\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C_%D8%AA%D8%B3%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF%D8%9F\"><\/span>\n<p>  \u0686\u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u062a\u0633\u062a \u06a9\u0646\u06cc\u062f\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>\u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0627\u06cc\u0645\u0646: \u0628\u062f\u0648\u0646 \u062a\u0623\u062b\u06cc\u0631 \u0628\u0631 \u062a\u0648\u0644\u06cc\u062f \u060c \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0631\u0627 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631: \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0627\u0646\u062a\u0642\u0627\u0644 \u0645\u062d\u06cc\u0637 \u060c \u0627\u062f\u063a\u0627\u0645 API \u0648 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0634\u062f\u0647.<\/li>\n<li>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u062f\u0648\u0646 \u062e\u0631\u0627\u0628\u06cc: \u062a\u0631\u0627\u0641\u06cc\u06a9 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0628\u06cc\u0646 \u0638\u0631\u0648\u0641 \u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u062a\u062c\u0631\u0628\u06cc\u0627\u062a \u0635\u0627\u0641 \u06a9\u0627\u0631\u0628\u0631.<\/li>\n<li>\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u062f\u0633\u062a\u06cc: \u0628\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u0627\u062b\u0631\u0627\u062a \u0622\u0646\u0647\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u060c \u062f\u0631\u06a9 \u0639\u0645\u06cc\u0642\u06cc \u0627\u0632 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u06a9\u0633\u0628 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<p>\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u0644\u06cc \u0634\u0645\u0627 \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f \u0642\u0628\u0644 \u0627\u0632 \u0645\u0642\u06cc\u0627\u0633 \u0628\u0646\u062f\u06cc \u0622\u0646\u0647\u0627 \u0628\u0647 \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u060c \u0628\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D8%AA%D8%B8%D8%A7%D9%87%D8%B1%D8%A7%D8%AA\"><\/span>\n<p>  \u062a\u0646\u0638\u06cc\u0645 \u062a\u0638\u0627\u0647\u0631\u0627\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062a\u0638\u0627\u0647\u0631\u0627\u062a \u0627\u0632 \u0627\u062c\u0632\u0627\u06cc \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<ol>\n<li>NGINX: \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0645\u0639\u06a9\u0648\u0633 \u0628\u0631\u0627\u06cc \u0647\u062f\u0627\u06cc\u062a \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0628\u0647 \u0645\u062d\u06cc\u0637 \u0641\u0639\u0627\u0644 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc: \u0622\u0645\u0627\u062f\u06af\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc\u062f \u06a9\u0647 \u0686\u0647 \u0645\u0648\u0642\u0639 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/li>\n<li>Laravel: \u0645\u062b\u0627\u0644 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0631\u0627\u06cc \u062a\u062c\u0633\u0645 \u0627\u0646\u062a\u0642\u0627\u0644 \u0645\u062d\u06cc\u0637.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D9%82%D8%B4_%D8%AD%DB%8C%D8%A7%D8%AA%DB%8C_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A8%D9%87%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%AF%D8%B1_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A2%D8%A8%DB%8C-%D8%B3%D8%A8%D8%B2\"><\/span>\n<p>  \u0646\u0642\u0634 \u062d\u06cc\u0627\u062a\u06cc \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0624\u0644\u0641\u0647 \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0686\u06a9 \u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u062f\u0627\u0648\u0645 \u0648\u0636\u0639\u06cc\u062a \u06cc\u06a9 \u0638\u0631\u0641 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f \u062a\u0627 \u0645\u0634\u062e\u0635 \u0634\u0648\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0622\u0645\u0627\u062f\u0647 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631. \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc \u0633\u0628\u0632 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a \u060c \u0632\u06cc\u0631\u0627 \u0622\u0646\u0647\u0627 \u062b\u0628\u0627\u062a \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u062e\u0637\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u06cc\u0646 \u0645\u062d\u06cc\u0637 \u0647\u0627 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0645\u06cc \u0631\u0633\u0627\u0646\u0646\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u0644\u06cc \u060c \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0646\u0642\u0634 \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f:<br \/>1. \u0634\u0628\u06cc\u0647 \u0633\u0627\u0632\u06cc \u0631\u0641\u062a\u0627\u0631 \u062a\u0648\u0644\u06cc\u062f: \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f AWS ECS \u0648 Kubernetes \u0628\u0647 \u0634\u062f\u062a \u0628\u0647 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0645\u062a\u06a9\u06cc \u0647\u0633\u062a\u0646\u062f \u062a\u0627 \u0645\u0634\u062e\u0635 \u0634\u0648\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631. \u0628\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 docker-compose.yml \u0645\u0627 \u060c \u0645\u0627 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u0646\u0632\u062f\u06cc\u06a9 \u0628\u0647 \u0648\u0627\u0642\u0639\u06cc\u062a \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u06cc\u0645.<br \/>2. \u062a\u0635\u0645\u06cc\u0645\u0627\u062a \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631: \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0632 \u0686\u06a9 \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0628\u0631\u0627\u06cc \u062a\u0635\u0645\u06cc\u0645 \u06af\u06cc\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0645\u062d\u06cc\u0637 \u062c\u062f\u06cc\u062f \u0647\u062f\u0627\u06cc\u062a \u0634\u0648\u062f \u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06af\u0631 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u0632 \u062f\u0633\u062a \u0646\u062f\u0647\u062f \u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0632 \u062a\u0639\u0648\u06cc\u0636 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u062a\u0627 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0648\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u060c \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f.<br \/>3. \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0622\u0645\u0627\u062f\u06af\u06cc \u0628\u0631\u0646\u0627\u0645\u0647: \u0642\u0628\u0644 \u0627\u0632 \u062c\u0627\u0628\u062c\u0627\u06cc\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0628\u0647 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u062c\u062f\u06cc\u062f \u060c \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0638\u0631\u0641 \u062c\u062f\u06cc\u062f \u06a9\u0627\u0645\u0644\u0627\u064b \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0645\u0627\u0646\u0639 \u0627\u0632 \u062e\u0631\u0627\u0628\u06cc \u0646\u0627\u0634\u06cc \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0646\u0627\u0642\u0635 \u06cc\u0627 \u062e\u0637\u0627\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D8%B3%D9%84%D8%A7%D9%85%D8%AA%DB%8C\"><\/span>\n<p>  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">healthcheck<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">test<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">CMD-SHELL\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">curl<\/span><span class=\"nv\"> <\/span><span class=\"s\">-f<\/span><span class=\"nv\"> <\/span><span class=\"s\">http:\/\/localhost<\/span><span class=\"nv\"> <\/span><span class=\"s\">||<\/span><span class=\"nv\"> <\/span><span class=\"s\">exit<\/span><span class=\"nv\"> <\/span><span class=\"s\">1\"<\/span><span class=\"pi\">]<\/span>\n  <span class=\"na\">interval<\/span><span class=\"pi\">:<\/span> <span class=\"s\">30s<\/span>\n  <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">10s<\/span>\n  <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\n  <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/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<ul>\n<li>\u0622\u0632\u0645\u0648\u0646: \u06cc\u06a9 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0638\u0631\u0641 \u067e\u0627\u0633\u062e \u0645\u06cc \u062f\u0647\u062f \u06cc\u0627 \u062e\u06cc\u0631. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0631\u0627 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0646\u062a\u0638\u0627\u0631 \u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u0631\u0627 \u062f\u0627\u0631\u062f.<\/li>\n<li>\u0641\u0627\u0635\u0644\u0647: \u0641\u0631\u06a9\u0627\u0646\u0633 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a \u0631\u0627 \u062a\u0639\u06cc\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>Timeout: \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a \u0686\u0647 \u0645\u062f\u062a \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0642\u0628\u0644 \u0627\u0632 \u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u0648\u062f.<\/li>\n<li>\u0627\u062d\u06cc\u0627\u06cc \u0645\u062c\u062f\u062f: \u062a\u0639\u062f\u0627\u062f \u062e\u0631\u0627\u0628\u06cc \u0647\u0627\u06cc \u0645\u062a\u0648\u0627\u0644\u06cc \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0638\u0631\u0641 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0627\u0633\u0627\u0644\u0645 \u0645\u0634\u062e\u0635 \u0634\u0648\u062f \u060c \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>start_period: \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06cc\u06a9 \u062f\u0648\u0631\u0647 \u0641\u0636\u0644 \u0628\u0631\u0627\u06cc \u0638\u0631\u0641 \u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u0627\u0648\u0644\u06cc\u0647 \u0634\u0648\u062f.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D8%A7%DB%8C_%D8%A8%D8%B5%D8%B1%DB%8C_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A2%D8%A8%DB%8C-%D8%B3%D8%A8%D8%B2\"><\/span>\n<p>  \u0646\u0645\u0627\u06cc \u0628\u0635\u0631\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0646\u0645\u0648\u062f\u0627\u0631 \u0633\u0627\u062f\u0647 \u0627\u0632 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>+-------------------+                   +--------------------+\n|                   |                   |                    |\n|   Active (Blue)   |  &lt;--- Traffic ---&gt;|    Idle (Green)    |\n|                   |                   |                    |\n+-------------------+                   +--------------------+\n         \u2191                                    \u2191\n         |                                    |\n   Updates &amp; Tests                     Updates &amp; Tests\n         |                                    |\n         \u2193                                    \u2193\n+-------------------+                   +--------------------+\n|   New Green       |                   |   New Blue         |\n|   Deployment      |                   |   Deployment       |\n+-------------------+                   +--------------------+\n         |                                    |\n   Health Checks Passed              Health Checks Passed\n         \u2193                                    \u2193\n+-------------------+                   +--------------------+\n|   Idle (Blue)     |   &lt;--- Traffic ---|   Active (Green)   |\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<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A8%D9%87%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%A8%D8%B3%DB%8C%D8%A7%D8%B1_%D9%85%D9%87%D9%85_%D8%A7%D8%B3%D8%AA\"><\/span>\n<p>  \u0686\u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0633\u062a\u0648\u0646 \u0641\u0642\u0631\u0627\u062a \u0627\u06cc\u0646 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0622\u0646\u0647\u0627:<\/p>\n<ul>\n<li>\u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062e\u0631\u0627\u0628\u06cc: \u0641\u0642\u0637 \u0638\u0631\u0648\u0641 \u06a9\u0647 \u0627\u0632 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0639\u0628\u0648\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u062a\u0631\u0627\u0641\u06cc\u06a9 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u0634\u0648\u0646\u062f.<\/li>\n<li>\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0628\u0631\u06af\u0647 \u0647\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631: \u0627\u06af\u0631 \u06cc\u06a9 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u0632 \u0633\u0644\u0627\u0645\u062a \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u062f \u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u0645\u062d\u06cc\u0637 \u0642\u0628\u0644\u0627\u064b \u0641\u0639\u0627\u0644 \u0628\u0627\u0632 \u0645\u06cc \u06af\u0631\u062f\u062f.<\/li>\n<li>\u062a\u0631\u0648\u06cc\u062c \u0627\u0639\u062a\u0645\u0627\u062f \u0628\u0647 \u0646\u0641\u0633: \u0628\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0622\u0645\u0627\u062f\u06af\u06cc \u0645\u062d\u06cc\u0637 \u062c\u062f\u06cc\u062f \u060c \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062e\u0637\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u0645\u0639\u06cc\u0648\u0628 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%A4%D9%84%D9%81%D9%87_%D9%87%D8%A7_%D9%88_%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87_%D9%87%D8%A7\"><\/span>\n<p>  \u0645\u0624\u0644\u0641\u0647 \u0647\u0627 \u0648 \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u0631\u0648\u0631 \u06a9\u0644\u06cc \u0627\u0632 \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ol>\n<li>\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a\u0642\u0631\u0627\u0631: \u0627\u06cc\u062c\u0627\u062f \u060c \u0633\u0648\u0626\u06cc\u0686\u06cc\u0646\u06af \u0648 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0631\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p><code>abin\/install.sh<\/code><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"c\">#!\/bin\/bash<\/span>\n\n<span class=\"nb\">set<\/span> <span class=\"nt\">-e<\/span>  <span class=\"c\"># Stop script execution on error<\/span>\n\n<span class=\"nv\">NGINX_CONF_PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\".\/docker\/nginx\/active_backend.conf\"<\/span>\n<span class=\"nv\">NGINX_CONTAINER<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"app\"<\/span>\n<span class=\"nv\">ENV_FILE<\/span><span class=\"o\">=<\/span><span class=\"s2\">\".env\"<\/span>\n\nbuild_containers<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udce6 Building Docker containers...\"<\/span>\n    docker compose build\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Docker containers built successfully.\"<\/span>\n<span class=\"o\">}<\/span>\n\nprepare_nginx_config<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"o\">!<\/span> <span class=\"nt\">-d<\/span> <span class=\"s2\">\".\/docker\/nginx\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udcc2 Nginx directory not found. Creating it...\"<\/span>\n        <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> .\/docker\/nginx\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Nginx directory created.\"<\/span>\n    <span class=\"k\">fi<\/span>\n<span class=\"o\">}<\/span>\n\nupdate_nginx_config<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">active_color<\/span><span class=\"o\">=<\/span><span class=\"nv\">$1<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udd04 Updating Nginx configuration to route traffic to '<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\">' containers...\"<\/span>\n\n    <span class=\"nb\">cat<\/span> <span class=\"o\">&gt;<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$NGINX_CONF_PATH<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">&lt;&lt;<\/span><span class=\"no\">EOL<\/span><span class=\"sh\">\nupstream app_backend {\n    server <\/span><span class=\"nv\">$active_color<\/span><span class=\"sh\">:9000 max_fails=3 fail_timeout=30s;\n}\n<\/span><span class=\"no\">EOL\n\n<\/span>    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udccb Copying Nginx configuration to the container...\"<\/span>\n    docker <span class=\"nb\">cp<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$NGINX_CONF_PATH<\/span><span class=\"s2\">\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$NGINX_CONTAINER<\/span><span class=\"s2\">:\/etc\/nginx\/conf.d\/active_backend.conf\"<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udd01 Reloading Nginx to apply the new configuration...\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$NGINX_CONTAINER<\/span><span class=\"s2\">\"<\/span> nginx <span class=\"nt\">-s<\/span> reload <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Nginx configuration updated and reloaded successfully.\"<\/span>\n<span class=\"o\">}<\/span>\n\nwait_for_health<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">container_prefix<\/span><span class=\"o\">=<\/span><span class=\"nv\">$1<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">retries<\/span><span class=\"o\">=<\/span>5\n    <span class=\"nb\">local <\/span>unhealthy_found\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u23f3 Waiting for containers with prefix '<\/span><span class=\"nv\">$container_prefix<\/span><span class=\"s2\">' to become healthy...\"<\/span>\n\n    <span class=\"k\">while<\/span> <span class=\"o\">((<\/span> retries <span class=\"o\">&gt;<\/span> 0 <span class=\"o\">))<\/span><span class=\"p\">;<\/span> <span class=\"k\">do\n        <\/span><span class=\"nv\">unhealthy_found<\/span><span class=\"o\">=<\/span><span class=\"nb\">false\n\n        <\/span><span class=\"k\">for <\/span>container_name <span class=\"k\">in<\/span> <span class=\"si\">$(<\/span>docker ps <span class=\"nt\">--filter<\/span> <span class=\"s2\">\"name=<\/span><span class=\"nv\">$container_prefix<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--format<\/span> <span class=\"s2\">\"{{.Names}}\"<\/span><span class=\"si\">)<\/span><span class=\"p\">;<\/span> <span class=\"k\">do\n            <\/span><span class=\"nv\">health_status<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>docker inspect <span class=\"nt\">--format<\/span> <span class=\"s1\">'{{if .State.Health}}{{.State.Health.Status}}{{else}}unknown{{end}}'<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container_name<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">||<\/span> <span class=\"nb\">echo<\/span> <span class=\"s2\">\"unknown\"<\/span><span class=\"si\">)<\/span>\n            <span class=\"k\">if<\/span> <span class=\"o\">[[<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$health_status<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">\"healthy\"<\/span> <span class=\"o\">]]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n                <\/span><span class=\"nv\">unhealthy_found<\/span><span class=\"o\">=<\/span><span class=\"nb\">true\n                echo<\/span> <span class=\"s2\">\"\ud83d\udea7 Container '<\/span><span class=\"nv\">$container_name<\/span><span class=\"s2\">' is not ready. Current status: <\/span><span class=\"nv\">$health_status<\/span><span class=\"s2\">.\"<\/span>\n            <span class=\"k\">fi\n        done\n\n        if<\/span> <span class=\"o\">!<\/span> <span class=\"nv\">$unhealthy_found<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n            <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 All containers with prefix '<\/span><span class=\"nv\">$container_prefix<\/span><span class=\"s2\">' are healthy.\"<\/span>\n            <span class=\"k\">return <\/span>0\n        <span class=\"k\">fi\n\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u23f3 Retrying... (<\/span><span class=\"nv\">$retries<\/span><span class=\"s2\"> retries left)\"<\/span>\n        <span class=\"o\">((<\/span>retries--<span class=\"o\">))<\/span>\n        <span class=\"nb\">sleep <\/span>5\n    <span class=\"k\">done\n\n    <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u274c Error: Some containers with prefix '<\/span><span class=\"nv\">$container_prefix<\/span><span class=\"s2\">' are not healthy. Aborting deployment.\"<\/span>\n    rollback\n    <span class=\"nb\">exit <\/span>0\n<span class=\"o\">}<\/span>\n\nrollback<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\uded1 Rolling back deployment. Ensuring the active environment remains intact.\"<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-n<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$PREVIOUS_COLOR<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udd04 Restoring CONTAINER_COLOR=<\/span><span class=\"nv\">$PREVIOUS_COLOR<\/span><span class=\"s2\"> in .env.\"<\/span>\n        <span class=\"nb\">sed<\/span> <span class=\"nt\">-i<\/span>.bak <span class=\"s2\">\"s\/^CONTAINER_COLOR=.*\/CONTAINER_COLOR=<\/span><span class=\"nv\">$PREVIOUS_COLOR<\/span><span class=\"s2\">\/\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span>\n        <span class=\"nb\">rm<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">.bak\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Restored CONTAINER_COLOR=<\/span><span class=\"nv\">$PREVIOUS_COLOR<\/span><span class=\"s2\"> in .env.\"<\/span>\n    <span class=\"k\">else\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udea7  No previous CONTAINER_COLOR found to restore.\"<\/span>\n    <span class=\"k\">fi\n\n    if <\/span>docker ps <span class=\"nt\">--filter<\/span> <span class=\"s2\">\"name=green\"<\/span> <span class=\"nt\">--format<\/span> <span class=\"s2\">\"{{.Names}}\"<\/span> | <span class=\"nb\">grep<\/span> <span class=\"nt\">-q<\/span> <span class=\"s2\">\"green\"<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Active environment 'green' remains intact.\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\uded1 Stopping and removing 'blue' containers...\"<\/span>\n        docker compose stop <span class=\"s2\">\"blue\"<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1 <span class=\"o\">||<\/span> <span class=\"nb\">true\n        <\/span>docker compose <span class=\"nb\">rm<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"blue\"<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1 <span class=\"o\">||<\/span> <span class=\"nb\">true\n    <\/span><span class=\"k\">elif <\/span>docker ps <span class=\"nt\">--filter<\/span> <span class=\"s2\">\"name=blue\"<\/span> <span class=\"nt\">--format<\/span> <span class=\"s2\">\"{{.Names}}\"<\/span> | <span class=\"nb\">grep<\/span> <span class=\"nt\">-q<\/span> <span class=\"s2\">\"blue\"<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Active environment 'blue' remains intact.\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\uded1 Stopping and removing 'green' containers...\"<\/span>\n        docker compose stop <span class=\"s2\">\"green\"<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1 <span class=\"o\">||<\/span> <span class=\"nb\">true\n        <\/span>docker compose <span class=\"nb\">rm<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"green\"<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1 <span class=\"o\">||<\/span> <span class=\"nb\">true\n    <\/span><span class=\"k\">else\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u274c No active environment detected after rollback. Manual intervention might be needed.\"<\/span>\n    <span class=\"k\">fi\n\n    <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udd04 Rollback completed.\"<\/span>\n<span class=\"o\">}<\/span>\n\nupdate_env_file<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">active_color<\/span><span class=\"o\">=<\/span><span class=\"nv\">$1<\/span>\n\n    <span class=\"c\"># check if .env file exists<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"o\">!<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u274c .env file not found. Creating a new one...\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"CONTAINER_COLOR=<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">&gt;<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Created .env file with CONTAINER_COLOR=<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\">.\"<\/span>\n        <span class=\"k\">return\n    fi<\/span>\n\n    <span class=\"c\"># backup previous CONTAINER_COLOR value<\/span>\n    <span class=\"k\">if <\/span><span class=\"nb\">grep<\/span> <span class=\"nt\">-q<\/span> <span class=\"s2\">\"^CONTAINER_COLOR=\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nv\">PREVIOUS_COLOR<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">grep<\/span> <span class=\"s2\">\"^CONTAINER_COLOR=\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span> | <span class=\"nb\">cut<\/span> <span class=\"nt\">-d<\/span> <span class=\"s1\">'='<\/span> <span class=\"nt\">-f<\/span> 2<span class=\"si\">)<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u267b\ufe0f  Backing up previous CONTAINER_COLOR=<\/span><span class=\"nv\">$PREVIOUS_COLOR<\/span><span class=\"s2\">.\"<\/span>\n    <span class=\"k\">else\n        <\/span><span class=\"nv\">PREVIOUS_COLOR<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\"<\/span>\n    <span class=\"k\">fi<\/span>\n\n    <span class=\"c\"># update CONTAINER_COLOR value in .env<\/span>\n    <span class=\"k\">if <\/span><span class=\"nb\">grep<\/span> <span class=\"nt\">-q<\/span> <span class=\"s2\">\"^CONTAINER_COLOR=\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">sed<\/span> <span class=\"nt\">-i<\/span>.bak <span class=\"s2\">\"s\/^CONTAINER_COLOR=.*\/CONTAINER_COLOR=<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\">\/\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udd04 Updated CONTAINER_COLOR=<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\"> in .env\"<\/span>\n    <span class=\"k\">else\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"CONTAINER_COLOR=<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span>\n        <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udd8b\ufe0f Added CONTAINER_COLOR=<\/span><span class=\"nv\">$active_color<\/span><span class=\"s2\"> to .env\"<\/span>\n    <span class=\"k\">fi<\/span>\n\n    <span class=\"c\"># remove backup file<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">.bak\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">rm<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">.bak\"<\/span>\n    <span class=\"k\">fi<\/span>\n<span class=\"o\">}<\/span>\n\ninstall_dependencies<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">container<\/span><span class=\"o\">=<\/span><span class=\"nv\">$1<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udce5 Installing dependencies in container '<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">'...\"<\/span>\n\n    <span class=\"c\"># Install Laravel dependencies<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"composer install --no-dev --optimize-autoloader\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"mkdir -p database &amp;&amp; touch database\/database.sqlite\"<\/span>\n\n    <span class=\"c\"># Permissions setup<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"chown www-data:www-data -R .\/storage .\/bootstrap .\/database\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"chmod -R 775 .\/storage .\/bootstrap\/cache\"<\/span>\n\n    <span class=\"c\"># Clear caches and run migrations<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"php artisan cache:clear\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"php artisan config:clear\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"php artisan route:clear\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"php artisan view:clear\"<\/span>\n    docker <span class=\"nb\">exec<\/span> <span class=\"nt\">-u<\/span> root <span class=\"nt\">-it<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">\"<\/span> bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"php artisan migrate --force\"<\/span>\n\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Dependencies installed and database initialized successfully in container '<\/span><span class=\"nv\">$container<\/span><span class=\"s2\">'.\"<\/span>\n<span class=\"o\">}<\/span>\n\ndeploy<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">active<\/span><span class=\"o\">=<\/span><span class=\"nv\">$1<\/span>\n    <span class=\"nb\">local <\/span><span class=\"nv\">new<\/span><span class=\"o\">=<\/span><span class=\"nv\">$2<\/span>\n\n    <span class=\"c\"># Update .env before deploying<\/span>\n    update_env_file <span class=\"s2\">\"<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">\"<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\ude80 Starting deployment. Current active environment: '<\/span><span class=\"nv\">$active<\/span><span class=\"s2\">'. Deploying to '<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">'...\"<\/span>\n    docker compose <span class=\"nt\">--profile<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">\"<\/span> up <span class=\"nt\">-d<\/span>\n    wait_for_health <span class=\"s2\">\"<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">\"<\/span>\n    install_dependencies <span class=\"s2\">\"<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">\"<\/span>\n    update_nginx_config <span class=\"s2\">\"<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">\"<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\uddd1\ufe0f  Removing old environment: '<\/span><span class=\"nv\">$active<\/span><span class=\"s2\">'...\"<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\uded1 Stopping '<\/span><span class=\"nv\">$active<\/span><span class=\"s2\">' containers...\"<\/span>\n    docker compose stop <span class=\"nv\">$active<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1 <span class=\"o\">||<\/span> <span class=\"nb\">true\n    echo<\/span> <span class=\"s2\">\"\ud83d\uddd1\ufe0f  Removing '<\/span><span class=\"nv\">$active<\/span><span class=\"s2\">' containers...\"<\/span>\n    docker compose <span class=\"nb\">rm<\/span> <span class=\"nt\">-f<\/span> <span class=\"nv\">$active<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1 <span class=\"o\">||<\/span> <span class=\"nb\">true\n    <\/span>update_env_file <span class=\"s2\">\"<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">\"<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\u2705 Deployment to '<\/span><span class=\"nv\">$new<\/span><span class=\"s2\">' completed successfully.\"<\/span>\n<span class=\"o\">}<\/span>\n\nget_active_container<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">grep<\/span> <span class=\"nt\">-q<\/span> <span class=\"s2\">\"CONTAINER_COLOR\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n        <\/span><span class=\"nb\">grep<\/span> <span class=\"s2\">\"CONTAINER_COLOR\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ENV_FILE<\/span><span class=\"s2\">\"<\/span> | <span class=\"nb\">cut<\/span> <span class=\"nt\">-d<\/span> <span class=\"s1\">'='<\/span> <span class=\"nt\">-f<\/span> 2\n    <span class=\"k\">else\n        <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\"<\/span>\n    <span class=\"k\">fi<\/span>\n<span class=\"o\">}<\/span>\n\n<span class=\"c\"># Main script logic<\/span>\nprepare_nginx_config\nbuild_containers\n\n<span class=\"nv\">ACTIVE_COLOR<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>get_active_container<span class=\"si\">)<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-z<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ACTIVE_COLOR<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span>\n    <span class=\"c\"># if no active container found, deploy 'blue'<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udfe6 Initial setup. Bringing up 'blue' containers...\"<\/span>\n    docker compose <span class=\"nt\">--profile<\/span> blue up <span class=\"nt\">-d<\/span>\n    wait_for_health <span class=\"s2\">\"blue\"<\/span>\n    install_dependencies <span class=\"s2\">\"blue\"<\/span>\n    update_nginx_config <span class=\"s2\">\"blue\"<\/span>\n    update_env_file <span class=\"s2\">\"blue\"<\/span>\n<span class=\"k\">elif<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ACTIVE_COLOR<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">\"green\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span>\n    <span class=\"c\"># if the active is 'green', deploy 'blue'<\/span>\n    <span class=\"nv\">PREVIOUS_COLOR<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"green\"<\/span>\n    deploy <span class=\"s2\">\"green\"<\/span> <span class=\"s2\">\"blue\"<\/span>\n<span class=\"k\">elif<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$ACTIVE_COLOR<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">\"blue\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span>\n    <span class=\"c\"># if the active is 'blue', deploy 'green'<\/span>\n    <span class=\"nv\">PREVIOUS_COLOR<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"blue\"<\/span>\n    deploy <span class=\"s2\">\"blue\"<\/span> <span class=\"s2\">\"green\"<\/span>\n<span class=\"k\">else<\/span>\n    <span class=\"c\"># if the active is neither 'green' nor 'blue', reset to 'blue'<\/span>\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83d\udea7 Unexpected CONTAINER_COLOR value. Resetting to 'blue'...\"<\/span>\n    <span class=\"nv\">PREVIOUS_COLOR<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\"<\/span>\n    docker compose <span class=\"nt\">--profile<\/span> blue up <span class=\"nt\">-d<\/span>\n    wait_for_health <span class=\"s2\">\"blue\"<\/span>\n    install_dependencies <span class=\"s2\">\"blue\"<\/span>\n    update_nginx_config <span class=\"s2\">\"blue\"<\/span>\n    update_env_file <span class=\"s2\">\"blue\"<\/span>\n<span class=\"k\">fi\n\n<\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"\ud83c\udf89 Deployment successful!\"<\/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<ol>\n<li>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc NGINX: \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0631\u0627 \u0628\u0647 \u0645\u062d\u06cc\u0637 \u0641\u0639\u0627\u0644 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p><code>nginx\/default.conf<\/code><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ini\"><code><span class=\"err\">server<\/span> <span class=\"err\">{<\/span>\n    <span class=\"err\">listen<\/span> <span class=\"err\">80<\/span><span class=\"c\">;\n<\/span>    <span class=\"err\">index<\/span> <span class=\"err\">index.php<\/span> <span class=\"err\">index.html<\/span><span class=\"c\">;\n<\/span>    <span class=\"err\">client_max_body_size<\/span> <span class=\"err\">20M<\/span><span class=\"c\">;\n<\/span>    <span class=\"err\">root<\/span> <span class=\"err\">\/var\/www\/html\/public<\/span><span class=\"c\">;\n<\/span>\n    <span class=\"err\">location<\/span> <span class=\"err\">\/<\/span> <span class=\"err\">{<\/span>\n        <span class=\"err\">try_files<\/span> <span class=\"err\">$uri<\/span> <span class=\"err\">$uri\/<\/span> <span class=\"err\">\/index.php?$query_string<\/span><span class=\"c\">;\n<\/span>    <span class=\"err\">}<\/span>\n\n    <span class=\"err\">location<\/span> <span class=\"err\">~<\/span> <span class=\"err\">\\.php$<\/span> <span class=\"err\">{<\/span>\n        <span class=\"err\">fastcgi_pass<\/span> <span class=\"err\">app_backend<\/span><span class=\"c\">;\n<\/span>        <span class=\"err\">fastcgi_param<\/span> <span class=\"err\">SCRIPT_FILENAME<\/span> <span class=\"err\">$document_root$fastcgi_script_name<\/span><span class=\"c\">;\n<\/span>        <span class=\"err\">include<\/span> <span class=\"err\">fastcgi_params<\/span><span class=\"c\">;\n<\/span>    <span class=\"err\">}<\/span>\n\n    <span class=\"err\">location<\/span> <span class=\"err\">~<\/span> <span class=\"err\">\/\\.ht<\/span> <span class=\"err\">{<\/span>\n        <span class=\"err\">deny<\/span> <span class=\"err\">all<\/span><span class=\"c\">;\n<\/span>    <span class=\"err\">}<\/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<ol>\n<li>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc PHP-FPM: \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc PHP \u0631\u0627 \u0628\u0631\u0627\u06cc \u0644\u0627\u0631\u0627\u0648\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p><code>php\/www.conf<\/code><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ini\"><code><span class=\"py\">listen<\/span> <span class=\"p\">=<\/span> <span class=\"s\">9000<\/span>\n<span class=\"py\">user<\/span> <span class=\"p\">=<\/span> <span class=\"s\">www-data<\/span>\n<span class=\"py\">group<\/span> <span class=\"p\">=<\/span> <span class=\"s\">www-data<\/span>\n\n<span class=\"nn\">[www]<\/span>\n<span class=\"py\">pm<\/span> <span class=\"p\">=<\/span> <span class=\"s\">dynamic<\/span>\n<span class=\"py\">pm.max_children<\/span> <span class=\"p\">=<\/span> <span class=\"s\">20<\/span>\n<span class=\"py\">pm.start_servers<\/span> <span class=\"p\">=<\/span> <span class=\"s\">10<\/span>\n<span class=\"py\">pm.min_spare_servers<\/span> <span class=\"p\">=<\/span> <span class=\"s\">5<\/span>\n<span class=\"py\">pm.max_spare_servers<\/span> <span class=\"p\">=<\/span> <span class=\"s\">15<\/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<ol>\n<li>Dockerfile: \u0645\u062d\u06cc\u0637 Laravel \u0631\u0627 \u0628\u0627 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p><code>Dockerfile<\/code><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> php:8.2.0-fpm<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/var\/www\/html<\/span>\n<span class=\"k\">RUN <\/span>apt-get update <span class=\"o\">&amp;&amp;<\/span> apt-get <span class=\"nb\">install<\/span> <span class=\"nt\">-y<\/span> <span class=\"se\">\\\n<\/span>    curl <span class=\"se\">\\\n<\/span>    dos2unix <span class=\"se\">\\\n<\/span>    git <span class=\"se\">\\\n<\/span>    libonig-dev <span class=\"se\">\\\n<\/span>    libpng-dev <span class=\"se\">\\\n<\/span>    libxml2-dev <span class=\"se\">\\\n<\/span>    libzip-dev <span class=\"se\">\\\n<\/span>    unzip <span class=\"se\">\\\n<\/span>    zip <span class=\"se\">\\\n<\/span>    libfcgi0ldbl <span class=\"se\">\\\n<\/span>    <span class=\"o\">&amp;&amp;<\/span> apt-get clean <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> \/var\/lib\/apt\/lists\/<span class=\"k\">*<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"o\">&amp;&amp;<\/span> docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip <span class=\"se\">\\\n<\/span>    <span class=\"o\">&amp;&amp;<\/span> curl <span class=\"nt\">-sS<\/span> https:\/\/getcomposer.org\/installer | php <span class=\"nt\">--<\/span> <span class=\"nt\">--install-dir<\/span><span class=\"o\">=<\/span>\/usr\/local\/bin <span class=\"nt\">--filename<\/span><span class=\"o\">=<\/span>composer <span class=\"se\">\\\n<\/span>    <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/www\/html\/storage \/var\/www\/html\/bootstrap\/cache <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">chown<\/span> <span class=\"nt\">-R<\/span> :www-data .\/bootstrap\/cache <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> storage <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">cd <\/span>storage\/ <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> logs <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> app <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> framework\/sessions <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> framework\/views <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> framework\/cache <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">chmod<\/span> <span class=\"nt\">-R<\/span> 775 framework logs app <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"nb\">chown<\/span> <span class=\"nt\">-R<\/span> :www-data .\/framework .\/logs .\/app <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    git config <span class=\"nt\">--global<\/span> <span class=\"nt\">--add<\/span> safe.directory <span class=\"s1\">'*'<\/span>\n\n<span class=\"k\">COPY<\/span><span class=\"s\"> .\/scripts\/start.sh \/usr\/local\/bin\/start.sh<\/span>\n<span class=\"k\">RUN <\/span><span class=\"nb\">chmod<\/span> +x \/usr\/local\/bin\/start.sh\n<span class=\"k\">CMD<\/span><span class=\"s\"> [\"\/usr\/local\/bin\/start.sh\"]<\/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<ol>\n<li>Docker Compose: \u0638\u0631\u0648\u0641 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u060c NGINX \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p><code>docker-compose.yml<\/code><\/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\">blue<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">blue<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.env<\/span>\n    <span class=\"na\">profiles<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">blue<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/docker<\/span>\n      <span class=\"na\">dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/:\/var\/www\/html<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/docker\/supervisor\/supervisord.conf:\/etc\/supervisor\/supervisord.conf<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/docker\/php\/www.conf:\/usr\/local\/etc\/php-fpm.d\/www.conf<\/span>\n    <span class=\"na\">healthcheck<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">test<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">CMD-SHELL\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">SCRIPT_FILENAME=\/var\/www\/html\/public\/index.php<\/span><span class=\"nv\"> <\/span><span class=\"s\">REQUEST_METHOD=GET<\/span><span class=\"nv\"> <\/span><span class=\"s\">cgi-fcgi<\/span><span class=\"nv\"> <\/span><span class=\"s\">-bind<\/span><span class=\"nv\"> <\/span><span class=\"s\">-connect<\/span><span class=\"nv\"> <\/span><span class=\"s\">127.0.0.1:9000<\/span><span class=\"nv\"> <\/span><span class=\"s\">||<\/span><span class=\"nv\"> <\/span><span class=\"s\">exit<\/span><span class=\"nv\"> <\/span><span class=\"s\">1\"<\/span><span class=\"pi\">]<\/span>\n      <span class=\"na\">interval<\/span><span class=\"pi\">:<\/span> <span class=\"s\">30s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">10s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n\n  <span class=\"na\">green<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">green<\/span>\n    <span class=\"na\">profiles<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">green<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.env<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/docker<\/span>\n      <span class=\"na\">dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/:\/var\/www\/html<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/docker\/supervisor\/supervisord.conf:\/etc\/supervisor\/supervisord.conf<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/docker\/php\/www.conf:\/usr\/local\/etc\/php-fpm.d\/www.conf<\/span>\n    <span class=\"na\">healthcheck<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">test<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">CMD-SHELL\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">SCRIPT_FILENAME=\/var\/www\/html\/public\/index.php<\/span><span class=\"nv\"> <\/span><span class=\"s\">REQUEST_METHOD=GET<\/span><span class=\"nv\"> <\/span><span class=\"s\">cgi-fcgi<\/span><span class=\"nv\"> <\/span><span class=\"s\">-bind<\/span><span class=\"nv\"> <\/span><span class=\"s\">-connect<\/span><span class=\"nv\"> <\/span><span class=\"s\">127.0.0.1:9000<\/span><span class=\"nv\"> <\/span><span class=\"s\">||<\/span><span class=\"nv\"> <\/span><span class=\"s\">exit<\/span><span class=\"nv\"> <\/span><span class=\"s\">1\"<\/span><span class=\"pi\">]<\/span>\n      <span class=\"na\">interval<\/span><span class=\"pi\">:<\/span> <span class=\"s\">30s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">10s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n\n  <span class=\"na\">app<\/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\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app<\/span>\n    <span class=\"na\">profiles<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">blue<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">green<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">${PORT-80}:80\"<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/:\/var\/www\/html<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/docker\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf<\/span>\n    <span class=\"na\">healthcheck<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">test<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">CMD\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">curl\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-f\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">http:\/\/localhost\"<\/span><span class=\"pi\">]<\/span>\n      <span class=\"na\">interval<\/span><span class=\"pi\">:<\/span> <span class=\"s\">30s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">10s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/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%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A8%D9%87%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C_%D8%AF%D8%B1_%D8%B9%D9%85%D9%84\"><\/span>\n<p>  \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u062f\u0631 \u0639\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%DA%86%DA%AF%D9%88%D9%86%D9%87_%DA%A9%D8%A7%D8%B1_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF\"><\/span>\n<p>  \u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627:\n<ul>\n<li>\u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u062c\u062f\u06cc\u062f (\u0622\u0628\u06cc \u06cc\u0627 \u0633\u0628\u0632) \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0622\u0645\u0627\u062f\u06af\u06cc \u0638\u0631\u0641 \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\u0627\u06af\u0631 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u0648\u062f:\n<ul>\n<li>\u062a\u0631\u0627\u0641\u06cc\u06a9 \u0628\u0647 \u0645\u062d\u06cc\u0637 \u062c\u062f\u06cc\u062f \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0645\u062d\u06cc\u0637 \u0642\u062f\u06cc\u0645\u06cc \u0628\u06cc\u06a9\u0627\u0631 \u0645\u06cc \u0634\u0648\u062f \u060c \u0622\u0645\u0627\u062f\u0647 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n<\/li>\n<li>\u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc:\n<ul>\n<li>\u06cc\u06a9 \u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0631\u06af\u0634\u062a \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f \u0648 \u0645\u062d\u06cc\u0637 \u0641\u0639\u0627\u0644 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u0642\u06cc \u0645\u06cc \u0645\u0627\u0646\u062f.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D9%88%D9%86%D9%87_%D8%A8%D8%B1%DA%AF%D8%B4%D8%AA_%D8%AE%D9%88%D8%AF%DA%A9%D8%A7%D8%B1\"><\/span>\n<p>  \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u06af\u0634\u062a \u062e\u0648\u062f\u06a9\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u060c \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u0631\u062e \u0645\u06cc \u062f\u0647\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644:<\/p>\n<ul>\n<li>\u0622\u0628\u06cc \u0641\u0639\u0627\u0644 \u0627\u0633\u062a \u0648 \u0633\u0628\u0632 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u0631\u0627 \u0634\u06a9\u0633\u062a \u0645\u06cc \u062f\u0647\u062f.<\/li>\n<li>\u062a\u0631\u0627\u0641\u06cc\u06a9 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647 \u0631\u0646\u06af \u0622\u0628\u06cc \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0638\u0631\u0641 \u0633\u0628\u0632 \u0645\u0639\u06cc\u0648\u0628 \u0628\u0631\u062f\u0627\u0634\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648 \u062b\u0628\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%AB%D8%A7%D9%84%D9%87%D8%A7\"><\/span>\n<p>  \u0645\u062b\u0627\u0644\u0647\u0627:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\"><\/span>\n<p>  \u067e\u0627\u06cc\u0627\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0646\u062d\u0648\u0647 \u0634\u0628\u06cc\u0647 \u0633\u0627\u0632\u06cc \u0648 \u062f\u0631\u06a9 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Docker \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0628\u0647\u062f\u0627\u0634\u062a\u06cc \u060c \u062a\u0639\u0648\u06cc\u0636 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0648 \u0628\u0627\u0632\u06af\u0634\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0631\u0627\u0628\u06cc \u0631\u0627 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0628\u0631\u0633\u0627\u0646\u06cc\u062f \u0648 \u0627\u0632 \u062b\u0628\u0627\u062a \u062f\u0631 \u0637\u0648\u0644 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0633\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0645\u0641\u0627\u0647\u06cc\u0645 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062f\u0631\u062c\u0647 \u062a\u0648\u0644\u06cc\u062f \u06af\u0633\u062a\u0631\u0634 \u06cc\u0627\u0628\u062f.<\/p>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0645\u0642\u06cc\u0627\u0633 \u06af\u0630\u0627\u0631\u06cc \u0628\u0647 \u062a\u0648\u0644\u06cc\u062f \u060c \u0627\u0632 \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648 \u0627\u0635\u0644\u0627\u062d \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06a9\u062f \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062e\u0632\u0646<\/p>\n<p>\u0627\u0639\u062a\u0628\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631: \u0622\u0631\u0646\u0648\u0644\u062f \u0641\u0631\u0627\u0646\u0633\u06cc\u0633\u06a9\u0627 \u060c \u0627\u0632 \u0637\u0631\u06cc\u0642 Unsplash (https:\/\/unsplash.com\/)<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0642\u062f\u0645\u0647 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0628\u06cc-\u0633\u0628\u0632 \u06cc\u06a9 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u062e\u0631\u0627\u0628\u06cc \u0648 \u062e\u0637\u0631\u0627\u062a \u062f\u0631 \u062d\u06cc\u0646 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0634\u0627\u0645\u0644 \u0627\u062c\u0631\u0627\u06cc \u062f\u0648 \u0645\u062d\u06cc\u0637 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u060c \u0622\u0628\u06cc \u0648 \u0633\u0628\u0632 \u0627\u0633\u062a \u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u06cc\u06a9\u06cc \u062f\u0631 \u062e\u062f\u0645\u062a \u062a\u0631\u0627\u0641\u06cc\u06a9 (\u0645\u062d\u06cc\u0637 \u0641\u0639\u0627\u0644) \u0627\u0633\u062a \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u06cc\u06a9\u0627\u0631 \u06cc\u0627 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u0627\u0633\u062a. &hellip;<\/p>\n","protected":false},"author":2,"featured_media":95013,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femi21bs0zp5vmvhfhsae.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-95012","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\/95012","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=95012"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/95012\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/95013"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=95012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=95012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=95012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}