{"id":804,"date":"2026-04-20T11:04:21","date_gmt":"2026-04-20T03:04:21","guid":{"rendered":"https:\/\/blog.itsmygo.uk\/2026\/04\/20\/dokploy-%e6%96%b0%e6%89%8b%e4%b8%8a%e8%b7%af-faq%e5%be%9e%e4%b8%80%e6%ac%a1%e5%af%a6%e4%bd%9c%e4%b8%ad%e6%95%b4%e7%90%86%e7%9a%84-10-%e5%80%8b%e5%9f%ba%e7%a4%8e%e5%95%8f%e9%a1%8c\/"},"modified":"2026-04-20T11:04:21","modified_gmt":"2026-04-20T03:04:21","slug":"dokploy-%e6%96%b0%e6%89%8b%e4%b8%8a%e8%b7%af-faq%e5%be%9e%e4%b8%80%e6%ac%a1%e5%af%a6%e4%bd%9c%e4%b8%ad%e6%95%b4%e7%90%86%e7%9a%84-10-%e5%80%8b%e5%9f%ba%e7%a4%8e%e5%95%8f%e9%a1%8c","status":"publish","type":"post","link":"https:\/\/blog.itsmygo.uk\/wordpress\/2026\/04\/20\/dokploy-%e6%96%b0%e6%89%8b%e4%b8%8a%e8%b7%af-faq%e5%be%9e%e4%b8%80%e6%ac%a1%e5%af%a6%e4%bd%9c%e4%b8%ad%e6%95%b4%e7%90%86%e7%9a%84-10-%e5%80%8b%e5%9f%ba%e7%a4%8e%e5%95%8f%e9%a1%8c\/","title":{"rendered":"Dokploy \u65b0\u624b\u4e0a\u8def FAQ:\u5f9e\u4e00\u6b21\u5be6\u4f5c\u4e2d\u6574\u7406\u7684 10 \u500b\u57fa\u790e\u554f\u984c"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Dokploy \u65b0\u624b\u4e0a\u8def FAQ:\u5f9e\u4e00\u6b21\u5be6\u4f5c\u4e2d\u6574\u7406\u7684 10 \u500b\u57fa\u790e\u554f\u984c<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u524d\u5e7e\u5929\u5f9e\u96f6\u67b6\u8a2d\u4e86\u4e00\u500b Dokploy + Cloudflare Tunnel + Traefik \u7684\u81ea\u67b6\u670d\u52d9\u5e73\u53f0\u3002\u904e\u7a0b\u4e2d\u6211\u554f\u4e86\u4e00\u5806\u300c\u770b\u8d77\u4f86\u5f88\u7b28\u4f46\u771f\u7684\u5361\u5728\u90a3\u88e1\u300d\u7684\u554f\u984c\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u7bc7\u4e0d\u662f step-by-step \u6559\u5b78,\u662f<strong>\u628a\u9019\u4e9b\u554f\u984c\u7684\u5e95\u5c64\u539f\u7406\u8b1b\u6e05\u695a<\/strong>\u2014\u2014\u6bcf\u4e00\u984c\u6211\u7576\u4e0b\u771f\u7684\u505c\u4e0b\u4f86\u554f\u904e,\u770b\u5b8c\u4f60\u4e0b\u6b21\u52d5\u624b\u5c31\u4e0d\u7528\u518d\u5361\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6392\u5e8f\u5f9e\u6dfa\u5230\u6df1,\u5efa\u8b70\u9806\u8457\u8b80\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q1|\u300c\u9019\u500b API token \u5df2\u7d93\u6c92\u7528\u4e86\u300d\u662f\u4ec0\u9ebc\u610f\u601d?token \u4e0d\u662f\u6703\u904e\u671f\u55ce?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u7576\u6642\u7684\u5c0d\u8a71:\u8a2d\u5b9a\u5b8c Cloudflare Tunnel \u5f8c,\u6211\u88ab\u544a\u77e5\u300c\u9019\u500b API token \u5df2\u7d93\u6c92\u7528\u4e86,\u53ef\u4ee5\u522a\u6389\u300d\u3002\u6211\u7684\u53cd\u61c9\u662f\u300c\u554a?\u5b83\u58de\u4e86?\u300d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:\u4e0d\u662f\u58de\u4e86,\u662f<strong>\u4efb\u52d9\u5b8c\u6210,\u7528\u4e0d\u5230\u4e86<\/strong>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:\u5169\u7a2e\u6191\u8b49\u7684\u5340\u5225<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u505a\u9019\u985e\u8a2d\u5b9a\u6642,\u5e38\u5e38\u6703\u540c\u6642\u7528\u5230<strong>\u5169\u7a2e\u5b8c\u5168\u4e0d\u540c\u7684\u6191\u8b49<\/strong>,\u65b0\u624b\u5f88\u5bb9\u6613\u641e\u6df7\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>\u6191\u8b49<\/th>\n<th>\u7528\u9014<\/th>\n<th>\u751f\u547d\u9031\u671f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>API Token<\/strong>(\u77ed\u671f\u7528)<\/td>\n<td>\u8b93\u81ea\u52d5\u5316\u8173\u672c(\u6216 AI)\u5e6b\u4f60\u6539\u8a2d\u5b9a\u3001\u5efa\u8cc7\u6e90<\/td>\n<td>\u505a\u5b8c\u5c31\u8a72\u522a<\/td>\n<\/tr>\n<tr>\n<td><strong>\u670d\u52d9 Token<\/strong>(\u9577\u671f\u7528)<\/td>\n<td>\u8b93\u4e00\u500b\u5e38\u99d0\u670d\u52d9\u6301\u7e8c\u904b\u4f5c,\u4f8b\u5982 cloudflared \u9023\u63a5 tunnel<\/td>\n<td>\u6c38\u4e45\u7559\u8457<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5efa Cloudflare Tunnel \u9019\u500b\u6d41\u7a0b\u88e1:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">\u4f60\u5efa API Token\n  \u2192 AI \u7528 API Token \u5efa\u7acb Tunnel\n  \u2192 API \u56de\u50b3\u4e00\u7d44\u300cTunnel \u9023\u63a5 Token\u300d(JWT)\n  \u2192 cloudflared \u670d\u52d9\u62ff\u9019\u500b Tunnel Token \u9023\u7dda\n  \u2192 \u8a2d\u5b9a\u5b8c\u6210,API Token \u5df2\u7d93\u6c92\u7528\u4e86,\u53ef\u4ee5\u522a\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4e4b\u5f8c cloudflared \u5e38\u99d0\u904b\u4f5c,<strong>\u9760\u7684\u662f Tunnel Token<\/strong>(\u5df2\u7d93\u5beb\u5728 systemd unit \u88e1),\u4e0d\u518d\u9700\u8981 API Token\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u70ba\u4ec0\u9ebc\u8981\u522a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u6e1b\u5c11\u5916\u6d29\u9762(\u5c0d\u8a71\u8a18\u9304\u3001\u622a\u5716\u3001\u526a\u8cbc\u7c3f\u90fd\u53ef\u80fd\u7559\u4e0b)<\/li>\n\n\n<li>API Token \u6b0a\u9650\u901a\u5e38\u5f88\u5927(\u80fd\u6539 DNS\u3001\u522a zone settings),\u7559\u8457\u662f\u98a8\u96aa<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u53e3\u8a23<\/strong>:API Token \u662f\u9470\u5319,\u7528\u5b8c\u9084\u7d66\u4fdd\u5168;\u670d\u52d9 Token \u662f\u54e1\u5de5\u8b58\u5225\u8b49,\u54e1\u5de5\u4e0a\u73ed\u8981\u4e00\u76f4\u5e36\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q2|Dokploy \u90e8\u7f72 whoami,\u6703\u628a\u4e3b\u6a5f\u7684 port 80 \/ 3000 \u5360\u7528\u6389\u55ce?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u7576\u6642\u6211\u8d85\u64d4\u5fc3\u90e8\u7f72\u4e86\u4ec0\u9ebc\u670d\u52d9\u6703\u628a Dokploy \u81ea\u5df1\u90a3\u500b <code>3000<\/code> \u5403\u6389\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:<strong>\u4e0d\u6703<\/strong>\u3002\u9664\u975e\u4f60\u7279\u5225\u8a2d\u5b9a,\u5bb9\u5668\u7684 port \u8ddf\u4e3b\u6a5f\u7684 port \u662f\u5b8c\u5168\u5206\u958b\u7684\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:Docker port \u6709\u4e09\u7a2e,\u641e\u6df7\u5c31\u5361\u6b7b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u662f\u65b0\u624b\u7b2c\u4e00\u5927\u5730\u96f7:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Port \u540d\u7a31<\/th>\n<th>\u4f4d\u7f6e<\/th>\n<th>\u8ab0\u770b\u5f97\u5230<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u4e3b\u6a5f published port<\/strong><\/td>\n<td>\u4e3b\u6a5f\u7684 <code>0.0.0.0:xxx<\/code><\/td>\n<td>\u6574\u500b\u5340\u57df\u7db2\u8def\u3001\u516c\u7db2(\u5982\u679c\u4f60\u958b\u4e86\u9632\u706b\u7246)<\/td>\n<\/tr>\n<tr>\n<td><strong>\u5bb9\u5668\u5167\u90e8 port<\/strong><\/td>\n<td>\u5bb9\u5668\u88e1 process \u76e3\u807d\u7684 port<\/td>\n<td>\u53ea\u6709 Docker \u7db2\u8def\u88e1\u7684\u5176\u4ed6\u5bb9\u5668<\/td>\n<\/tr>\n<tr>\n<td><strong>Traefik \u8def\u7531 port<\/strong><\/td>\n<td>Traefik \u5728 Docker \u7db2\u8def\u88e1\u9023\u53bb\u7684 port<\/td>\n<td>Traefik \u81ea\u5df1,\u7576\u4ef2\u4ecb<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u822c Dokploy + Traefik \u67b6\u69cb,<strong>\u53ea\u6709 Traefik \u81ea\u5df1 publish \u4e3b\u6a5f port<\/strong>(80\u3001443),\u5176\u4ed6\u6240\u6709\u670d\u52d9\u5bb9\u5668<strong>\u53ea\u5728 Docker \u5167\u90e8\u7db2\u8def\u88e1\u6d3b\u52d5<\/strong>\u3002<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">\u5916\u7db2 \u2192 \u4e3b\u6a5f<span class=\"hljs-selector-pseudo\">:80(Traefik)<\/span>\u2192 <span class=\"hljs-selector-tag\">Docker<\/span> \u7db2\u8def \u2192 <span class=\"hljs-selector-tag\">whoami<\/span><span class=\"hljs-selector-pseudo\">:80(<\/span>\u5bb9\u5668\u5167\u90e8)\n               \u2191 <span class=\"hljs-selector-tag\">publish<\/span>           \u2191 \u5b8c\u5168\u6c92\u78b0\u4e3b\u6a5f <span class=\"hljs-selector-tag\">port<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u5be6\u6230\u78ba\u8a8d<\/h3>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># \u8ab0\u5728\u807d\u4e3b\u6a5f port 3000?<\/span>\nsudo ss -tlnp <span class=\"hljs-string\">'( sport = :3000 )'<\/span>\n\n<span class=\"hljs-comment\"># \u61c9\u8a72\u53ea\u6703\u770b\u5230\u4e00\u500b docker-proxy(\u4ee3\u8868 Dokploy \u81ea\u5df1)<\/span>\n<span class=\"hljs-comment\"># whoami \u5bb9\u5668\u4e0d\u6703\u51fa\u73fe,\u56e0\u70ba\u5b83\u6c92 publish \u5230\u4e3b\u6a5f<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># \u770b Docker \u5bb9\u5668\u6709\u6c92\u6709 publish port<\/span>\ndocker ps --format <span class=\"hljs-string\">\"table {{.Names}}\\t{{.Ports}}\"<\/span>\n\n<span class=\"hljs-comment\"># Dokploy\/Traefik:  0.0.0.0:80-&gt;80\/tcp, 0.0.0.0:3000-&gt;3000\/tcp<\/span>\n<span class=\"hljs-comment\"># whoami \u5bb9\u5668:      80\/tcp              \u2190 \u6c92\u524d\u9762\u90a3\u5768\u300c0.0.0.0:xxx-&gt;\u300d<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6c92 <code>0.0.0.0:\u2192<\/code> \u9019\u5768,\u5c31\u662f\u6c92\u4f54\u7528\u4e3b\u6a5f port<\/strong>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q3|\u53ef\u4ee5\u90e8\u7f72\u7b2c\u4e8c\u500b whoami \u55ce?\u5b83\u5011\u6703\u6253\u67b6\u55ce?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6211\u554f\u904e\u300c\u5982\u679c\u6211\u8981\u518d\u90e8\u7f72\u4e00\u500b whoami \u53ef\u4ee5\u55ce\u300d\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:\u53ef\u4ee5,<strong>\u53ea\u8981\u7d66\u5b83\u4e0d\u540c\u7684\u5b50\u7db2\u57df<\/strong>\u5c31\u597d,\u6578\u91cf\u7121\u4e0a\u9650\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:Traefik \u6309 Host header \u8def\u7531<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Traefik \u4e0d\u7ba1\u8ab0\u5728\u54ea\u500b port\u3001\u54ea\u500b\u5bb9\u5668\u2014\u2014\u5b83\u770b\u7684\u662f <strong>HTTP \u8acb\u6c42\u7684 Host header<\/strong>:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">\u700f\u89bd\u5668\u8981\u6c42 <span class=\"hljs-selector-tag\">whoami<\/span><span class=\"hljs-selector-class\">.itsmygo<\/span><span class=\"hljs-selector-class\">.uk<\/span>  \u2192 <span class=\"hljs-selector-tag\">Traefik<\/span> \u67e5\u898f\u5247<span class=\"hljs-selector-pseudo\">:Host(<\/span>`<span class=\"hljs-selector-tag\">whoami<\/span><span class=\"hljs-selector-class\">.itsmygo<\/span><span class=\"hljs-selector-class\">.uk<\/span>`) \u2192 <span class=\"hljs-selector-tag\">whoami<\/span> \u5bb9\u5668\n\u700f\u89bd\u5668\u8981\u6c42 <span class=\"hljs-selector-tag\">whoami2<\/span><span class=\"hljs-selector-class\">.itsmygo<\/span><span class=\"hljs-selector-class\">.uk<\/span> \u2192 <span class=\"hljs-selector-tag\">Traefik<\/span> \u67e5\u898f\u5247<span class=\"hljs-selector-pseudo\">:Host(<\/span>`<span class=\"hljs-selector-tag\">whoami2<\/span><span class=\"hljs-selector-class\">.itsmygo<\/span><span class=\"hljs-selector-class\">.uk<\/span>`) \u2192 <span class=\"hljs-selector-tag\">whoami2<\/span> \u5bb9\u5668\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u5169\u500b\u5bb9\u5668\u8dd1\u540c\u6a23\u7684 image\u3001\u540c\u6a23\u76e3\u807d 80,<strong>\u5b8c\u5168\u4e0d\u6703\u6253\u67b6<\/strong>\u2014\u2014\u56e0\u70ba\u5b83\u5011\u5728 Docker \u7db2\u8def\u88e1\u662f\u5169\u500b\u7368\u7acb service,Traefik \u77e5\u9053\u8ab0\u662f\u8ab0\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u70ba\u4ec0\u9ebc wildcard DNS \u8b93\u9019\u8b8a\u8d85\u65b9\u4fbf<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare DNS \u8a2d\u4e86 <code>*.itsmygo.uk<\/code> \u4e4b\u5f8c,<strong>\u4efb\u4f55\u5b50\u7db2\u57df\u7684\u6d41\u91cf\u90fd\u6703\u9001\u5230\u4f60\u7684 Dokploy \u90a3\u53f0<\/strong>\u3002\u4f60\u53ea\u8981:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Dokploy \u88e1\u5efa\u4e00\u500b\u61c9\u7528\u3001\u7d81 domain<\/li>\n\n\n<li>\u4e0d\u7528\u518d\u78b0 Cloudflare,\u7acb\u523b\u751f\u6548<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u6578\u91cf\u9650\u5236\u53ea\u5728\u4f60\u7684\u786c\u9ad4\u8cc7\u6e90\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e0d\u80fd\u505a\u4ec0\u9ebc<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>\u540c\u4e00\u500b Host \u7d81\u5230\u5169\u500b\u670d\u52d9<\/strong> \u2192 Traefik \u6703\u4efb\u9078\u4e00\u500b,\u53e6\u4e00\u500b\u5403\u4e0d\u5230\u6d41\u91cf<\/li>\n\n\n<li><strong>\u540c\u4e00\u500b Host + \u540c\u4e00\u500b path<\/strong> \u7d81\u591a\u500b \u2192 \u540c\u4e0a<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u8981\u8b93\u5169\u500b\u670d\u52d9\u5171\u7528\u540c\u4e00\u500b host,\u8981\u7528 path \u5340\u5206:<code>api.xxx.uk\/v1<\/code> \u2192 service A,<code>api.xxx.uk\/v2<\/code> \u2192 service B\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q4|Dokploy \u88e1\u7684 Domain \u5206\u9801\u90a3\u500b\u300cContainer Port\u300d\u5230\u5e95\u8981\u586b\u591a\u5c11?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u9019\u500b\u554f\u984c\u5927\u5bb6\u4e00\u958b\u59cb\u90fd\u6703\u586b\u932f\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:\u586b<strong>\u5bb9\u5668\u88e1 process \u807d\u7684\u90a3\u500b port<\/strong>,\u4e0d\u662f\u4e3b\u6a5f\u7684 port\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u500b\u6b04\u4f4d\u544a\u8a34 Traefik:\u300c\u9001\u5230\u9019\u500b\u7db2\u57df\u7684\u8acb\u6c42,\u8981\u6253\u5230\u5bb9\u5668\u5167\u90e8\u54ea\u500b port?\u300d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6bcf\u500b image \u6709\u5b83\u7684\u300c\u6163\u7528 port\u300d:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>\u670d\u52d9<\/th>\n<th>\u5b83\u5728\u5bb9\u5668\u88e1\u807d\u54ea\u500b port<\/th>\n<th>Container Port \u6b04\u4f4d\u5c31\u586b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>whoami<\/td>\n<td>80<\/td>\n<td><strong>80<\/strong><\/td>\n<\/tr>\n<tr>\n<td>nginx<\/td>\n<td>80<\/td>\n<td><strong>80<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u5927\u591a\u6578 node\/next\/nuxt app<\/td>\n<td>3000<\/td>\n<td><strong>3000<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Python FastAPI \/ Flask(\u9810\u8a2d uvicorn)<\/td>\n<td>8000<\/td>\n<td><strong>8000<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Go app \u6163\u4f8b<\/td>\n<td>8080<\/td>\n<td><strong>8080<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Spring Boot<\/td>\n<td>8080<\/td>\n<td><strong>8080<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u600e\u9ebc\u67e5?<\/strong> \u4e09\u7a2e\u65b9\u6cd5:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>\u67e5 image \u7684 Dockerfile \u6709\u6c92\u6709 <code>EXPOSE xxx<\/code><\/li>\n\n\n<li>\u770b\u5b98\u65b9 docs<\/li>\n\n\n<li>\u5148 deploy\u3001\u53bb\u770b logs \u7684 &#8220;Listening on port xxx&#8221;<\/li>\n\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u5be6\u6230\u78ba\u8a8d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Traefik \u5167\u5efa dashboard API,\u53ef\u4ee5\u76f4\u63a5\u770b\u5b83\u7684 runtime config:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker exec dokploy-traefik wget -qO- http:<span class=\"hljs-comment\">\/\/localhost:8080\/api\/http\/services | python3 -m json.tool<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u627e\u5230\u4f60\u90a3\u500b\u670d\u52d9,\u6703\u770b\u5230:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"app-xxx-service\"<\/span>,\n  <span class=\"hljs-attr\">\"loadBalancer\"<\/span>: {\n    <span class=\"hljs-attr\">\"servers\"<\/span>: &#91;{<span class=\"hljs-attr\">\"url\"<\/span>: <span class=\"hljs-string\">\"http:\/\/app-xxx:80\"<\/span>}]  \u2190 \u9019\u500b <span class=\"hljs-number\">80<\/span> \u5c31\u662f\u4f60\u586b\u7684 Container Port\n  }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q5|\u6bcf\u53f0 Dokploy \u9060\u7aef\u4f3a\u670d\u5668\u90fd\u8981\u88dd cloudflared \u55ce?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6211\u6709\u5169\u53f0\u6a5f\u5668(.217 \u8ddf .10),\u4e00\u958b\u59cb\u60f3\u8457\u662f\u4e0d\u662f\u5169\u53f0\u90fd\u8981\u88dd\u4e00\u5957 tunnel\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:<strong>\u4e0d\u662f\u6bcf\u53f0\u90fd\u8981<\/strong>\u3002\u5148\u60f3\u6e05\u695a\u300c\u9019\u53f0\u6a5f\u5668\u4e0a\u7684\u670d\u52d9\u8981\u4e0d\u8981\u516c\u7db2\u76f4\u63a5\u8a2a\u554f\u300d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:\u5169\u7a2e\u6a5f\u5668\u7684\u5b9a\u4f4d<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>\u6a5f\u5668<\/th>\n<th>\u89d2\u8272<\/th>\n<th>\u9700\u8981 cloudflared?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u524d\u53f0\u6a5f(.217)<\/strong><\/td>\n<td>\u8dd1\u6709\u516c\u7db2 URL \u7684\u6771\u897f(\u524d\u7aef\u3001\u7d66\u700f\u89bd\u5668\u6253\u7684 API)<\/td>\n<td>\u2705 \u8981<\/td>\n<\/tr>\n<tr>\n<td><strong>\u5f8c\u53f0\u6a5f(.10)<\/strong><\/td>\n<td>\u8dd1\u5f8c\u7aef\u670d\u52d9(DB\u3001Redis\u3001Queue\u3001worker\u3001\u4e0d\u5c0d\u5916\u7684\u5167\u90e8 API)<\/td>\n<td>\u274c \u4e0d\u7528<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7406\u7531<\/strong>:\u5f8c\u7aef\u670d\u52d9\u672c\u4f86\u5c31\u4e0d\u8a72\u88ab\u700f\u89bd\u5668\u76f4\u63a5\u6253\u5230\u3002\u5b83\u5011\u53ea\u8ddf\u300c\u524d\u53f0\u6a5f\u4e0a\u7684\u5bb9\u5668\u300d\u6e9d\u901a\u3002\u65e2\u7136\u6c92\u4eba\u5f9e\u5916\u9762\u6253,\u5c31\u4e0d\u9700\u8981 tunnel\u3001\u4e0d\u9700\u8981 domain\u3001\u4e0d\u9700\u8981 SSL\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5f8c\u7aef\u653e\u5f8c\u53f0\u6a5f\u7684\u597d\u8655<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u8cc7\u6e90\u9694\u96e2:DB \u639b\u4e86\u4e0d\u6703\u62d6\u7d2f\u524d\u53f0\u7db2\u7ad9<\/li>\n\n\n<li>\u5b89\u5168:DB \u5f9e\u982d\u5230\u5c3e\u53ea\u5728 LAN \u5167,\u5916\u9762\u6478\u4e0d\u5230<\/li>\n\n\n<li>\u7c21\u55ae:\u4e0d\u7528\u70ba\u5b83\u64cd\u5fc3 domain\u3001SSL\u3001tunnel \u9019\u4e9b<\/li>\n\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q6|\u90a3\u524d\u53f0(.217)\u600e\u9ebc\u6253\u5230\u5f8c\u53f0(.10)\u7684 DB?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:\u7528 <strong>LAN IP + published port<\/strong>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:Dokploy \u9060\u7aef\u4f3a\u670d\u5668\u7684\u672c\u8cea<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dokploy \u7684\u300c\u9060\u7aef\u4f3a\u670d\u5668\u300d<strong>\u4e0d\u662f<\/strong>\u628a .10 \u52a0\u5165 .217 \u7684 Docker Swarm \u7576 worker\u3002\u5b83\u5011\u662f<strong>\u5169\u53f0\u7368\u7acb\u7684 Docker \u4e3b\u6a5f<\/strong>,Dokploy \u900f\u904e SSH \u5206\u5225\u7ba1\u7406\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u4ee3\u8868:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>.217 \u4e0a\u7684\u5bb9\u5668<strong>\u4e0d\u80fd<\/strong>\u7528 <code>service name<\/code> \u76f4\u63a5\u53eb .10 \u4e0a\u7684\u5bb9\u5668(\u5169\u908a\u4e0d\u5728\u540c\u4e00\u500b overlay network)<\/li>\n\n\n<li>\u8981\u6e9d\u901a,\u5f97\u900f\u904e<strong>.10 \u7684 LAN IP + \u4e00\u500b\u5b83\u4e3b\u52d5\u516c\u958b\u7684 port<\/strong><\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u5be6\u6230\u505a\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5047\u8a2d Postgres \u90e8\u7f72\u5728 .10:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>\u5728 Dokploy .10 \u7684 Postgres \u61c9\u7528,<strong>Advanced \u2192 Ports<\/strong> \u5206\u9801\u52a0:\n<ul>\n\n<li>Published Port: <code>5432<\/code><\/li>\n\n\n<li>Target Port: <code>5432<\/code><\/li>\n\n\n<li>Protocol: <code>tcp<\/code><\/li>\n\n\n<li><strong>Publish Mode: <code>host<\/code><\/strong>(\u91cd\u8981!\u9019\u500b\u9078\u9805\u624d\u6703\u7d81\u5230 .10 \u7684 LAN IP,\u800c\u4e0d\u662f\u53ea\u5728 Swarm ingress \u7db2\u8def\u5167)<\/li>\n\n<\/ul>\n<\/li>\n\n\n<li>\u5728 .217 \u4e0a\u7684 API \u5bb9\u5668,\u8a2d\u74b0\u5883\u8b8a\u6578:<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c31\u9019\u6a23\u3002API \u5f9e .217 \u76f4\u63a5\u9023 <code>192.168.50.10:5432<\/code>,\u8d70 LAN,\u901f\u5ea6\u8d85\u5feb\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b89\u5168\u63d0\u9192<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Published port \u7b49\u65bc<strong>\u628a DB \u958b\u5728 LAN \u4e0a<\/strong>,\u6240\u4ee5:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>\u5bb6\u7528\u8def\u7531\u5668\u5225\u628a 5432 \u6253\u6d1e\u5230\u516c\u7db2<\/strong><\/li>\n\n\n<li>\u5bc6\u78bc\u9084\u662f\u8981\u5920\u5f37(\u5167\u7db2\u4e0d\u662f\u5b89\u5168\u4fdd\u8b49,\u842c\u4e00\u6709\u8a2d\u5099\u88ab\u6253\u7a7f\u5c31\u88f8\u5954)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u9032\u968e\u9078\u9805(\u60f3\u7528 service name \u800c\u4e0d\u662f IP)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Tailscale \/ WireGuard<\/strong>:\u5728\u5169\u53f0\u6a5f\u5668\u4e0a\u67b6\u500b overlay \u7db2\u8def,\u670d\u52d9\u53ef\u4ee5\u4e92\u76f8\u7528\u4e3b\u6a5f\u540d\u547c\u53eb<\/li>\n\n\n<li><strong>Dokploy Cluster Mode<\/strong>:\u628a\u5169\u53f0\u771f\u7684\u52a0\u5165\u540c\u4e00\u500b Swarm,\u5171\u7528 overlay<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bb6\u7528 \/ \u500b\u4eba side project,<strong>LAN IP + published port \u5c31\u5920\u7528<\/strong>,\u6e05\u695a\u53c8\u597d\u61c2\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q7|\u767b\u5165 Dokploy \u9762\u677f\u51fa\u73fe\u300cInvalid origin\u300d\u662f\u4ec0\u9ebc\u610f\u601d?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6211\u628a Dokploy \u9762\u677f\u5c0d\u5916\u958b\u6210 <code>dokploy.itsmygo.uk<\/code> \u4e4b\u5f8c,\u767b\u5165\u6642\u8df3\u9019\u500b\u932f\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:\u7db2\u7ad9\u7684\u300c<strong>\u53ef\u4fe1\u4efb\u4f86\u6e90\u767d\u540d\u55ae<\/strong>\u300d\u6c92\u5305\u542b\u4f60\u73fe\u5728\u7528\u7684\u7db2\u5740\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:\u700f\u89bd\u5668\u8de8\u7ad9\u4fdd\u8b77<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u73fe\u4ee3 web \u6846\u67b6(Dokploy \u7528 Better Auth\u3001Next.js \u4e5f\u6709\u985e\u4f3c\u6a5f\u5236)\u90fd\u6703\u5728<strong>\u767b\u5165\u3001\u6539\u5bc6\u78bc\u3001\u4efb\u4f55\u654f\u611f\u64cd\u4f5c<\/strong>\u6642\u6aa2\u67e5:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u9019\u500b\u8acb\u6c42\u662f\u5f9e\u6211\u4fe1\u4efb\u7684\u7db2\u5740\u767c\u51fa\u4f86\u7684\u55ce?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u662f\u70ba\u4e86\u64cb <strong>CSRF \u653b\u64ca<\/strong>\u2014\u2014\u58de\u4eba\u505a\u4e00\u500b\u5047\u7db2\u7ad9,\u5077\u5077\u53eb\u4f60\u7684\u700f\u89bd\u5668\u5c0d\u771f\u5be6\u7db2\u7ad9\u767c\u8acb\u6c42(\u4f60\u4e4b\u524d\u767b\u5165\u904e,\u9084\u6709 cookie)\u3002\u5982\u679c\u4e0d\u6aa2\u67e5\u4f86\u6e90,\u9019\u7a2e\u653b\u64ca\u5c31\u6210\u7acb\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u4ee5 Dokploy \u6709\u4e00\u500b <code>trustedOrigins<\/code> \u767d\u540d\u55ae\u3002\u4e00\u958b\u59cb\u53ea\u6709 <code>http:\/\/192.168.50.217:3000<\/code> \u9019\u7a2e\u88ab\u9810\u8a2d,\u65b0\u52a0\u7684\u516c\u7db2\u7db2\u57df\u4e0d\u5728\u540d\u55ae\u4e0a,\u5c31\u88ab\u64cb\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u600e\u9ebc\u4fee<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dokploy \u7684\u767d\u540d\u55ae\u5b58\u5728 Postgres \u7684 <code>user.trustedOrigins<\/code> \u6b04\u4f4d\u3002\u7528 SQL \u52a0\u9032\u53bb:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">-- \u9023\u9032 Dokploy \u7684 postgres \u5bb9\u5668\nUPDATE <span class=\"hljs-string\">\"user\"<\/span>\nSET <span class=\"hljs-string\">\"trustedOrigins\"<\/span> = array_append(\n  COALESCE(<span class=\"hljs-string\">\"trustedOrigins\"<\/span>, <span class=\"hljs-keyword\">ARRAY<\/span>&#91;]::text&#91;]),\n  <span class=\"hljs-string\">'https:\/\/dokploy.itsmygo.uk'<\/span>\n)\nWHERE NOT (<span class=\"hljs-string\">'https:\/\/dokploy.itsmygo.uk'<\/span> = ANY(COALESCE(<span class=\"hljs-string\">\"trustedOrigins\"<\/span>, <span class=\"hljs-keyword\">ARRAY<\/span>&#91;]::text&#91;])));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7136\u5f8c\u6709\u500b\u5927\u5751<\/strong>:\u9019\u500b\u767d\u540d\u55ae\u6709 <strong>30 \u5206\u9418\u8a18\u61b6\u9ad4\u5feb\u53d6<\/strong>,\u6539\u5b8c\u8981\u91cd\u555f Dokploy \u624d\u6703\u7acb\u523b\u751f\u6548\u3002\u898b\u4e0b\u4e00\u984c\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q8|Dokploy \u5bb9\u5668\u8981\u91cd\u555f,\u76f4\u63a5 <code>docker restart<\/code> \u4e0d\u884c\u55ce?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:<strong>\u4e0d\u884c<\/strong>,\u6703\u641e\u58de Swarm \u7684 DNS,\u5c0e\u81f4 502\u3002\u6b63\u78ba\u505a\u6cd5\u662f <code>docker service update --force<\/code>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:Docker Swarm \u8ddf\u55ae\u6a5f Docker \u7684\u5dee\u5225<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dokploy \u7528\u7684\u662f <strong>Docker Swarm mode<\/strong>(\u4e00\u7a2e\u5167\u5efa\u7684\u5bb9\u5668\u53e2\u96c6\u6280\u8853),\u4e0d\u662f\u55ae\u6a5f <code>docker run<\/code>\u3002\u5728 Swarm \u88e1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>service<\/strong> \u662f\u300c\u6211\u8981\u8dd1\u5e7e\u500b X container\u300d\u7684\u8072\u660e(\u62bd\u8c61\u5c64)<\/li>\n\n\n<li><strong>task \/ container<\/strong> \u662f\u5be6\u969b\u8dd1\u8d77\u4f86\u7684\u90a3\u5e7e\u500b(\u5177\u9ad4\u5be6\u4f8b)<\/li>\n\n\n<li>Swarm \u6703\u7d66\u6bcf\u500b service \u4e00\u500b<strong>\u7a69\u5b9a\u7684 DNS \u540d\u5b57<\/strong>(\u4f8b:<code>dokploy<\/code>),\u5176\u4ed6\u5bb9\u5668\u7528\u9019\u500b\u540d\u5b57\u627e\u5b83<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u7576\u4f60 <code>docker restart &lt;container_id&gt;<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u76f4\u63a5\u6233\u4e86\u90a3\u500b<strong>\u5177\u9ad4 container<\/strong><\/li>\n\n\n<li>Swarm \u4e0d\u77e5\u9053\u4f60\u5e79\u561b,overlay \u7db2\u8def\u7684 DNS \u4f86\u4e0d\u53ca\u66f4\u65b0<\/li>\n\n\n<li>\u7d50\u679c:Traefik \u60f3\u627e <code>dokploy<\/code> \u9019\u500b DNS \u540d,\u76f4\u63a5 NXDOMAIN<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b63\u78ba\u505a\u6cd5:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">docker service update --force dokploy\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9019\u6703\u8b93 Swarm \u6b63\u5e38\u5730\u505c\u6389\u820a container\u3001\u8d77\u4e00\u500b\u65b0\u7684,<strong>DNS \u81ea\u52d5\u66f4\u65b0<\/strong>,\u5916\u90e8\u7121\u611f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u600e\u9ebc\u770b\u54ea\u4e9b\u662f Swarm service<\/h3>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">docker service ls\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u6709\u5217\u51fa\u4f86\u7684\u5c31\u662f Swarm service,\u91cd\u555f\u7528 <code>service update<\/code>\u3002\u6c92\u5217\u51fa\u4f86\u3001\u53ea\u5728 <code>docker ps<\/code> \u770b\u5f97\u5230\u7684,\u7528 <code>docker restart<\/code> \u624d\u53ef\u4ee5\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bb9\u5668\u540d\u5b57\u7684\u5dee\u5225<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>\u55ae\u6a5f Docker<\/strong>:\u4f60\u7d66\u4ec0\u9ebc\u5c31\u53eb\u4ec0\u9ebc(\u4f8b:<code>whoami-test<\/code>)<\/li>\n\n\n<li><strong>Swarm service<\/strong>:\u6703\u81ea\u52d5\u52a0\u5f8c\u7db4,\u50cf <code>dokploy.1.21wg341ibgejo2788zohbjuzu<\/code>(service\u540d.\u526f\u672c\u7de8\u865f.task ID)<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u770b\u5230 <code>.1.xxx<\/code> \u9019\u7a2e\u683c\u5f0f\u5c31\u662f Swarm,\u6c38\u9060\u7528 <code>docker service<\/code> \u64cd\u4f5c\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q9|Cloudflare Tunnel \u70ba\u4ec0\u9ebc\u4e0d\u7528\u958b port\u3001\u6c92\u6709\u516c\u7db2 IP \u4e5f\u884c?<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6574\u500b\u67b6\u69cb\u6700\u795e\u5947\u7684\u5730\u65b9\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:\u56e0\u70ba\u9023\u7dda\u65b9\u5411\u662f<strong>\u5f9e\u4f60\u5bb6\u51fa\u53bb<\/strong>,\u4e0d\u662f\u5f9e\u5916\u9762\u6253\u9032\u4f86\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:\u53cd\u5411 Tunnel \u7684\u539f\u7406<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u50b3\u7d71\u90e8\u7f72:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">\u5916\u7db2 \u2192 \u4f60\u5bb6\u9632\u706b\u7246(\u6253\u6d1e) \u2192 \u4f60\u7684\u4f3a\u670d\u5668\n      \u2191 \u9019\u4e00\u6b65\u9700\u8981\u516c\u7db2 IP\u3001\u9700\u8981\u958b port\u3001\u9700\u8981\u52d5\u8def\u7531\u5668\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Cloudflare Tunnel:<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">\u4f60\u7684\u4f3a\u670d\u5668 \u2192 \u4e3b\u52d5\u9023\u7dda\u5230 Cloudflare Edge \u2192 \u4fdd\u6301 websocket-like \u7684\u9577\u9023\u7dda\n              \u2191 \u9019\u662f\u300c\u51fa\u53bb\u300d\u7684\u6d41\u91cf,\u5bb6\u7528\u8def\u7531\u5668\u9810\u8a2d\u653e\u884c\n\n\u7528\u6236 \u2192 Cloudflare Edge \u2192 \u5f9e\u525b\u624d\u90a3\u689d\u9577\u9023\u7dda\u4e1f\u4e0b\u4f86 \u2192 \u4f60\u7684\u4f3a\u670d\u5668\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4e5f\u5c31\u662f\u8aaa,<code>cloudflared<\/code> \u555f\u52d5\u6642<strong>\u4e3b\u52d5\u62dc\u8a17 Cloudflare \u5efa\u7acb\u9023\u7dda<\/strong>\u3002\u4e4b\u5f8c\u6240\u6709\u5916\u9762\u4f86\u7684\u6d41\u91cf,Cloudflare \u5f9e\u9019\u689d\u9023\u7dda\u300c\u5012\u8457\u4e1f\u300d\u7d66\u4f60\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u70ba\u4ec0\u9ebc\u9019\u6a23\u8d85\u5b89\u5168<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u4f60\u5bb6\u8def\u7531\u5668\u5b8c\u5168\u4e0d\u7528\u958b\u4efb\u4f55\u9032\u7ad9 port<\/li>\n\n\n<li>\u4f60\u7684\u4f3a\u670d\u5668\u5b8c\u5168\u6c92\u66b4\u9732\u5728\u516c\u7db2(\u653b\u64ca\u8005\u9023 IP \u90fd\u6383\u4e0d\u5230)<\/li>\n\n\n<li>\u6240\u6709\u6d41\u91cf\u5148\u7d93\u904e Cloudflare \u2192 DDoS \u4fdd\u8b77\u3001WAF\u3001Bot \u7ba1\u7406\u5168\u81ea\u52d5\u958b\u555f<\/li>\n\n\n<li>\u5167\u7db2 IP \u8b8a\u4e86\u4e5f\u6c92\u5dee(\u52d5\u614b DSL\u3001cellular)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u5be6\u6230\u78ba\u8a8d<\/h3>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># cloudflared \u5728\u5e79\u4ec0\u9ebc<\/span>\nsudo systemctl status cloudflared\n\n<span class=\"hljs-comment\"># \u6703\u770b\u5230\u985e\u4f3c:<\/span>\n<span class=\"hljs-comment\"># Registered tunnel connection ... ip=198.41.200.113 location=tpe01 protocol=quic<\/span>\n<span class=\"hljs-comment\"># Registered tunnel connection ... ip=198.41.192.37  location=khh01 protocol=quic<\/span>\n<span class=\"hljs-comment\"># \u2191 \u4f60\u7684\u6a5f\u5668\u9023\u53bb Cloudflare \u7684 edge \u7bc0\u9ede,\u4e0d\u662f\u53cd\u904e\u4f86<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># \u78ba\u8a8d HTTP \u6d41\u91cf\u771f\u7684\u8d70 CF<\/span>\ncurl -I https:<span class=\"hljs-comment\">\/\/whoami.itsmygo.uk<\/span>\n<span class=\"hljs-comment\"># \u770b response header:<\/span>\n<span class=\"hljs-comment\"># server: cloudflare<\/span>\n<span class=\"hljs-comment\"># cf-ray: xxxxx-SIN   \u2190 CF edge \u7bc0\u9ede\u4ee3\u865f<\/span>\n<span class=\"hljs-comment\"># cf-cache-status: DYNAMIC<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Q10|Dokploy 2FA \u8ddf Cloudflare Access,\u5dee\u5728\u54ea?\u8981\u9078\u54ea\u500b?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u77ed\u7b54<\/strong>:<strong>\u5169\u500b\u4e00\u8d77\u7528<\/strong>\u3002\u89d2\u8272\u4e0d\u4e00\u6a23\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b8c\u6574\u89e3\u91cb:\u5169\u9053\u4e0d\u540c\u4f4d\u7f6e\u7684\u9396<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u60f3\u50cf\u4f60\u7684\u7ba1\u7406\u9762\u677f\u50cf\u4e00\u9593\u623f:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>\u4fdd\u8b77\u6a5f\u5236<\/th>\n<th>\u9396\u5728\u54ea<\/th>\n<th>\u64cb\u4ec0\u9ebc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Dokploy 2FA (TOTP)<\/strong><\/td>\n<td>\u623f\u9593\u88e1\u7684\u4fdd\u96aa\u7bb1<\/td>\n<td>\u5bc6\u78bc\u5916\u6d29,\u4f46\u6c92\u4f60\u624b\u6a5f\u7684\u4eba\u9032\u4e0d\u4f86<\/td>\n<\/tr>\n<tr>\n<td><strong>Cloudflare Access<\/strong><\/td>\n<td>\u793e\u5340\u5927\u9580<\/td>\n<td>\u6839\u672c\u4e0d\u8b93\u4eba\u8d70\u9032\u4f60\u5bb6\u5df7\u5b50<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u55ae\u7368\u7528\u5404\u81ea\u7684\u4fb7\u9650<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u53ea\u6709 Dokploy 2FA<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u5168\u4e16\u754c\u7684\u6a5f\u5668\u4eba<strong>\u90fd\u770b\u5f97\u5230<\/strong>\u4f60\u7684 Dokploy \u767b\u5165\u9801<\/li>\n\n\n<li>\u4ed6\u5011\u6703\u6301\u7e8c\u6383\u3001\u5237\u5bc6\u78bc\u3001\u6e2c 0-day \u6f0f\u6d1e<\/li>\n\n\n<li>2FA \u80fd\u64cb\u4f4f\u767b\u5165,\u4f46\u64cb\u4e0d\u4f4f\u6f0f\u6d1e\u7206\u767c\u90a3\u5929<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u53ea\u6709 Cloudflare Access<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>\u5927\u9580\u5b88\u5f97\u5f88\u597d,\u4f46\u9032\u9580\u4e4b\u5f8c Dokploy \u672c\u8eab\u5982\u679c\u53ea\u6709\u5bc6\u78bc\u6c92\u6709 2FA,\u842c\u4e00\u5bc6\u78bc\u5916\u6d29\u5c31\u5b8c\u86cb<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u758a\u8d77\u4f86\u7684\u767b\u5165\u6d41\u7a0b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>\u6253\u958b <code>dokploy.itsmygo.uk<\/code><\/li>\n\n\n<li><strong>Cloudflare Access<\/strong> \u64cb\u7b2c\u4e00\u95dc:\u8981\u6c42 Google SSO \u6216 email PIN<\/li>\n\n\n<li>\u901a\u904e \u2192 \u770b\u5230 Dokploy \u767b\u5165\u9801<\/li>\n\n\n<li><strong>Dokploy<\/strong>:\u586b\u5e33\u865f\u5bc6\u78bc<\/li>\n\n\n<li><strong>Dokploy 2FA<\/strong>:\u586b\u624b\u6a5f app \u7684 6 \u4f4d\u6578 TOTP<\/li>\n\n\n<li>\u9032\u5165<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u65e5\u5e38\u767b\u5165\u9ad4\u611f:Google \u5df2\u767b\u5165 \u2192 1 \u79d2\u901a\u904e CF \u2192 \u586b Dokploy \u5bc6\u78bc \u2192 \u586b TOTP \u2192 \u9032\u53bb\u3002<strong>\u591a\u505a\u7684\u5c31\u662f\u6700\u5f8c\u90a3\u500b TOTP 6 \u4f4d\u6578<\/strong>,\u5c0d\u65e5\u5e38\u5e7e\u4e4e\u7121\u611f,\u5b89\u5168\u5927\u5347\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5efa\u8b70<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u500b\u4eba\u7ad9\u3001\u5c0f\u5718\u968a\u3001\u5bb6\u7528<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>\u4e00\u5b9a\u8981<\/strong>:Dokploy 2FA(5 \u5206\u9418\u8a2d\u5b9a)<\/li>\n\n\n<li><strong>\u5f37\u70c8\u63a8\u85a6<\/strong>:Cloudflare Access + Google SSO(10 \u5206\u9418\u8a2d\u5b9a,\u514d\u8cbb \u226450 \u4eba)<\/li>\n\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u7d50\u8a9e<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u5341\u500b\u554f\u984c\u6211\u5168\u90e8\u7576\u4e0b\u90fd\u554f\u904e\u3002\u4e0d\u662f\u56e0\u70ba\u6587\u4ef6\u6c92\u5beb,\u662f\u56e0\u70ba<strong>\u73fe\u5834\u7684\u76f4\u89ba\u8ddf\u6587\u4ef6\u7684\u62bd\u8c61\u8aaa\u6cd5\u5c0d\u4e0d\u4e0a<\/strong>\u2014\u2014\u4f60\u5f97\u771f\u7684 <code>sudo ss -tlnp<\/code> \u770b\u5230\u90a3\u500b port\u3001\u771f\u7684 <code>docker ps<\/code> \u770b\u5230\u5bb9\u5668,\u624d\u6703\u628a\u6587\u4ef6\u7684\u5167\u5bb9\u5c0d\u5230\u73fe\u5be6\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u4ee5\u9019\u985e\u300c\u81ea\u5df1\u67b6\u4e00\u5957\u300d\u7684\u4efb\u52d9,\u6700\u6709\u6548\u7684\u5b78\u6cd5\u4e0d\u662f\u5148\u8b80\u5b8c\u6240\u6709\u6587\u4ef6\u3002\u662f:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>\u4e1f\u4e00\u500b\u5177\u9ad4\u7684\u76ee\u6a19(\u6211\u8981\u8b93 <code>whoami.xxx.uk<\/code> \u53ef\u4ee5\u5f9e\u5916\u9762\u6253)<\/li>\n\n\n<li>\u52d5\u624b,\u5361\u4f4f\u5c31\u554f\u300c\u70ba\u4ec0\u9ebc\u300d<\/li>\n\n\n<li>\u6bcf\u500b\u70ba\u4ec0\u9ebc\u90fd\u6316\u5230\u5e95<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u770b\u5b8c\u9019\u7bc7,\u4e0b\u6b21\u4f60\u5361\u5728\u540c\u985e\u554f\u984c,\u81f3\u5c11\u77e5\u9053\u8a72\u770b\u54ea\u88e1\u3001\u8a72\u600e\u9ebc\u6e2c\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9019\u4e0d\u662f step-by-step \u6559\u5b78,\u662f\u300c\u4f60\u771f\u7684\u52d5\u624b\u505a\u6703\u554f\u51fa\u4f86\u7684\u300d\u90a3 10 \u500b\u57fa\u790e\u554f\u984c,\u4e00\u984c\u4e00\u984c\u628a\u5e95\u5c64\u6a5f\u5236\u8b1b\u6e05\u695a\u3002Port \u5230\u5e95\u6709\u5e7e\u7a2e\u3001\u8de8\u6a5f\u5668\u600e\u9ebc\u63a5\u3001Invalid origin \u5728\u64cb\u4ec0\u9ebc\u3001Cloudflare Tunnel \u70ba\u4ec0\u9ebc\u4e0d\u7528\u958b port\u30012FA \u8ddf CF Access \u5dee\u5728\u54ea\u2014\u2014\u770b\u5b8c\u9019\u7bc7,Dokploy \u4e0a\u624b\u6642\u4e0d\u6703\u4e00\u982d\u9727\u6c34\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rolpb_likes":0,"footnotes":""},"categories":[810],"tags":[803,138,807,802,804,812,811,806],"class_list":["post-804","post","type-post","status-publish","format-standard","hentry","category-dokploy-","tag-cloudflare-tunnel","tag-docker","tag-docker-swarm","tag-dokploy","tag-traefik","tag-812","tag-811","tag-806"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"_links":{"self":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/comments?post=804"}],"version-history":[{"count":0,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/804\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/media?parent=804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/categories?post=804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/tags?post=804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}