{"id":65756,"date":"2024-06-08T22:44:01","date_gmt":"2024-06-08T19:14:01","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/"},"modified":"2024-06-08T22:44:01","modified_gmt":"2024-06-08T19:14:01","slug":"%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/","title":{"rendered":"\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0645\u0631\u062d\u0644\u0647 nextpalestine: \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc"},"content":{"rendered":"<p><\/p>\n<div data-article-id=\"1879163\" id=\"article-body\">\n<p>\u0634\u06cc\u0631\u062c\u0647 \u0639\u0645\u06cc\u0642 \u0628\u0647 \u0628\u0639\u062f\u06cc \u0641\u0644\u0633\u0637\u06cc\u0646:<br \/>\u067e\u0644\u062a\u0641\u0631\u0645 \u0648\u0628\u0644\u0627\u06af \u0646\u0648\u06cc\u0633\u06cc \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u063a\u0646\u06cc \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0628\u0627 Next.js \u0648 Nest.js<\/p>\n<p>\u0622\u06cc\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0648\u0628\u0644\u0627\u06af \u0646\u0648\u06cc\u0633\u06cc \u0632\u06cc\u0628\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f\u061f  \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u0645\u0627 nextpalestine \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f!<br \/>\u067e\u0644\u062a \u0641\u0631\u0645 \u0648\u0628\u0644\u0627\u06af \u0646\u0648\u06cc\u0633\u06cc \u0628\u062f\u0648\u0646 \u062f\u0631\u062f\u0633\u0631 \u0628\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631.  \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u062f\u0631 GitHub!\u060c \u0627\u06cc\u0646 \u0627\u0631\u0627\u0626\u0647 \u0628\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627\u06cc nextpalestine \u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u062f.<\/p>\n<p>nextpalestine \u0628\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u0633\u0627\u062e\u062a\u0627\u0631 mono-repo \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>.\n\u251c\u2500\u2500 frontend\n\u2502   \u2514\u2500\u2500 package.json\n\u251c\u2500\u2500 backend\n\u2502   \u2514\u2500\u2500 package.json\n\u2514\u2500\u2500 package.json\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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div 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%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#root_packagejson\" >root package.json:<\/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%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#%D9%BE%D9%88%D8%B4%D9%87_husky\" >\u067e\u0648\u0634\u0647 .\/husky:<\/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%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#composeyaml\" >compose.yaml<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#1-_mongo-express\" >1- mongo-express:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#2-_%D9%85%D9%88%D9%86%DA%AF%D9%88\" >2- \u0645\u0648\u0646\u06af\u0648:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#3-_Backend_Nestjs\" >3- Backend (Nest.js)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%b1%d8%ad%d9%84%d9%87-%d8%a8%d9%87-%d9%85%d8%b1%d8%ad%d9%84%d9%87-nextpalestine-%d9%86%d9%85%d8%a7%db%8c-%da%a9%d9%84%db%8c\/#3-_frontend_Nexttjs\" >3- frontend (Nextt.js)<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"root_packagejson\"><\/span>\n<p>  root package.json:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"nextpalestine-monorepo\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"version\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"0.1.0\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"private\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"license\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"GPL\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Blogging platform\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"repository\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"git\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"url\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"<https:>\"<\/https:><\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"author\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Adel Benyahia <adelpro>\"<\/adelpro><\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"authors\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\"Adel Benyahia <adelpro>\"<\/adelpro><\/span><span class=\"p\">],<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"engines\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"node\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"&gt;=18\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"devDependencies\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"husky\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"^8.0.0\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"npm-run-all\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"^4.1.5\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"backend\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npm run start:dev -w backend\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"frontend\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npm run dev -w frontend\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"frontend:prod\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npm run build -w frontend &amp;&amp; npm run start:prod -w frontend\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"backend:prod\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npm run build -w backend &amp;&amp; npm run start:prod -w backend\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"dev\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npm-run-all --parallel backend frontend\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"start\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npm-run-all --parallel backend:prod frontend:prod\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"docker:build\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"docker compose down &amp;&amp; docker compose up -d --build\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"prepare\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"husky install\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"workspaces\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\"backend\"<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"frontend\"<\/span><span class=\"p\">],<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"lint-staged\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"**\/*.{js,jsx,ts,tsx}\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\"npx prettier --write\"<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"npx eslint --fix\"<\/span><span class=\"p\">]<\/span><span class=\"w\">\n  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <\/p>\n<p>\u0628\u0633\u062a\u0647 npm-run-all \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0686\u0646\u062f\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u0647\u0645\u0632\u0645\u0627\u0646\u060c \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u062f\u0633\u062a\u0648\u0631 <code>start<\/code> \u062f\u0648 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u0648\u0627\u0632\u06cc \u0634\u0631\u0648\u0639 \u0645\u06cc \u06a9\u0646\u062f <code>backend<\/code> \u0648  <code>frontend<\/code> .<\/p>\n<p>\u0627\u06af\u0631 \u067e\u0648\u0634\u0647 .husky \u0631\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 root \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u0632 Husky \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0642\u0644\u0627\u0628\u200c\u0647\u0627\u06cc \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"err\">.<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u251c\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">.husky<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u2502<\/span><span class=\"w\">   <\/span><span class=\"err\">\u2514\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">_<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u2502<\/span><span class=\"w\">   <\/span><span class=\"err\">\u2514\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">pre-commit<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u251c\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">frontend<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u2502<\/span><span class=\"w\">   <\/span><span class=\"err\">\u2514\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">package.json<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u251c\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">backend<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u2502<\/span><span class=\"w\">   <\/span><span class=\"err\">\u2514\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">package.json<\/span><span class=\"w\">\n<\/span><span class=\"err\">\u2514\u2500\u2500<\/span><span class=\"w\"> <\/span><span class=\"err\">package.json<\/span><span class=\"w\">\n<\/span><\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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=\"%D9%BE%D9%88%D8%B4%D9%87_husky\"><\/span>\n<p>  \u067e\u0648\u0634\u0647 .\/husky:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u0627\u0632 \u0647\u0627\u0633\u06a9\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u062a\u0627 \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u06cc\u0645\u060c \u0648 \u0628\u0631\u0627\u06cc \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0632 \u0628\u0633\u062a\u0647 \u062f\u0648\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645: lint-staged \u062a\u0627 \u0641\u0642\u0637 \u06a9\u062f \u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc \u0631\u0627 \u067e\u0631 \u06a9\u0646\u062f (\u06a9\u062f \u062a\u0627\u0632\u0647 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u06cc\u0627 \u0627\u0635\u0644\u0627\u062d \u0634\u062f\u0647)<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"w\">\n<\/span><span class=\"err\">#!\/usr\/bin\/env<\/span><span class=\"w\"> <\/span><span class=\"err\">sh<\/span><span class=\"w\">\n<\/span><span class=\"err\">.<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"$(dirname -- \"<\/span><span class=\"err\">$<\/span><span class=\"mi\">0<\/span><span class=\"s2\">\")\/_\/husky.sh\"<\/span><span class=\"w\">\n\n<\/span><span class=\"err\">#<\/span><span class=\"w\"> <\/span><span class=\"err\">Exit<\/span><span class=\"w\"> <\/span><span class=\"err\">immediately<\/span><span class=\"w\"> <\/span><span class=\"err\">if<\/span><span class=\"w\"> <\/span><span class=\"err\">any<\/span><span class=\"w\"> <\/span><span class=\"err\">command<\/span><span class=\"w\"> <\/span><span class=\"err\">exits<\/span><span class=\"w\"> <\/span><span class=\"err\">with<\/span><span class=\"w\"> <\/span><span class=\"err\">a<\/span><span class=\"w\"> <\/span><span class=\"err\">non-zero<\/span><span class=\"w\"> <\/span><span class=\"err\">status.<\/span><span class=\"w\">\n<\/span><span class=\"err\">set<\/span><span class=\"w\"> <\/span><span class=\"err\">-e<\/span><span class=\"w\">\n\n<\/span><span class=\"err\">echo<\/span><span class=\"w\"> <\/span><span class=\"err\">'Linting<\/span><span class=\"w\"> <\/span><span class=\"err\">project<\/span><span class=\"w\"> <\/span><span class=\"err\">before<\/span><span class=\"w\"> <\/span><span class=\"err\">committing'<\/span><span class=\"w\">\n<\/span><span class=\"err\">npx<\/span><span class=\"w\"> <\/span><span class=\"err\">lint-staged<\/span><span class=\"w\">\n<\/span><\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\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=\"composeyaml\"><\/span>\n<p>  compose.yaml<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 docker \u0634\u062f\u0647 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0647\u0631 \u0633\u06cc\u0633\u062a\u0645\u06cc \u06a9\u0647 \u062f\u0627\u06a9\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0635\u062d\u06cc\u062d Deploy \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u062f\u0631 docker \u0628\u0627\u06cc\u062f:<\/p>\n<p>1- \u0645\u062e\u0632\u0646 \u0645\u0627 \u0631\u0627 \u06a9\u0644\u0648\u0646 \u06a9\u0646\u06cc\u062f:  <code>git clone [https:\/\/github.com\/adelpro\/nextpalestine.git](https:\/\/github.com\/adelpro\/nextpalestine.git)<\/code><\/p>\n<p>2- \u06cc\u06a9 \u0641\u0627\u06cc\u0644 .env.production \u062f\u0631 \u067e\u0648\u0634\u0647 frontend \u062a\u0631\u0627\u0632 \u0634\u062f\u0647 \u0628\u0627 env.example (\u062f\u0631 \u0647\u0645\u0627\u0646 \u067e\u0648\u0634\u0647) \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>3- \u06cc\u06a9 \u0641\u0627\u06cc\u0644 .env.production \u062f\u0631 \u067e\u0648\u0634\u0647 backend \u062a\u0631\u0627\u0632 \u0634\u062f\u0647 \u0628\u0627 env.example (\u062f\u0631 \u0647\u0645\u0627\u0646 \u067e\u0648\u0634\u0647) \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>4- \u062f\u0648\u06cc\u062f\u0646: <code>docker compose up -d<\/code><\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0641\u0627\u06cc\u0644 compose.yaml \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc \u062f\u0647\u06cc\u0645<\/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=\"c1\"># Fontend: NextJs<\/span>\n  <span class=\"na\">frontend<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/frontend\/.env.production<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine-frontend<\/span>\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine-frontend<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/frontend<\/span>\n      <span class=\"na\">dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\n      <span class=\"na\">args<\/span><span class=\"pi\">:<\/span>\n        <span class=\"pi\">-<\/span> <span class=\"s\">DOCKER_BUILDKIT=1<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">3540:3540<\/span>\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">unless-stopped<\/span>\n    <span class=\"na\">depends_on<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">backend<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">condition<\/span><span class=\"pi\">:<\/span> <span class=\"s\">service_healthy<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">\/app\/node_modules<\/span>\n      <span class=\"c1\"># For live reload if the source or env changes<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/frontend\/src:\/app\/src<\/span>\n\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">app-network<\/span>\n  <span class=\"c1\"># Backend: NestJS<\/span>\n  <span class=\"na\">backend<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine-backend<\/span>\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine-backend<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/.env.production<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/backend<\/span>\n      <span class=\"na\">dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\n      <span class=\"na\">args<\/span><span class=\"pi\">:<\/span>\n        <span class=\"pi\">-<\/span> <span class=\"s\">DOCKER_BUILDKIT=1<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">3500:3500<\/span>\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">unless-stopped<\/span>\n    <span class=\"na\">depends_on<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">mongodb<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">condition<\/span><span class=\"pi\">:<\/span> <span class=\"s\">service_healthy<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">backend_v_logs:\/app\/logs<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">backend_v_public:\/app\/public<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">\/app\/node_modules<\/span>\n      <span class=\"c1\"># For live reload if the source or env changes<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/src:\/app\/src<\/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\">curl<\/span><span class=\"nv\"> <\/span><span class=\"s\">-f<\/span><span class=\"nv\"> <\/span><span class=\"s\">http:\/\/backend:3500\/health<\/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\">5s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">20s<\/span>\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">app-network<\/span>\n\n  <span class=\"c1\"># Database: Mongodb<\/span>\n  <span class=\"na\">mongodb<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">mongodb<\/span>\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">mongo:latest<\/span>\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">unless-stopped<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">27018:27017<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/.env.production<\/span>\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">app-network<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">mongodb_data:\/data\/db<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">\/etc\/timezone:\/etc\/timezone:ro<\/span>\n      <span class=\"c1\">#- type: bind<\/span>\n      <span class=\"c1\">#    source: .\/mongo-entrypoint<\/span>\n      <span class=\"c1\">#    target: \/docker-entrypoint-initdb.d\/<\/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\">mongosh\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">--eval\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">db.adminCommand('ping')\"<\/span><span class=\"pi\">]<\/span>\n      <span class=\"na\">interval<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">20s<\/span>\n\n  <span class=\"c1\"># Database UI: Mongo Express<\/span>\n  <span class=\"na\">mongo-express<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">mongo-express:1.0.2-20-alpine3.19<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">mongo-express<\/span>\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">always<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">8081:8081<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/.env.production<\/span>\n    <span class=\"na\">depends_on<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">mongodb<\/span>\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">app-network<\/span>\n<span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">backend_v_logs<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine_v_backend_logs<\/span>\n  <span class=\"na\">backend_v_public<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine_v_backend_public<\/span>\n  <span class=\"na\">mongodb_data<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine_v_mongodb_data<\/span>\n    <span class=\"na\">driver<\/span><span class=\"pi\">:<\/span> <span class=\"s\">local<\/span>\n<span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">app-network<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">driver<\/span><span class=\"pi\">:<\/span> <span class=\"s\">bridge<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0645\u0627 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0686\u0647\u0627\u0631\u0645 \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1-_mongo-express\"><\/span>\n<p>  1- mongo-express:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>mongo-express \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0645\u062f\u06cc\u0631\u06cc\u062a MongoDB \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0648\u0628 \u0627\u0633\u062a<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2-_%D9%85%D9%88%D9%86%DA%AF%D9%88\"><\/span>\n<p>  2- \u0645\u0648\u0646\u06af\u0648:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062a\u0635\u0648\u06cc\u0631 \u0631\u0633\u0645\u06cc \u062f\u0627\u06a9\u0631 \u0645\u0648\u0646\u06af\u0648\u060c \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u06cc\u06a9 \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u0645\u060c \u0628\u0639\u062f\u0627\u064b \u062f\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0637\u0646 \u0628\u0647 \u0622\u0646 \u0646\u06cc\u0627\u0632 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u0634\u062a.<\/p>\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\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">mongosh\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">--eval\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">db.adminCommand('ping')\"<\/span><span class=\"pi\">]<\/span>\n      <span class=\"na\">interval<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">20s<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0641\u0627\u06cc\u0644 .env \u0631\u0627 \u0627\u0632 \u067e\u0648\u0634\u0647 backend \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code>    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/.env.production<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc env \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"s\">MONGO_INITDB_ROOT_USERNAME=root<\/span>\n<span class=\"s\">MONGO_INITDB_ROOT_PASSWORD=password<\/span>\n<span class=\"s\">MONGO_DATABASE_NAME=database<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648 \u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062d\u062c\u0645 \u062b\u0627\u0628\u062a (\u0646\u0627\u0645\u200c\u06af\u0630\u0627\u0631\u06cc\u200c\u0634\u062f\u0647) \u0628\u0631\u0627\u06cc \u062a\u062f\u0627\u0648\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u06cc\u0646 \u0633\u0627\u062e\u062a\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0647\u0633\u062a\u06cc\u0645\u060c \u062e\u0637 \u062f\u0648\u0645 \u06cc\u06a9 \u0647\u06a9 \u0628\u0631\u0627\u06cc \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642\u0647 \u0632\u0645\u0627\u0646\u06cc \u0628\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 docker \u0648 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0645\u064f\u0647\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0634\u0645\u0627 \u0628\u0627 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u0645\u0646\u0637\u0642\u0647 \u0632\u0645\u0627\u0646\u06cc \u0633\u06cc\u0633\u062a\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code>    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">mongodb_data:\/data\/db<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">\/etc\/timezone:\/etc\/timezone:ro<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0648\u0631\u062a \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0631\u0627 \u0646\u06cc\u0632 \u0628\u0647 (27018) \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u06cc\u0645\u060c <code>27018:27017<\/code> \u0627\u06cc\u0646 \u0627\u0632 \u0647\u0631\u06af\u0648\u0646\u0647 \u062a\u0636\u0627\u062f \u0628\u0627 \u0647\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 mongodb \u0646\u0635\u0628 \u0634\u062f\u0647 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0628\u0627 \u067e\u0648\u0631\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636 (27017) \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3-_Backend_Nestjs\"><\/span>\n<p>  3- Backend (Nest.js)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code>  <span class=\"na\">backend<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">container_name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine-backend<\/span>\n    <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nextpalestine-backend<\/span>\n    <span class=\"na\">env_file<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/.env.production<\/span>\n    <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/backend<\/span>\n      <span class=\"na\">dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\n      <span class=\"na\">args<\/span><span class=\"pi\">:<\/span>\n        <span class=\"pi\">-<\/span> <span class=\"s\">DOCKER_BUILDKIT=1<\/span>\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">3500:3500<\/span>\n    <span class=\"na\">restart<\/span><span class=\"pi\">:<\/span> <span class=\"s\">unless-stopped<\/span>\n    <span class=\"na\">depends_on<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">mongodb<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">condition<\/span><span class=\"pi\">:<\/span> <span class=\"s\">service_healthy<\/span>\n    <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">backend_v_logs:\/app\/logs<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">backend_v_public:\/app\/public<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">\/app\/node_modules<\/span>\n      <span class=\"c1\"># For live reload if the source or env changes<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">.\/backend\/src:\/app\/src<\/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\">curl<\/span><span class=\"nv\"> <\/span><span class=\"s\">-f<\/span><span class=\"nv\"> <\/span><span class=\"s\">http:\/\/backend:3500\/health<\/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\">5s<\/span>\n      <span class=\"na\">timeout<\/span><span class=\"pi\">:<\/span> <span class=\"s\">5s<\/span>\n      <span class=\"na\">retries<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\n      <span class=\"na\">start_period<\/span><span class=\"pi\">:<\/span> <span class=\"s\">20s<\/span>\n    <span class=\"na\">networks<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">app-network<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0631 \u0631\u0648\u06cc .\/backend\/Dockerfile \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 DOCKER_BUILDER=1 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0627\u0641\u0632\u0627\u06cc\u0634 \u0633\u0631\u0639\u062a \u0633\u0627\u062e\u062a \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<ul>\n<li>\u0645\u062a\u063a\u06cc\u0631 Env \u0627\u0632 .\/backend\/.env.production \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0627\u06cc\u0646 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631 mongodb \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u062f\u060c \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0646\u06af\u0648 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u0648 \u0633\u0627\u0644\u0645 \u0634\u0631\u0648\u0639 \u0646\u0634\u0648\u062f\u060c \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0637\u0646 \u0634\u0631\u0648\u0639 \u0646\u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0637\u0646 \u062f\u0627\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a\u06cc \u062e\u0648\u062f \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u062a\u0635\u0648\u06cc\u0631 \u062c\u0644\u0648\u06cc\u06cc (Next.js) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/li>\n<li>\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062f\u0627\u0645\u0647 \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627 \u0648 \u067e\u0648\u0634\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u062c\u0645\u200c\u0647\u0627\u06cc \u0646\u0627\u0645\u200c\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0647\u0633\u062a\u06cc\u0645.<\/li>\n<li>\u0627\u06cc\u0646 \u062c\u0644\u062f: <code>\/app\/node_modules<\/code> \u0628\u0631\u0627\u06cc \u062a\u062f\u0627\u0648\u0645 node_module \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0627\u06cc\u0646 \u062c\u0644\u062f: <code>.\/backend\/src:\/app\/src<\/code> \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u062a\u0635\u0648\u06cc\u0631 \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u062f.<\/li>\n<li>\u0628\u0646\u062f\u0631 <code>3500:3500<\/code> \u0628\u0631\u0627\u06cc Backend \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<\/ul>\n<p>\u0627\u06a9\u0646\u0648\u0646 Dockerfile \u0628\u06a9\u200c\u0627\u0646\u062f (\u062f\u0631 \u067e\u0648\u0634\u0647 \u0628\u0627\u0637\u0646) \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"s\">ARG NODE=node:21-alpine3.19<\/span>\n\n<span class=\"c1\"># Stage 1: builder<\/span>\n<span class=\"s\">FROM ${NODE} AS builder<\/span>\n\n<span class=\"c1\"># Combine commands to reduce layers<\/span>\n<span class=\"s\">RUN apk add --no-cache libc6-compat \\<\/span>\n    <span class=\"s\">&amp;&amp; apk add --no-cache curl \\<\/span>\n    <span class=\"s\">&amp;&amp; addgroup --system --gid 1001 nodejs \\<\/span>\n    <span class=\"s\">&amp;&amp; adduser --system --uid 1001 nestjs<\/span>\n\n<span class=\"s\">WORKDIR \/app<\/span>\n\n<span class=\"s\">COPY --chown=nestjs:nodejs package*.json .\/<\/span>\n\n<span class=\"s\">RUN --mount=type=cache,target=\/root\/.yarn YARN_CACHE_FOLDER=\/root\/.yarn \\<\/span>\n    <span class=\"s\">yarn install --frozen-lockfile<\/span>\n\n<span class=\"s\">COPY --chown=nestjs:nodejs . .<\/span>\n\n<span class=\"s\">ENV NODE_ENV production<\/span>\n\n<span class=\"c1\"># Generate the production build. The build script runs \"nest build\" to compile the application.<\/span>\n<span class=\"s\">RUN yarn build<\/span>\n\n<span class=\"c1\"># Install only the production dependencies and clean cache to optimize image size.<\/span>\n<span class=\"s\">RUN --mount=type=cache,target=\/root\/.yarn YARN_CACHE_FOLDER=\/root\/.yarn \\<\/span>\n    <span class=\"s\">yarn install --production --frozen-lockfile &amp;&amp; yarn cache clean<\/span>\n\n<span class=\"s\">USER nestjs<\/span>\n\n<span class=\"c1\"># Stage 2: runner<\/span>\n<span class=\"s\">FROM ${NODE} AS runner<\/span>\n\n<span class=\"s\">RUN apk add --no-cache libc6-compat \\<\/span>\n    <span class=\"s\">&amp;&amp; apk add --no-cache curl \\<\/span>\n    <span class=\"s\">&amp;&amp; addgroup --system --gid 1001 nodejs \\<\/span>\n    <span class=\"s\">&amp;&amp; adduser --system --uid 1001 nestjs<\/span>\n\n<span class=\"s\">WORKDIR \/app<\/span>\n\n<span class=\"c1\"># Set to production environment<\/span>\n<span class=\"s\">ENV NODE_ENV production<\/span>\n\n<span class=\"c1\"># Copy only the necessary files<\/span>\n<span class=\"s\">COPY --chown=nestjs:nodejs --from=builder \/app\/dist .\/dist<\/span>\n<span class=\"s\">COPY --chown=nestjs:nodejs --from=builder \/app\/logs .\/logs<\/span>\n<span class=\"s\">COPY --chown=nestjs:nodejs --from=builder \/app\/public .\/public<\/span>\n<span class=\"s\">COPY --chown=nestjs:nodejs --from=builder \/app\/node_modules .\/node_modules<\/span>\n<span class=\"s\">COPY --chown=nestjs:nodejs --from=builder \/app\/package*.json .\/<\/span>\n\n<span class=\"c1\"># Set Docker as non-root user<\/span>\n<span class=\"s\">USER nestjs<\/span>\n\n<span class=\"s\">EXPOSE <\/span><span class=\"m\">3500<\/span>\n\n<span class=\"s\">ENV HOSTNAME \"0.0.0.0\"<\/span>\n\n<span class=\"s\">CMD [\"node\", \"dist\/main.js\"]<\/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>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 docker \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631 \u0631\u0648\u06cc Linux alpine \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0645\u0627 \u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u0646\u0635\u0628 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>libc6-comat<\/code>  \u0633\u067e\u0633 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0627\u0636\u0627\u0641\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u0646\u0635\u0628 \u0647\u0633\u062a\u06cc\u0645 <code>curl<\/code> \u060c \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0633\u0627\u0644\u0645 \u0628\u0648\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631\u0645\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>\u0633\u067e\u0633 \u067e\u0648\u0634\u0647 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0628\u0627 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628 \u06a9\u067e\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<p>\u0645\u0627 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0634\u06a9\u0627\u06cc\u062a \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>node dist\/main.js<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"3-_frontend_Nexttjs\"><\/span>\n<p>  3- frontend (Nextt.js)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"c1\"># Args<\/span>\n<span class=\"s\">ARG NODE=node:21-alpine3.19<\/span>\n\n<span class=\"c1\"># Stage 1: builder<\/span>\n<span class=\"s\">FROM ${NODE} AS builder<\/span>\n\n<span class=\"s\">RUN apk add --no-cache libc6-compat \\<\/span>\n    <span class=\"s\">&amp;&amp; addgroup --system --gid 1001 nodejs \\<\/span>\n    <span class=\"s\">&amp;&amp; adduser --system --uid 1001 nextjs<\/span>\n\n<span class=\"s\">WORKDIR \/app<\/span>\n\n<span class=\"s\">COPY --chown=nextjs:nodejs package*.json .\/<\/span>\n\n<span class=\"s\">RUN --mount=type=cache,target=\/root\/.yarn YARN_CACHE_FOLDER=\/root\/.yarn \\<\/span>\n    <span class=\"s\">yarn install --frozen-lockfile<\/span>\n\n<span class=\"s\">COPY --chown=nextjs:nodejs . .<\/span>\n\n<span class=\"c1\"># Next.js collects completely anonymous telemetry data about general usage.<\/span>\n<span class=\"c1\"># Learn more here: https:\/\/nextjs.org\/telemetry<\/span>\n<span class=\"c1\"># Uncomment the following line in case you want to disable telemetry during the build.<\/span>\n<span class=\"s\">ENV NEXT_TELEMETRY_DISABLED <\/span><span class=\"m\">1<\/span>\n\n<span class=\"s\">ENV NEXT_PRIVATE_STANDALONE <\/span><span class=\"kc\">true<\/span>\n<span class=\"s\">ENV NODE_ENV production<\/span>\n\n<span class=\"c1\"># Generate the production build<\/span>\n<span class=\"s\">RUN yarn build<\/span>\n\n<span class=\"c1\"># Install only the production dependencies and clean cache<\/span>\n<span class=\"s\">RUN --mount=type=cache,target=\/root\/.yarn YARN_CACHE_FOLDER=\/root\/.yarn \\<\/span>\n    <span class=\"s\">yarn install --frozen-lockfile --production &amp;&amp; yarn cache clean<\/span>\n\n<span class=\"s\">USER nextjs<\/span>\n\n<span class=\"c1\"># Stage 2: runner<\/span>\n<span class=\"s\">FROM ${NODE} AS runner<\/span>\n\n<span class=\"s\">RUN apk add --no-cache libc6-compat \\<\/span>\n    <span class=\"s\">&amp;&amp; addgroup --system --gid 1001 nodejs \\<\/span>\n    <span class=\"s\">&amp;&amp; adduser --system --uid 1001 nextjs<\/span>\n\n<span class=\"s\">WORKDIR \/app<\/span>\n\n<span class=\"s\">ENV NODE_ENV production<\/span>\n\n<span class=\"c1\"># Uncomment the following line in case you want to disable telemetry during runtime.<\/span>\n <span class=\"s\">ENV NEXT_TELEMETRY_DISABLED <\/span><span class=\"m\">1<\/span>\n\n<span class=\"s\">COPY --from=builder \/app\/public .\/public<\/span> \n\n<span class=\"c1\"># Set the correct permission for prerender cache<\/span>\n<span class=\"s\">RUN mkdir .next<\/span>\n<span class=\"s\">RUN chown nextjs:nodejs .next<\/span>\n\n<span class=\"c1\"># Automatically leverage output traces to reduce image size<\/span>\n<span class=\"c1\"># https:\/\/nextjs.org\/docs\/advanced-features\/output-file-tracing<\/span>\n<span class=\"c1\"># Copy next.conf only if it's not the default<\/span>\n<span class=\"s\">COPY --from=builder --chown=nextjs:nodejs \/app\/next.config.js .\/<\/span>\n<span class=\"s\">COPY --from=builder --chown=nextjs:nodejs \/app\/package*.json .\/<\/span>\n<span class=\"s\">COPY --from=builder --chown=nextjs:nodejs \/app\/.next\/standalone .\/<\/span>        \n<span class=\"s\">COPY --from=builder --chown=nextjs:nodejs \/app\/.next\/static .\/.next\/static<\/span>\n\n<span class=\"c1\"># Set Docker as non-root user<\/span>\n<span class=\"s\">USER nextjs<\/span>\n\n<span class=\"s\">EXPOSE <\/span><span class=\"m\">3540<\/span>\n\n<span class=\"s\">ENV PORT <\/span><span class=\"m\">3540<\/span>\n\n<span class=\"s\">ENV HOSTNAME \"0.0.0.0\"<\/span>\n\n<span class=\"c1\"># server.js is created by next build from the standalone output<\/span>\n<span class=\"c1\"># https:\/\/nextjs.org\/docs\/pages\/api-reference\/next-config-js\/output<\/span>\n<span class=\"s\">CMD [\"node\", \"server.js\"]<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646 Dockerfile \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc:<\/p>\n<ul>\n<li>\u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0631\u06cc\u06a9 \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0628\u0631 \u0627\u0633\u0627\u0633 alpine \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/li>\n<li>\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0627\u0636\u0627\u0641\u06cc \u0647\u0633\u062a\u06cc\u0645<\/li>\n<li>\u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u062a\u06a9\u0646\u06cc\u06a9 \u0648\u06cc\u0698\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0646\u062e \u0627\u0632 \u0633\u0627\u062e\u062a\u200c\u0647\u0627\u06cc \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 (DOCKER_BUILDKIT \u0628\u0627\u06cc\u062f \u0641\u0639\u0627\u0644 \u0628\u0627\u0634\u062f)<\/li>\n<\/ul>\n<p><code>--mount=type=cache,target=\/root\/.yarn YARN_CACHE_FOLDER=\/root\/.yarn \\<\/code><\/p>\n<ul>\n<li>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 (\u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc) \u062a\u0644\u0647\u200c\u0645\u062a\u0631\u06cc Next.js \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u062e\u0637 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u0645:<\/li>\n<\/ul>\n<p><code>ENV NEXT_TELEMETRY_DISABLED 1<\/code><\/p>\n<ul>\n<li>\u0633\u067e\u0633 \u0645\u0627 Next.js \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0633\u062a\u0642\u0644 \u0645\u06cc \u0633\u0627\u0632\u06cc\u0645 \u0648 \u067e\u0648\u0634\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/li>\n<li>\u0645\u0627 \u06cc\u06a9 \u067e\u0648\u0631\u062a \u0633\u0641\u0627\u0631\u0634\u06cc \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u06cc\u0645: 3540<\/li>\n<\/ul>\n<p><code>ENV PORT 3540<\/code><\/p>\n<ul>\n<li>\u0648 \u0634\u0631\u0648\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632: <code>node server.js<\/code>\n<\/li>\n<\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0634\u06cc\u0631\u062c\u0647 \u0639\u0645\u06cc\u0642 \u0628\u0647 \u0628\u0639\u062f\u06cc \u0641\u0644\u0633\u0637\u06cc\u0646:\u067e\u0644\u062a\u0641\u0631\u0645 \u0648\u0628\u0644\u0627\u06af \u0646\u0648\u06cc\u0633\u06cc \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u063a\u0646\u06cc \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0628\u0627 Next.js \u0648 Nest.js \u0622\u06cc\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0648\u0628\u0644\u0627\u06af \u0646\u0648\u06cc\u0633\u06cc \u0632\u06cc\u0628\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f\u061f \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u0645\u0627 nextpalestine \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f!\u067e\u0644\u062a \u0641\u0631\u0645 \u0648\u0628\u0644\u0627\u06af \u0646\u0648\u06cc\u0633\u06cc \u0628\u062f\u0648\u0646 \u062f\u0631\u062f\u0633\u0631 \u0628\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631. \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":65757,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media.dev.to\/cdn-cgi\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi9grhpaby8vg4ntk77s.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-65756","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\/65756","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=65756"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/65756\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/65757"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=65756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=65756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=65756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}