{"id":2809,"date":"2026-06-08T17:04:35","date_gmt":"2026-06-08T09:04:35","guid":{"rendered":"https:\/\/www.iserver.com.tw\/?p=2809"},"modified":"2026-06-08T18:06:21","modified_gmt":"2026-06-08T10:06:21","slug":"ai-operations-server-ubuntu-26-04-server-docker-n8n-%e5%ae%89%e8%a3%9d%e6%b5%81%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.iserver.com.tw\/?p=2809","title":{"rendered":"AI Operations Server Ubuntu 26.04 Server + Docker + n8n \u5b89\u88dd\u6d41\u7a0b"},"content":{"rendered":"<p>\u5728 AI Operations Server \u7684\u898f\u5283\u4e2d\uff0cUbuntu 26.04 Server\u3001Docker\u3001n8n\u3001PostgreSQL\u3001Redis\u3001Qdrant\u3001OpenAI API\u3001Open WebUI \u8207 Portainer \u6703\u7d44\u6210\u4e00\u53f0\u5c08\u9580\u7528\u4f86\u8655\u7406 AI \u81ea\u52d5\u5316\u3001\u8cc7\u6599\u6d41\u8f49\u3001\u5de5\u4f5c\u6d41\u7a0b\u7de8\u6392\u8207\u5411\u91cf\u8a18\u61b6\u7684\u5f8c\u7aef\u4e2d\u6a1e\u3002\u9019\u53f0\u4f3a\u670d\u5668\u7684\u5b9a\u4f4d\u4e0d\u662f\u7db2\u7ad9\u4f3a\u670d\u5668\uff0c\u4e5f\u4e0d\u662f\u53cd\u5411\u4ee3\u7406\u4f3a\u670d\u5668\uff0c\u66f4\u4e0d\u662f\u55ae\u7d14\u62ff\u4f86\u653e\u7f6e WordPress \u7684\u4e3b\u6a5f\uff1b\u5b83\u7684\u4efb\u52d9\u662f\u4f5c\u70ba\u4f01\u696d\u5167\u90e8\u6216\u5c08\u6848\u5718\u968a\u7684\u300cAI \u81ea\u52d5\u5316\u8207\u8cc7\u6599\u8655\u7406\u4e2d\u6a1e\u300d\uff0c\u8ca0\u8cac\u628a WordPress\u3001WooCommerce\u3001\u8868\u55ae\u3001\u5916\u90e8 API\u3001OpenAI \u6a21\u578b\u8207\u8cc7\u6599\u5eab\u6d41\u7a0b\u4e32\u63a5\u8d77\u4f86\uff0c\u5f62\u6210\u53ef\u7dad\u8b77\u3001\u53ef\u64f4\u5145\u3001\u53ef\u89c0\u6e2c\u7684 AI Operations \u67b6\u69cb\u3002<\/p>\n<p>\u672c\u6587\u6703\u4ee5\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u7684\u89d2\u5ea6\uff0c\u8aaa\u660e\u5982\u4f55\u5728 Ubuntu 26.04 Server \u4e0a\u4f7f\u7528 Docker Compose \u90e8\u7f72 n8n\u3001PostgreSQL\u3001Redis\u3001Qdrant\u3001Open WebUI \u8207 Portainer\uff0c\u4e26\u5efa\u7acb\u4e00\u500b\u9069\u5408 WordPress \u81ea\u52d5\u5316\u3001AI \u6587\u7ae0\u751f\u6210\u3001WooCommerce \u5546\u54c1\u7ba1\u7406\u3001\u8868\u55ae\u81ea\u52d5\u56de\u8986\u3001API \u4e32\u63a5\u4e2d\u63a7\uff0c\u4ee5\u53ca\u672a\u4f86\u53ef\u64f4\u5c55 Agent \u67b6\u69cb\u7684\u57fa\u790e\u5e73\u53f0\u3002\u6587\u7ae0\u4e2d\u7684\u6307\u4ee4\u8207\u8a2d\u5b9a\u53ef\u4f5c\u70ba\u6b63\u5f0f\u74b0\u5883\u7684\u8d77\u9ede\uff0c\u4f46\u6b63\u5f0f\u4e0a\u7dda\u524d\u4ecd\u5efa\u8b70\u4f9d\u7167\u516c\u53f8\u8cc7\u5b89\u653f\u7b56\u52a0\u5165\u9632\u706b\u7246\u3001\u5099\u4efd\u3001TLS\u3001\u6b0a\u9650\u63a7\u7ba1\u3001\u76e3\u63a7\u8207\u65e5\u8a8c\u96c6\u4e2d\u5316\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">AI Operations Server \u7684\u6838\u5fc3\u5b9a\u4f4d<\/h2>\n<p>\u9019\u53f0 AI Server \u4e0d\u61c9\u8a72\u88ab\u8a2d\u8a08\u6210\u300c\u4ec0\u9ebc\u90fd\u8dd1\u300d\u7684\u842c\u7528\u4f3a\u670d\u5668\u3002\u82e5\u540c\u6642\u5728\u540c\u4e00\u53f0\u6a5f\u5668\u4e0a\u653e\u7db2\u7ad9\u3001\u8cc7\u6599\u5eab\u3001\u53cd\u5411\u4ee3\u7406\u3001CI\/CD\u3001\u76e3\u63a7\u3001\u5099\u4efd\u8207 AI \u4efb\u52d9\uff0c\u9577\u671f\u6703\u5c0e\u81f4\u6b0a\u9650\u6df7\u4e82\u3001\u8cc7\u6e90\u7af6\u722d\u8207\u6545\u969c\u7bc4\u570d\u64f4\u5927\u3002\u6bd4\u8f03\u7a69\u5b9a\u7684\u8a2d\u8a08\u65b9\u5f0f\uff0c\u662f\u660e\u78ba\u754c\u5b9a\u6b64\u4f3a\u670d\u5668\u53ea\u8655\u7406 AI Operations \u76f8\u95dc\u4efb\u52d9\u3002<\/p>\n<p>\u672c\u67b6\u69cb\u4e2d\u7684 AI Operations Server \u53ea\u505a\u56db\u4ef6\u4e8b\uff1a<\/p>\n<ul>\n<li><strong>AI \u601d\u8003\uff1a<\/strong>\u900f\u904e OpenAI API \u9032\u884c\u6587\u5b57\u751f\u6210\u3001\u6458\u8981\u3001\u5206\u985e\u3001\u7ffb\u8b6f\u3001\u5546\u54c1\u63cf\u8ff0\u7522\u751f\u3001\u5ba2\u670d\u56de\u8986\u8349\u7a3f\u751f\u6210\u7b49\u4efb\u52d9\u3002<\/li>\n<li><strong>\u6d41\u7a0b\u81ea\u52d5\u5316\uff1a<\/strong>\u4ee5 n8n \u4f5c\u70ba Workflow \u6838\u5fc3\uff0c\u8ca0\u8cac\u6392\u7a0b\u3001Webhook\u3001API \u4e32\u63a5\u3001\u689d\u4ef6\u5224\u65b7\u3001\u932f\u8aa4\u91cd\u8a66\u8207\u4efb\u52d9\u5206\u6d3e\u3002<\/li>\n<li><strong>\u8cc7\u6599\u8655\u7406\uff1a<\/strong>\u4f7f\u7528 PostgreSQL \u5132\u5b58 n8n \u5de5\u4f5c\u6d41\u7a0b\u8cc7\u6599\u3001\u57f7\u884c\u7d00\u9304\u3001\u6191\u8b49\u7d22\u5f15\u8207\u61c9\u7528\u8cc7\u6599\u3002<\/li>\n<li><strong>\u8a18\u61b6\u8207\u641c\u5c0b\uff1a<\/strong>\u4f7f\u7528 Qdrant \u4f5c\u70ba Vector DB\uff0c\u5132\u5b58\u6587\u4ef6\u3001\u5546\u54c1\u3001FAQ\u3001\u5ba2\u6236\u4e92\u52d5\u6458\u8981\u7b49\u5411\u91cf\u8cc7\u6599\uff0c\u63d0\u4f9b AI Agent \u6216 RAG \u6d41\u7a0b\u67e5\u8a62\u3002<\/li>\n<\/ul>\n<p>\u56e0\u6b64\uff0cWordPress \u7db2\u7ad9\u672c\u8eab\u53ef\u4ee5\u90e8\u7f72\u5728\u53e6\u4e00\u53f0 Web Server \u6216\u53d7\u7ba1\u4e3b\u6a5f\u4e0a\uff1bAI Operations Server \u5247\u900f\u904e WordPress REST API\u3001WooCommerce REST API\u3001Webhook\u3001\u8868\u55ae\u901a\u77e5\u6216\u81ea\u8a02 API \u8207\u7db2\u7ad9\u4e92\u52d5\u3002\u9019\u6a23\u7684\u62c6\u5206\u80fd\u6709\u6548\u964d\u4f4e\u7db2\u7ad9\u670d\u52d9\u8207 AI \u81ea\u52d5\u5316\u4efb\u52d9\u4e4b\u9593\u7684\u8026\u5408\uff0c\u4e5f\u8b93\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u5728\u9664\u932f\u3001\u7dad\u8b77\u8207\u64f4\u5145\u6642\u66f4\u5bb9\u6613\u638c\u63e1\u908a\u754c\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u63a8\u85a6\u5b8c\u6574\u67b6\u69cb\u5716<\/h2>\n<p>\u4ee5\u4e0b\u662f\u6b64 AI Operations Server \u7684\u5efa\u8b70\u908f\u8f2f\u67b6\u69cb\u3002\u5be6\u52d9\u4e0a\uff0cWordPress \u53ef\u4f4d\u65bc\u5916\u90e8\u4e3b\u6a5f\u3001\u96f2\u7aef\u5e73\u53f0\u6216\u53e6\u4e00\u53f0\u5167\u90e8 Web Server\uff1bAI Server \u5247\u5c08\u6ce8\u8655\u7406\u81ea\u52d5\u5316\u8207 AI \u8cc7\u6599\u6d41\u7a0b\u3002<\/p>\n<pre><code>WordPress\n   \u2193\nn8n (\u6838\u5fc3 Workflow)\n   \u2193\nOpenAI API\n   \u2193\nPostgreSQL (\u8cc7\u6599)\n   \u2193\nRedis (Queue)\n   \u2193\nQdrant (AI \u8a18\u61b6)\n\n+ Docker (\u5168\u90e8\u5bb9\u5668\u5316)\n+ Portainer (\u7ba1\u7406)\n+ Open WebUI (\u6e2c\u8a66\u7528)<\/code><\/pre>\n<p>\u66f4\u5b8c\u6574\u7684\u90e8\u7f72\u95dc\u4fc2\u53ef\u7406\u89e3\u70ba\uff1a<\/p>\n<pre><code>\u5916\u90e8\u4f7f\u7528\u8005 \/ \u7ba1\u7406\u54e1 \/ \u8868\u55ae\u63d0\u4ea4\u8005\n        \u2193\nWordPress \/ WooCommerce \/ Contact Form\n        \u2193 Webhook \/ REST API\nAI Operations Server\n        \u251c\u2500\u2500 n8n\uff1aWorkflow \u6838\u5fc3\u3001Webhook \u5165\u53e3\u3001\u6392\u7a0b\u4efb\u52d9\n        \u251c\u2500\u2500 PostgreSQL\uff1an8n \u8cc7\u6599\u5eab\u3001\u6d41\u7a0b\u7d00\u9304\u3001\u61c9\u7528\u8cc7\u6599\n        \u251c\u2500\u2500 Redis\uff1aQueue\u3001\u5feb\u53d6\u3001\u80cc\u666f\u4efb\u52d9\u5354\u8abf\n        \u251c\u2500\u2500 Qdrant\uff1a\u5411\u91cf\u8cc7\u6599\u5eab\u3001AI \u8a18\u61b6\u3001\u8a9e\u610f\u641c\u5c0b\n        \u251c\u2500\u2500 Open WebUI\uff1aAI \u6e2c\u8a66\u8207\u64cd\u4f5c\u4ecb\u9762\n        \u251c\u2500\u2500 Portainer\uff1aDocker \u5bb9\u5668\u7ba1\u7406 UI\n        \u2514\u2500\u2500 OpenAI API\uff1a\u5916\u90e8 AI \u6a21\u578b\u80fd\u529b<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u6838\u5fc3\u4efb\u52d9\u8207\u5efa\u8b70\u4f7f\u7528\u60c5\u5883<\/h2>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">WordPress \u81ea\u52d5\u5316<\/h3>\n<p>n8n \u53ef\u4ee5\u900f\u904e WordPress REST API \u8b80\u53d6\u6587\u7ae0\u3001\u5efa\u7acb\u8349\u7a3f\u3001\u66f4\u65b0\u5206\u985e\u3001\u540c\u6b65\u6a19\u7c64\u3001\u5075\u6e2c\u6587\u7ae0\u767c\u5e03\u4e8b\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u900f\u904e Webhook \u63a5\u6536 WordPress \u5916\u639b\u50b3\u4f86\u7684\u4e8b\u4ef6\u3002\u4f8b\u5982\u7576\u7de8\u8f2f\u5728 WordPress \u5f8c\u53f0\u65b0\u589e\u4e00\u7bc7\u8349\u7a3f\u6642\uff0cn8n \u53ef\u81ea\u52d5\u5c07\u6587\u7ae0\u5167\u5bb9\u9001\u81f3 OpenAI API \u9032\u884c SEO \u6a19\u984c\u5efa\u8b70\u3001Meta Description \u751f\u6210\u3001\u5167\u6587\u6458\u8981\u8207\u5206\u985e\u5efa\u8b70\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">AI \u6587\u7ae0\u751f\u6210<\/h3>\n<p>AI \u6587\u7ae0\u751f\u6210\u6d41\u7a0b\u901a\u5e38\u4e0d\u5efa\u8b70\u76f4\u63a5\u5168\u81ea\u52d5\u767c\u5e03\uff0c\u800c\u662f\u63a1\u7528\u300cAI \u751f\u6210\u8349\u7a3f\uff0c\u4eba\u5de5\u5be9\u6838\u5f8c\u767c\u5e03\u300d\u7684\u65b9\u5f0f\u3002n8n \u53ef\u5b9a\u671f\u8b80\u53d6\u95dc\u9375\u5b57\u6e05\u55ae\uff0c\u547c\u53eb OpenAI API \u751f\u6210\u6587\u7ae0\u5927\u7db1\u3001\u6bb5\u843d\u5167\u5bb9\u3001FAQ \u8207\u6458\u8981\uff0c\u518d\u5c07\u7d50\u679c\u5beb\u5165 WordPress \u8349\u7a3f\u3002\u82e5\u642d\u914d Qdrant\uff0c\u9084\u53ef\u4ee5\u5148\u641c\u5c0b\u65e2\u6709\u77e5\u8b58\u5eab\u3001\u7522\u54c1\u8cc7\u6599\u6216\u54c1\u724c\u898f\u7bc4\uff0c\u518d\u8b93 OpenAI \u6839\u64da\u5167\u90e8\u8cc7\u6599\u751f\u6210\u8f03\u4e00\u81f4\u7684\u6587\u7ae0\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">WooCommerce \u5546\u54c1\u7ba1\u7406<\/h3>\n<p>WooCommerce \u5546\u54c1\u8cc7\u6599\u53ef\u900f\u904e REST API \u8207 n8n \u4e32\u63a5\u3002\u5e38\u898b\u61c9\u7528\u5305\u542b\u5546\u54c1\u63cf\u8ff0\u81ea\u52d5\u512a\u5316\u3001\u591a\u8a9e\u7cfb\u7ffb\u8b6f\u3001\u5eab\u5b58\u8b66\u793a\u901a\u77e5\u3001\u5546\u54c1\u5206\u985e\u5efa\u8b70\u3001\u6279\u6b21\u66f4\u65b0 SEO \u6b04\u4f4d\u3001\u6839\u64da\u4f9b\u61c9\u5546 API \u81ea\u52d5\u5efa\u7acb\u5546\u54c1\u8349\u7a3f\u7b49\u3002PostgreSQL \u53ef\u4ee5\u4fdd\u5b58\u5546\u54c1\u540c\u6b65\u7d00\u9304\uff0cRedis \u5247\u53ef\u7528\u65bc\u6392\u968a\u8655\u7406\u5927\u91cf\u5546\u54c1\u66f4\u65b0\uff0c\u907f\u514d\u4e00\u6b21\u6253\u7206 WooCommerce API \u6216\u5916\u90e8\u4f9b\u61c9\u5546 API\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u8868\u55ae\u81ea\u52d5\u56de\u8986<\/h3>\n<p>\u7576 WordPress \u8868\u55ae\u5916\u639b\u9001\u51fa\u8a62\u554f\u3001\u5831\u50f9\u9700\u6c42\u6216\u5ba2\u670d\u554f\u984c\u6642\uff0c\u53ef\u900f\u904e Webhook \u9032\u5165 n8n\u3002n8n \u53ef\u4ee5\u5148\u5c07\u5167\u5bb9\u5beb\u5165 PostgreSQL\uff0c\u518d\u547c\u53eb OpenAI API \u7522\u751f\u56de\u8986\u8349\u7a3f\uff0c\u4e26\u6839\u64da\u554f\u984c\u985e\u578b\u6c7a\u5b9a\u5bc4\u9001 Email\u3001\u5efa\u7acb CRM \u4efb\u52d9\u3001\u901a\u77e5 Slack \u6216\u63d0\u4ea4\u81f3\u5ba2\u670d\u7cfb\u7d71\u3002\u82e5\u8868\u55ae\u5167\u5bb9\u6d89\u53ca\u654f\u611f\u8cc7\u6599\uff0c\u5efa\u8b70\u5148\u505a\u906e\u7f69\u3001\u5206\u985e\u8207\u5be9\u6838\uff0c\u4e0d\u8981\u76f4\u63a5\u628a\u6240\u6709\u539f\u6587\u9001\u81f3\u5916\u90e8 AI API\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">API \u4e32\u63a5\u4e2d\u63a7<\/h3>\n<p>n8n \u5f88\u9069\u5408\u4f5c\u70ba API \u4e32\u63a5\u4e2d\u63a7\u3002\u5b83\u80fd\u628a WordPress\u3001WooCommerce\u3001CRM\u3001ERP\u3001Google Sheets\u3001Slack\u3001Email\u3001LINE\u3001Telegram\u3001\u5167\u90e8 API\u3001\u5916\u90e8\u4f9b\u61c9\u5546 API \u8207 OpenAI API \u4e32\u5728\u4e00\u8d77\u3002\u5c0d\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u800c\u8a00\uff0cn8n \u7684\u512a\u52e2\u5728\u65bc\u53ef\u8996\u5316\u6d41\u7a0b\u3001\u7bc0\u9ede\u5316\u932f\u8aa4\u8655\u7406\u3001Webhook \u5165\u53e3\u8207\u6392\u7a0b\u80fd\u529b\uff0c\u80fd\u5feb\u901f\u5efa\u7acb\u53ef\u89c0\u5bdf\u7684\u4e2d\u4ecb\u5c64\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u672a\u4f86\u53ef\u64f4\u5c55 Agent<\/h3>\n<p>\u7576\u7cfb\u7d71\u9010\u6f38\u6210\u719f\u5f8c\uff0c\u53ef\u4ee5\u5c07 n8n \u4f5c\u70ba Agent Orchestration \u7684\u5916\u5c64\u63a7\u5236\u5668\uff0c\u642d\u914d Qdrant \u5132\u5b58\u5411\u91cf\u8a18\u61b6\uff0cOpenAI API \u63d0\u4f9b\u63a8\u7406\u80fd\u529b\uff0cPostgreSQL \u4fdd\u5b58\u4efb\u52d9\u72c0\u614b\u8207\u57f7\u884c\u7d50\u679c\uff0cRedis \u8ca0\u8cac Queue\u3002\u672a\u4f86\u82e5\u8981\u64f4\u5c55\u591a Agent \u67b6\u69cb\uff0c\u4f8b\u5982 SEO Agent\u3001\u5546\u54c1\u8cc7\u6599 Agent\u3001\u5ba2\u670d Agent\u3001\u5831\u8868 Agent\uff0c\u90fd\u53ef\u4ee5\u5efa\u7acb\u5728\u9019\u500b\u57fa\u790e\u4e0a\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u4f3a\u670d\u5668\u898f\u683c\u5efa\u8b70<\/h2>\n<p>\u82e5\u53ea\u662f\u5c0f\u578b\u81ea\u52d5\u5316\u8207\u6e2c\u8a66\u7528\u9014\uff0c\u6700\u4f4e\u53ef\u4ee5\u5f9e 2 vCPU\u30014 GB RAM\u300140 GB SSD \u958b\u59cb\u3002\u4f46\u82e5\u8981\u540c\u6642\u904b\u4f5c n8n\u3001PostgreSQL\u3001Redis\u3001Qdrant\u3001Open WebUI \u8207 Portainer\uff0c\u4e26\u8655\u7406\u4e2d\u7b49\u898f\u6a21\u7684 WordPress \u8207 WooCommerce \u4efb\u52d9\uff0c\u5efa\u8b70\u81f3\u5c11\u4f7f\u7528\u4ee5\u4e0b\u898f\u683c\uff1a<\/p>\n<ul>\n<li><strong>CPU\uff1a<\/strong>4 vCPU \u4ee5\u4e0a<\/li>\n<li><strong>\u8a18\u61b6\u9ad4\uff1a<\/strong>8 GB RAM \u4ee5\u4e0a\uff0c\u6b63\u5f0f\u74b0\u5883\u5efa\u8b70 16 GB RAM<\/li>\n<li><strong>\u786c\u789f\uff1a<\/strong>100 GB SSD \u8d77\u8df3\uff0c\u82e5 Qdrant \u5411\u91cf\u8cc7\u6599\u591a\uff0c\u5efa\u8b70\u7368\u7acb\u78c1\u789f\u6216\u64f4\u5145\u7a7a\u9593<\/li>\n<li><strong>\u4f5c\u696d\u7cfb\u7d71\uff1a<\/strong>Ubuntu 26.04 Server<\/li>\n<li><strong>\u7db2\u8def\uff1a<\/strong>\u56fa\u5b9a IP \u6216\u5167\u90e8 DNS\uff0c\u5fc5\u8981\u6642\u642d\u914d VPN \u5b58\u53d6\u7ba1\u7406\u4ecb\u9762<\/li>\n<\/ul>\n<p>\u5982\u679c Open WebUI \u50c5\u7528\u65bc\u6e2c\u8a66 OpenAI API\uff0c\u800c\u4e0d\u5728\u672c\u6a5f\u8dd1\u5927\u578b LLM\uff0c\u5247\u4e0d\u9700\u8981 GPU\u3002\u82e5\u672a\u4f86\u8981\u5728\u672c\u6a5f\u90e8\u7f72 Ollama\u3001vLLM \u6216\u5176\u4ed6\u958b\u6e90\u6a21\u578b\uff0c\u624d\u9700\u8981\u984d\u5916\u898f\u5283 GPU\u3001VRAM\u3001\u9a45\u52d5\u7a0b\u5f0f\u8207\u6a21\u578b\u5132\u5b58\u7a7a\u9593\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5b89\u88dd\u524d\u6e96\u5099<\/h2>\n<p>\u4ee5\u4e0b\u7bc4\u4f8b\u5047\u8a2d\u5df2\u5b8c\u6210 Ubuntu 26.04 Server \u57fa\u672c\u5b89\u88dd\uff0c\u4e26\u53ef\u4f7f\u7528\u5177\u5099 sudo \u6b0a\u9650\u7684\u5e33\u865f\u767b\u5165\u3002\u8acb\u5148\u66f4\u65b0\u7cfb\u7d71\u5957\u4ef6\uff1a<\/p>\n<pre><code>sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<p>\u5b89\u88dd\u5e38\u7528\u5de5\u5177\uff1a<\/p>\n<pre><code>sudo apt install -y ca-certificates curl gnupg lsb-release ufw git unzip htop net-tools<\/code><\/pre>\n<p>\u8a2d\u5b9a\u4e3b\u6a5f\u540d\u7a31\uff0c\u4f8b\u5982\uff1a<\/p>\n<pre><code>sudo hostnamectl set-hostname ai-ops-server<\/code><\/pre>\n<p>\u78ba\u8a8d\u7cfb\u7d71\u7248\u672c\uff1a<\/p>\n<pre><code>lsb_release -a\nuname -a<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u8a2d\u5b9a\u57fa\u672c\u9632\u706b\u7246<\/h2>\n<p>\u6b63\u5f0f\u74b0\u5883\u4e0d\u5efa\u8b70\u5c07\u6240\u6709\u7ba1\u7406\u4ecb\u9762\u76f4\u63a5\u66b4\u9732\u5230\u516c\u7db2\u3002\u82e5\u76ee\u524d\u662f\u6e2c\u8a66\u74b0\u5883\uff0c\u53ef\u4ee5\u5148\u958b\u555f SSH\u3001n8n\u3001Portainer \u8207 Open WebUI \u7684\u9023\u7dda\u57e0\uff0c\u4f46\u6b63\u5f0f\u4e0a\u7dda\u6642\u5efa\u8b70\u9650\u5236\u4f86\u6e90 IP \u6216\u6539\u7531 VPN \u5b58\u53d6\u3002<\/p>\n<pre><code>sudo ufw allow OpenSSH\nsudo ufw allow 5678\/tcp\nsudo ufw allow 9000\/tcp\nsudo ufw allow 9443\/tcp\nsudo ufw allow 3000\/tcp\nsudo ufw enable\nsudo ufw status verbose<\/code><\/pre>\n<p>\u5e38\u898b\u670d\u52d9\u57e0\u53ef\u898f\u5283\u5982\u4e0b\uff1a<\/p>\n<ul>\n<li><strong>n8n\uff1a<\/strong>5678<\/li>\n<li><strong>Portainer\uff1a<\/strong>9000 \u6216 9443<\/li>\n<li><strong>Open WebUI\uff1a<\/strong>3000<\/li>\n<li><strong>PostgreSQL\uff1a<\/strong>5432\uff0c\u5efa\u8b70\u53ea\u5141\u8a31 Docker \u5167\u90e8\u7db2\u8def\u4f7f\u7528<\/li>\n<li><strong>Redis\uff1a<\/strong>6379\uff0c\u5efa\u8b70\u53ea\u5141\u8a31 Docker \u5167\u90e8\u7db2\u8def\u4f7f\u7528<\/li>\n<li><strong>Qdrant\uff1a<\/strong>6333\uff0c\u82e5\u9700\u8981\u5916\u90e8 API \u5b58\u53d6\u624d\u958b\u653e\uff0c\u5426\u5247\u4fdd\u7559\u5167\u90e8\u7db2\u8def\u5373\u53ef<\/li>\n<\/ul>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5b89\u88dd Docker Engine<\/h2>\n<p>Ubuntu 26.04 Server \u5efa\u8b70\u4f7f\u7528 Docker \u5b98\u65b9\u5957\u4ef6\u4f86\u6e90\u5b89\u88dd Docker Engine\u3002\u5148\u5efa\u7acb keyring \u76ee\u9304\u4e26\u52a0\u5165 Docker GPG key\uff1a<\/p>\n<pre><code>sudo install -m 0755 -d \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg<\/code><\/pre>\n<p>\u52a0\u5165 Docker apt repository\uff1a<\/p>\n<pre><code>echo \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu $(. \/etc\/os-release &amp;&amp; echo $VERSION_CODENAME) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null<\/code><\/pre>\n<p>\u5b89\u88dd Docker Engine \u8207 Docker Compose Plugin\uff1a<\/p>\n<pre><code>sudo apt update\nsudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<\/code><\/pre>\n<p>\u78ba\u8a8d Docker \u7248\u672c\uff1a<\/p>\n<pre><code>docker --version\ndocker compose version<\/code><\/pre>\n<p>\u5c07\u76ee\u524d\u4f7f\u7528\u8005\u52a0\u5165 docker \u7fa4\u7d44\uff0c\u907f\u514d\u6bcf\u6b21\u90fd\u8981 sudo \u57f7\u884c Docker \u6307\u4ee4\uff1a<\/p>\n<pre><code>sudo usermod -aG docker $USER\nnewgrp docker<\/code><\/pre>\n<p>\u6e2c\u8a66 Docker \u662f\u5426\u53ef\u6b63\u5e38\u904b\u4f5c\uff1a<\/p>\n<pre><code>docker run --rm hello-world<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5efa\u7acb\u5c08\u6848\u76ee\u9304<\/h2>\n<p>\u5efa\u8b70\u5c07 AI Operations Server \u7684\u6240\u6709 Docker Compose \u8a2d\u5b9a\u96c6\u4e2d\u5728\u56fa\u5b9a\u76ee\u9304\uff0c\u4f8b\u5982 <code>\/opt\/ai-ops<\/code>\uff1a<\/p>\n<pre><code>sudo mkdir -p \/opt\/ai-ops\nsudo chown -R $USER:$USER \/opt\/ai-ops\ncd \/opt\/ai-ops<\/code><\/pre>\n<p>\u5efa\u7acb\u8cc7\u6599\u76ee\u9304\uff0c\u8b93\u5bb9\u5668\u8cc7\u6599\u53ef\u6301\u4e45\u5316\u4fdd\u5b58\uff1a<\/p>\n<pre><code>mkdir -p data\/postgres\nmkdir -p data\/redis\nmkdir -p data\/qdrant\nmkdir -p data\/n8n\nmkdir -p data\/open-webui\nmkdir -p data\/portainer<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5efa\u7acb\u74b0\u5883\u8b8a\u6578\u6a94\u6848<\/h2>\n<p>\u8acb\u5efa\u7acb <code>.env<\/code> \u6a94\u6848\u4fdd\u5b58\u5bc6\u78bc\u3001\u91d1\u9470\u8207\u670d\u52d9\u8a2d\u5b9a\u3002\u4ee5\u4e0b\u70ba\u7bc4\u4f8b\uff0c\u6b63\u5f0f\u74b0\u5883\u52d9\u5fc5\u66f4\u63db\u6240\u6709\u5bc6\u78bc\u8207\u91d1\u9470\u3002<\/p>\n<pre><code>cd \/opt\/ai-ops\nnano .env<\/code><\/pre>\n<pre><code>POSTGRES_DB=n8n\nPOSTGRES_USER=n8n\nPOSTGRES_PASSWORD=change_this_postgres_password\n\nN8N_BASIC_AUTH_USER=admin\nN8N_BASIC_AUTH_PASSWORD=change_this_n8n_password\nN8N_ENCRYPTION_KEY=change_this_to_a_very_long_random_string\nN8N_HOST=your-ai-server.example.com\nN8N_PROTOCOL=http\nN8N_PORT=5678\nWEBHOOK_URL=http:\/\/your-ai-server.example.com:5678\/\n\nOPENAI_API_KEY=sk-your-openai-api-key\n\nQDRANT_API_KEY=change_this_qdrant_api_key\n\nTZ=Asia\/Taipei<\/code><\/pre>\n<p>\u7522\u751f\u96a8\u6a5f\u91d1\u9470\u53ef\u4f7f\u7528\uff1a<\/p>\n<pre><code>openssl rand -hex 32<\/code><\/pre>\n<p><code>N8N_ENCRYPTION_KEY<\/code> \u5c0d n8n \u975e\u5e38\u91cd\u8981\uff0cn8n \u6703\u7528\u5b83\u52a0\u5bc6 Credentials\u3002\u82e5\u6b63\u5f0f\u4f7f\u7528\u5f8c\u66f4\u63db\u6b64\u503c\uff0c\u53ef\u80fd\u5c0e\u81f4\u65e2\u6709 Credential \u7121\u6cd5\u89e3\u5bc6\u3002\u56e0\u6b64\u6b63\u5f0f\u90e8\u7f72\u524d\u8acb\u5148\u56fa\u5b9a\u4e26\u5099\u4efd\u9019\u500b\u503c\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5efa\u7acb Docker Compose \u8a2d\u5b9a<\/h2>\n<p>\u63a5\u8457\u5efa\u7acb <code>docker-compose.yml<\/code>\u3002\u6b64\u7bc4\u4f8b\u5305\u542b n8n\u3001PostgreSQL\u3001Redis\u3001Qdrant\u3001Open WebUI \u8207 Portainer\u3002PostgreSQL\u3001Redis \u8207 Qdrant \u9810\u8a2d\u4e0d\u5c0d\u5916\u958b\u653e\uff0c\u4e3b\u8981\u8b93 Docker \u5167\u90e8\u7db2\u8def\u4f7f\u7528\uff1bn8n\u3001Open WebUI\u3001Portainer \u5247\u4f9d\u9700\u6c42\u5c0d\u5916\u63d0\u4f9b\u7ba1\u7406\u4ecb\u9762\u3002<\/p>\n<pre><code>nano docker-compose.yml<\/code><\/pre>\n<pre><code>services:\n  postgres:\n    image: postgres:16\n    container_name: aiops-postgres\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: ${POSTGRES_DB}\n      POSTGRES_USER: ${POSTGRES_USER}\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n      TZ: ${TZ}\n    volumes:\n      - .\/data\/postgres:\/var\/lib\/postgresql\/data\n    networks:\n      - aiops-net\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    container_name: aiops-redis\n    restart: unless-stopped\n    command: redis-server --appendonly yes\n    volumes:\n      - .\/data\/redis:\/data\n    networks:\n      - aiops-net\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  qdrant:\n    image: qdrant\/qdrant:latest\n    container_name: aiops-qdrant\n    restart: unless-stopped\n    environment:\n      QDRANT__SERVICE__API_KEY: ${QDRANT_API_KEY}\n    volumes:\n      - .\/data\/qdrant:\/qdrant\/storage\n    networks:\n      - aiops-net\n    ports:\n      - \"6333:6333\"\n\n  n8n:\n    image: n8nio\/n8n:latest\n    container_name: aiops-n8n\n    restart: unless-stopped\n    depends_on:\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n    environment:\n      DB_TYPE: postgresdb\n      DB_POSTGRESDB_HOST: postgres\n      DB_POSTGRESDB_PORT: 5432\n      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}\n      DB_POSTGRESDB_USER: ${POSTGRES_USER}\n      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}\n\n      N8N_BASIC_AUTH_ACTIVE: \"true\"\n      N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}\n      N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}\n      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}\n\n      N8N_HOST: ${N8N_HOST}\n      N8N_PORT: ${N8N_PORT}\n      N8N_PROTOCOL: ${N8N_PROTOCOL}\n      WEBHOOK_URL: ${WEBHOOK_URL}\n      GENERIC_TIMEZONE: ${TZ}\n      TZ: ${TZ}\n\n      EXECUTIONS_MODE: queue\n      QUEUE_BULL_REDIS_HOST: redis\n      QUEUE_BULL_REDIS_PORT: 6379\n      EXECUTIONS_DATA_PRUNE: \"true\"\n      EXECUTIONS_DATA_MAX_AGE: 336\n\n      N8N_DIAGNOSTICS_ENABLED: \"false\"\n      N8N_VERSION_NOTIFICATIONS_ENABLED: \"true\"\n    volumes:\n      - .\/data\/n8n:\/home\/node\/.n8n\n    networks:\n      - aiops-net\n    ports:\n      - \"5678:5678\"\n\n  open-webui:\n    image: ghcr.io\/open-webui\/open-webui:main\n    container_name: aiops-open-webui\n    restart: unless-stopped\n    environment:\n      OPENAI_API_KEY: ${OPENAI_API_KEY}\n      TZ: ${TZ}\n    volumes:\n      - .\/data\/open-webui:\/app\/backend\/data\n    networks:\n      - aiops-net\n    ports:\n      - \"3000:8080\"\n\n  portainer:\n    image: portainer\/portainer-ce:latest\n    container_name: aiops-portainer\n    restart: unless-stopped\n    volumes:\n      - \/var\/run\/docker.sock:\/var\/run\/docker.sock\n      - .\/data\/portainer:\/data\n    networks:\n      - aiops-net\n    ports:\n      - \"9000:9000\"\n      - \"9443:9443\"\n\nnetworks:\n  aiops-net:\n    driver: bridge<\/code><\/pre>\n<p>\u5982\u679c\u6b63\u5f0f\u74b0\u5883\u8981\u5c07 n8n \u653e\u5728 HTTPS \u7db2\u57df\u5f8c\u9762\uff0c\u901a\u5e38\u6703\u5728\u53e6\u4e00\u53f0\u53cd\u5411\u4ee3\u7406\u6216 Load Balancer \u4e0a\u8655\u7406 TLS\uff0c\u4e26\u5c07 <code>N8N_PROTOCOL<\/code> \u8a2d\u70ba <code>https<\/code>\uff0c<code>WEBHOOK_URL<\/code> \u8a2d\u70ba\u6b63\u5f0f HTTPS URL\u3002\u7531\u65bc\u672c\u6587\u4e2d\u7684 AI Operations Server \u5b9a\u4f4d\u4e0d\u662f\u53cd\u5411\u4ee3\u7406\uff0c\u56e0\u6b64\u4e0d\u5728\u540c\u4e00\u53f0\u4e3b\u6a5f\u4e0a\u984d\u5916\u90e8\u7f72 Nginx Proxy Manager \u6216 Traefik\uff0c\u4ee5\u907f\u514d\u89d2\u8272\u6df7\u96dc\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u555f\u52d5\u670d\u52d9<\/h2>\n<p>\u555f\u52d5\u6240\u6709\u5bb9\u5668\uff1a<\/p>\n<pre><code>cd \/opt\/ai-ops\ndocker compose up -d<\/code><\/pre>\n<p>\u67e5\u770b\u5bb9\u5668\u72c0\u614b\uff1a<\/p>\n<pre><code>docker compose ps<\/code><\/pre>\n<p>\u67e5\u770b\u5373\u6642\u65e5\u8a8c\uff1a<\/p>\n<pre><code>docker compose logs -f n8n\ndocker compose logs -f postgres\ndocker compose logs -f redis\ndocker compose logs -f qdrant<\/code><\/pre>\n<p>\u78ba\u8a8d\u670d\u52d9\uff1a<\/p>\n<ul>\n<li>n8n\uff1a<code>http:\/\/\u4f3a\u670d\u5668IP:5678<\/code><\/li>\n<li>Open WebUI\uff1a<code>http:\/\/\u4f3a\u670d\u5668IP:3000<\/code><\/li>\n<li>Portainer\uff1a<code>http:\/\/\u4f3a\u670d\u5668IP:9000<\/code> \u6216 <code>https:\/\/\u4f3a\u670d\u5668IP:9443<\/code><\/li>\n<li>Qdrant API\uff1a<code>http:\/\/\u4f3a\u670d\u5668IP:6333<\/code><\/li>\n<\/ul>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u521d\u59cb\u5316 n8n<\/h2>\n<p>\u7b2c\u4e00\u6b21\u958b\u555f n8n \u6642\uff0c\u7cfb\u7d71\u6703\u8981\u6c42\u5efa\u7acb Owner \u5e33\u865f\u3002\u5b8c\u6210\u5f8c\uff0c\u5efa\u8b70\u5148\u78ba\u8a8d\u4ee5\u4e0b\u9805\u76ee\uff1a<\/p>\n<ul>\n<li>Timezone \u662f\u5426\u70ba Asia\/Taipei\u3002<\/li>\n<li>Webhook URL \u662f\u5426\u6b63\u78ba\u3002<\/li>\n<li>\u662f\u5426\u80fd\u5efa\u7acb Credential\u3002<\/li>\n<li>\u662f\u5426\u80fd\u5efa\u7acb\u6e2c\u8a66 Workflow\u3002<\/li>\n<li>Queue \u6a21\u5f0f\u662f\u5426\u6b63\u5e38\u9023\u63a5 Redis\u3002<\/li>\n<\/ul>\n<p>\u82e5\u8981\u6e2c\u8a66 n8n Webhook\uff0c\u53ef\u5efa\u7acb\u4e00\u500b\u7c21\u55ae Workflow\uff1a<\/p>\n<ol>\n<li>\u65b0\u589e Webhook Trigger\u3002<\/li>\n<li>\u65b0\u589e Set \u7bc0\u9ede\uff0c\u56de\u50b3\u6e2c\u8a66\u6b04\u4f4d\u3002<\/li>\n<li>\u65b0\u589e Respond to Webhook \u7bc0\u9ede\u3002<\/li>\n<li>\u555f\u7528 Workflow\u3002<\/li>\n<\/ol>\n<p>\u4f7f\u7528 curl \u6e2c\u8a66\uff1a<\/p>\n<pre><code>curl -X POST http:\/\/your-ai-server.example.com:5678\/webhook\/test \\\n  -H \"Content-Type: application\/x-www-form-urlencoded\" \\\n  -d \"name=AI Operations Server\"<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5728 n8n \u8a2d\u5b9a OpenAI API<\/h2>\n<p>\u5728 n8n \u4e2d\u53ef\u900f\u904e OpenAI \u7bc0\u9ede\u6216 HTTP Request \u7bc0\u9ede\u547c\u53eb OpenAI API\u3002\u5efa\u8b70\u4ee5 n8n Credential \u7ba1\u7406 API Key\uff0c\u4e0d\u8981\u628a\u91d1\u9470\u786c\u5beb\u5728\u7bc0\u9ede\u4e2d\u3002\u82e5\u4f7f\u7528 HTTP Request \u7bc0\u9ede\uff0c\u53ef\u5efa\u7acb Header\uff1a<\/p>\n<pre><code>Authorization: Bearer sk-your-openai-api-key\nContent-Type: application\/json<\/code><\/pre>\n<p>\u5178\u578b\u7528\u9014\u5305\u542b\uff1a<\/p>\n<ul>\n<li>\u6839\u64da WordPress \u6587\u7ae0\u8349\u7a3f\u7522\u751f SEO \u6a19\u984c\u3002<\/li>\n<li>\u6839\u64da WooCommerce \u5546\u54c1\u898f\u683c\u7522\u751f\u5546\u54c1\u63cf\u8ff0\u3002<\/li>\n<li>\u6839\u64da\u8868\u55ae\u5167\u5bb9\u7522\u751f\u5ba2\u670d\u56de\u8986\u8349\u7a3f\u3002<\/li>\n<li>\u5c07\u9577\u6587\u7ae0\u6458\u8981\u6210\u793e\u7fa4\u8cbc\u6587\u3002<\/li>\n<li>\u5c07\u5ba2\u6236\u554f\u984c\u5206\u985e\u6210\u6280\u8853\u652f\u63f4\u3001\u5831\u50f9\u8a62\u554f\u3001\u552e\u5f8c\u670d\u52d9\u6216\u5783\u573e\u8a0a\u606f\u3002<\/li>\n<\/ul>\n<p>\u5c0d\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u800c\u8a00\uff0c\u5efa\u8b70\u5728 n8n \u4e2d\u5efa\u7acb\u300cPrompt Template\u300d\u7ba1\u7406\u7b56\u7565\uff0c\u907f\u514d\u6bcf\u500b Workflow \u90fd\u6563\u843d\u4e0d\u540c\u63d0\u793a\u8a5e\u3002\u53ef\u4ee5\u5c07\u63d0\u793a\u8a5e\u4fdd\u5b58\u5728 PostgreSQL\u3001Google Sheets\u3001Git Repository \u6216 n8n \u5b50\u6d41\u7a0b\u4e2d\uff0c\u8b93\u63d0\u793a\u8a5e\u7248\u672c\u66f4\u5bb9\u6613\u63a7\u7ba1\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u6e2c\u8a66 PostgreSQL<\/h2>\n<p>\u9032\u5165 PostgreSQL \u5bb9\u5668\uff1a<\/p>\n<pre><code>docker exec -it aiops-postgres psql -U n8n -d n8n<\/code><\/pre>\n<p>\u67e5\u770b\u8cc7\u6599\u8868\uff1a<\/p>\n<pre><code>\\dt<\/code><\/pre>\n<p>\u96e2\u958b psql\uff1a<\/p>\n<pre><code>\\q<\/code><\/pre>\n<p>\u5982\u679c\u8981\u5efa\u7acb\u984d\u5916\u61c9\u7528\u8cc7\u6599\u5eab\uff0c\u4f8b\u5982\u4fdd\u5b58 WordPress \u81ea\u52d5\u5316\u7d00\u9304\uff0c\u53ef\u53e6\u5efa\u8cc7\u6599\u5eab\u8207\u4f7f\u7528\u8005\u3002\u4e0d\u904e\u5728\u6b63\u5f0f\u74b0\u5883\uff0c\u5efa\u8b70\u5c07 n8n \u5167\u90e8\u8cc7\u6599\u8207\u696d\u52d9\u8cc7\u6599\u5206\u958b\uff0c\u4ee5\u964d\u4f4e\u7dad\u8b77\u98a8\u96aa\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u6e2c\u8a66 Redis<\/h2>\n<p>Redis \u5728\u6b64\u67b6\u69cb\u4e2d\u4e3b\u8981\u4f5c\u70ba n8n Queue \u8207\u5feb\u53d6\u7528\u9014\u3002\u6e2c\u8a66\u65b9\u5f0f\u5982\u4e0b\uff1a<\/p>\n<pre><code>docker exec -it aiops-redis redis-cli ping<\/code><\/pre>\n<p>\u82e5\u56de\u50b3\uff1a<\/p>\n<pre><code>PONG<\/code><\/pre>\n<p>\u4ee3\u8868 Redis \u53ef\u6b63\u5e38\u904b\u4f5c\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u6e2c\u8a66 Qdrant<\/h2>\n<p>Qdrant \u662f\u5411\u91cf\u8cc7\u6599\u5eab\uff0c\u7528\u65bc AI \u8a18\u61b6\u3001\u8a9e\u610f\u641c\u5c0b\u8207 RAG \u6d41\u7a0b\u3002\u53ef\u5148\u6e2c\u8a66 API \u662f\u5426\u53ef\u9023\u7dda\uff1a<\/p>\n<pre><code>curl http:\/\/localhost:6333\/<\/code><\/pre>\n<p>\u82e5\u555f\u7528\u4e86 API Key\uff0c\u5916\u90e8\u547c\u53eb\u6642\u9700\u52a0\u5165 Header\uff1a<\/p>\n<pre><code>curl http:\/\/localhost:6333\/collections \\\n  -H \"api-key: change_this_qdrant_api_key\"<\/code><\/pre>\n<p>\u5728 n8n \u4e2d\uff0c\u5e38\u898b\u8a2d\u8a08\u662f\u5148\u5c07 WordPress \u6587\u7ae0\u3001WooCommerce \u5546\u54c1\u63cf\u8ff0\u3001FAQ\u3001\u5ba2\u670d\u7d00\u9304\u6216\u5167\u90e8\u6587\u4ef6\u5207\u5206\u6210 chunks\uff0c\u9001\u5230 OpenAI Embeddings API \u7522\u751f\u5411\u91cf\uff0c\u518d\u5beb\u5165 Qdrant\u3002\u4f7f\u7528\u8005\u63d0\u554f\u6642\uff0cn8n \u5148\u62ff\u554f\u984c\u7522\u751f embedding\uff0c\u67e5\u8a62 Qdrant \u627e\u51fa\u6700\u76f8\u95dc\u5167\u5bb9\uff0c\u518d\u628a\u641c\u5c0b\u7d50\u679c\u8207\u554f\u984c\u4e00\u8d77\u9001\u5230 OpenAI API \u7522\u751f\u56de\u7b54\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">Open WebUI \u7684\u7528\u9014<\/h2>\n<p>Open WebUI \u5728\u6b64\u67b6\u69cb\u4e2d\u4e0d\u662f\u6838\u5fc3 Workflow \u5f15\u64ce\uff0c\u800c\u662f AI \u64cd\u4f5c\u8207\u6e2c\u8a66\u4ecb\u9762\u3002\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u3001\u5167\u5bb9\u7de8\u8f2f\u6216\u7522\u54c1\u7d93\u7406\u53ef\u4ee5\u900f\u904e Open WebUI \u6e2c\u8a66 Prompt\u3001\u6bd4\u8f03\u6a21\u578b\u56de\u8986\u3001\u9a57\u8b49\u5167\u90e8\u77e5\u8b58\u5167\u5bb9\u662f\u5426\u9069\u5408\u4ea4\u7d66 AI \u4f7f\u7528\u3002\u82e5 Open WebUI \u50c5\u4e32\u63a5 OpenAI API\uff0c\u4e3b\u8981\u7528\u9014\u662f\u5feb\u901f\u9a57\u8b49 AI \u56de\u61c9\u54c1\u8cea\uff1b\u82e5\u672a\u4f86\u52a0\u4e0a Ollama \u6216\u672c\u6a5f\u6a21\u578b\uff0c\u5247\u53ef\u4ee5\u9032\u4e00\u6b65\u6e2c\u8a66\u79c1\u6709\u6a21\u578b\u8207\u6df7\u5408\u6a21\u578b\u6d41\u7a0b\u3002<\/p>\n<p>Open WebUI \u555f\u52d5\u5f8c\u53ef\u700f\u89bd\uff1a<\/p>\n<pre><code>http:\/\/\u4f3a\u670d\u5668IP:3000<\/code><\/pre>\n<p>\u7b2c\u4e00\u6b21\u767b\u5165\u901a\u5e38\u9700\u8981\u5efa\u7acb\u7ba1\u7406\u54e1\u5e33\u865f\u3002\u8acb\u6ce8\u610f\uff0c\u82e5\u6b64\u4ecb\u9762\u66b4\u9732\u5728\u516c\u7db2\uff0c\u5fc5\u9808\u642d\u914d\u5f37\u5bc6\u78bc\u3001\u4f86\u6e90 IP \u9650\u5236\u6216 VPN\uff0c\u5426\u5247\u53ef\u80fd\u9020\u6210 API Key \u6feb\u7528\u8207\u8cc7\u6599\u5916\u6d29\u98a8\u96aa\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">Portainer \u7684\u7528\u9014<\/h2>\n<p>Portainer \u662f Docker \u7ba1\u7406 UI\uff0c\u53ef\u7528\u4f86\u6aa2\u8996\u5bb9\u5668\u72c0\u614b\u3001\u65e5\u8a8c\u3001\u6620\u50cf\u6a94\u3001Volume\u3001Network \u8207 Stack\u3002\u5c0d\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u800c\u8a00\uff0cPortainer \u5f88\u9069\u5408\u4f5c\u70ba\u65e5\u5e38\u7dad\u904b\u8f14\u52a9\u5de5\u5177\uff0c\u4f46\u4e0d\u61c9\u53d6\u4ee3\u7248\u672c\u63a7\u7ba1\u3002\u6b63\u5f0f\u74b0\u5883\u7684 Docker Compose \u6a94\u6848\u4ecd\u61c9\u653e\u5728 Git \u4e2d\u63a7\u7ba1\uff0c\u4e26\u900f\u904e\u6a19\u6e96\u6d41\u7a0b\u90e8\u7f72\u3002<\/p>\n<p>\u521d\u6b21\u958b\u555f Portainer\uff1a<\/p>\n<pre><code>http:\/\/\u4f3a\u670d\u5668IP:9000<\/code><\/pre>\n<p>\u6216\uff1a<\/p>\n<pre><code>https:\/\/\u4f3a\u670d\u5668IP:9443<\/code><\/pre>\n<p>\u5efa\u7acb\u7ba1\u7406\u54e1\u5e33\u865f\u5f8c\uff0c\u9078\u64c7\u672c\u6a5f Docker environment\uff0c\u5373\u53ef\u7ba1\u7406\u76ee\u524d\u4e3b\u6a5f\u4e0a\u7684\u5bb9\u5668\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">WordPress \u8207 n8n \u4e32\u63a5\u6a21\u5f0f<\/h2>\n<p>WordPress \u8207 n8n \u7684\u4e32\u63a5\u53ef\u5206\u6210\u5169\u7a2e\u65b9\u5411\uff1aWordPress \u4e3b\u52d5\u901a\u77e5 n8n\uff0c\u4ee5\u53ca n8n \u4e3b\u52d5\u547c\u53eb WordPress\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">WordPress \u4e3b\u52d5\u901a\u77e5 n8n<\/h3>\n<p>\u53ef\u900f\u904e\u8868\u55ae\u5916\u639b\u3001Webhook \u5916\u639b\u6216\u81ea\u8a02\u7a0b\u5f0f\uff0c\u5728\u7279\u5b9a\u4e8b\u4ef6\u767c\u751f\u6642\u547c\u53eb n8n Webhook\u3002\u4f8b\u5982\uff1a<\/p>\n<ul>\n<li>\u4f7f\u7528\u8005\u63d0\u4ea4\u806f\u7d61\u8868\u55ae\u3002<\/li>\n<li>\u65b0\u8a02\u55ae\u6210\u7acb\u3002<\/li>\n<li>\u5546\u54c1\u5eab\u5b58\u4f4e\u65bc\u9580\u6abb\u3002<\/li>\n<li>\u6587\u7ae0\u72c0\u614b\u6539\u70ba\u8349\u7a3f\u3002<\/li>\n<li>\u6703\u54e1\u8a3b\u518a\u5b8c\u6210\u3002<\/li>\n<\/ul>\n<p>n8n \u63a5\u6536\u4e8b\u4ef6\u5f8c\uff0c\u53ef\u4ee5\u9032\u884c\u8cc7\u6599\u6e05\u6d17\u3001\u5beb\u5165 PostgreSQL\u3001\u547c\u53eb OpenAI API\u3001\u901a\u77e5\u7ba1\u7406\u54e1\u3001\u66f4\u65b0 WooCommerce \u6216\u5efa\u7acb\u5f8c\u7e8c\u4efb\u52d9\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">n8n \u4e3b\u52d5\u547c\u53eb WordPress<\/h3>\n<p>n8n \u53ef\u900f\u904e WordPress REST API \u4e3b\u52d5\u5efa\u7acb\u6587\u7ae0\u8349\u7a3f\u3002\u4f8b\u5982\u4f7f\u7528 Application Password \u9032\u884c Basic Auth\u3002\u6e2c\u8a66\u6307\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre><code>curl -X POST https:\/\/your-wordpress-site.example.com\/wp-json\/wp\/v2\/posts \\\n  -u \"wordpress_user:application_password\" \\\n  -H \"Content-Type: application\/x-www-form-urlencoded\" \\\n  -d \"title=AI \u81ea\u52d5\u7522\u751f\u6587\u7ae0\u8349\u7a3f\" \\\n  -d \"content=\u9019\u662f\u4e00\u7bc7\u7531 n8n \u8207 OpenAI API \u7522\u751f\u7684\u6587\u7ae0\u8349\u7a3f\u3002\" \\\n  -d \"status=draft\"<\/code><\/pre>\n<p>\u6b63\u5f0f\u4f7f\u7528\u6642\uff0c\u5efa\u8b70\u5efa\u7acb\u5c08\u7528 WordPress \u5e33\u865f\uff0c\u53ea\u6388\u4e88\u5fc5\u8981\u6b0a\u9650\uff0c\u4e0d\u8981\u4f7f\u7528\u6700\u9ad8\u6b0a\u9650\u7ba1\u7406\u54e1\u5e33\u865f\u4f5c\u70ba API \u6574\u5408\u5e33\u865f\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">WooCommerce \u5546\u54c1\u7ba1\u7406\u6d41\u7a0b\u7bc4\u4f8b<\/h2>\n<p>WooCommerce API \u53ef\u8b93 n8n \u8b80\u53d6\u3001\u5efa\u7acb\u6216\u66f4\u65b0\u5546\u54c1\u3002\u5e38\u898b AI \u81ea\u52d5\u5316\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>n8n \u6bcf\u65e5\u6392\u7a0b\u8b80\u53d6 WooCommerce \u5546\u54c1\u6e05\u55ae\u3002<\/li>\n<li>\u627e\u51fa\u63cf\u8ff0\u904e\u77ed\u3001\u7f3a\u5c11 SEO \u6b04\u4f4d\u6216\u7f3a\u5c11\u5206\u985e\u7684\u5546\u54c1\u3002<\/li>\n<li>\u5c07\u5546\u54c1\u540d\u7a31\u3001\u898f\u683c\u3001\u54c1\u724c\u3001\u5c6c\u6027\u9001\u81f3 OpenAI API\u3002<\/li>\n<li>\u7522\u751f\u5546\u54c1\u77ed\u63cf\u8ff0\u3001\u9577\u63cf\u8ff0\u3001SEO \u6a19\u984c\u8207 Meta Description\u3002<\/li>\n<li>\u5148\u5beb\u5165 PostgreSQL \u4f5c\u70ba\u5be9\u6838\u4f47\u5217\u3002<\/li>\n<li>\u4eba\u5de5\u78ba\u8a8d\u5f8c\uff0c\u518d\u7531 n8n \u66f4\u65b0 WooCommerce \u5546\u54c1\u3002<\/li>\n<\/ol>\n<p>\u4f7f\u7528 curl \u8b80\u53d6 WooCommerce \u5546\u54c1\u7bc4\u4f8b\uff1a<\/p>\n<pre><code>curl https:\/\/your-wordpress-site.example.com\/wp-json\/wc\/v3\/products \\\n  -u \"ck_your_consumer_key:cs_your_consumer_secret\"<\/code><\/pre>\n<p>\u66f4\u65b0\u5546\u54c1\u7bc4\u4f8b\uff1a<\/p>\n<pre><code>curl -X PUT https:\/\/your-wordpress-site.example.com\/wp-json\/wc\/v3\/products\/123 \\\n  -u \"ck_your_consumer_key:cs_your_consumer_secret\" \\\n  -H \"Content-Type: application\/x-www-form-urlencoded\" \\\n  -d \"short_description=\u9019\u662f\u7531 AI \u512a\u5316\u5f8c\u7684\u5546\u54c1\u77ed\u63cf\u8ff0\u3002\"<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u8868\u55ae\u81ea\u52d5\u56de\u8986\u6d41\u7a0b\u7bc4\u4f8b<\/h2>\n<p>\u8868\u55ae\u81ea\u52d5\u56de\u8986\u4e0d\u61c9\u53ea\u662f\u55ae\u7d14\u628a\u4f7f\u7528\u8005\u554f\u984c\u4e1f\u7d66 AI \u56de\u7b54\u3002\u66f4\u7a69\u5b9a\u7684\u6d41\u7a0b\u662f\u5148\u5206\u985e\u3001\u518d\u67e5\u8a62\u8cc7\u6599\u3001\u6700\u5f8c\u7522\u751f\u56de\u8986\u8349\u7a3f\u3002\u5efa\u8b70\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>WordPress \u8868\u55ae\u9001\u51fa\u5f8c\u547c\u53eb n8n Webhook\u3002<\/li>\n<li>n8n \u5c07\u539f\u59cb\u8868\u55ae\u8cc7\u6599\u5beb\u5165 PostgreSQL\u3002<\/li>\n<li>OpenAI API \u5224\u65b7\u554f\u984c\u985e\u578b\u8207\u512a\u5148\u6b0a\u3002<\/li>\n<li>\u82e5\u9700\u8981\u77e5\u8b58\u5eab\uff0c\u5148\u67e5\u8a62 Qdrant \u53d6\u5f97\u76f8\u95dc FAQ \u6216\u6587\u4ef6\u3002<\/li>\n<li>OpenAI API \u6839\u64da\u554f\u984c\u8207\u67e5\u8a62\u7d50\u679c\u7522\u751f\u56de\u8986\u8349\u7a3f\u3002<\/li>\n<li>n8n \u5bc4\u9001 Email \u7d66\u5ba2\u670d\u4eba\u54e1\u5be9\u6838\uff0c\u6216\u4f9d\u898f\u5247\u81ea\u52d5\u56de\u8986\u3002<\/li>\n<li>\u6240\u6709\u8655\u7406\u7d50\u679c\u5beb\u56de PostgreSQL \u4f5c\u70ba\u7a3d\u6838\u7d00\u9304\u3002<\/li>\n<\/ol>\n<p>\u9019\u7a2e\u8a2d\u8a08\u53ef\u907f\u514d AI \u5728\u7f3a\u5c11\u4e0a\u4e0b\u6587\u6642\u4e82\u7b54\uff0c\u4e5f\u53ef\u4ee5\u8b93\u5ba2\u670d\u6d41\u7a0b\u4fdd\u7559\u4eba\u5de5\u5be9\u6838\u8207\u8ffd\u8e64\u7d00\u9304\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5099\u4efd\u7b56\u7565<\/h2>\n<p>AI Operations Server \u7684\u95dc\u9375\u8cc7\u6599\u4e3b\u8981\u5305\u542b PostgreSQL\u3001n8n \u8a2d\u5b9a\u3001Qdrant \u5411\u91cf\u8cc7\u6599\u3001Open WebUI \u8cc7\u6599\u8207 Docker Compose \u8a2d\u5b9a\u3002\u5efa\u8b70\u81f3\u5c11\u6bcf\u65e5\u5099\u4efd PostgreSQL \u8207 <code>\/opt\/ai-ops<\/code> \u76ee\u9304\u3002<\/p>\n<p>PostgreSQL \u5099\u4efd\u7bc4\u4f8b\uff1a<\/p>\n<pre><code>mkdir -p \/opt\/ai-ops\/backups\ndocker exec aiops-postgres pg_dump -U n8n n8n &gt; \/opt\/ai-ops\/backups\/n8n_$(date +%F).sql<\/code><\/pre>\n<p>\u58d3\u7e2e\u5c08\u6848\u76ee\u9304\uff1a<\/p>\n<pre><code>sudo tar -czf \/opt\/ai-ops\/backups\/aiops_data_$(date +%F).tar.gz \/opt\/ai-ops\/data \/opt\/ai-ops\/docker-compose.yml \/opt\/ai-ops\/.env<\/code><\/pre>\n<p>\u6b63\u5f0f\u74b0\u5883\u8acb\u5c07\u5099\u4efd\u540c\u6b65\u5230\u7570\u5730\uff0c\u4f8b\u5982 S3\u3001NAS\u3001\u53e6\u4e00\u53f0\u5099\u4efd\u4f3a\u670d\u5668\u6216\u4f01\u696d\u5099\u4efd\u7cfb\u7d71\u3002\u4e5f\u61c9\u5b9a\u671f\u9032\u884c\u9084\u539f\u6f14\u7df4\uff0c\u56e0\u70ba\u6c92\u6709\u6e2c\u8a66\u904e\u7684\u5099\u4efd\u4e0d\u80fd\u8996\u70ba\u53ef\u9760\u5099\u4efd\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u66f4\u65b0\u8207\u7dad\u8b77<\/h2>\n<p>\u66f4\u65b0\u5bb9\u5668\u6620\u50cf\u6a94\u524d\uff0c\u8acb\u5148\u5099\u4efd\u3002\u63a5\u8457\u53ef\u57f7\u884c\uff1a<\/p>\n<pre><code>cd \/opt\/ai-ops\ndocker compose pull\ndocker compose up -d<\/code><\/pre>\n<p>\u6e05\u7406\u672a\u4f7f\u7528\u6620\u50cf\u6a94\uff1a<\/p>\n<pre><code>docker image prune -a<\/code><\/pre>\n<p>\u67e5\u770b\u78c1\u789f\u4f7f\u7528\u91cf\uff1a<\/p>\n<pre><code>docker system df\ndf -h<\/code><\/pre>\n<p>\u67e5\u770b\u5bb9\u5668\u8cc7\u6e90\u4f7f\u7528\uff1a<\/p>\n<pre><code>docker stats<\/code><\/pre>\n<p>n8n\u3001PostgreSQL\u3001Qdrant \u90fd\u5c6c\u65bc\u6709\u72c0\u614b\u670d\u52d9\uff0c\u4e0d\u5efa\u8b70\u5728\u6c92\u6709\u5099\u4efd\u8207\u6e2c\u8a66\u7684\u60c5\u6cc1\u4e0b\u76f2\u76ee\u5347\u7d1a major version\u3002\u82e5\u662f\u6b63\u5f0f\u74b0\u5883\uff0c\u5efa\u8b70\u5148\u5728 staging server \u9a57\u8b49\u76f8\u540c Docker Compose \u8a2d\u5b9a\uff0c\u518d\u66f4\u65b0 production server\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5b89\u5168\u6027\u5efa\u8b70<\/h2>\n<p>AI Operations Server \u6703\u4fdd\u5b58 OpenAI API Key\u3001WordPress API Token\u3001WooCommerce API Key\u3001\u8868\u55ae\u8cc7\u6599\u3001\u5ba2\u6236\u554f\u984c\u3001\u5546\u54c1\u8cc7\u6599\u8207\u81ea\u52d5\u5316\u57f7\u884c\u7d00\u9304\uff0c\u56e0\u6b64\u5b89\u5168\u6027\u5fc5\u9808\u5f9e\u4e00\u958b\u59cb\u5c31\u7d0d\u5165\u898f\u5283\u3002<\/p>\n<ul>\n<li>\u4e0d\u8981\u4f7f\u7528 root \u5e33\u865f\u76f4\u63a5\u767b\u5165 SSH\u3002<\/li>\n<li>SSH \u4f7f\u7528\u91d1\u9470\u767b\u5165\uff0c\u505c\u7528\u5bc6\u78bc\u767b\u5165\u3002<\/li>\n<li>n8n\u3001Open WebUI\u3001Portainer \u4f7f\u7528\u5f37\u5bc6\u78bc\u3002<\/li>\n<li>\u7ba1\u7406\u4ecb\u9762\u76e1\u91cf\u9650\u5236\u4f86\u6e90 IP \u6216\u900f\u904e VPN \u5b58\u53d6\u3002<\/li>\n<li>PostgreSQL\u3001Redis \u4e0d\u5c0d\u5916\u958b\u653e\u3002<\/li>\n<li>OpenAI API Key \u4e0d\u5beb\u6b7b\u5728 Workflow \u7bc0\u9ede\u4e2d\u3002<\/li>\n<li>\u5b9a\u671f\u8f2a\u66ff API Key \u8207\u61c9\u7528\u7a0b\u5f0f\u5bc6\u78bc\u3002<\/li>\n<li>\u654f\u611f\u8cc7\u6599\u9032\u5165 OpenAI API \u524d\u5148\u505a\u906e\u7f69\u6216\u6700\u5c0f\u5316\u3002<\/li>\n<li>\u5b9a\u671f\u5099\u4efd\u4e26\u6e2c\u8a66\u9084\u539f\u3002<\/li>\n<li>\u5c07 Docker Compose \u8207\u74b0\u5883\u8a2d\u5b9a\u7d0d\u5165\u6b0a\u9650\u63a7\u7ba1\u3002<\/li>\n<\/ul>\n<p>\u82e5\u8981\u5f37\u5316 SSH \u5b89\u5168\u6027\uff0c\u53ef\u7de8\u8f2f\uff1a<\/p>\n<pre><code>sudo nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n<p>\u5efa\u8b70\u8a2d\u5b9a\uff1a<\/p>\n<pre><code>PermitRootLogin no\nPasswordAuthentication no\nPubkeyAuthentication yes<\/code><\/pre>\n<p>\u91cd\u65b0\u8f09\u5165 SSH\uff1a<\/p>\n<pre><code>sudo systemctl reload ssh<\/code><\/pre>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5e38\u898b\u932f\u8aa4\u6392\u9664<\/h2>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Docker \u7121\u6cd5\u555f\u52d5<\/h3>\n<p>\u6aa2\u67e5 Docker \u670d\u52d9\u72c0\u614b\uff1a<\/p>\n<pre><code>sudo systemctl status docker<\/code><\/pre>\n<p>\u82e5\u672a\u555f\u52d5\uff0c\u53ef\u57f7\u884c\uff1a<\/p>\n<pre><code>sudo systemctl enable docker\nsudo systemctl start docker<\/code><\/pre>\n<p>\u82e5\u76ee\u524d\u4f7f\u7528\u8005\u7121\u6cd5\u57f7\u884c docker \u6307\u4ee4\uff0c\u78ba\u8a8d\u662f\u5426\u5df2\u52a0\u5165 docker \u7fa4\u7d44\uff1a<\/p>\n<pre><code>groups\nsudo usermod -aG docker $USER\nnewgrp docker<\/code><\/pre>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">n8n \u7121\u6cd5\u9023\u7dda PostgreSQL<\/h3>\n<p>\u5148\u6aa2\u67e5 PostgreSQL \u5bb9\u5668\u662f\u5426\u5065\u5eb7\uff1a<\/p>\n<pre><code>docker compose ps\ndocker compose logs postgres<\/code><\/pre>\n<p>\u5e38\u898b\u539f\u56e0\u5305\u542b <code>POSTGRES_USER<\/code>\u3001<code>POSTGRES_PASSWORD<\/code>\u3001<code>POSTGRES_DB<\/code> \u8207 n8n \u74b0\u5883\u8b8a\u6578\u4e0d\u4e00\u81f4\uff0c\u6216 PostgreSQL data volume \u66fe\u7d93\u7528\u820a\u5bc6\u78bc\u521d\u59cb\u5316\u904e\u3002\u82e5\u662f\u6e2c\u8a66\u74b0\u5883\u4e14\u8cc7\u6599\u53ef\u522a\u9664\uff0c\u53ef\u505c\u6b62\u5bb9\u5668\u4e26\u6e05\u9664 PostgreSQL \u8cc7\u6599\u76ee\u9304\u5f8c\u91cd\u5efa\uff1a<\/p>\n<pre><code>docker compose down\nrm -rf \/opt\/ai-ops\/data\/postgres\/*\ndocker compose up -d<\/code><\/pre>\n<p>\u6b63\u5f0f\u74b0\u5883\u4e0d\u53ef\u76f4\u63a5\u522a\u9664\u8cc7\u6599\u76ee\u9304\uff0c\u61c9\u5148\u5099\u4efd\u4e26\u5206\u6790\u65e5\u8a8c\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">n8n Webhook URL \u932f\u8aa4<\/h3>\n<p>\u5982\u679c WordPress \u547c\u53eb n8n Webhook \u6642\u7db2\u5740\u4e0d\u6b63\u78ba\uff0c\u901a\u5e38\u662f <code>WEBHOOK_URL<\/code>\u3001<code>N8N_HOST<\/code> \u6216 <code>N8N_PROTOCOL<\/code> \u8a2d\u5b9a\u4e0d\u7b26\u5408\u5916\u90e8\u5be6\u969b\u5b58\u53d6\u7db2\u5740\u3002\u4fee\u6539 <code>.env<\/code> \u5f8c\u91cd\u65b0\u555f\u52d5 n8n\uff1a<\/p>\n<pre><code>docker compose up -d n8n<\/code><\/pre>\n<p>\u82e5\u524d\u65b9\u6709 HTTPS \u53cd\u5411\u4ee3\u7406\uff0c<code>WEBHOOK_URL<\/code> \u5fc5\u9808\u4f7f\u7528 HTTPS \u5b8c\u6574\u7db2\u57df\uff0c\u800c\u4e0d\u662f\u5bb9\u5668\u5167\u90e8\u540d\u7a31\u6216 localhost\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Redis Queue \u6c92\u6709\u6b63\u5e38\u904b\u4f5c<\/h3>\n<p>\u6aa2\u67e5 Redis\uff1a<\/p>\n<pre><code>docker exec -it aiops-redis redis-cli ping<\/code><\/pre>\n<p>\u67e5\u770b n8n \u65e5\u8a8c\uff1a<\/p>\n<pre><code>docker compose logs -f n8n<\/code><\/pre>\n<p>\u78ba\u8a8d n8n \u7684 Redis host \u8a2d\u70ba <code>redis<\/code>\uff0c\u4e5f\u5c31\u662f Docker Compose service name\uff0c\u800c\u4e0d\u662f <code>localhost<\/code>\u3002\u5728\u5bb9\u5668\u5167\uff0clocalhost \u6307\u7684\u662f n8n \u5bb9\u5668\u672c\u8eab\uff0c\u4e0d\u662f Redis \u5bb9\u5668\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Qdrant API \u7121\u6cd5\u5b58\u53d6<\/h3>\n<p>\u5148\u78ba\u8a8d\u5bb9\u5668\u72c0\u614b\uff1a<\/p>\n<pre><code>docker compose ps qdrant\ndocker compose logs qdrant<\/code><\/pre>\n<p>\u82e5\u5728\u4f3a\u670d\u5668\u672c\u6a5f\u6e2c\u8a66\uff1a<\/p>\n<pre><code>curl http:\/\/localhost:6333\/collections -H \"api-key: your_qdrant_api_key\"<\/code><\/pre>\n<p>\u82e5\u5916\u90e8\u7121\u6cd5\u9023\u7dda\uff0c\u8acb\u78ba\u8a8d UFW \u662f\u5426\u958b\u653e 6333\uff0c\u4ee5\u53ca\u96f2\u7aef\u9632\u706b\u7246 Security Group \u662f\u5426\u5141\u8a31\u4f86\u6e90 IP\u3002\u4e0d\u5efa\u8b70\u5c07 Qdrant \u76f4\u63a5\u958b\u653e\u7d66\u6240\u6709\u516c\u7db2\u4f86\u6e90\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">OpenAI API \u547c\u53eb\u5931\u6557<\/h3>\n<p>\u5e38\u898b\u539f\u56e0\u5305\u62ec API Key \u932f\u8aa4\u3001\u984d\u5ea6\u4e0d\u8db3\u3001\u6a21\u578b\u540d\u7a31\u932f\u8aa4\u3001\u8acb\u6c42\u683c\u5f0f\u932f\u8aa4\u6216\u7db2\u8def\u7121\u6cd5\u9023\u5230 OpenAI\u3002\u53ef\u5728\u4f3a\u670d\u5668\u4e0a\u6e2c\u8a66 DNS \u8207\u9023\u7dda\uff1a<\/p>\n<pre><code>curl -I https:\/\/api.openai.com<\/code><\/pre>\n<p>\u82e5\u662f n8n \u7bc0\u9ede\u932f\u8aa4\uff0c\u8acb\u67e5\u770b\u8a72\u57f7\u884c\u7d00\u9304\u4e2d\u7684 request \u8207 response\u3002\u6b63\u5f0f\u74b0\u5883\u4e0d\u8981\u5728\u65e5\u8a8c\u4e2d\u9577\u671f\u4fdd\u7559\u5b8c\u6574\u654f\u611f\u5167\u5bb9\uff0c\u907f\u514d\u6d29\u6f0f\u5ba2\u6236\u8cc7\u6599\u6216 API Key\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Portainer \u7121\u6cd5\u7ba1\u7406 Docker<\/h3>\n<p>Portainer \u9700\u8981\u639b\u8f09 Docker socket\uff1a<\/p>\n<pre><code>\/var\/run\/docker.sock:\/var\/run\/docker.sock<\/code><\/pre>\n<p>\u82e5\u6c92\u6709\u639b\u8f09\uff0cPortainer \u5c07\u7121\u6cd5\u7ba1\u7406\u672c\u6a5f Docker\u3002\u8acb\u6aa2\u67e5 <code>docker-compose.yml<\/code> \u4e2d portainer service \u7684 volumes \u8a2d\u5b9a\uff0c\u4fee\u6539\u5f8c\u91cd\u65b0\u90e8\u7f72\uff1a<\/p>\n<pre><code>docker compose up -d portainer<\/code><\/pre>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u78c1\u789f\u7a7a\u9593\u5feb\u901f\u8017\u76e1<\/h3>\n<p>n8n \u57f7\u884c\u7d00\u9304\u3001Docker logs\u3001PostgreSQL \u8cc7\u6599\u3001Qdrant \u5411\u91cf\u8cc7\u6599\u90fd\u53ef\u80fd\u6d88\u8017\u5927\u91cf\u78c1\u789f\u3002\u5148\u6aa2\u67e5\uff1a<\/p>\n<pre><code>df -h\ndocker system df\ndu -sh \/opt\/ai-ops\/data\/*<\/code><\/pre>\n<p>\u53ef\u5728 n8n \u8a2d\u5b9a\u4e2d\u555f\u7528\u57f7\u884c\u8cc7\u6599\u6e05\u7406\uff0c\u4f8b\u5982\u672c\u6587 Compose \u5df2\u52a0\u5165\uff1a<\/p>\n<pre><code>EXECUTIONS_DATA_PRUNE=true\nEXECUTIONS_DATA_MAX_AGE=336<\/code><\/pre>\n<p>\u4ee3\u8868\u4fdd\u7559\u7d04 14 \u5929\u57f7\u884c\u8cc7\u6599\u3002\u82e5\u6b63\u5f0f\u74b0\u5883\u9700\u8981\u7a3d\u6838\uff0c\u61c9\u5c07\u91cd\u8981\u7d00\u9304\u5beb\u5165\u5c08\u9580\u8cc7\u6599\u8868\u6216\u65e5\u8a8c\u7cfb\u7d71\uff0c\u800c\u4e0d\u662f\u4f9d\u8cf4 n8n \u5167\u5efa\u57f7\u884c\u7d00\u9304\u6c38\u4e45\u4fdd\u5b58\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u6b63\u5f0f\u74b0\u5883\u90e8\u7f72\u5efa\u8b70<\/h2>\n<p>\u82e5\u6b64 AI Operations Server \u8981\u6295\u5165\u6b63\u5f0f\u4f7f\u7528\uff0c\u5efa\u8b70\u63a1\u7528\u4ee5\u4e0b\u90e8\u7f72\u539f\u5247\uff1a<\/p>\n<ul>\n<li>n8n \u5c0d\u5916 Webhook \u8207\u7ba1\u7406\u5f8c\u53f0\u5206\u96e2\uff0c\u7ba1\u7406\u5f8c\u53f0\u9650\u5236 IP\u3002<\/li>\n<li>\u6240\u6709\u5bc6\u78bc\u8207 API Key \u4f7f\u7528\u5bc6\u78bc\u7ba1\u7406\u7cfb\u7d71\u4fdd\u5b58\u3002<\/li>\n<li>Docker Compose \u6a94\u6848\u653e\u5165 Git\uff0c\u4f46 <code>.env<\/code> \u4e0d\u63d0\u4ea4\u5230\u516c\u958b repository\u3002<\/li>\n<li>PostgreSQL \u5b9a\u671f\u5099\u4efd\uff0c\u4e26\u6e2c\u8a66\u9084\u539f\u3002<\/li>\n<li>Qdrant \u8cc7\u6599\u82e5\u53ef\u7531\u4f86\u6e90\u8cc7\u6599\u91cd\u5efa\uff0c\u4ecd\u9700\u4fdd\u5b58\u7d22\u5f15\u5efa\u7acb\u6d41\u7a0b\u3002<\/li>\n<li>OpenAI API \u8a2d\u5b9a\u9810\u7b97\u4e0a\u9650\u8207\u7528\u91cf\u8b66\u793a\u3002<\/li>\n<li>\u6240\u6709\u81ea\u52d5\u767c\u5e03\u6d41\u7a0b\u90fd\u61c9\u4fdd\u7559\u4eba\u5de5\u5be9\u6838\u6a5f\u5236\u3002<\/li>\n<li>\u5c0d WordPress \u8207 WooCommerce API \u8a2d\u5b9a\u6700\u5c0f\u6b0a\u9650\u3002<\/li>\n<li>\u5927\u578b\u6279\u6b21\u4efb\u52d9\u4f7f\u7528 Redis Queue\uff0c\u907f\u514d API \u77ac\u9593\u8d85\u8f09\u3002<\/li>\n<li>\u5efa\u7acb staging \u74b0\u5883\u6e2c\u8a66 n8n Workflow \u8b8a\u66f4\u3002<\/li>\n<\/ul>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u5efa\u8b70\u7684 Workflow \u8a2d\u8a08\u6a21\u5f0f<\/h2>\n<p>n8n Workflow \u5f88\u5bb9\u6613\u5feb\u901f\u5806\u758a\uff0c\u4f46\u82e5\u7f3a\u5c11\u8a2d\u8a08\u898f\u7bc4\uff0c\u9577\u671f\u6703\u8b8a\u6210\u96e3\u4ee5\u7dad\u8b77\u7684\u6d41\u7a0b\u8ff7\u5bae\u3002\u5efa\u8b70\u63a1\u7528\u4ee5\u4e0b\u6a21\u5f0f\uff1a<\/p>\n<ul>\n<li><strong>\u5165\u53e3\u6d41\u7a0b\uff1a<\/strong>\u53ea\u8ca0\u8cac\u63a5\u6536 Webhook\u3001\u9a57\u8b49\u8cc7\u6599\u3001\u5beb\u5165\u4efb\u52d9\u3002<\/li>\n<li><strong>\u8655\u7406\u6d41\u7a0b\uff1a<\/strong>\u8ca0\u8cac\u547c\u53eb OpenAI API\u3001\u67e5\u8a62 Qdrant\u3001\u6574\u7406\u8cc7\u6599\u3002<\/li>\n<li><strong>\u8f38\u51fa\u6d41\u7a0b\uff1a<\/strong>\u8ca0\u8cac\u5beb\u56de WordPress\u3001WooCommerce\u3001Email \u6216\u5176\u4ed6\u7cfb\u7d71\u3002<\/li>\n<li><strong>\u932f\u8aa4\u6d41\u7a0b\uff1a<\/strong>\u7d71\u4e00\u8655\u7406\u5931\u6557\u901a\u77e5\u3001\u91cd\u8a66\u3001\u4eba\u5de5\u4ecb\u5165\u3002<\/li>\n<li><strong>\u5171\u7528\u5b50\u6d41\u7a0b\uff1a<\/strong>\u5c07 OpenAI Prompt\u3001\u683c\u5f0f\u5316\u3001\u8cc7\u6599\u9a57\u8b49\u5c01\u88dd\u6210\u53ef\u91cd\u7528\u7bc0\u9ede\u3002<\/li>\n<\/ul>\n<p>\u4f8b\u5982 AI \u6587\u7ae0\u751f\u6210\u53ef\u4ee5\u62c6\u6210\uff1a\u300c\u95dc\u9375\u5b57\u8b80\u53d6\u300d\u3001\u300c\u8cc7\u6599\u8490\u96c6\u300d\u3001\u300cQdrant \u67e5\u8a62\u300d\u3001\u300cOpenAI \u751f\u6210\u300d\u3001\u300c\u54c1\u8cea\u6aa2\u67e5\u300d\u3001\u300cWordPress \u5efa\u8349\u7a3f\u300d\u3001\u300c\u901a\u77e5\u7de8\u8f2f\u300d\u7b49\u591a\u500b\u968e\u6bb5\u3002\u9019\u6a23\u6bd4\u628a\u6240\u6709\u908f\u8f2f\u585e\u5728\u55ae\u4e00 Workflow \u4e2d\u66f4\u5bb9\u6613\u9664\u932f\u8207\u64f4\u5145\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">\u7d50\u8ad6<\/h2>\n<p>\u4ee5 Ubuntu 26.04 Server\u3001Docker\u3001n8n\u3001PostgreSQL\u3001Redis\u3001Qdrant\u3001OpenAI API\u3001Open WebUI \u8207 Portainer \u5efa\u7acb AI Operations Server\uff0c\u53ef\u4ee5\u8b93 WordPress \u81ea\u52d5\u5316\u3001AI \u6587\u7ae0\u751f\u6210\u3001WooCommerce \u5546\u54c1\u7ba1\u7406\u3001\u8868\u55ae\u81ea\u52d5\u56de\u8986\u3001API \u4e32\u63a5\u4e2d\u63a7\u8207\u672a\u4f86 Agent \u64f4\u5c55\u5177\u5099\u4e00\u81f4\u7684\u57fa\u790e\u67b6\u69cb\u3002\u9019\u53f0\u4f3a\u670d\u5668\u7684\u91cd\u9ede\u4e0d\u662f\u627f\u8f09\u7db2\u7ad9\u6d41\u91cf\uff0c\u800c\u662f\u627f\u8f09 AI \u81ea\u52d5\u5316\u6d41\u7a0b\u3001\u8cc7\u6599\u8655\u7406\u3001\u4f47\u5217\u4efb\u52d9\u8207\u5411\u91cf\u8a18\u61b6\u3002<\/p>\n<p>\u5c0d\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u800c\u8a00\uff0c\u6700\u91cd\u8981\u7684\u662f\u6e05\u695a\u5340\u5206\u89d2\u8272\uff1aWordPress \u8ca0\u8cac\u5167\u5bb9\u8207\u524d\u53f0\uff0cn8n \u8ca0\u8cac Workflow\uff0cOpenAI \u8ca0\u8cac AI \u63a8\u7406\uff0cPostgreSQL \u8ca0\u8cac\u7d50\u69cb\u5316\u8cc7\u6599\uff0cRedis \u8ca0\u8cac Queue\uff0cQdrant \u8ca0\u8cac AI \u8a18\u61b6\uff0cPortainer \u8ca0\u8cac\u5bb9\u5668\u7ba1\u7406\uff0cOpen WebUI \u5247\u63d0\u4f9b AI \u6e2c\u8a66\u4ecb\u9762\u3002\u53ea\u8981\u908a\u754c\u6e05\u695a\uff0c\u672a\u4f86\u8981\u64f4\u5145\u66f4\u591a Agent\u3001\u66f4\u591a API \u4e32\u63a5\u6216\u66f4\u591a\u81ea\u52d5\u5316\u6d41\u7a0b\uff0c\u5c31\u80fd\u5728\u4e0d\u7834\u58de\u65e2\u6709\u7db2\u7ad9\u67b6\u69cb\u7684\u524d\u63d0\u4e0b\u6301\u7e8c\u6f14\u9032\u3002<\/p>\n<h2 style=\"font-size:22px;line-height:1.4;margin-top:26px;margin-bottom:10px;\">FAQ<\/h2>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u9019\u53f0 AI Operations Server \u53ef\u4ee5\u540c\u6642\u7576 WordPress \u7db2\u7ad9\u4e3b\u6a5f\u55ce\uff1f<\/h3>\n<p>\u6280\u8853\u4e0a\u53ef\u4ee5\uff0c\u4f46\u4e0d\u5efa\u8b70\u3002\u672c\u6587\u7684\u67b6\u69cb\u5b9a\u4f4d\u662f AI \u81ea\u52d5\u5316\u8207\u8cc7\u6599\u8655\u7406\u4e2d\u6a1e\uff0c\u4e0d\u662f\u7db2\u7ad9\u4f3a\u670d\u5668\u3002\u5c07 WordPress \u8207 AI Operations \u62c6\u958b\uff0c\u53ef\u964d\u4f4e\u8cc7\u6e90\u7af6\u722d\u8207\u5b89\u5168\u98a8\u96aa\uff0c\u4e5f\u65b9\u4fbf\u672a\u4f86\u64f4\u5145\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u4e00\u5b9a\u8981\u4f7f\u7528 PostgreSQL \u55ce\uff1f<\/h3>\n<p>n8n \u53ef\u4f7f\u7528\u4e0d\u540c\u8cc7\u6599\u5eab\uff0c\u4f46\u6b63\u5f0f\u74b0\u5883\u5efa\u8b70\u4f7f\u7528 PostgreSQL\uff0c\u7a69\u5b9a\u6027\u3001\u67e5\u8a62\u80fd\u529b\u8207\u7dad\u8b77\u5de5\u5177\u90fd\u8f03\u6210\u719f\u3002SQLite \u9069\u5408\u6e2c\u8a66\uff0c\u4e0d\u5efa\u8b70\u7528\u65bc\u6b63\u5f0f\u591a\u6d41\u7a0b\u3001\u591a\u4f7f\u7528\u8005\u6216 Queue \u6a21\u5f0f\u74b0\u5883\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Redis \u7684\u7528\u9014\u662f\u4ec0\u9ebc\uff1f<\/h3>\n<p>Redis \u5728\u6b64\u67b6\u69cb\u4e2d\u4e3b\u8981\u7528\u65bc n8n Queue \u8207\u5feb\u53d6\u3002\u7576 Workflow \u6578\u91cf\u589e\u52a0\u3001\u4efb\u52d9\u9700\u8981\u80cc\u666f\u8655\u7406\u6216\u6279\u6b21\u57f7\u884c\u6642\uff0cRedis \u80fd\u5354\u52a9\u63d0\u5347\u7a69\u5b9a\u6027\u8207\u53ef\u64f4\u5145\u6027\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Qdrant \u4e00\u5b9a\u9700\u8981\u55ce\uff1f<\/h3>\n<p>\u5982\u679c\u53ea\u662f\u7c21\u55ae\u547c\u53eb OpenAI API \u7522\u751f\u6587\u7ae0\u6216\u56de\u8986\uff0cQdrant \u4e0d\u662f\u5fc5\u9700\u3002\u4f46\u82e5\u8981\u5efa\u7acb AI \u8a18\u61b6\u3001\u77e5\u8b58\u5eab\u641c\u5c0b\u3001RAG\u3001\u7522\u54c1\u8cc7\u6599\u67e5\u8a62\u6216\u672a\u4f86 Agent\uff0cQdrant \u6703\u662f\u5f88\u91cd\u8981\u7684\u5411\u91cf\u8cc7\u6599\u5eab\u5143\u4ef6\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Open WebUI \u662f\u4e0d\u662f\u53ef\u4ee5\u53d6\u4ee3 n8n\uff1f<\/h3>\n<p>\u4e0d\u53ef\u4ee5\u3002Open WebUI \u4e3b\u8981\u662f AI \u804a\u5929\u8207\u6e2c\u8a66\u4ecb\u9762\uff0cn8n \u5247\u662f Workflow \u81ea\u52d5\u5316\u6838\u5fc3\u3002\u5169\u8005\u7528\u9014\u4e0d\u540c\uff0cOpen WebUI \u9069\u5408\u6e2c\u8a66 Prompt \u8207\u6a21\u578b\u56de\u8986\uff0cn8n \u9069\u5408\u4e32\u63a5 WordPress\u3001WooCommerce\u3001API\u3001\u8cc7\u6599\u5eab\u8207\u6392\u7a0b\u4efb\u52d9\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">Portainer \u662f\u5426\u5fc5\u8981\uff1f<\/h3>\n<p>Portainer \u4e0d\u662f\u5fc5\u8981\u5143\u4ef6\uff0c\u4f46\u5c0d\u7cfb\u7d71\u5de5\u7a0b\u5e2b\u65e5\u5e38\u7dad\u8b77 Docker \u5bb9\u5668\u5f88\u65b9\u4fbf\u3002\u5373\u4f7f\u4f7f\u7528 Portainer\uff0c\u4e5f\u5efa\u8b70\u4fdd\u7559 Docker Compose \u6a94\u6848\u8207 Git \u7248\u672c\u63a7\u7ba1\uff0c\u4e0d\u8981\u53ea\u4f9d\u8cf4 UI \u64cd\u4f5c\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">OpenAI API Key \u61c9\u8a72\u653e\u5728\u54ea\u88e1\uff1f<\/h3>\n<p>\u5efa\u8b70\u653e\u5728 n8n Credential \u6216\u53d7\u63a7\u7684\u74b0\u5883\u8b8a\u6578\u4e2d\uff0c\u4e0d\u8981\u76f4\u63a5\u5beb\u5728 Workflow \u7bc0\u9ede\u3001\u7a0b\u5f0f\u78bc\u6216\u516c\u958b Git repository\u3002\u6b63\u5f0f\u74b0\u5883\u61c9\u5b9a\u671f\u8f2a\u66ff API Key\uff0c\u4e26\u8a2d\u5b9a\u7528\u91cf\u9650\u5236\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">n8n \u53ef\u4ee5\u76f4\u63a5\u81ea\u52d5\u767c\u5e03 WordPress \u6587\u7ae0\u55ce\uff1f<\/h3>\n<p>\u53ef\u4ee5\uff0c\u4f46\u4e0d\u5efa\u8b70\u5728\u6c92\u6709\u5be9\u6838\u7684\u60c5\u6cc1\u4e0b\u5168\u81ea\u52d5\u767c\u5e03\u3002\u8f03\u5b89\u5168\u7684\u505a\u6cd5\u662f\u7531 n8n \u5efa\u7acb\u8349\u7a3f\uff0c\u4e26\u901a\u77e5\u7de8\u8f2f\u6216\u7ba1\u7406\u8005\u5be9\u6838\uff0c\u78ba\u8a8d\u5167\u5bb9\u54c1\u8cea\u3001\u4e8b\u5be6\u6b63\u78ba\u6027\u8207\u54c1\u724c\u8a9e\u6c23\u5f8c\u518d\u767c\u5e03\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u5982\u679c\u672a\u4f86\u8981\u52a0\u5165\u81ea\u67b6 LLM\uff0c\u9700\u8981\u6539\u67b6\u69cb\u55ce\uff1f<\/h3>\n<p>\u4e0d\u4e00\u5b9a\u3002\u82e5\u52a0\u5165 Ollama\u3001vLLM \u6216\u5176\u4ed6\u672c\u6a5f\u6a21\u578b\uff0c\u53ef\u4ee5\u628a\u5b83\u8996\u70ba\u65b0\u7684 AI \u63a8\u7406\u670d\u52d9\uff0c\u8b93 n8n \u900f\u904e API \u547c\u53eb\u3002\u82e5\u8981\u8dd1\u5927\u578b\u6a21\u578b\uff0c\u5247\u9700\u8981\u984d\u5916\u898f\u5283 GPU\u3001VRAM\u3001\u9a45\u52d5\u7a0b\u5f0f\u3001\u6a21\u578b\u5132\u5b58\u8207\u6563\u71b1\u4f9b\u96fb\u3002<\/p>\n<h3 style=\"font-size:18px;line-height:1.4;margin-top:20px;margin-bottom:8px;\">\u6b63\u5f0f\u74b0\u5883\u6700\u5bb9\u6613\u5ffd\u7565\u7684\u554f\u984c\u662f\u4ec0\u9ebc\uff1f<\/h3>\n<p>\u6700\u5e38\u88ab\u5ffd\u7565\u7684\u662f\u5099\u4efd\u3001Webhook URL\u3001API Key \u6b0a\u9650\u3001n8n \u57f7\u884c\u7d00\u9304\u81a8\u8139\u3001\u7ba1\u7406\u4ecb\u9762\u66b4\u9732\u516c\u7db2\uff0c\u4ee5\u53ca AI \u81ea\u52d5\u5316\u7f3a\u5c11\u4eba\u5de5\u5be9\u6838\u3002\u9019\u4e9b\u554f\u984c\u5728\u6e2c\u8a66\u968e\u6bb5\u4e0d\u660e\u986f\uff0c\u4f46\u6b63\u5f0f\u904b\u4f5c\u5f8c\u6703\u76f4\u63a5\u5f71\u97ff\u5b89\u5168\u6027\u8207\u7a69\u5b9a\u6027\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 AI Operations Server \u7684\u898f\u5283\u4e2d\uff0cUbuntu 26.04 Server\u3001Docker\u3001 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2829,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[94],"tags":[],"class_list":["post-2809","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/posts\/2809","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2809"}],"version-history":[{"count":2,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/posts\/2809\/revisions"}],"predecessor-version":[{"id":2822,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/posts\/2809\/revisions\/2822"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=\/wp\/v2\/media\/2829"}],"wp:attachment":[{"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iserver.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}