{"id":14387,"date":"2025-04-15T22:34:25","date_gmt":"2025-04-15T14:34:25","guid":{"rendered":"https:\/\/www.aiersheng.cc\/?p=14387"},"modified":"2025-04-15T22:34:25","modified_gmt":"2025-04-15T14:34:25","slug":"%e6%9c%ac%e5%9c%b0%e9%80%9a%e8%bf%87-docker-n8n-ngrok-traefik-%e5%bf%ab%e9%80%9f%e3%80%81%e5%ae%89%e5%85%a8%e3%80%81%e5%85%8d%e8%b4%b9%e7%9a%84%e6%90%ad%e5%bb%ba%e5%92%8c%e5%85%ac%e5%bc%80","status":"publish","type":"post","link":"https:\/\/www.aiersheng.cc\/?p=14387","title":{"rendered":"\u672c\u5730\u901a\u8fc7 Docker + n8n + Ngrok + Traefik \u5feb\u901f\u3001\u5b89\u5168\u3001\u514d\u8d39\u7684\u642d\u5efa\u548c\u516c\u5f00\u8bbf\u95ee\u4f60\u7684 n8n \u5b9e\u4f8b"},"content":{"rendered":"<p class=\"\" data-start=\"0\" data-end=\"125\"><strong data-start=\"11\" data-end=\"25\">\u8d85\u8be6\u7ec6\u7684\u4e2d\u6587\u7b80\u4f53\u6559\u7a0b<\/strong>\uff0c\u5e2e\u52a9\u4f60\u5728\u672c\u5730\u901a\u8fc7 <strong data-start=\"35\" data-end=\"69\">Docker + n8n + Ngrok + Traefik<\/strong> \u5feb\u901f\u3001\u5b89\u5168\u3001\u514d\u8d39\u7684\u642d\u5efa\u548c\u516c\u5f00\u8bbf\u95ee\u4f60\u7684 n8n \u5b9e\u4f8b\u3002\u8fd9\u4efd\u6559\u7a0b\u662f\u4ece 0 \u57fa\u7840\u51fa\u53d1\u7684\uff0c\u9002\u5408\u6ca1\u6709\u90e8\u7f72\u7ecf\u9a8c\u7684\u65b0\u624b\u670b\u53cb\u3002<\/p>\n<hr class=\"\" data-start=\"127\" data-end=\"130\" \/>\n<h2 class=\"\" data-start=\"132\" data-end=\"142\">? \u6700\u7ec8\u76ee\u6807<\/h2>\n<blockquote data-start=\"144\" data-end=\"209\">\n<p class=\"\" data-start=\"146\" data-end=\"209\">\u5b9e\u73b0\u5728\u672c\u5730\u7535\u8111\u4e0a\u90e8\u7f72 n8n\uff0c<strong data-start=\"161\" data-end=\"197\">\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u516c\u7f51\u5730\u5740\u8bbf\u95ee\uff08\u7528\u4e8e Webhook \u6d4b\u8bd5\u6216\u8fdc\u7a0b\u63a7\u5236\uff09<\/strong>\uff0c\u65e0\u9700\u8d2d\u4e70\u670d\u52a1\u5668\u548c\u57df\u540d\u3002<\/p>\n<\/blockquote>\n<hr class=\"\" data-start=\"211\" data-end=\"214\" \/>\n<h2 class=\"\" data-start=\"216\" data-end=\"231\">? \u4f7f\u7528\u7684\u6280\u672f\u7ec4\u4ef6\u4e00\u89c8<\/h2>\n<div class=\"pointer-events-none relative left-[50%]! flex w-[100cqw] translate-x-[-50%] justify-center *:pointer-events-auto\">\n<div class=\"tableContainer horzScrollShadows group relative\"><button class=\"hover:bg-token-main-surface-secondary text-token-text-secondary rounded-lg px-1 py-1 opacity-0 transition-opacity duration-200 group-focus-within:opacity-100 group-hover:opacity-100\"><\/button><\/p>\n<table class=\"min-w-full\" data-start=\"233\" data-end=\"489\">\n<thead data-start=\"233\" data-end=\"249\">\n<tr data-start=\"233\" data-end=\"249\">\n<th data-start=\"233\" data-end=\"238\">\u5de5\u5177<\/th>\n<th data-start=\"238\" data-end=\"243\">\u4f5c\u7528<\/th>\n<th data-start=\"243\" data-end=\"249\">\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"273\" data-end=\"489\">\n<tr data-start=\"273\" data-end=\"307\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"273\" data-end=\"282\">Docker<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"282\" data-end=\"291\">\u5bb9\u5668\u8fd0\u884c\u73af\u5883<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"291\" data-end=\"307\">\u5b89\u88c5\u540e\u53ef\u5feb\u901f\u542f\u52a8 n8n<\/td>\n<\/tr>\n<tr data-start=\"308\" data-end=\"354\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"308\" data-end=\"325\">Docker Compose<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"325\" data-end=\"334\">\u7f16\u6392\u591a\u4e2a\u5bb9\u5668<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"334\" data-end=\"354\">\u540c\u65f6\u542f\u52a8 n8n + Ngrok<\/td>\n<\/tr>\n<tr data-start=\"355\" data-end=\"389\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"355\" data-end=\"361\">n8n<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"361\" data-end=\"371\">\u81ea\u52a8\u5316\u6d41\u7a0b\u5e73\u53f0<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"371\" data-end=\"389\">\u6211\u4eec\u7684\u4e3b\u89d2\uff0c\u7528\u4e8e\u8fde\u63a5\u5404\u79cd\u670d\u52a1<\/td>\n<\/tr>\n<tr data-start=\"390\" data-end=\"434\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"390\" data-end=\"398\">Ngrok<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"398\" data-end=\"409\">\u4e34\u65f6\u516c\u7f51\u8bbf\u95ee\u96a7\u9053<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"409\" data-end=\"434\">\u628a <code data-start=\"413\" data-end=\"424\">localhost<\/code> \u6620\u5c04\u4e3a\u516c\u7f51\u5730\u5740<\/td>\n<\/tr>\n<tr data-start=\"435\" data-end=\"489\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"435\" data-end=\"449\">Traefik\uff08\u53ef\u9009\uff09<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"449\" data-end=\"461\">\u53cd\u5411\u4ee3\u7406\u3001\u8bc1\u4e66\u7ba1\u7406<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"461\" data-end=\"489\">\u7a33\u5b9a\u8fd0\u884c HTTPS \u548c\u591a\u670d\u52a1\u63a7\u5236\uff08\u6b63\u5f0f\u90e8\u7f72\u7528\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr class=\"\" data-start=\"491\" data-end=\"494\" \/>\n<h2 class=\"\" data-start=\"496\" data-end=\"513\">? \u73af\u5883\u51c6\u5907\uff08\u4e00\u6b21\u6027\u914d\u7f6e\uff09<\/h2>\n<h3 class=\"\" data-start=\"515\" data-end=\"548\">1. \u5b89\u88c5 Docker \u548c Docker Compose<\/h3>\n<h4 class=\"\" data-start=\"550\" data-end=\"571\">Windows \u6216 macOS\uff1a<\/h4>\n<p class=\"\" data-start=\"572\" data-end=\"624\">\u4e0b\u8f7d\u5730\u5740\uff1a<a target=\"_new\" rel=\"noopener\" data-start=\"577\" data-end=\"624\">https:\/\/www.docker.com\/products\/docker-desktop\/<\/a><\/p>\n<p class=\"\" data-start=\"626\" data-end=\"632\">\u5b89\u88c5\u5b8c\u4e4b\u540e\uff1a<\/p>\n<ul data-start=\"633\" data-end=\"668\">\n<li class=\"\" data-start=\"633\" data-end=\"652\">\n<p class=\"\" data-start=\"635\" data-end=\"652\">\u6253\u5f00 Docker Desktop<\/p>\n<\/li>\n<li class=\"\" data-start=\"653\" data-end=\"668\">\n<p class=\"\" data-start=\"655\" data-end=\"668\">\u542f\u52a8\u6210\u529f\u540e\u53ef\u4ee5\u5728\u7ec8\u7aef\u6267\u884c\uff1a<\/p>\n<\/li>\n<\/ul>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">docker -v<br \/>\ndocker compose version<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"715\" data-end=\"727\">\u786e\u4fdd\u90fd\u80fd\u6b63\u5e38\u8f93\u51fa\u7248\u672c\u53f7\u3002<\/p>\n<h4 class=\"\" data-start=\"729\" data-end=\"748\">Linux\uff08Ubuntu\uff09\uff1a<\/h4>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">sudo apt update<br \/>\nsudo apt install docker.io docker-compose -y<br \/>\nsudo systemctl start docker<br \/>\nsudo systemctl <span class=\"hljs-built_in\">enable<\/span> docker<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"880\" data-end=\"883\" \/>\n<h2 class=\"\" data-start=\"885\" data-end=\"925\">? \u521b\u5efa n8n + Ngrok \u7684 Docker Compose \u914d\u7f6e<\/h2>\n<h3 class=\"\" data-start=\"927\" data-end=\"934\">\u6b65\u9aa4\uff1a<\/h3>\n<ol data-start=\"936\" data-end=\"956\">\n<li class=\"\" data-start=\"936\" data-end=\"956\">\n<p class=\"\" data-start=\"939\" data-end=\"956\">\u5728\u4efb\u610f\u6587\u4ef6\u5939\u4e0b\u521b\u5efa\u4e00\u4e2a\u76ee\u5f55\uff0c\u4f8b\u5982\uff1a<\/p>\n<\/li>\n<\/ol>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\"><span class=\"hljs-built_in\">mkdir<\/span> n8n-local-ngrok<br \/>\n<span class=\"hljs-built_in\">cd<\/span> n8n-local-ngrok<br \/>\n<\/code><\/div>\n<\/div>\n<ol start=\"2\" data-start=\"1011\" data-end=\"1035\">\n<li class=\"\" data-start=\"1011\" data-end=\"1035\">\n<p class=\"\" data-start=\"1014\" data-end=\"1035\">\u521b\u5efa <code data-start=\"1017\" data-end=\"1023\">.env<\/code> \u6587\u4ef6\uff08\u7528\u4e8e\u914d\u7f6e\u53d8\u91cf\uff09\uff1a<\/p>\n<\/li>\n<\/ol>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">env<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-env\"># .env \u6587\u4ef6<br \/>\nN8N_PORT=5678<br \/>\nN8N_BASIC_AUTH_USER=admin<br \/>\nN8N_BASIC_AUTH_PASSWORD=admin123<br \/>\n<\/code><\/div>\n<\/div>\n<ol start=\"3\" data-start=\"1131\" data-end=\"1161\">\n<li class=\"\" data-start=\"1131\" data-end=\"1161\">\n<p class=\"\" data-start=\"1134\" data-end=\"1161\">\u521b\u5efa <code data-start=\"1137\" data-end=\"1157\">docker-compose.yml<\/code> \u6587\u4ef6\uff1a<\/p>\n<\/li>\n<\/ol>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">yaml<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-yaml\"><span class=\"hljs-attr\">version:<\/span> <span class=\"hljs-string\">\"3.7\"<\/span><br \/>\n<span class=\"hljs-attr\">services:<\/span><br \/>\n  <span class=\"hljs-attr\">n8n:<\/span><br \/>\n    <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">n8nio\/n8n<\/span><br \/>\n    <span class=\"hljs-attr\">ports:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"${N8N_PORT}:5678\"<\/span><br \/>\n    <span class=\"hljs-attr\">environment:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_BASIC_AUTH_ACTIVE=true<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_HOST=localhost<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">WEBHOOK_TUNNEL_URL=http:\/\/localhost:4040<\/span><br \/>\n    <span class=\"hljs-attr\">volumes:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">.\/n8n_data:\/home\/node\/.n8n<\/span><br \/>\n    <span class=\"hljs-attr\">restart:<\/span> <span class=\"hljs-string\">always<\/span><\/p>\n<p>  <span class=\"hljs-attr\">ngrok:<\/span><br \/>\n    <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">wernight\/ngrok<\/span><br \/>\n    <span class=\"hljs-attr\">command:<\/span> <span class=\"hljs-string\">http<\/span> <span class=\"hljs-string\">n8n:5678<\/span><br \/>\n    <span class=\"hljs-attr\">ports:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"4040:4040\"<\/span>  <span class=\"hljs-comment\"># \u672c\u5730\u63a7\u5236\u53f0\u9875\u9762<\/span><br \/>\n    <span class=\"hljs-attr\">environment:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">NGROK_PORT=n8n:5678<\/span><br \/>\n    <span class=\"hljs-attr\">restart:<\/span> <span class=\"hljs-string\">always<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<ol start=\"4\" data-start=\"1743\" data-end=\"1751\">\n<li class=\"\" data-start=\"1743\" data-end=\"1751\">\n<p class=\"\" data-start=\"1746\" data-end=\"1751\">\u542f\u52a8\u670d\u52a1\uff1a<\/p>\n<\/li>\n<\/ol>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">docker compose up -d<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"1786\" data-end=\"1789\" \/>\n<h2 class=\"\" data-start=\"1791\" data-end=\"1802\">? \u542f\u52a8\u6210\u529f\u540e<\/h2>\n<h3 class=\"\" data-start=\"1804\" data-end=\"1813\">\u67e5\u770b\u72b6\u6001\uff1a<\/h3>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">docker compose ps<br \/>\n<\/code><\/div>\n<\/div>\n<h3 class=\"\" data-start=\"1845\" data-end=\"1861\">\u6253\u5f00 n8n \u672c\u5730\u5730\u5740\uff1a<\/h3>\n<p class=\"\" data-start=\"1862\" data-end=\"1868\">\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">arduino<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\">http:<span class=\"hljs-comment\">\/\/localhost:5678<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"1899\" data-end=\"1920\">\u7528\u6237\u540d\u548c\u5bc6\u7801\u662f\u4f60 <code data-start=\"1908\" data-end=\"1914\">.env<\/code> \u91cc\u8bbe\u7f6e\u7684\u3002<\/p>\n<hr class=\"\" data-start=\"1922\" data-end=\"1925\" \/>\n<h3 class=\"\" data-start=\"1927\" data-end=\"1946\">\u83b7\u53d6\u516c\u7f51\u8bbf\u95ee\u5730\u5740\uff08Ngrok\uff09<\/h3>\n<p class=\"\" data-start=\"1947\" data-end=\"1956\">\u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u8bbf\u95ee\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">arduino<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\">http:<span class=\"hljs-comment\">\/\/localhost:4040<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"1988\" data-end=\"1997\">\u4f60\u4f1a\u770b\u5230\u5982\u4e0b\u754c\u9762\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">nginx<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\"><span class=\"hljs-attribute\">Forwarding<\/span>    https:\/\/abcd1234.ngrok.io  -&gt;  http:\/\/n8n:5678<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"2069\" data-end=\"2137\">\u73b0\u5728\u4f60\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a <code data-start=\"2079\" data-end=\"2106\">https:\/\/abcd1234.ngrok.io<\/code> \u5730\u5740\uff0c\u5728 <strong data-start=\"2112\" data-end=\"2122\">\u5168\u7403\u4efb\u610f\u5730\u70b9<\/strong> \u8bbf\u95ee\u4f60\u7684\u672c\u5730 n8n\uff0c\u5305\u62ec\uff1a<\/p>\n<ul data-start=\"2139\" data-end=\"2177\">\n<li class=\"\" data-start=\"2139\" data-end=\"2151\">\n<p class=\"\" data-start=\"2141\" data-end=\"2151\">\u6d4b\u8bd5 Webhook<\/p>\n<\/li>\n<li class=\"\" data-start=\"2152\" data-end=\"2163\">\n<p class=\"\" data-start=\"2154\" data-end=\"2163\">\u5916\u90e8 API \u56de\u8c03<\/p>\n<\/li>\n<li class=\"\" data-start=\"2164\" data-end=\"2177\">\n<p class=\"\" data-start=\"2166\" data-end=\"2177\">\u624b\u673a\u8bbf\u95ee\u4f60\u7684\u81ea\u52a8\u5316\u6d41\u7a0b<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"2179\" data-end=\"2182\" \/>\n<h2 class=\"\" data-start=\"2184\" data-end=\"2195\">?\ufe0f \u5b89\u5168\u5efa\u8bae<\/h2>\n<ol data-start=\"2197\" data-end=\"2309\">\n<li class=\"\" data-start=\"2197\" data-end=\"2230\">\n<p class=\"\" data-start=\"2200\" data-end=\"2230\"><strong data-start=\"2200\" data-end=\"2219\">\u4e00\u5b9a\u542f\u7528 Basic Auth<\/strong>\uff08\u5df2\u5728\u4e0a\u9762\u914d\u7f6e\u4e2d\u8bbe\u7f6e\uff09<\/p>\n<\/li>\n<li class=\"\" data-start=\"2231\" data-end=\"2267\">\n<p class=\"\" data-start=\"2234\" data-end=\"2267\">Ngrok \u7684\u514d\u8d39\u5730\u5740\u662f\u968f\u673a\u7684\uff0c\u6bcf\u6b21\u91cd\u542f\u4f1a\u53d8\uff0c\u6240\u4ee5\u4e0d\u80fd\u7528\u4e8e\u957f\u671f\u90e8\u7f72<\/p>\n<\/li>\n<li class=\"\" data-start=\"2268\" data-end=\"2309\">\n<p class=\"\" data-start=\"2271\" data-end=\"2309\">\u82e5\u8981\u957f\u671f\u7a33\u5b9a\u90e8\u7f72\uff0c\u8bf7\u4f7f\u7528 Traefik + \u81ea\u5b9a\u4e49\u57df\u540d\uff08\u53ef\u7ee7\u7eed\u5199\u8be6\u7ec6\u6559\u7a0b\uff09<\/p>\n<\/li>\n<\/ol>\n<hr class=\"\" data-start=\"2311\" data-end=\"2314\" \/>\n<h2 class=\"\" data-start=\"2316\" data-end=\"2327\">? \u505c\u6b62\u548c\u6e05\u7406<\/h2>\n<p class=\"\" data-start=\"2329\" data-end=\"2334\">\u505c\u6b62\u670d\u52a1\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">docker compose down<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"2368\" data-end=\"2377\">\u6e05\u7406\u6570\u636e\uff08\u53ef\u9009\uff09\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\"><span class=\"hljs-built_in\">rm<\/span> -rf .\/n8n_data<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"2409\" data-end=\"2412\" \/>\n<h2 class=\"\" data-start=\"2414\" data-end=\"2421\">\u2705 \u603b\u7ed3<\/h2>\n<div class=\"pointer-events-none relative left-[50%]! flex w-[100cqw] translate-x-[-50%] justify-center *:pointer-events-auto\">\n<div class=\"tableContainer horzScrollShadows group relative\"><button class=\"hover:bg-token-main-surface-secondary text-token-text-secondary rounded-lg px-1 py-1 opacity-0 transition-opacity duration-200 group-focus-within:opacity-100 group-hover:opacity-100\"><\/button><\/p>\n<table class=\"min-w-full\" data-start=\"2423\" data-end=\"2572\">\n<thead data-start=\"2423\" data-end=\"2438\">\n<tr data-start=\"2423\" data-end=\"2438\">\n<th data-start=\"2423\" data-end=\"2432\">\u4f60\u83b7\u5f97\u4e86\u4ec0\u4e48<\/th>\n<th data-start=\"2432\" data-end=\"2438\">\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2463\" data-end=\"2572\">\n<tr data-start=\"2463\" data-end=\"2487\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2463\" data-end=\"2475\">\u672c\u5730 n8n \u670d\u52a1<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2475\" data-end=\"2487\">\u4e0d\u4f9d\u8d56\u516c\u7f51 IP<\/td>\n<\/tr>\n<tr data-start=\"2488\" data-end=\"2516\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2488\" data-end=\"2497\">\u516c\u5f00\u8bbf\u95ee\u5165\u53e3<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2497\" data-end=\"2516\">Ngrok \u81ea\u52a8\u751f\u6210\u7684\u516c\u7f51\u5730\u5740<\/td>\n<\/tr>\n<tr data-start=\"2517\" data-end=\"2536\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2517\" data-end=\"2525\">\u5b89\u5168\u6027\u63a7\u5236<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2525\" data-end=\"2536\">\u767b\u5f55\u8ba4\u8bc1\u5df2\u5f00\u542f<\/td>\n<\/tr>\n<tr data-start=\"2537\" data-end=\"2572\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2537\" data-end=\"2546\">\u4e00\u952e\u90e8\u7f72\u80fd\u529b<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2546\" data-end=\"2572\">\u4f7f\u7528 Docker Compose \u5feb\u901f\u542f\u52a8<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1 class=\"\" data-start=\"58\" data-end=\"102\">?\u3010\u8fdb\u9636\u7248\u3011\u4f7f\u7528 Traefik + HTTPS + \u81ea\u5b9a\u4e49\u57df\u540d \u90e8\u7f72\u672c\u5730 n8n<\/h1>\n<h2 class=\"\" data-start=\"104\" data-end=\"112\">? \u76ee\u6807<\/h2>\n<p class=\"\" data-start=\"114\" data-end=\"136\">\u8ba9\u4f60\u5728\u672c\u5730\u6216 VPS \u4e0a\u8fd0\u884c n8n\uff0c\u540c\u65f6\uff1a<\/p>\n<ul data-start=\"138\" data-end=\"272\">\n<li class=\"\" data-start=\"138\" data-end=\"180\">\n<p class=\"\" data-start=\"140\" data-end=\"180\">\u2705 \u4f7f\u7528 <strong data-start=\"145\" data-end=\"154\">\u81ea\u5b9a\u4e49\u57df\u540d<\/strong>\uff08\u5982 <code data-start=\"157\" data-end=\"177\">n8n.yourdomain.com<\/code>\uff09\u8bbf\u95ee<\/p>\n<\/li>\n<li class=\"\" data-start=\"181\" data-end=\"220\">\n<p class=\"\" data-start=\"183\" data-end=\"220\">\u2705 \u81ea\u52a8\u7b7e\u53d1 <strong data-start=\"190\" data-end=\"202\">HTTPS \u8bc1\u4e66<\/strong>\uff08\u901a\u8fc7 Let&#8217;s Encrypt\uff09<\/p>\n<\/li>\n<li class=\"\" data-start=\"221\" data-end=\"253\">\n<p class=\"\" data-start=\"223\" data-end=\"253\">\u2705 \u62e5\u6709 <strong data-start=\"228\" data-end=\"239\">\u591a\u670d\u52a1\u8def\u7531\u80fd\u529b<\/strong>\uff0c\u4e3a\u5c06\u6765\u62d3\u5c55\u591a\u4e2a\u670d\u52a1\u6253\u597d\u57fa\u7840<\/p>\n<\/li>\n<li class=\"\" data-start=\"254\" data-end=\"272\">\n<p class=\"\" data-start=\"256\" data-end=\"272\">\u2705 \u5b89\u5168\u3001\u7a33\u5b9a\u3001\u65e0\u9700\u6bcf\u6b21\u624b\u52a8\u914d\u7f6e<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"274\" data-end=\"277\" \/>\n<h2 class=\"\" data-start=\"279\" data-end=\"289\">? \u51c6\u5907\u5de5\u4f5c<\/h2>\n<h3 class=\"\" data-start=\"291\" data-end=\"303\">1. \u4f60\u9700\u8981\u6709\uff1a<\/h3>\n<ul data-start=\"304\" data-end=\"446\">\n<li class=\"\" data-start=\"304\" data-end=\"335\">\n<p class=\"\" data-start=\"306\" data-end=\"335\">\u4e00\u4e2a\u81ea\u5df1\u7684\u57df\u540d\uff08\u4f8b\u5982\uff1a<code data-start=\"317\" data-end=\"333\">yourdomain.com<\/code>\uff09\u2705<\/p>\n<\/li>\n<li class=\"\" data-start=\"336\" data-end=\"374\">\n<p class=\"\" data-start=\"338\" data-end=\"374\">\u80fd\u4fee\u6539\u57df\u540d DNS \u7684\u6743\u9650\uff08\u6bd4\u5982\u963f\u91cc\u4e91\u3001Cloudflare\u3001\u817e\u8baf\u4e91\uff09\u2705<\/p>\n<\/li>\n<li class=\"\" data-start=\"375\" data-end=\"414\">\n<p class=\"\" data-start=\"377\" data-end=\"414\">\u4e00\u53f0\u516c\u7f51\u670d\u52a1\u5668\uff08\u4f8b\u5982\u963f\u91cc\u4e91\/\u817e\u8baf\u4e91\/\u642c\u74e6\u5de5\uff09\u6216\u652f\u6301\u516c\u7f51 IP \u7684\u672c\u5730\u73af\u5883\u2705<\/p>\n<\/li>\n<li class=\"\" data-start=\"415\" data-end=\"446\">\n<p class=\"\" data-start=\"417\" data-end=\"446\">\u5b89\u88c5\u597d Docker + Docker Compose \u2705<\/p>\n<\/li>\n<\/ul>\n<blockquote data-start=\"448\" data-end=\"522\">\n<p class=\"\" data-start=\"450\" data-end=\"522\">\u5982\u679c\u4f60\u6ca1\u6709\u670d\u52a1\u5668\uff0c<strong data-start=\"459\" data-end=\"493\">\u4e5f\u53ef\u4ee5\u5728\u672c\u5730\u90e8\u7f72\uff0c\u4f46\u5fc5\u987b\u8981\u5c06\u57df\u540d\u89e3\u6790\u5230\u4f60\u5f53\u524d\u7535\u8111\u7684\u516c\u7f51 IP<\/strong>\uff08\u6bd4\u5982\u901a\u8fc7\u82b1\u751f\u58f3\u3001Cloudflare Tunnel \u7b49\uff09<\/p>\n<\/blockquote>\n<hr class=\"\" data-start=\"524\" data-end=\"527\" \/>\n<h2 class=\"\" data-start=\"529\" data-end=\"541\">? \u76ee\u5f55\u7ed3\u6784\u8bbe\u8ba1<\/h2>\n<p class=\"\" data-start=\"543\" data-end=\"562\">\u4f60\u53ef\u4ee5\u7528\u5982\u4e0b\u76ee\u5f55\u7ed3\u6784\uff08\u9002\u5408\u957f\u671f\u7ef4\u62a4\uff09\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\">n8n-traefik\/<br \/>\n\u251c\u2500\u2500 docker-compose.yml<br \/>\n\u251c\u2500\u2500 .<span class=\"hljs-built_in\">env<\/span><br \/>\n\u251c\u2500\u2500 traefik\/<br \/>\n\u2502   \u2514\u2500\u2500 traefik.yml<br \/>\n\u2502   \u2514\u2500\u2500 acme.json<br \/>\n\u2514\u2500\u2500 n8n_data\/   <span class=\"hljs-comment\"># \u6301\u4e45\u5316 n8n \u6570\u636e<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"698\" data-end=\"701\" \/>\n<h2 class=\"\" data-start=\"703\" data-end=\"724\">? .env \u6587\u4ef6\uff08\u4fdd\u5b58\u73af\u5883\u53d8\u91cf\uff09<\/h2>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">env<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-env\">DOMAIN=n8n.yourdomain.com<br \/>\nEMAIL=you@example.com<br \/>\nN8N_BASIC_AUTH_USER=admin<br \/>\nN8N_BASIC_AUTH_PASSWORD=admin123<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"845\" data-end=\"848\" \/>\n<h2 class=\"\" data-start=\"850\" data-end=\"891\">? traefik\/traefik.yml \u6587\u4ef6\uff08Traefik \u4e3b\u914d\u7f6e\uff09<\/h2>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">yaml<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-yaml\"><span class=\"hljs-attr\">entryPoints:<\/span><br \/>\n  <span class=\"hljs-attr\">web:<\/span><br \/>\n    <span class=\"hljs-attr\">address:<\/span> <span class=\"hljs-string\">\":80\"<\/span><br \/>\n  <span class=\"hljs-attr\">websecure:<\/span><br \/>\n    <span class=\"hljs-attr\">address:<\/span> <span class=\"hljs-string\">\":443\"<\/span><br \/>\n<span class=\"hljs-attr\">providers:<\/span><br \/>\n  <span class=\"hljs-attr\">docker:<\/span><br \/>\n    <span class=\"hljs-attr\">exposedByDefault:<\/span> <span class=\"hljs-literal\">false<\/span><br \/>\n<span class=\"hljs-attr\">certificatesResolvers:<\/span><br \/>\n  <span class=\"hljs-attr\">letsencrypt:<\/span><br \/>\n    <span class=\"hljs-attr\">acme:<\/span><br \/>\n      <span class=\"hljs-attr\">email:<\/span> <span class=\"hljs-string\">\"${EMAIL}\"<\/span><br \/>\n      <span class=\"hljs-attr\">storage:<\/span> <span class=\"hljs-string\">\/letsencrypt\/acme.json<\/span><br \/>\n      <span class=\"hljs-attr\">httpChallenge:<\/span><br \/>\n        <span class=\"hljs-attr\">entryPoint:<\/span> <span class=\"hljs-string\">web<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"1184\" data-end=\"1187\" \/>\n<h2 class=\"\" data-start=\"1189\" data-end=\"1230\">? traefik\/acme.json \u6587\u4ef6\uff08\u7528\u4e8e\u4fdd\u5b58 HTTPS \u8bc1\u4e66\uff09<\/h2>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\"><span class=\"hljs-built_in\">touch<\/span> traefik\/acme.json<br \/>\n<span class=\"hljs-built_in\">chmod<\/span> 600 traefik\/acme.json<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"1297\" data-end=\"1300\" \/>\n<h2 class=\"\" data-start=\"1302\" data-end=\"1329\">? docker-compose.yml \u6587\u4ef6<\/h2>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">yaml<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-yaml\"><span class=\"hljs-attr\">version:<\/span> <span class=\"hljs-string\">\"3.7\"<\/span><br \/>\n<span class=\"hljs-attr\">services:<\/span><br \/>\n  <span class=\"hljs-attr\">traefik:<\/span><br \/>\n    <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">traefik:v2.10<\/span><br \/>\n    <span class=\"hljs-attr\">command:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"--configFile=\/traefik.yml\"<\/span><br \/>\n    <span class=\"hljs-attr\">ports:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"80:80\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"443:443\"<\/span><br \/>\n    <span class=\"hljs-attr\">volumes:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\".\/traefik\/traefik.yml:\/traefik.yml:ro\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\".\/traefik\/acme.json:\/letsencrypt\/acme.json\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"<\/span><br \/>\n    <span class=\"hljs-attr\">restart:<\/span> <span class=\"hljs-string\">always<\/span><\/p>\n<p>  <span class=\"hljs-attr\">n8n:<\/span><br \/>\n    <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">n8nio\/n8n<\/span><br \/>\n    <span class=\"hljs-attr\">environment:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_BASIC_AUTH_ACTIVE=true<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_HOST=${DOMAIN}<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">N8N_PORT=5678<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">WEBHOOK_URL=https:\/\/${DOMAIN}\/<\/span><br \/>\n    <span class=\"hljs-attr\">volumes:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">.\/n8n_data:\/home\/node\/.n8n<\/span><br \/>\n    <span class=\"hljs-attr\">labels:<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"traefik.enable=true\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"traefik.http.routers.n8n.rule=Host(`${DOMAIN}`)\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"traefik.http.routers.n8n.entrypoints=websecure\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"traefik.http.routers.n8n.tls.certresolver=letsencrypt\"<\/span><br \/>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"traefik.http.services.n8n.loadbalancer.server.port=5678\"<\/span><br \/>\n    <span class=\"hljs-attr\">restart:<\/span> <span class=\"hljs-string\">always<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"2323\" data-end=\"2326\" \/>\n<h2 class=\"\" data-start=\"2328\" data-end=\"2347\">?\ufe0f \u7b2c\u4e00\u6b65\uff1a\u914d\u7f6e\u4f60\u7684 DNS<\/h2>\n<p class=\"\" data-start=\"2349\" data-end=\"2369\">\u767b\u5f55\u4f60\u8d2d\u4e70\u57df\u540d\u7684\u5e73\u53f0\uff0c\u628a\u4ee5\u4e0b\u8bb0\u5f55\u52a0\u8fdb\u53bb\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">css<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\">\u7c7b\u578b\uff1a<span class=\"hljs-selector-tag\">A<\/span><br \/>\n\u4e3b\u673a\u8bb0\u5f55\uff1an8n<br \/>\n\u503c\uff1a\u4f60\u7684\u670d\u52a1\u5668\u516c\u7f51 IP<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"2407\" data-end=\"2427\">\u7b49\u5f85 DNS \u751f\u6548\uff08\u901a\u5e38 1-5 \u5206\u949f\uff09<\/p>\n<hr class=\"\" data-start=\"2429\" data-end=\"2432\" \/>\n<h2 class=\"\" data-start=\"2434\" data-end=\"2450\">? \u7b2c\u4e8c\u6b65\uff1a\u542f\u52a8\u6240\u6709\u670d\u52a1<\/h2>\n<p class=\"\" data-start=\"2452\" data-end=\"2461\">\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u6267\u884c\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">docker compose up -d<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"2497\" data-end=\"2500\" \/>\n<h2 class=\"\" data-start=\"2502\" data-end=\"2527\">\u2705 \u7b2c\u4e09\u6b65\uff1a\u8bbf\u95ee n8n\uff08\u5e26 HTTPS\uff01\uff09<\/h2>\n<p class=\"\" data-start=\"2529\" data-end=\"2535\">\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">arduino<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\">https:<span class=\"hljs-comment\">\/\/n8n.yourdomain.com<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"2573\" data-end=\"2614\">\u8f93\u5165\u7528\u6237\u540d\u5bc6\u7801\uff08\u5c31\u662f <code data-start=\"2584\" data-end=\"2590\">.env<\/code> \u4e2d\u8bbe\u7f6e\u7684\uff09\uff0c\u4f60\u5c31\u80fd\u4f7f\u7528\u5b89\u5168\u52a0\u5bc6\u7684 n8n \u5566\uff01<\/p>\n<hr class=\"\" data-start=\"2616\" data-end=\"2619\" \/>\n<h2 class=\"\" data-start=\"2621\" data-end=\"2638\">? \u529f\u80fd\u52a0\u5206\u9879\uff08\u53ef\u9009\u914d\u7f6e\uff09<\/h2>\n<ul data-start=\"2640\" data-end=\"2731\">\n<li class=\"\" data-start=\"2640\" data-end=\"2663\">\n<p class=\"\" data-start=\"2642\" data-end=\"2663\"><strong data-start=\"2642\" data-end=\"2649\">\u9632\u706b\u5899<\/strong>\uff1a\u53ea\u5f00\u653e 80\u3001443 \u7aef\u53e3<\/p>\n<\/li>\n<li class=\"\" data-start=\"2664\" data-end=\"2694\">\n<p class=\"\" data-start=\"2666\" data-end=\"2694\"><strong data-start=\"2666\" data-end=\"2674\">\u6570\u636e\u5907\u4efd<\/strong>\uff1a\u5b9a\u671f\u6253\u5305 <code data-start=\"2680\" data-end=\"2691\">n8n_data\/<\/code> \u76ee\u5f55<\/p>\n<\/li>\n<li class=\"\" data-start=\"2695\" data-end=\"2731\">\n<p class=\"\" data-start=\"2697\" data-end=\"2731\"><strong data-start=\"2697\" data-end=\"2712\">\u52a0\u5bc6 API \u5bc6\u94a5\u7ba1\u7406<\/strong>\uff1a\u53ef\u4ee5\u7ed3\u5408 Vault \u6216\u73af\u5883\u53d8\u91cf\u65b9\u5f0f<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"2733\" data-end=\"2736\" \/>\n<h2 class=\"\" data-start=\"2738\" data-end=\"2751\">? \u91cd\u542f &amp; \u66f4\u65b0<\/h2>\n<p class=\"\" data-start=\"2753\" data-end=\"2765\">\u5347\u7ea7 n8n \u955c\u50cf\u7248\u672c\uff1a<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">bash<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"\u590d\u5236\">\u590d\u5236<\/button><\/span><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">\u7f16\u8f91<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-bash\">docker compose pull<br \/>\ndocker compose up -d<br \/>\n<\/code><\/div>\n<\/div>\n<hr class=\"\" data-start=\"2821\" data-end=\"2824\" \/>\n<h2 class=\"\" data-start=\"2826\" data-end=\"2836\">? \u5c0f\u7ed3\u5bf9\u6bd4<\/h2>\n<div class=\"pointer-events-none relative left-[50%]! flex w-[100cqw] translate-x-[-50%] justify-center *:pointer-events-auto\">\n<div class=\"tableContainer horzScrollShadows group relative\"><button class=\"hover:bg-token-main-surface-secondary text-token-text-secondary rounded-lg px-1 py-1 opacity-0 transition-opacity duration-200 group-focus-within:opacity-100 group-hover:opacity-100\"><\/button><\/p>\n<table class=\"min-w-full\" data-start=\"2838\" data-end=\"3030\">\n<thead data-start=\"2838\" data-end=\"2873\">\n<tr data-start=\"2838\" data-end=\"2873\">\n<th data-start=\"2838\" data-end=\"2845\">\u90e8\u7f72\u65b9\u5f0f<\/th>\n<th data-start=\"2845\" data-end=\"2852\">\u516c\u7f51\u8bbf\u95ee<\/th>\n<th data-start=\"2852\" data-end=\"2858\">\u5b89\u5168\u6027<\/th>\n<th data-start=\"2858\" data-end=\"2865\">\u81ea\u52a8\u8bc1\u4e66<\/th>\n<th data-start=\"2865\" data-end=\"2873\">\u9002\u7528\u573a\u666f<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2930\" data-end=\"3030\">\n<tr data-start=\"2930\" data-end=\"2970\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2930\" data-end=\"2942\">Ngrok \u4e34\u65f6\u7248<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2942\" data-end=\"2946\">\u2705<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2946\" data-end=\"2957\">\u274c \u9650\u5236\u8bbf\u95ee\u57df\u540d<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2957\" data-end=\"2961\">\u274c<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2961\" data-end=\"2970\">\u6d4b\u8bd5\u3001\u5b66\u4e60<\/td>\n<\/tr>\n<tr data-start=\"2971\" data-end=\"3030\">\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2971\" data-end=\"2986\">Traefik + \u57df\u540d<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2986\" data-end=\"2990\">\u2705<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"2990\" data-end=\"3013\">\u2705 Basic Auth + HTTPS<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"3013\" data-end=\"3017\">\u2705<\/td>\n<td class=\"max-w-[calc(var(--thread-content-max-width)*2\/3)]\" data-start=\"3017\" data-end=\"3030\">\u6b63\u5f0f\u90e8\u7f72\u3001\u4e0a\u7ebf\u7cfb\u7edf<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr class=\"\" data-start=\"3032\" data-end=\"3035\" \/>\n<h2 class=\"\" data-start=\"3037\" data-end=\"3057\">? \u60f3\u6cd5\u52a0\u503c\uff1a\u8fd8\u53ef\u4ee5\u63a5\u4ec0\u4e48\u670d\u52a1\uff1f<\/h2>\n<ul data-start=\"3059\" data-end=\"3162\">\n<li class=\"\" data-start=\"3059\" data-end=\"3093\">\n<p class=\"\" data-start=\"3061\" data-end=\"3093\">\u63a5\u5165 Telegram\u3001\u5fae\u4fe1\u673a\u5668\u4eba\u3001GitHub \u7b49\uff0c\u505a\u81ea\u52a8\u901a\u77e5<\/p>\n<\/li>\n<li class=\"\" data-start=\"3094\" data-end=\"3131\">\n<p class=\"\" data-start=\"3096\" data-end=\"3131\">\u642d\u914d Notion\u3001Google Sheets\u3001Email \u505a\u81ea\u52a8\u62a5\u8868<\/p>\n<\/li>\n<li class=\"\" data-start=\"3132\" data-end=\"3148\">\n<p class=\"\" data-start=\"3134\" data-end=\"3148\">\u81ea\u52a8\u4ece\u7535\u5546\u540e\u53f0\u6293\u6570\u636e\u3001\u53d1\u90ae\u4ef6<\/p>\n<\/li>\n<li class=\"\" data-start=\"3149\" data-end=\"3162\">\n<p class=\"\" data-start=\"3151\" data-end=\"3162\">\u505a\u4e2a\u4eba AI \u52a9\u7406\u6d41\u7a0b<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"3164\" data-end=\"3167\" \/>\n<p class=\"\" data-start=\"3169\" data-end=\"3183\">\u5982\u679c\u4f60\u60f3\uff0c\u6211\u8fd8\u53ef\u4ee5\u4e3a\u4f60\u5b9a\u5236\uff1a<\/p>\n<ul data-start=\"3185\" data-end=\"3287\">\n<li class=\"\" data-start=\"3185\" data-end=\"3196\">\n<p class=\"\" data-start=\"3187\" data-end=\"3196\">\u2705 \u4e00\u952e\u811a\u672c\u90e8\u7f72\u7248<\/p>\n<\/li>\n<li class=\"\" data-start=\"3197\" data-end=\"3235\">\n<p class=\"\" data-start=\"3199\" data-end=\"3235\">\u2705 \u672c\u5730 + Cloudflare Tunnel \u65b9\u6848\uff08\u65e0\u9700\u516c\u7f51 IP\uff09<\/p>\n<\/li>\n<li class=\"\" data-start=\"3236\" data-end=\"3262\">\n<p class=\"\" data-start=\"3238\" data-end=\"3262\">\u2705 \u4e0e WordPress \/ \u7535\u5546\u7cfb\u7edf\u6574\u5408\u6d41\u7a0b<\/p>\n<\/li>\n<li class=\"\" data-start=\"3263\" data-end=\"3287\">\n<p class=\"\" data-start=\"3265\" data-end=\"3287\">\u2705 \u5e26\u524d\u7aef\u754c\u9762\u7684 n8n SaaS \u5c01\u88c5\u65b9\u6848<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u8d85\u8be6\u7ec6\u7684\u4e2d\u6587\u7b80\u4f53\u6559\u7a0b\uff0c\u5e2e\u52a9\u4f60\u5728\u672c\u5730\u901a\u8fc7 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68],"tags":[],"class_list":["post-14387","post","type-post","status-publish","format-standard","hentry","category-zzjy"],"_links":{"self":[{"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=\/wp\/v2\/posts\/14387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14387"}],"version-history":[{"count":0,"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=\/wp\/v2\/posts\/14387\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aiersheng.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}