{"id":3089,"date":"2026-04-26T07:42:46","date_gmt":"2026-04-26T07:42:46","guid":{"rendered":"https:\/\/maram.iq\/blogs\/?p=3089"},"modified":"2026-04-27T11:12:30","modified_gmt":"2026-04-27T08:12:30","slug":"%d9%85%d9%88%d8%a7%d9%82%d8%b9-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-docker","status":"publish","type":"post","link":"https:\/\/maram.iq\/blogs\/%d9%85%d9%88%d8%a7%d9%82%d8%b9-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3-docker\/","title":{"rendered":"\u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker: \u062a\u0634\u063a\u064a\u0644 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 \u0648\u0627\u062d\u062f 2026"},"content":{"rendered":"\n<div style=\"background:linear-gradient(135deg,#0f172a,#1e40af);color:#fff;padding:2.5rem;border-radius:16px;margin-bottom:2rem;text-align:center\">\n<p style=\"font-size:3rem;margin:0 0 .5rem\">\ud83d\udc33<\/p>\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker: \u0645\u0627 \u062a\u062d\u062a\u0627\u062c \u0645\u0639\u0631\u0641\u062a\u0647<\/h2>\n\n\n<h2 style=\"color:#fff!important;font-size:1.5rem;margin:0 0 .5rem\" id=\"section-1\">\u062a\u0634\u063a\u064a\u0644 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 \u0648\u0627\u062d\u062f \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 Docker \u0641\u064a 2026<\/h2>\n<p style=\"margin:0\">\u062f\u0644\u064a\u0644 \u0639\u0645\u0644\u064a \u0634\u0627\u0645\u0644 \u0644\u0627\u0633\u062a\u0636\u0627\u0641\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0645\u062a\u0639\u062f\u062f\u0629 \u0645\u0639 Nginx \u0648 SSL \u062a\u0644\u0642\u0627\u0626\u064a<\/p>\n<\/div>\n\n\n\n<div class=\"table-of-contents\" style=\"background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:1.5rem;margin:1.5rem 0;\"><p style=\"font-weight:700;font-size:1.05rem;margin-bottom:.75rem;\">\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0627\u0644\u0645\u0642\u0627\u0644<\/p><ul style=\"list-style:none;padding:0;margin:0;\"><li style=\"padding:.25rem 0;\"><a href=\"#section-2\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0644\u0645\u0627\u0630\u0627 Docker \u0644\u0627\u0633\u062a\u0636\u0627\u0641\u0629 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-3\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-4\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u062a\u062b\u0628\u064a\u062a Docker \u0648 Docker Compose<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-5\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0628\u0646\u064a\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-6\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0625\u0639\u062f\u0627\u062f Nginx Reverse Proxy<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-7\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0625\u0646\u0634\u0627\u0621 \u0623\u0648\u0644 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-8\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0625\u0636\u0627\u0641\u0629 \u0645\u0648\u0642\u0639 \u062b\u0627\u0646\u064a \u0648\u062b\u0627\u0644\u062b<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-9\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0625\u0639\u062f\u0627\u062f SSL \u062a\u0644\u0642\u0627\u0626\u064a \u0645\u0639 Let&#8217;s Encrypt<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-10\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-11\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0645\u0631\u0627\u0642\u0628\u0629 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-12\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u062a\u062d\u0633\u064a\u0646 \u0627\u0644\u0623\u062f\u0627\u0621<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-13\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0627\u0644\u062e\u0644\u0627\u0635\u0629<\/a><\/li><li style=\"padding:.25rem 0;\"><a href=\"#section-14\" style=\"color:#4f46e5;text-decoration:none;\">&#8592; \u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629<\/a><\/li><\/ul><\/div>\n\n\n\n<p>\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u062f\u064a\u0631 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0648\u062a\u0628\u062d\u062b \u0639\u0646 \u0637\u0631\u064a\u0642\u0629 \u0641\u0639\u0651\u0627\u0644\u0629 \u0648\u0645\u0646\u0638\u0651\u0645\u0629 \u0644\u0627\u0633\u062a\u0636\u0627\u0641\u062a\u0647\u0627 \u062c\u0645\u064a\u0639\u064b\u0627 \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 \u0648\u0627\u062d\u062f\u060c \u0641\u0625\u0646 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0647\u064a \u0627\u0644\u062d\u0644 \u0627\u0644\u0623\u0645\u062b\u0644 \u0641\u064a 2026. Docker \u064a\u064f\u062a\u064a\u062d \u0644\u0643 \u0639\u0632\u0644 \u0643\u0644 \u0645\u0648\u0642\u0639 \u0641\u064a \u062d\u0627\u0648\u064a\u0629 \u0645\u0633\u062a\u0642\u0644\u0629 \u0645\u0639 \u0642\u0627\u0639\u062f\u0629 \u0628\u064a\u0627\u0646\u0627\u062a \u062e\u0627\u0635\u0629\u060c \u0645\u0645\u0627 \u064a\u0636\u0645\u0646 \u0623\u0646 \u0645\u0634\u0643\u0644\u0629 \u0641\u064a \u0645\u0648\u0642\u0639 \u0648\u0627\u062d\u062f \u0644\u0646 \u062a\u0624\u062b\u0631 \u0639\u0644\u0649 \u0628\u0642\u064a\u0629 \u0627\u0644\u0645\u0648\u0627\u0642\u0639. \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u062f\u0644\u064a\u0644 \u0627\u0644\u0639\u0645\u0644\u064a \u0633\u0646\u0628\u0646\u064a \u0628\u0646\u064a\u0629 \u0643\u0627\u0645\u0644\u0629 \u0644\u0627\u0633\u062a\u0636\u0627\u0641\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0645\u062a\u0639\u062f\u062f\u0629 \u0645\u0639 SSL \u062a\u0644\u0642\u0627\u0626\u064a \u0648 reverse proxy.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-2\">\u0644\u0645\u0627\u0630\u0627 Docker \u0644\u0627\u0633\u062a\u0636\u0627\u0641\u0629 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639<\/h2>\n\n\n<p>\u0642\u0628\u0644 \u0627\u0644\u063a\u0648\u0635 \u0641\u064a \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u062a\u0642\u0646\u064a\u0629\u060c \u062f\u0639\u0646\u0627 \u0646\u0641\u0647\u0645 \u0644\u0645\u0627\u0630\u0627 \u0623\u0635\u0628\u062d\u062a \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0627\u0644\u062e\u064a\u0627\u0631 \u0627\u0644\u0645\u0641\u0636\u0651\u0644 \u0644\u0645\u062f\u064a\u0631\u064a \u0627\u0644\u0633\u064a\u0631\u0641\u0631\u0627\u062a \u0641\u064a 2026:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u0627\u0644\u0639\u0632\u0644 \u0627\u0644\u0643\u0627\u0645\u0644:<\/strong> \u0643\u0644 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u064a\u0639\u0645\u0644 \u0641\u064a \u062d\u0627\u0648\u064a\u0629 \u0645\u0633\u062a\u0642\u0644\u0629 \u0628\u0625\u0635\u062f\u0627\u0631 PHP \u0648\u0642\u0627\u0639\u062f\u0629 \u0628\u064a\u0627\u0646\u0627\u062a \u062e\u0627\u0635\u0629. \u062a\u062d\u062f\u064a\u062b \u0645\u0648\u0642\u0639 \u0644\u0646 \u064a\u0624\u062b\u0631 \u0639\u0644\u0649 \u0627\u0644\u0622\u062e\u0631\u064a\u0646<\/li><li><strong>\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0646\u0634\u0631:<\/strong> \u0625\u0636\u0627\u0641\u0629 \u0645\u0648\u0642\u0639 \u062c\u062f\u064a\u062f \u062a\u062a\u0645 \u0628\u0646\u0633\u062e \u0645\u0644\u0641 docker-compose \u0648\u062a\u0639\u062f\u064a\u0644 \u0628\u0636\u0639\u0629 \u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0641\u0642\u0637<\/li><li><strong>\u062a\u0648\u062d\u064a\u062f \u0627\u0644\u0628\u064a\u0626\u0629:<\/strong> \u0646\u0641\u0633 \u0627\u0644\u0628\u064a\u0626\u0629 \u0641\u064a \u0627\u0644\u062a\u0637\u0648\u064a\u0631 \u0648\u0627\u0644\u0625\u0646\u062a\u0627\u062c\u060c \u0645\u0645\u0627 \u064a\u064f\u0642\u0644\u0651\u0644 \u0645\u0634\u0627\u0643\u0644 &#8220;\u064a\u0639\u0645\u0644 \u0639\u0644\u0649 \u062c\u0647\u0627\u0632\u064a&#8221;<\/li><li><strong>\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a:<\/strong> \u0643\u0644 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0648\u0642\u0639 \u0645\u062d\u0635\u0648\u0631\u0629 \u0641\u064a volumes \u0645\u062d\u062f\u062f\u0629 \u064a\u0633\u0647\u0644 \u0646\u0633\u062e\u0647\u0627<\/li><li><strong>\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u0648\u0627\u0631\u062f:<\/strong> \u064a\u0645\u0643\u0646\u0643 \u062a\u062d\u062f\u064a\u062f \u062d\u062f \u0623\u0642\u0635\u0649 \u0644\u0627\u0633\u062a\u0647\u0644\u0627\u0643 CPU \u0648 RAM \u0644\u0643\u0644 \u062d\u0627\u0648\u064a\u0629<\/li><li><strong>\u062a\u0648\u0641\u064a\u0631 \u0627\u0644\u062a\u0643\u0644\u0641\u0629:<\/strong> \u0633\u064a\u0631\u0641\u0631 VPS \u0648\u0627\u062d\u062f \u064a\u0645\u0643\u0646\u0647 \u062a\u0634\u063a\u064a\u0644 5-15 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u062f\u0641\u0639 \u0627\u0634\u062a\u0631\u0627\u0643 \u0645\u0646\u0641\u0635\u0644 \u0644\u0643\u0644 \u0645\u0648\u0642\u0639<\/li><\/ul>\n\n\n\n<p>\u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0627\u0637\u0644\u0627\u0639 \u0639\u0644\u0649 <a href=\"https:\/\/docs.docker.com\/get-started\/overview\/\" target=\"_blank\" rel=\"noopener\">\u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0627\u0644\u0631\u0633\u0645\u064a\u0629 \u0644\u0640 Docker<\/a> \u0644\u0641\u0647\u0645 \u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629 \u0645\u062b\u0644 \u0627\u0644\u0635\u0648\u0631 (Images) \u0648\u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a (Containers) \u0648\u0627\u0644\u0640 Volumes.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-3\">\u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629<\/h2>\n\n\n<p>\u0644\u062a\u0634\u063a\u064a\u0644 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0639\u0628\u0631 Docker \u0628\u0643\u0641\u0627\u0621\u0629\u060c \u062a\u062d\u062a\u0627\u062c \u0633\u064a\u0631\u0641\u0631 VPS \u0628\u0645\u0648\u0627\u0635\u0641\u0627\u062a \u0645\u0646\u0627\u0633\u0628\u0629. \u0625\u0644\u064a\u0643 \u0627\u0644\u062a\u0648\u0635\u064a\u0627\u062a \u062d\u0633\u0628 \u0639\u062f\u062f \u0627\u0644\u0645\u0648\u0627\u0642\u0639:<\/p>\n\n\n\n<div style=\"overflow-x:auto;margin:1.5rem 0;\">\n<table style=\"width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;font-size:0.95rem;\">\n<thead>\n<tr style=\"background:#1e293b;color:#fff;\">\n<th style=\"padding:12px 16px;text-align:right;border:1px solid #334155;\">\u0639\u062f\u062f \u0627\u0644\u0645\u0648\u0627\u0642\u0639<\/th>\n<th style=\"padding:12px 16px;text-align:right;border:1px solid #334155;\">RAM<\/th>\n<th style=\"padding:12px 16px;text-align:right;border:1px solid #334155;\">CPU<\/th>\n<th style=\"padding:12px 16px;text-align:right;border:1px solid #334155;\">\u0627\u0644\u062a\u062e\u0632\u064a\u0646<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background:#f8fafc;\"><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">1-3 \u0645\u0648\u0627\u0642\u0639<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">4 GB<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">2 cores<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">60 GB NVMe<\/td><\/tr>\n<tr><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">4-8 \u0645\u0648\u0627\u0642\u0639<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">8 GB<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">4 cores<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">120 GB NVMe<\/td><\/tr>\n<tr style=\"background:#f8fafc;\"><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">9-15 \u0645\u0648\u0642\u0639<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">16 GB<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">6 cores<\/td><td style=\"padding:10px 16px;border:1px solid #e2e8f0;\">200 GB NVMe<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n\n\n<p>\u0643\u0644 \u062d\u0627\u0648\u064a\u0629 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u062a\u0633\u062a\u0647\u0644\u0643 \u062a\u0642\u0631\u064a\u0628\u064b\u0627 200-400 MB \u0645\u0646 RAM \u0641\u064a \u062d\u0627\u0644\u0629 \u0627\u0644\u062e\u0645\u0648\u0644\u060c \u0648\u062a\u0632\u064a\u062f \u0645\u0639 \u0639\u062f\u062f \u0627\u0644\u0632\u0648\u0651\u0627\u0631. \u062d\u0627\u0648\u064a\u0629 MariaDB \u062a\u0633\u062a\u0647\u0644\u0643 200-500 MB \u0625\u0636\u0627\u0641\u064a\u0629 \u0644\u0643\u0644 \u0642\u0627\u0639\u062f\u0629 \u0628\u064a\u0627\u0646\u0627\u062a. \u0644\u0630\u0644\u0643 \u0641\u0625\u0646 4 GB \u0647\u0648 \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0627\u0644\u0639\u0645\u0644\u064a \u0644\u062a\u0634\u063a\u064a\u0644 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0639\u0628\u0631 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-4\">\u062a\u062b\u0628\u064a\u062a Docker \u0648 Docker Compose<\/h2>\n\n\n<p>\u0627\u0644\u062e\u0637\u0648\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u0647\u064a \u062a\u062b\u0628\u064a\u062a Docker Engine \u0648 Docker Compose \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 Ubuntu 24.04:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0625\u0632\u0627\u0644\u0629 \u0646\u0633\u062e Docker \u0627\u0644\u0642\u062f\u064a\u0645\u0629 \u0625\u0646 \u0648\u064f\u062c\u062f\u062a\nsudo apt remove docker docker-engine docker.io containerd runc 2>\/dev\/null\n\n# \u0625\u0636\u0627\u0641\u0629 \u0645\u0633\u062a\u0648\u062f\u0639 Docker \u0627\u0644\u0631\u0633\u0645\u064a\nsudo apt update\nsudo apt install ca-certificates curl gnupg -y\nsudo install -m 0755 -d \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\n\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] \n  https:\/\/download.docker.com\/linux\/ubuntu $(. \/etc\/os-release && echo \"$VERSION_CODENAME\") stable\" | \n  sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\n\n# \u062a\u062b\u0628\u064a\u062a Docker Engine \u0648 Docker Compose\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y\n\n# \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u062d\u0627\u0644\u064a \u0644\u0645\u062c\u0645\u0648\u0639\u0629 Docker\nsudo usermod -aG docker $USER\nnewgrp docker\n\n# \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u062a\u062b\u0628\u064a\u062a\ndocker --version\ndocker compose version<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"section-5\">\u0628\u0646\u064a\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639<\/h2>\n\n\n<p>\u0627\u0644\u062a\u0646\u0638\u064a\u0645 \u0627\u0644\u062c\u064a\u062f \u0647\u0648 \u0645\u0641\u062a\u0627\u062d \u0627\u0644\u0646\u062c\u0627\u062d \u0639\u0646\u062f \u0625\u062f\u0627\u0631\u0629 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0639\u0628\u0631 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a. \u0625\u0644\u064a\u0643 \u0628\u0646\u064a\u0629 \u0627\u0644\u0645\u062c\u0644\u062f\u0627\u062a \u0627\u0644\u0645\u064f\u0648\u0635\u0649 \u0628\u0647\u0627:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 \u0628\u0646\u064a\u0629 \u0627\u0644\u0645\u062c\u0644\u062f\u0627\u062a\nmkdir -p ~\/docker-sites\/{proxy,sites,backups,scripts}\n\n# \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629:\n# ~\/docker-sites\/\n# \u251c\u2500\u2500 proxy\/                    # Nginx Reverse Proxy\n# \u2502   \u251c\u2500\u2500 docker-compose.yml\n# \u2502   \u251c\u2500\u2500 nginx.conf\n# \u2502   \u2514\u2500\u2500 certs\/               # \u0634\u0647\u0627\u062f\u0627\u062a SSL\n# \u251c\u2500\u2500 sites\/\n# \u2502   \u251c\u2500\u2500 site1.com\/           # \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644\n# \u2502   \u2502   \u251c\u2500\u2500 docker-compose.yml\n# \u2502   \u2502   \u251c\u2500\u2500 .env\n# \u2502   \u2502   \u2514\u2500\u2500 data\/\n# \u2502   \u2502       \u251c\u2500\u2500 wordpress\/   # \u0645\u0644\u0641\u0627\u062a \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633\n# \u2502   \u2502       \u2514\u2500\u2500 mysql\/       # \u0628\u064a\u0627\u0646\u0627\u062a MySQL\n# \u2502   \u251c\u2500\u2500 site2.com\/           # \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u062b\u0627\u0646\u064a\n# \u2502   \u2502   \u251c\u2500\u2500 docker-compose.yml\n# \u2502   \u2502   \u251c\u2500\u2500 .env\n# \u2502   \u2502   \u2514\u2500\u2500 data\/\n# \u2502   \u2514\u2500\u2500 site3.com\/           # \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u062b\u0627\u0644\u062b\n# \u251c\u2500\u2500 backups\/                  # \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a\u0629\n# \u2514\u2500\u2500 scripts\/                  # \u0633\u0643\u0631\u0628\u062a\u0627\u062a \u0627\u0644\u0625\u062f\u0627\u0631\u0629\n\ntree ~\/docker-sites\/<\/code><\/pre>\n\n\n<p>\u0647\u0630\u0647 \u0627\u0644\u0628\u0646\u064a\u0629 \u062a\u062c\u0639\u0644 \u0643\u0644 \u0645\u0648\u0642\u0639 \u0645\u0633\u062a\u0642\u0644\u0627\u064b \u062a\u0645\u0627\u0645\u064b\u0627 \u0628\u0645\u0644\u0641 docker-compose.yml \u062e\u0627\u0635 \u0648\u0628\u064a\u0627\u0646\u0627\u062a \u0645\u0646\u0641\u0635\u0644\u0629\u060c \u0645\u0645\u0627 \u064a\u064f\u0633\u0647\u0651\u0644 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0648\u0627\u0644\u0646\u0642\u0644 \u0648\u0627\u0644\u062d\u0630\u0641.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-6\">\u0625\u0639\u062f\u0627\u062f Nginx Reverse Proxy<\/h2>\n\n\n<p>Nginx Reverse Proxy \u0647\u0648 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u0631\u0643\u0632\u064a \u0641\u064a \u0627\u0644\u0628\u0646\u064a\u0629 \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0648\u0627\u0642\u0639. \u064a\u0633\u062a\u0642\u0628\u0644 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u0641\u0630\u064a\u0646 80 \u0648 443 \u0648\u064a\u0648\u062c\u0651\u0647\u0647\u0627 \u0644\u0644\u062d\u0627\u0648\u064a\u0629 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 \u062d\u0633\u0628 \u0627\u0633\u0645 \u0627\u0644\u0646\u0637\u0627\u0642. \u0633\u0646\u0633\u062a\u062e\u062f\u0645 <a href=\"https:\/\/nginxproxymanager.com\/\" target=\"_blank\" rel=\"noopener\">Nginx Proxy Manager<\/a> \u0644\u062a\u0633\u0647\u064a\u0644 \u0627\u0644\u0625\u062f\u0627\u0631\u0629:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 \u0634\u0628\u0643\u0629 Docker \u0645\u0634\u062a\u0631\u0643\u0629\ndocker network create proxy-network\n\n# \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 docker-compose \u0644\u0644\u0640 Proxy\ncat > ~\/docker-sites\/proxy\/docker-compose.yml << 'EOF'\nversion: \"3.8\"\n\nservices:\n  nginx-proxy:\n    image: nginx:alpine\n    container_name: nginx-proxy\n    restart: always\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf:ro\n      - .\/conf.d:\/etc\/nginx\/conf.d:ro\n      - .\/certs:\/etc\/nginx\/certs:ro\n      - .\/html:\/usr\/share\/nginx\/html\n    networks:\n      - proxy-network\n\n  # \u0623\u0648 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643\u060c \u0627\u0633\u062a\u062e\u062f\u0645 nginx-proxy \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a:\n  # jwilder\/nginx-proxy \u0645\u0639 acme-companion\n\nnetworks:\n  proxy-network:\n    external: true\nEOF<\/code><\/pre>\n\n\n<p>\u0644\u0646\u064f\u0646\u0634\u0626 \u0645\u0644\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a Nginx \u0627\u0644\u0631\u0626\u064a\u0633\u064a:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0645\u0644\u0641 nginx.conf \u0627\u0644\u0631\u0626\u064a\u0633\u064a\ncat > ~\/docker-sites\/proxy\/nginx.conf << 'NGINX'\nuser nginx;\nworker_processes auto;\nerror_log \/var\/log\/nginx\/error.log warn;\npid \/var\/run\/nginx.pid;\n\nevents {\n    worker_connections 1024;\n}\n\nhttp {\n    include \/etc\/nginx\/mime.types;\n    default_type application\/octet-stream;\n\n    # \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0639\u0627\u0645\u0629\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n    keepalive_timeout 65;\n    types_hash_max_size 2048;\n    client_max_body_size 64M;\n\n    # \u0636\u063a\u0637 Gzip\n    gzip on;\n    gzip_vary on;\n    gzip_proxied any;\n    gzip_comp_level 6;\n    gzip_types text\/plain text\/css application\/json application\/javascript text\/xml;\n\n    # \u062a\u0636\u0645\u064a\u0646 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0648\u0627\u0642\u0639\n    include \/etc\/nginx\/conf.d\/*.conf;\n}\nNGINX\n\nmkdir -p ~\/docker-sites\/proxy\/{conf.d,certs,html}<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"section-7\">\u0625\u0646\u0634\u0627\u0621 \u0623\u0648\u0644 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633<\/h2>\n\n\n<p>\u0627\u0644\u0622\u0646 \u0646\u064f\u0646\u0634\u0626 \u0623\u0648\u0644 \u0645\u0648\u0642\u0639 \u0645\u0646 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker. \u0633\u0646\u0628\u062f\u0623 \u0628\u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u0628\u064a\u0626\u064a\u0629 \u062b\u0645 \u0645\u0644\u0641 docker-compose:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0644\u062f \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644\nmkdir -p ~\/docker-sites\/sites\/site1.com\/data\/{wordpress,mysql}\n\n# \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u0628\u064a\u0626\u064a\u0629\ncat > ~\/docker-sites\/sites\/site1.com\/.env << 'EOF'\n# \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0648\u0642\u0639\nDOMAIN=site1.com\nSITE_NAME=site1\n\n# \u0628\u064a\u0627\u0646\u0627\u062a MySQL\nMYSQL_ROOT_PASSWORD=RootPass_Str0ng_2026!\nMYSQL_DATABASE=wp_site1\nMYSQL_USER=wp_site1_user\nMYSQL_PASSWORD=WpPass_Str0ng_2026!\n\n# \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633\nWORDPRESS_TABLE_PREFIX=wp_\nEOF<\/code><\/pre>\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 docker-compose.yml \u0644\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644\ncat > ~\/docker-sites\/sites\/site1.com\/docker-compose.yml << 'EOF'\nversion: \"3.8\"\n\nservices:\n  wordpress:\n    image: wordpress:6.7-php8.3-fpm\n    container_name: ${SITE_NAME}-wordpress\n    restart: always\n    environment:\n      WORDPRESS_DB_HOST: ${SITE_NAME}-mysql:3306\n      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}\n      WORDPRESS_DB_USER: ${MYSQL_USER}\n      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}\n      WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}\n    volumes:\n      - .\/data\/wordpress:\/var\/www\/html\n      - .\/php-custom.ini:\/usr\/local\/etc\/php\/conf.d\/custom.ini\n    depends_on:\n      mysql:\n        condition: service_healthy\n    networks:\n      - internal\n      - proxy-network\n    deploy:\n      resources:\n        limits:\n          memory: 512M\n          cpus: '1.0'\n\n  mysql:\n    image: mariadb:11.4\n    container_name: ${SITE_NAME}-mysql\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}\n      MYSQL_DATABASE: ${MYSQL_DATABASE}\n      MYSQL_USER: ${MYSQL_USER}\n      MYSQL_PASSWORD: ${MYSQL_PASSWORD}\n    volumes:\n      - .\/data\/mysql:\/var\/lib\/mysql\n    networks:\n      - internal\n    healthcheck:\n      test: [\"CMD\", \"healthcheck.sh\", \"--connect\", \"--innodb_initialized\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n    deploy:\n      resources:\n        limits:\n          memory: 512M\n          cpus: '0.5'\n\n  redis:\n    image: redis:7-alpine\n    container_name: ${SITE_NAME}-redis\n    restart: always\n    command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru\n    networks:\n      - internal\n    deploy:\n      resources:\n        limits:\n          memory: 150M\n\nnetworks:\n  internal:\n    driver: bridge\n  proxy-network:\n    external: true\nEOF<\/code><\/pre>\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a PHP \u0627\u0644\u0645\u062e\u0635\u0635\u0629\ncat > ~\/docker-sites\/sites\/site1.com\/php-custom.ini << 'EOF'\nupload_max_filesize = 64M\npost_max_size = 128M\nmemory_limit = 256M\nmax_execution_time = 300\nmax_input_vars = 3000\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.max_accelerated_files=10000\nEOF\n\n# \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644\ncd ~\/docker-sites\/sites\/site1.com\ndocker compose up -d\n\n# \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0623\u0646 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a \u062a\u0639\u0645\u0644\ndocker compose ps<\/code><\/pre>\n\n\n<p>\u0627\u0644\u0622\u0646 \u0646\u064f\u0636\u064a\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a Nginx Reverse Proxy \u0644\u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a Nginx \u0644\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644\ncat > ~\/docker-sites\/proxy\/conf.d\/site1.com.conf << 'NGINX'\nupstream site1_wordpress {\n    server site1-wordpress:9000;\n}\n\nserver {\n    listen 80;\n    server_name site1.com www.site1.com;\n    root \/var\/www\/html;\n    index index.php;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$args;\n    }\n\n    location ~ .php$ {\n        fastcgi_pass site1_wordpress;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~* .(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$ {\n        expires 30d;\n        add_header Cache-Control \"public, immutable\";\n    }\n}\nNGINX\n\n# \u0625\u0639\u0627\u062f\u0629 \u062a\u062d\u0645\u064a\u0644 Nginx\ncd ~\/docker-sites\/proxy\ndocker compose restart<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"section-8\">\u0625\u0636\u0627\u0641\u0629 \u0645\u0648\u0642\u0639 \u062b\u0627\u0646\u064a \u0648\u062b\u0627\u0644\u062b<\/h2>\n\n\n<p>\u0627\u0644\u062c\u0645\u064a\u0644 \u0641\u064a \u0628\u0646\u064a\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0647\u0648 \u0633\u0647\u0648\u0644\u0629 \u0625\u0636\u0627\u0641\u0629 \u0645\u0648\u0627\u0642\u0639 \u062c\u062f\u064a\u062f\u0629. \u0643\u0644 \u0645\u0627 \u062a\u062d\u062a\u0627\u062c\u0647 \u0647\u0648 \u0646\u0633\u062e \u0627\u0644\u0645\u062c\u0644\u062f \u0648\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# \u0633\u0643\u0631\u0628\u062a \u0644\u0625\u0636\u0627\u0641\u0629 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u062c\u062f\u064a\u062f\n# \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645: .\/add-site.sh site2.com\n\nSITE_DOMAIN=$1\nSITE_NAME=$(echo $SITE_DOMAIN | sed 's\/.\/-\/g')\nSITES_DIR=~\/docker-sites\/sites\n\nif [ -z \"$SITE_DOMAIN\" ]; then\n    echo \"\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645: $0 domain.com\"\n    exit 1\nfi\n\necho \"=== \u0625\u0646\u0634\u0627\u0621 \u0645\u0648\u0642\u0639 \u062c\u062f\u064a\u062f: $SITE_DOMAIN ===\"\n\n# \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u062c\u0644\u062f\u0627\u062a\nmkdir -p $SITES_DIR\/$SITE_DOMAIN\/data\/{wordpress,mysql}\n\n# \u062a\u0648\u0644\u064a\u062f \u0643\u0644\u0645\u0627\u062a \u0645\u0631\u0648\u0631 \u0639\u0634\u0648\u0627\u0626\u064a\u0629\nROOT_PASS=$(openssl rand -base64 24)\nWP_PASS=$(openssl rand -base64 24)\n\n# \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 .env\ncat > $SITES_DIR\/$SITE_DOMAIN\/.env << EOF\nDOMAIN=$SITE_DOMAIN\nSITE_NAME=$SITE_NAME\nMYSQL_ROOT_PASSWORD=$ROOT_PASS\nMYSQL_DATABASE=wp_${SITE_NAME\/\/-\/_}\nMYSQL_USER=wp_${SITE_NAME\/\/-\/_}_user\nMYSQL_PASSWORD=$WP_PASS\nWORDPRESS_TABLE_PREFIX=wp_\nEOF\n\n# \u0646\u0633\u062e docker-compose \u0645\u0646 \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644 (\u0627\u0644\u0642\u0627\u0644\u0628)\ncp $SITES_DIR\/site1.com\/docker-compose.yml $SITES_DIR\/$SITE_DOMAIN\/\ncp $SITES_DIR\/site1.com\/php-custom.ini $SITES_DIR\/$SITE_DOMAIN\/\n\n# \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u0648\u0642\u0639\ncd $SITES_DIR\/$SITE_DOMAIN\ndocker compose up -d\n\necho \"=== \u062a\u0645 \u0625\u0646\u0634\u0627\u0621 $SITE_DOMAIN \u0628\u0646\u062c\u0627\u062d ===\"\necho \"\u0623\u0636\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a Nginx \u0641\u064a proxy\/conf.d\/$SITE_DOMAIN.conf\"<\/code><\/pre>\n\n<pre class=\"wp-block-code\"><code># \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u062b\u0627\u0646\u064a\nchmod +x ~\/docker-sites\/scripts\/add-site.sh\n~\/docker-sites\/scripts\/add-site.sh site2.com\n~\/docker-sites\/scripts\/add-site.sh site3.com\n\n# \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u062c\u0645\u064a\u0639 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a\ndocker ps --format \"table {{.Names}}t{{.Status}}t{{.Ports}}\"<\/code><\/pre>\n\n\n<p>\u0628\u0647\u0630\u0647 \u0627\u0644\u0637\u0631\u064a\u0642\u0629 \u064a\u0645\u0643\u0646\u0643 \u0625\u0636\u0627\u0641\u0629 \u0623\u064a \u0639\u062f\u062f \u0645\u0646 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0628\u0623\u0645\u0631 \u0648\u0627\u062d\u062f. \u0643\u0644 \u0645\u0648\u0642\u0639 \u0645\u0639\u0632\u0648\u0644 \u062a\u0645\u0627\u0645\u064b\u0627 \u0628\u0642\u0627\u0639\u062f\u0629 \u0628\u064a\u0627\u0646\u0627\u062a \u0648\u0645\u0644\u0641\u0627\u062a \u0645\u0633\u062a\u0642\u0644\u0629.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-9\">\u0625\u0639\u062f\u0627\u062f SSL \u062a\u0644\u0642\u0627\u0626\u064a \u0645\u0639 Let's Encrypt<\/h2>\n\n\n<p>\u0644\u062a\u0623\u0645\u064a\u0646 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0628\u0634\u0647\u0627\u062f\u0627\u062a SSL \u062a\u0644\u0642\u0627\u0626\u064a\u0629\u060c \u0633\u0646\u0633\u062a\u062e\u062f\u0645 Certbot \u0641\u064a \u062d\u0627\u0648\u064a\u0629 \u0645\u0646\u0641\u0635\u0644\u0629 \u0623\u0648 \u0646\u064f\u062f\u0645\u062c\u0647 \u0645\u0639 Nginx Proxy. \u0627\u0644\u0637\u0631\u064a\u0642\u0629 \u0627\u0644\u0623\u0633\u0647\u0644 \u0647\u064a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 acme-companion \u0645\u0639 nginx-proxy:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u062a\u0639\u062f\u064a\u0644 docker-compose \u0644\u0644\u0640 Proxy \u0644\u064a\u062f\u0639\u0645 SSL \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a\ncat > ~\/docker-sites\/proxy\/docker-compose.yml << 'EOF'\nversion: \"3.8\"\n\nservices:\n  nginx-proxy:\n    image: nginxproxy\/nginx-proxy:1.5\n    container_name: nginx-proxy\n    restart: always\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - \/var\/run\/docker.sock:\/tmp\/docker.sock:ro\n      - certs:\/etc\/nginx\/certs:ro\n      - vhost:\/etc\/nginx\/vhost.d\n      - html:\/usr\/share\/nginx\/html\n      - .\/custom.conf:\/etc\/nginx\/conf.d\/custom.conf:ro\n    networks:\n      - proxy-network\n\n  acme-companion:\n    image: nginxproxy\/acme-companion:2.4\n    container_name: acme-companion\n    restart: always\n    environment:\n      DEFAULT_EMAIL: admin@yourdomain.com\n      NGINX_PROXY_CONTAINER: nginx-proxy\n    volumes:\n      - \/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\n      - certs:\/etc\/nginx\/certs:rw\n      - vhost:\/etc\/nginx\/vhost.d\n      - html:\/usr\/share\/nginx\/html\n      - acme:\/etc\/acme.sh\n    depends_on:\n      - nginx-proxy\n    networks:\n      - proxy-network\n\nvolumes:\n  certs:\n  vhost:\n  html:\n  acme:\n\nnetworks:\n  proxy-network:\n    external: true\nEOF<\/code><\/pre>\n\n\n<p>\u0627\u0644\u0622\u0646 \u0646\u064f\u0639\u062f\u0651\u0644 \u0645\u0644\u0641\u0627\u062a docker-compose \u0644\u0644\u0645\u0648\u0627\u0642\u0639 \u0644\u062a\u062f\u0639\u0645 SSL \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a. \u0643\u0644 \u0645\u0627 \u0646\u062d\u062a\u0627\u062c\u0647 \u0647\u0648 \u0625\u0636\u0627\u0641\u0629 \u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0628\u064a\u0626\u064a\u0629:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0623\u0636\u0641 \u0647\u0630\u0647 \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u0628\u064a\u0626\u064a\u0629 \u0644\u062d\u0627\u0648\u064a\u0629 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0641\u064a \u0643\u0644 \u0645\u0648\u0642\u0639\n# environment:\n#   VIRTUAL_HOST: site1.com,www.site1.com\n#   LETSENCRYPT_HOST: site1.com,www.site1.com\n#   LETSENCRYPT_EMAIL: admin@site1.com\n\n# \u0645\u062b\u0627\u0644: \u062a\u0639\u062f\u064a\u0644 docker-compose.yml \u0644\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0623\u0648\u0644\n# \u0641\u064a \u0642\u0633\u0645 services > wordpress > environment \u0623\u0636\u0641:\n#   VIRTUAL_HOST: ${DOMAIN},www.${DOMAIN}\n#   LETSENCRYPT_HOST: ${DOMAIN},www.${DOMAIN}\n#   LETSENCRYPT_EMAIL: admin@${DOMAIN}\n\n# \u0625\u0639\u0627\u062f\u0629 \u062a\u0634\u063a\u064a\u0644 \u0643\u0644 \u0634\u064a\u0621\ncd ~\/docker-sites\/proxy && docker compose up -d\ncd ~\/docker-sites\/sites\/site1.com && docker compose up -d\n\n# \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0634\u0647\u0627\u062f\u0627\u062a\ndocker logs acme-companion 2>&1 | tail -20<\/code><\/pre>\n\n\n<p>acme-companion \u0633\u064a\u0643\u062a\u0634\u0641 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0645\u062a\u063a\u064a\u0631\u0627\u062a LETSENCRYPT_HOST \u0648\u064a\u064f\u0635\u062f\u0631 \u0648\u064a\u064f\u062c\u062f\u062f \u0634\u0647\u0627\u062f\u0627\u062a SSL \u0644\u0647\u0627 \u0628\u062f\u0648\u0646 \u0623\u064a \u062a\u062f\u062e\u0644 \u0645\u0646\u0643.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-10\">\u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a<\/h2>\n\n\n<p>\u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0636\u0631\u0648\u0631\u064a \u0644\u062d\u0645\u0627\u064a\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0645\u0646 \u0641\u0642\u062f\u0627\u0646 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. \u0625\u0644\u064a\u0643 \u0633\u0643\u0631\u0628\u062a \u0634\u0627\u0645\u0644 \u0644\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# ~\/docker-sites\/scripts\/backup-all.sh\n# \u0646\u0633\u062e \u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0644\u062c\u0645\u064a\u0639 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker\n\nSITES_DIR=~\/docker-sites\/sites\nBACKUP_DIR=~\/docker-sites\/backups\nDATE=$(date +%Y%m%d_%H%M)\nKEEP_DAYS=7\n\necho \"[$DATE] \u0628\u062f\u0621 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0648\u0627\u0642\u0639...\"\n\nfor SITE_DIR in $SITES_DIR\/*\/; do\n    SITE_NAME=$(basename $SITE_DIR)\n    SITE_BACKUP=\"$BACKUP_DIR\/$SITE_NAME\"\n    mkdir -p \"$SITE_BACKUP\"\n\n    echo \"  \u2192 \u0646\u0633\u062e $SITE_NAME...\"\n\n    # \u0642\u0631\u0627\u0621\u0629 \u0645\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u0628\u064a\u0626\u0629\n    source \"$SITE_DIR\/.env\"\n\n    # \u0646\u0633\u062e \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a\n    CONTAINER=\"${SITE_NAME\/\/.\/-}-mysql\"\n    docker exec $CONTAINER mysqldump -u root -p\"$MYSQL_ROOT_PASSWORD\" \n        \"$MYSQL_DATABASE\" 2>\/dev\/null | gzip > \"$SITE_BACKUP\/db_${DATE}.sql.gz\"\n\n    # \u0646\u0633\u062e \u0645\u0644\u0641\u0627\u062a \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633\n    tar -czf \"$SITE_BACKUP\/files_${DATE}.tar.gz\" \n        -C \"$SITE_DIR\/data\/wordpress\" . 2>\/dev\/null\n\n    # \u0646\u0633\u062e \u0645\u0644\u0641\u0627\u062a \u0627\u0644\u0625\u0639\u062f\u0627\u062f\n    cp \"$SITE_DIR\/.env\" \"$SITE_BACKUP\/env_${DATE}.bak\"\n    cp \"$SITE_DIR\/docker-compose.yml\" \"$SITE_BACKUP\/compose_${DATE}.bak\"\n\n    echo \"    \u2713 $SITE_NAME - \u062a\u0645 \u0627\u0644\u0646\u0633\u062e\"\ndone\n\n# \u062d\u0630\u0641 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0642\u062f\u064a\u0645\u0629\nfind $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete\n\n# \u0639\u0631\u0636 \u062d\u062c\u0645 \u0627\u0644\u0646\u0633\u062e\necho \"\"\necho \"=== \u062d\u062c\u0645 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a\u0629 ===\"\ndu -sh $BACKUP_DIR\/*\/\necho \"\"\necho \"[$DATE] \u0627\u0643\u062a\u0645\u0644 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0628\u0646\u062c\u0627\u062d\"<\/code><\/pre>\n\n<pre class=\"wp-block-code\"><code># \u062c\u0639\u0644 \u0627\u0644\u0633\u0643\u0631\u0628\u062a \u0642\u0627\u0628\u0644\u0627\u064b \u0644\u0644\u062a\u0646\u0641\u064a\u0630 \u0648\u062c\u062f\u0648\u0644\u062a\u0647\nchmod +x ~\/docker-sites\/scripts\/backup-all.sh\n\n# \u062c\u062f\u0648\u0644\u0629 \u0627\u0644\u0646\u0633\u062e \u0627\u0644\u0627\u062d\u062a\u064a\u0627\u0637\u064a \u064a\u0648\u0645\u064a\u064b\u0627 \u0627\u0644\u0633\u0627\u0639\u0629 4 \u0641\u062c\u0631\u064b\u0627\n(crontab -l 2>\/dev\/null; echo \"0 4 * * * ~\/docker-sites\/scripts\/backup-all.sh >> ~\/docker-sites\/backups\/backup.log 2>&1\") | crontab -<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"section-11\">\u0645\u0631\u0627\u0642\u0628\u0629 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a<\/h2>\n\n\n<p>\u0645\u0631\u0627\u0642\u0628\u0629 \u0635\u062d\u0629 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a \u0623\u0645\u0631 \u0636\u0631\u0648\u0631\u064a \u0644\u0627\u0643\u062a\u0634\u0627\u0641 \u0627\u0644\u0645\u0634\u0627\u0643\u0644 \u0645\u0628\u0643\u0631\u064b\u0627. \u0625\u0644\u064a\u0643 \u0623\u062f\u0648\u0627\u062a \u0648\u0623\u0648\u0627\u0645\u0631 \u0645\u0641\u064a\u062f\u0629:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0639\u0631\u0636 \u062d\u0627\u0644\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a\ndocker ps --format \"table {{.Names}}t{{.Status}}t{{.Size}}\"\n\n# \u0639\u0631\u0636 \u0627\u0633\u062a\u0647\u0644\u0627\u0643 \u0627\u0644\u0645\u0648\u0627\u0631\u062f \u0644\u0643\u0644 \u062d\u0627\u0648\u064a\u0629 (\u0645\u062b\u0644 top)\ndocker stats --no-stream --format \"table {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}t{{.NetIO}}\"\n\n# \u0639\u0631\u0636 \u0633\u062c\u0644\u0627\u062a \u062d\u0627\u0648\u064a\u0629 \u0645\u0639\u064a\u0646\u0629\ndocker logs site1-wordpress --tail 50 -f\n\n# \u0641\u062d\u0635 \u0635\u062d\u0629 \u062d\u0627\u0648\u064a\u0629 MySQL\ndocker exec site1-mysql mysqladmin -u root -p'PASSWORD' ping\n\n# \u0641\u062d\u0635 \u0645\u0633\u0627\u062d\u0629 Docker\ndocker system df<\/code><\/pre>\n\n\n<p>\u0644\u0645\u0631\u0627\u0642\u0628\u0629 \u0645\u062a\u0642\u062f\u0645\u0629\u060c \u064a\u0645\u0643\u0646\u0643 \u0625\u0636\u0627\u0641\u0629 \u062d\u0627\u0648\u064a\u0629 cAdvisor \u0623\u0648 Portainer:<\/p>\n\n\n<pre class=\"wp-block-code\"><code># \u0625\u0636\u0627\u0641\u0629 Portainer \u0644\u0625\u062f\u0627\u0631\u0629 \u0648\u0645\u0631\u0627\u0642\u0628\u0629 Docker \u0628\u0648\u0627\u062c\u0647\u0629 \u0631\u0633\u0648\u0645\u064a\u0629\ndocker run -d \n  --name portainer \n  --restart always \n  -p 9443:9443 \n  -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \n  -v portainer_data:\/data \n  portainer\/portainer-ce:latest\n\n# \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 Portainer: https:\/\/YOUR_IP:9443<\/code><\/pre>\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# \u0633\u0643\u0631\u0628\u062a \u0645\u0631\u0627\u0642\u0628\u0629 \u0633\u0631\u064a\u0639 - ~\/docker-sites\/scripts\/health-check.sh\n\necho \"=== \u0641\u062d\u0635 \u0635\u062d\u0629 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 ===\"\necho \"\u0627\u0644\u062a\u0627\u0631\u064a\u062e: $(date)\"\necho \"\"\n\n# \u0641\u062d\u0635 \u0643\u0644 \u062d\u0627\u0648\u064a\u0629\nfor container in $(docker ps --format '{{.Names}}' | grep wordpress); do\n    DOMAIN=$(echo $container | sed 's\/-wordpress\/\/' | sed 's\/-\/.\/g')\n    STATUS=$(docker inspect --format='{{.State.Health.Status}}' $container 2>\/dev\/null || echo \"no-healthcheck\")\n    HTTP_CODE=$(curl -sI -o \/dev\/null -w \"%{http_code}\" --max-time 5 http:\/\/$DOMAIN 2>\/dev\/null || echo \"000\")\n\n    if [ \"$HTTP_CODE\" = \"200\" ] || [ \"$HTTP_CODE\" = \"301\" ] || [ \"$HTTP_CODE\" = \"302\" ]; then\n        echo \"  \u2713 $DOMAIN - HTTP $HTTP_CODE - Container: $STATUS\"\n    else\n        echo \"  \u2717 $DOMAIN - HTTP $HTTP_CODE - Container: $STATUS [\u062a\u062d\u062a\u0627\u062c \u0645\u0631\u0627\u062c\u0639\u0629!]\"\n    fi\ndone\n\necho \"\"\necho \"=== \u0627\u0633\u062a\u0647\u0644\u0627\u0643 \u0627\u0644\u0645\u0648\u0627\u0631\u062f ===\"\ndocker stats --no-stream --format \"  {{.Name}}: CPU {{.CPUPerc}} | RAM {{.MemUsage}}\" | grep -E \"wordpress|mysql\"<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"section-12\">\u062a\u062d\u0633\u064a\u0646 \u0627\u0644\u0623\u062f\u0627\u0621<\/h2>\n\n\n<p>\u0644\u062a\u062d\u0642\u064a\u0642 \u0623\u0641\u0636\u0644 \u0623\u062f\u0627\u0621 \u0645\u0646 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker\u060c \u0647\u0646\u0627\u0643 \u0639\u062f\u0629 \u062a\u062d\u0633\u064a\u0646\u0627\u062a \u064a\u0645\u0643\u0646\u0643 \u062a\u0637\u0628\u064a\u0642\u0647\u0627:<\/p>\n\n\n<h3 class=\"wp-block-heading\">\u062a\u062d\u0633\u064a\u0646 MariaDB<\/h3>\n\n<pre class=\"wp-block-code\"><code># \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0645\u062e\u0635\u0635 \u0644\u0640 MariaDB\ncat > ~\/docker-sites\/sites\/site1.com\/my-custom.cnf << 'EOF'\n[mysqld]\n# \u0630\u0627\u0643\u0631\u0629 InnoDB\ninnodb_buffer_pool_size = 256M\ninnodb_log_file_size = 64M\ninnodb_flush_log_at_trx_commit = 2\ninnodb_flush_method = O_DIRECT\n\n# \u0643\u0627\u0634 \u0627\u0644\u0627\u0633\u062a\u0639\u0644\u0627\u0645\u0627\u062a\nquery_cache_type = 1\nquery_cache_size = 32M\nquery_cache_limit = 2M\n\n# \u0627\u062a\u0635\u0627\u0644\u0627\u062a\nmax_connections = 50\nwait_timeout = 300\ninteractive_timeout = 300\n\n# \u0623\u062f\u0627\u0621\ntmp_table_size = 64M\nmax_heap_table_size = 64M\ntable_open_cache = 400\nEOF\n\n# \u0623\u0636\u0641 \u0647\u0630\u0627 \u0641\u064a docker-compose.yml \u062a\u062d\u062a volumes \u0644\u062d\u0627\u0648\u064a\u0629 mysql:\n# - .\/my-custom.cnf:\/etc\/mysql\/conf.d\/custom.cnf:ro<\/code><\/pre>\n\n<h3 class=\"wp-block-heading\">\u062a\u0641\u0639\u064a\u0644 FastCGI Cache \u0641\u064a Nginx<\/h3>\n\n<pre class=\"wp-block-code\"><code># \u0625\u0639\u062f\u0627\u062f\u0627\u062a FastCGI Cache \u0644\u0644\u0640 Nginx Proxy\n# \u0623\u0636\u0641 \u0641\u064a \u0645\u0644\u0641 custom.conf:\ncat > ~\/docker-sites\/proxy\/custom.conf << 'NGINX'\n# \u062a\u0639\u0631\u064a\u0641 \u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0643\u0627\u0634\nfastcgi_cache_path \/var\/cache\/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;\nfastcgi_cache_key \"$scheme$request_method$host$request_uri\";\nfastcgi_cache_use_stale error timeout invalid_header http_500;\n\n# \u062d\u062c\u0645 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u064f\u062d\u0645\u0651\u0644\u0629\nclient_max_body_size 64M;\n\n# \u0636\u063a\u0637 Brotli (\u0625\u0630\u0627 \u0645\u062a\u0648\u0641\u0631)\n# brotli on;\n# brotli_types text\/plain text\/css application\/json application\/javascript;\nNGINX<\/code><\/pre>\n\n\n<p>\u064a\u0645\u0643\u0646\u0643 \u0623\u064a\u0636\u064b\u0627 \u062a\u062b\u0628\u064a\u062a \u0625\u0636\u0627\u0641\u0629 Redis Object Cache \u0641\u064a \u0643\u0644 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0644\u0644\u0627\u0633\u062a\u0641\u0627\u062f\u0629 \u0645\u0646 \u062d\u0627\u0648\u064a\u0629 Redis \u0627\u0644\u062a\u064a \u0623\u0639\u062f\u062f\u0646\u0627\u0647\u0627 \u0633\u0627\u0628\u0642\u064b\u0627. \u0647\u0630\u0627 \u064a\u064f\u0642\u0644\u0651\u0644 \u0627\u0633\u062a\u0639\u0644\u0627\u0645\u0627\u062a \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0634\u0643\u0644 \u0643\u0628\u064a\u0631 \u0648\u064a\u064f\u0633\u0631\u0651\u0639 \u0623\u062f\u0627\u0621 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0628\u0634\u0643\u0644 \u0645\u0644\u062d\u0648\u0638. \u0631\u0627\u062c\u0639 <a href=\"https:\/\/hub.docker.com\/_\/wordpress\" target=\"_blank\" rel=\"noopener\">\u0635\u0641\u062d\u0629 WordPress \u0639\u0644\u0649 Docker Hub<\/a> \u0644\u0645\u0639\u0631\u0641\u0629 \u062c\u0645\u064a\u0639 \u0627\u0644\u062a\u062e\u0635\u064a\u0635\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"section-13\">\u0627\u0644\u062e\u0644\u0627\u0635\u0629<\/h2>\n\n\n<p>\u062a\u0634\u063a\u064a\u0644 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 \u0648\u0627\u062d\u062f \u0647\u0648 \u062d\u0644 \u0642\u0648\u064a \u0648\u0639\u0645\u0644\u064a \u064a\u062c\u0645\u0639 \u0628\u064a\u0646 \u0627\u0644\u0643\u0641\u0627\u0621\u0629 \u0648\u0627\u0644\u0623\u0645\u0627\u0646 \u0648\u0627\u0644\u0645\u0631\u0648\u0646\u0629. \u0645\u0646 \u062e\u0644\u0627\u0644 \u0647\u0630\u0627 \u0627\u0644\u062f\u0644\u064a\u0644 \u062a\u0639\u0644\u0651\u0645\u062a \u0643\u064a\u0641\u064a\u0629 \u0628\u0646\u0627\u0621 \u0628\u0646\u064a\u0629 \u0643\u0627\u0645\u0644\u0629 \u062a\u0634\u0645\u0644 Nginx Reverse Proxy \u0648\u0634\u0647\u0627\u062f\u0627\u062a SSL \u062a\u0644\u0642\u0627\u0626\u064a\u0629 \u0648\u0646\u0633\u062e \u0627\u062d\u062a\u064a\u0627\u0637\u064a \u0648\u0645\u0631\u0627\u0642\u0628\u0629.<\/p>\n\n\n\n<p>\u0627\u0644\u0645\u0641\u062a\u0627\u062d \u0647\u0648 \u0627\u0644\u062a\u0646\u0638\u064a\u0645 \u0627\u0644\u062c\u064a\u062f \u0645\u0646\u0630 \u0627\u0644\u0628\u062f\u0627\u064a\u0629: \u0628\u0646\u064a\u0629 \u0645\u062c\u0644\u062f\u0627\u062a \u0648\u0627\u0636\u062d\u0629\u060c \u0645\u0644\u0641\u0627\u062a .env \u0645\u0646\u0641\u0635\u0644\u0629 \u0644\u0643\u0644 \u0645\u0648\u0642\u0639\u060c \u0648\u0633\u0643\u0631\u0628\u062a\u0627\u062a \u0623\u062a\u0645\u062a\u0629 \u0644\u0644\u0645\u0647\u0627\u0645 \u0627\u0644\u0645\u062a\u0643\u0631\u0631\u0629. \u0645\u0639 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u064a\u0645\u0643\u0646\u0643 \u0625\u062f\u0627\u0631\u0629 10 \u0645\u0648\u0627\u0642\u0639 \u0623\u0648 \u0623\u0643\u062b\u0631 \u0628\u0646\u0641\u0633 \u0627\u0644\u062c\u0647\u062f \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0644\u0625\u062f\u0627\u0631\u0629 \u0645\u0648\u0642\u0639 \u0648\u0627\u062d\u062f. \u0643\u0644 \u0645\u0627 \u062a\u062d\u062a\u0627\u062c\u0647 \u0647\u0648 \u0633\u064a\u0631\u0641\u0631 VPS \u0628\u0645\u0648\u0627\u0635\u0641\u0627\u062a \u0645\u0646\u0627\u0633\u0628\u0629 \u0648\u0635\u0644\u0627\u062d\u064a\u0627\u062a root \u0644\u062a\u062b\u0628\u064a\u062a Docker.<\/p>\n\n\n\n<div style=\"border-right:4px solid #7c3aed;background:#f5f3ff;padding:1.5rem;border-radius:0 12px 12px 0;margin:2rem 0\">\n<p style=\"margin:0 0 .5rem;font-weight:700;color:#4f46e5\">\u0633\u064a\u0631\u0641\u0631\u0627\u062a VPS \u0628\u0635\u0644\u0627\u062d\u064a\u0627\u062a root \u0644\u062a\u0634\u063a\u064a\u0644 Docker \u0645\u0646 \u0645\u0631\u0627\u0645 \u0647\u0648\u0633\u062a<\/p>\n<p style=\"margin:0;color:#374151\">\u0627\u062d\u0635\u0644 \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 VPS \u0628\u0645\u0639\u0627\u0644\u062c\u0627\u062a \u062d\u062f\u064a\u062b\u0629 \u0648\u0623\u0642\u0631\u0627\u0635 NVMe \u0641\u0627\u0626\u0642\u0629 \u0627\u0644\u0633\u0631\u0639\u0629 \u0645\u0639 \u0635\u0644\u0627\u062d\u064a\u0627\u062a root \u0643\u0627\u0645\u0644\u0629 \u0644\u062a\u062b\u0628\u064a\u062a Docker \u0648\u062a\u0634\u063a\u064a\u0644 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0645\u062a\u0639\u062f\u062f\u0629. \u062f\u0639\u0645 \u0641\u0646\u064a \u0645\u062a\u062e\u0635\u0635 \u0639\u0644\u0649 \u0645\u062f\u0627\u0631 \u0627\u0644\u0633\u0627\u0639\u0629. <a href=\"https:\/\/maram.iq\" target=\"_blank\" rel=\"noopener\" style=\"color:#4f46e5;font-weight:600\">\u0627\u0628\u062f\u0623 \u0645\u0646 \u0647\u0646\u0627<\/a>.<\/p>\n<\/div>\n\n\n<h2 id=\"section-14\">\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629<\/h2>\n\n<h3>\u0643\u0645 \u0645\u0648\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u064a\u0645\u0643\u0646\u0646\u064a \u062a\u0634\u063a\u064a\u0644\u0647 \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 \u0648\u0627\u062d\u062f \u0628\u0640 Docker\u061f<\/h3>\n\n\n<p>\u064a\u0639\u062a\u0645\u062f \u0630\u0644\u0643 \u0639\u0644\u0649 \u0645\u0648\u0627\u0635\u0641\u0627\u062a \u0627\u0644\u0633\u064a\u0631\u0641\u0631 \u0648\u062d\u062c\u0645 \u0627\u0644\u0632\u064a\u0627\u0631\u0627\u062a. \u0643\u0642\u0627\u0639\u062f\u0629 \u0639\u0627\u0645\u0629\u060c \u0633\u064a\u0631\u0641\u0631 \u0628\u0640 4 GB RAM \u064a\u0645\u0643\u0646\u0647 \u062a\u0634\u063a\u064a\u0644 3-5 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0645\u062a\u0648\u0633\u0637\u0629 \u0627\u0644\u062d\u062c\u0645. \u0645\u0639 8 GB RAM \u064a\u0645\u0643\u0646\u0643 \u062a\u0634\u063a\u064a\u0644 8-10 \u0645\u0648\u0627\u0642\u0639. \u0627\u0644\u0645\u0641\u062a\u0627\u062d \u0647\u0648 \u0645\u0631\u0627\u0642\u0628\u0629 \u0627\u0633\u062a\u0647\u0644\u0627\u0643 \u0627\u0644\u0645\u0648\u0627\u0631\u062f \u0648\u062a\u0631\u0642\u064a\u0629 \u0627\u0644\u0633\u064a\u0631\u0641\u0631 \u0639\u0646\u062f \u0627\u0644\u062d\u0627\u062c\u0629.<\/p>\n\n\n<h3>\u0647\u0644 Docker \u064a\u064f\u0628\u0637\u0626 \u0623\u062f\u0627\u0621 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0645\u0642\u0627\u0631\u0646\u0629 \u0628\u0627\u0644\u062a\u062b\u0628\u064a\u062a \u0627\u0644\u062a\u0642\u0644\u064a\u062f\u064a\u061f<\/h3>\n\n\n<p>\u0644\u0627\u060c Docker \u064a\u0636\u064a\u0641 overhead \u0636\u0626\u064a\u0644 \u062c\u062f\u064b\u0627 (\u0623\u0642\u0644 \u0645\u0646 2%) \u0645\u0642\u0627\u0631\u0646\u0629 \u0628\u0627\u0644\u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0639\u0644\u0649 \u0646\u0638\u0627\u0645 \u0627\u0644\u062a\u0634\u063a\u064a\u0644. \u0641\u064a \u0627\u0644\u0648\u0627\u0642\u0639\u060c \u0645\u0639 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0643\u0627\u0634 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 (Redis + FastCGI Cache)\u060c \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0642\u062f \u062a\u0643\u0648\u0646 \u0623\u0633\u0631\u0639 \u0645\u0646 \u0627\u0644\u062a\u062b\u0628\u064a\u062a \u0627\u0644\u062a\u0642\u0644\u064a\u062f\u064a \u0644\u0623\u0646 \u0643\u0644 \u0645\u0643\u0648\u0651\u0646 \u0645\u062d\u0633\u0651\u0646 \u0628\u0634\u0643\u0644 \u0645\u0633\u062a\u0642\u0644.<\/p>\n\n\n<h3>\u0643\u064a\u0641 \u0623\u064f\u062d\u062f\u0651\u062b \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0641\u064a \u062d\u0627\u0648\u064a\u0627\u062a Docker\u061f<\/h3>\n\n\n<p>\u064a\u0645\u0643\u0646\u0643 \u062a\u062d\u062f\u064a\u062b \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0628\u0637\u0631\u064a\u0642\u062a\u064a\u0646: \u0645\u0646 \u0644\u0648\u062d\u0629 \u062a\u062d\u0643\u0645 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0643\u0627\u0644\u0645\u0639\u062a\u0627\u062f (\u0627\u0644\u062a\u062d\u062f\u064a\u062b\u0627\u062a \u0627\u0644\u0635\u063a\u064a\u0631\u0629)\u060c \u0623\u0648 \u0628\u062a\u062d\u062f\u064a\u062b \u0635\u0648\u0631\u0629 Docker \u0646\u0641\u0633\u0647\u0627 \u0644\u0644\u062a\u062d\u062f\u064a\u062b\u0627\u062a \u0627\u0644\u0643\u0628\u0631\u0649. \u0644\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0648\u0631\u0629: \u0639\u062f\u0651\u0644 \u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0635\u0648\u0631\u0629 \u0641\u064a docker-compose.yml \u062b\u0645 \u0646\u0641\u0651\u0630 docker compose pull && docker compose up -d. \u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u062e\u0630 \u0646\u0633\u062e\u0629 \u0627\u062d\u062a\u064a\u0627\u0637\u064a\u0629 \u0642\u0628\u0644 \u0623\u064a \u062a\u062d\u062f\u064a\u062b.<\/p>\n\n\n<h3>\u0645\u0627\u0630\u0627 \u064a\u062d\u062f\u062b \u0625\u0630\u0627 \u062a\u0648\u0642\u0641\u062a \u062d\u0627\u0648\u064a\u0629 \u0648\u0627\u062d\u062f\u0629\u061f<\/h3>\n\n\n<p>\u0628\u0641\u0636\u0644 \u0625\u0639\u062f\u0627\u062f restart: always \u0641\u064a docker-compose\u060c \u0625\u0630\u0627 \u062a\u0648\u0642\u0641\u062a \u062d\u0627\u0648\u064a\u0629 \u0644\u0623\u064a \u0633\u0628\u0628 \u0641\u0625\u0646 Docker \u0633\u064a\u064f\u0639\u064a\u062f \u062a\u0634\u063a\u064a\u0644\u0647\u0627 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627. \u0627\u0644\u062d\u0627\u0648\u064a\u0627\u062a \u0627\u0644\u0623\u062e\u0631\u0649 \u0644\u0646 \u062a\u062a\u0623\u062b\u0631 \u0644\u0623\u0646 \u0643\u0644 \u0645\u0648\u0642\u0639 \u0645\u0639\u0632\u0648\u0644. \u064a\u0645\u0643\u0646\u0643 \u0623\u064a\u0636\u064b\u0627 \u0625\u0639\u062f\u0627\u062f \u062a\u0646\u0628\u064a\u0647\u0627\u062a \u0639\u0628\u0631 \u0627\u0644\u0628\u0631\u064a\u062f \u0639\u0646\u062f \u062a\u0648\u0642\u0641 \u0623\u064a \u062d\u0627\u0648\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0633\u0643\u0631\u0628\u062a \u0627\u0644\u0645\u0631\u0627\u0642\u0628\u0629 \u0627\u0644\u0630\u064a \u0634\u0631\u062d\u0646\u0627\u0647 \u0633\u0627\u0628\u0642\u064b\u0627.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc33 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker: \u0645\u0627 \u062a\u062d\u062a\u0627\u062c \u0645\u0639\u0631\u0641\u062a\u0647 \u062a\u0634\u063a\u064a\u0644 \u0639\u062f\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 \u0639\u0644\u0649 \u0633\u064a\u0631\u0641\u0631 \u0648\u0627\u062d\u062f \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 Docker \u0641\u064a 2026 \u062f\u0644\u064a\u0644 \u0639\u0645\u0644\u064a \u0634\u0627\u0645\u0644 \u0644\u0627\u0633\u062a\u0636\u0627\u0641\u0629 \u0645\u0648\u0627\u0642\u0639 \u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633 Docker \u0645\u062a\u0639\u062f\u062f\u0629 \u0645\u0639 Nginx \u0648 SSL&#8230;<\/p>\n","protected":false},"author":1,"featured_media":3104,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[321],"tags":[333,335,271,256,144,159],"class_list":["post-3089","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker-containers","tag-docker","tag-docker-compose","tag-nginx","tag-ssl","tag-vps","tag-159"],"_links":{"self":[{"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/posts\/3089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/comments?post=3089"}],"version-history":[{"count":1,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/posts\/3089\/revisions"}],"predecessor-version":[{"id":3151,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/posts\/3089\/revisions\/3151"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/media\/3104"}],"wp:attachment":[{"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/media?parent=3089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/categories?post=3089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maram.iq\/blogs\/wp-json\/wp\/v2\/tags?post=3089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}