{"id":34048,"date":"2022-12-22T03:16:36","date_gmt":"2023-06-11T01:27:55","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/"},"modified":"2024-04-29T06:27:01","modified_gmt":"2024-04-28T22:27:01","slug":"%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/","title":{"rendered":"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386"},"content":{"rendered":"<h2>\u603b\u7ed3<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CoreOS\u4e0a\u306bfleet\u306eunit\u3068\u3057\u3066hubot\u3092\u7acb\u3061\u4e0a\u3052\u3066\u307f\u305f<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u8907\u6570\u30db\u30b9\u30c8\u9593\u3067\u306eLINK\u3068\u304b\u306a\u3051\u308c\u3070fleet\u306f\u5358\u7d14\u306a\u30c4\u30fc\u30eb\u306a\u306e\u3067\u4f7f\u3044\u3084\u3059\u304b\u3063\u305f\u3068\u3044\u3046\u8a71<\/ul>\n<h2>\u524d\u63d0- \u8fd9\u4e2a\u8bcd\u7528\u6765\u6307\u4ee3\u4e00\u79cd\u524d\u63d0\u6761\u4ef6\u6216\u8005\u5148\u51b3\u6761\u4ef6\uff0c\u5b83\u662f\u6307\u5728\u63a2\u8ba8\u6216\u5b9e\u65bd\u67d0\u4e8b\u7269\u4e4b\u524d\u9700\u8981\u6ee1\u8db3\u7684\u4e00\u79cd\u57fa\u7840\u6216\u8005\u9650\u5236\u3002<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Vagrant\u3068vagrant-digitalocean\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u624b\u5143\u306bDocker\u958b\u767a\u74b0\u5883\u304c\u6574\u5099\u6e08\u307f<\/ul>\n<h2>\u505a\u8fc7\u7684\u4e8b\u60c5<\/h2>\n<h3>1. \u542f\u52a8CoreOS<\/h3>\n<p>\u672c\u6b21\u6211\u4eec\u5c06\u901a\u8fc7Vagrant\uff0c\u5728DigitalOcean\u4e0a\u521b\u5efa\u4e00\u4e2aCoreOS\u7684droplet\u3002<br \/>\nVagrantfile\u7684\u5185\u5bb9\u5982\u4e0b\u6240\u793a\u3002<br \/>\n\u8bf7\u6839\u636e\u9700\u8981\u8fdb\u884c\u76f8\u5e94\u7684\u8def\u5f84\u548c\u6587\u4ef6\u540d\u4fee\u6539\u540e\u4f7f\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"no\">Vagrant<\/span><span class=\"p\">.<\/span><span class=\"nf\">configure<\/span><span class=\"p\">(<\/span><span class=\"s1\">'2'<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">config<\/span><span class=\"o\">|<\/span>\r\n  <span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">ssh<\/span><span class=\"p\">.<\/span><span class=\"nf\">username<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'core'<\/span>\r\n\r\n  <span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">define<\/span> <span class=\"s2\">\"core-hubot\"<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">config<\/span><span class=\"o\">|<\/span>\r\n    <span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">provider<\/span> <span class=\"ss\">:digital_ocean<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">provider<\/span><span class=\"p\">,<\/span> <span class=\"n\">override<\/span><span class=\"o\">|<\/span>\r\n      <span class=\"n\">override<\/span><span class=\"p\">.<\/span><span class=\"nf\">ssh<\/span><span class=\"p\">.<\/span><span class=\"nf\">private_key_path<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\/path\/to\/your\/ssh_key'<\/span>\r\n      <span class=\"n\">override<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">box<\/span>               <span class=\"o\">=<\/span> <span class=\"s1\">'digital_ocean'<\/span>\r\n      <span class=\"n\">override<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">box_url<\/span>           <span class=\"o\">=<\/span> <span class=\"s2\">\"https:\/\/github.com\/smdahlen\/vagrant-digitalocean\/raw\/master\/box\/digital_ocean.box\"<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">token<\/span>                <span class=\"o\">=<\/span> <span class=\"s2\">\"YOUR digitalocean API TOKEN\"<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">image<\/span>                <span class=\"o\">=<\/span> <span class=\"s1\">'coreos-stable'<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">region<\/span>               <span class=\"o\">=<\/span> <span class=\"s1\">'sgp1'<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">size<\/span>                 <span class=\"o\">=<\/span> <span class=\"s1\">'512MB'<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">ssh_key_name<\/span>         <span class=\"o\">=<\/span> <span class=\"s2\">\"YOUR SSH KEY NAME\"<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">setup<\/span>                <span class=\"o\">=<\/span> <span class=\"kp\">false<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">private_networking<\/span>   <span class=\"o\">=<\/span> <span class=\"kp\">true<\/span>\r\n      <span class=\"n\">provider<\/span><span class=\"p\">.<\/span><span class=\"nf\">user_data<\/span>            <span class=\"o\">=<\/span> <span class=\"no\">File<\/span><span class=\"p\">.<\/span><span class=\"nf\">read<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user-data.yml'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"k\">end<\/span>\r\n  <span class=\"k\">end<\/span>\r\n<span class=\"k\">end<\/span>\r\n<\/code><\/pre>\n<p>\u6b64\u5916\uff0c\u672c\u6b21\u5728\u542f\u52a8CoreOS\u65f6\uff0c\u6211\u4eec\u5c06\u4ee5\u4e0b\u7684user-data.yml\u6587\u4ef6\u8bbe\u7f6e\u7ed9CoreOS\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">#cloud-config<\/span>\r\n\r\n<span class=\"na\">coreos<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">etcd<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"c1\"># curl -w \"\\n\" https:\/\/discovery.etcd.io\/new<\/span>\r\n    <span class=\"na\">discovery<\/span><span class=\"pi\">:<\/span> <span class=\"s\">https:\/\/discovery.etcd.io\/YOUR_DISCOVERY_PATH<\/span>\r\n    <span class=\"na\">addr<\/span><span class=\"pi\">:<\/span> <span class=\"s\">$private_ipv4:4001<\/span>\r\n    <span class=\"na\">peer-addr<\/span><span class=\"pi\">:<\/span> <span class=\"s\">$private_ipv4:7001<\/span>\r\n\r\n  <span class=\"na\">fleet<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">public-ip<\/span><span class=\"pi\">:<\/span> <span class=\"s\">$private_ipv4<\/span>\r\n\r\n  <span class=\"na\">units<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">etcd.service<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">start<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">fleet.service<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">start<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u4f7f\u7528curl -w &#8220;\\n&#8221; https:\/\/discovery.etcd.io\/new\u6765\u83b7\u53d6etcd\u4e3b\u673a\u53d1\u73b0API\u3002\u7136\u800c\uff0c\u7531\u4e8e\u672c\u6b21\u662f\u5355\u4e00\u4e3b\u673a\uff0c\u6240\u4ee5\u6ca1\u6709\u7279\u5b9a\u7684\u7528\u9014\u3002\u4f46\u5728\u8fd0\u8425CoreOS\u96c6\u7fa4\u65f6\u662f\u975e\u5e38\u91cd\u8981\u7684\u3002<\/p>\n<h3>\u521b\u5efahubot\u7684Docker\u955c\u50cf<\/h3>\n<p>\u8fd9\u6b21\u6211\u4eec\u4f7f\u7528\u5355\u4e2a\u4e3b\u673a\u8fdb\u884c\u8fd0\u8425\uff0c\u6240\u4ee5\u6211\u4eec\u9009\u62e9\u5c06Hubot\u548cRedis\u4f5c\u4e3a\u72ec\u7acb\u7684\u5bb9\u5668\u8fd0\u8425\uff0c\u5e76\u91c7\u7528\u94fe\u63a5\u8fd0\u8425\u7684\u5f62\u5f0f\u3002Hubot\u7684\u5f00\u53d1\u672c\u8eab\u662f\u5728Docker\u5916\u7684\u672c\u5730\u73af\u5883\u8fdb\u884c\u7684\uff0c\u5728docker\u6784\u5efa\u65f6\u5c06\u5176\u6587\u4ef6\u6dfb\u52a0\u8fdb\u53bb\u3002\u5f00\u53d1\u65f6\u7684\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 Dockerfile    # hubot\u7528Dockerfile\r\n\u251c\u2500\u2500 Vagrantfile\r\n\u251c\u2500\u2500 redis.service # redis\u7528service\u30d5\u30a1\u30a4\u30eb\r\n\u251c\u2500\u2500 hubot         # hubot\u306e\u95a2\u9023\u30d5\u30a1\u30a4\u30eb\u7fa4\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 Procfile\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bin\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 external-scripts.json\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 hubot-scripts.json\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 node_modules\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 package.json\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 scripts\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 start.sh\r\n\u251c\u2500\u2500 hubot-bot.service # hubot\u7528service\u30d5\u30a1\u30a4\u30eb\r\n\u2514\u2500\u2500 user-data.yml\r\n<\/code><\/pre>\n<p>\u5bf9\u4e8eHubot\u81ea\u8eab\u7684\u5f00\u53d1\u8bf4\u660e\uff0c\u6211\u4eec\u5c06\u7701\u7565\u4e0d\u63d0\uff0c\u4f46\u60a8\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u4ee5\u4e0b\u94fe\u63a5\u6765\u4e86\u89e3\u66f4\u591a\u7ec6\u8282\uff1a<br \/>\nhttps:\/\/github.com\/github\/hubot\/blob\/master\/docs\/README.md<\/p>\n<p>\u6211\u8ba4\u4e3a\u4f7f\u7528Dockerfile\u4ee5node.js\u4f5c\u4e3a\u5bb9\u5668\u57fa\u7840\uff0c\u53ef\u4ee5\u8f7b\u677e\u5730\u5b89\u88c5hubot\u3002\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u8fd9\u6b21\u662f\u4e3a\u4e86Slack\u6295\u7a3f\u800c\u8bbe\u7f6e\u7684hubot\uff0c\u6240\u4ee5\u6dfb\u52a0\u4e86\u76f8\u5173\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>FROM node:latest\r\nMAINTAINER my@email.address\r\n\r\nRUN npm <span class=\"nb\">install<\/span> <span class=\"nt\">-g<\/span> hubot coffee-script hubot-slack\r\nRUN <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> \/root\/hubot\r\nADD hubot\/package.json \/root\/hubot\/package.json\r\nADD hubot\/bin \/root\/hubot\/bin\r\nRUN <span class=\"nb\">cd<\/span> \/root\/hubot <span class=\"o\">&amp;&amp;<\/span> npm <span class=\"nb\">install\r\n<\/span>ADD hubot\/hubot-scripts.json \/root\/hubot\/hubot-scripts.json\r\nADD hubot\/external-scripts.json \/root\/hubot\/external-scripts.json\r\nADD hubot\/scripts \/root\/hubot\/scripts\r\nADD hubot\/start.sh \/root\/hubot\/start.sh\r\nRUN <span class=\"nb\">chmod <\/span>a+x \/root\/hubot\/start.sh\r\n\r\nENV HUBOT_SLACK_TOKEN YOUR_SLACK_TOKEN\r\n\r\nCMD <span class=\"o\">[<\/span><span class=\"s2\">\"\/root\/hubot\/start.sh\"<\/span><span class=\"o\">]<\/span>\r\n<\/code><\/pre>\n<p>\u5173\u4e8eHubot\u7684\u542f\u52a8\uff0c\u60a8\u53ea\u9700\u67e5\u770b\u6700\u540e\u4e00\u4e2aCMD\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u6211\u4eec\u662f\u901a\u8fc7\u6267\u884c\u7b80\u5355\u7684Shell\u811a\u672c\u6765\u8fdb\u884c\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">#! \/bin\/sh<\/span>\r\n<span class=\"nb\">export <\/span><span class=\"nv\">REDIS_URL<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"redis:\/\/<\/span><span class=\"nv\">$REDIS_PORT_6379_TCP_ADDR<\/span><span class=\"s2\">:<\/span><span class=\"nv\">$REDIS_PORT_6379_TCP_PORT<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"nb\">cd<\/span> \/root\/hubot\/\r\nbin\/hubot <span class=\"nt\">-a<\/span> slack\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5047\u8bbe\u5df2\u7ecf\u4f7f\u7528\u540d\u79f0\u4e3aredis\u7684link\u5c06Redis\u7684URL\u6784\u5efa\u8d77\u6765\u3002<\/p>\n<p>\u5c06\u6b64Dockerfile\u6784\u5efa\u5e76\u63a8\u9001\u5230Docker Hub\u7684\u79c1\u6709\u6ce8\u518c\u8868\u4e2d\uff0c\u5373\u53ef\u5b8c\u6210Docker Hubot\u955c\u50cf\u7684\u51c6\u5907\u5de5\u4f5c\u3002<\/p>\n<h3>\u521b\u5efa\u7528\u4e8ehubot\u548cRedis\u7684\u670d\u52a1\u6587\u4ef6<\/h3>\n<p>Fleet\u4f1a\u4f7f\u7528\u7c7b\u4f3c\u4e8esystemd\u914d\u7f6e\u6587\u4ef6\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5728\u96c6\u7fa4\u5185\u542f\u52a8\u6307\u5b9a\u7684\u670d\u52a1\u5355\u5143\u3002<\/p>\n<p>\u9019\u662fRedis\u7684\u555f\u52d5\u3002<\/p>\n<pre class=\"post-pre\"><code>[Unit]\r\nDescription=Redis\r\nAfter=docker.service\r\nRequires=docker.service\r\n\r\n[Service]\r\nTimeoutStartSec=0\r\nExecStartPre=-\/usr\/bin\/docker kill hubot-redis\r\nExecStartPre=-\/usr\/bin\/docker rm hubot-redis\r\nExecStartPre=\/usr\/bin\/docker pull redis:latest\r\nExecStart=\/usr\/bin\/docker run --name hubot-redis -v \/var\/lib\/redis:\/data redis:latest redis-server --save 600 1\r\nExecStop=\/usr\/bin\/docker stop redis\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u4f60\u770b\u4e00\u4e0b\uff0c\u5c31\u4f1a\u660e\u767d\uff0c\u5728ExecStart\u4e2d\uff0c\u6211\u4eec\u4ee5docker hub\u4e0a\u516c\u5f00\u7684redis\u955c\u50cf\u4e3a\u57fa\u7840\u8fd0\u884c\u4e00\u4e2a\u540d\u4e3ahubot-redis\u7684\u5bb9\u5668\u3002<br \/>\n\u53e6\u5916\uff0c\u5728\u542f\u52a8\u4e4b\u524d\uff0c\u6211\u4eec\u4f1a\u5148\u505c\u6b62\u6b63\u5728\u8fd0\u884c\u7684\u5bb9\u5668\uff0c\u7136\u540e\u62c9\u53d6\u6700\u65b0\u7684\u5bb9\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code>[Unit]\r\nDescription=Hubot\r\nAfter=redis.service\r\nRequires=redis.service\r\n\r\n[Service]\r\nTimeoutStartSec=0\r\nExecStartPre=-\/usr\/bin\/docker kill hubot\r\nExecStartPre=-\/usr\/bin\/docker rm hubot\r\nExecStartPre=\/usr\/bin\/docker pull ymatsuwitter\/hubot\r\nExecStart=\/usr\/bin\/docker run --name hubot --link hubot-redis:redis ymatsuwitter\/hubot\r\nExecStop=\/usr\/bin\/docker stop hubot\r\nUser=core\r\n<\/code><\/pre>\n<p>\u7531\u4e8eHubot\u4f9d\u8d56\u4e8eRedis\uff0c\u6240\u4ee5\u5728Unit\u90e8\u5206\u58f0\u660e\u4e86\u4f9d\u8d56\u5173\u7cfb\u3002<br \/>\n\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u5176\u4ed6\u5730\u65b9\u901a\u8fc7&#8221;&#8211;link hubot-redis:redis&#8221;\u94fe\u63a5\u4e86Redis\uff0c\u8fd9\u4e00\u70b9\u4e0e\u4e4b\u524d\u4e0d\u540c\u3002<\/p>\n<p>\u6211\u4eec\u8bd5\u7740\u90e8\u7f72\u8fd9\u4e24\u4e2a\u670d\u52a1\u6587\u4ef6\u4e00\u6b21\u5b83\u4eec\u51c6\u5907\u597d\u4e86\u3002<\/p>\n<h3>\u5c1d\u8bd5\u4f7f\u7528 fleetctl \u8fdb\u884c\u90e8\u7f72\u3002<\/h3>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u8981\u5148\u767b\u5f55\u5230CoreOS\uff0c\u5e76\u5728\u90a3\u91cc\u914d\u7f6e\u548c\u8fd0\u884cservice\u6587\u4ef6\u3002\u4f46\u662f\uff0c\u5176\u5b9e\u5373\u4f7f\u4e0d\u767b\u5f55\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528fleetctl\u547d\u4ee4\uff0c\u6240\u4ee5\u8ba9\u6211\u4eec\u8bd5\u7740\u67e5\u770b\u4e00\u4e0bfleetctl\u7684\u5e2e\u52a9\u4fe1\u606f\u5427\u3002<\/p>\n<p>\u5728\u90e8\u7f72\u4e4b\u524d\uff0c\u5982\u679c\u4f60\u80fd\u628a\u4e4b\u524d\u63d0\u5230\u7684\u4e24\u4e2aservice\u6587\u4ef6\u901a\u8fc7scp\u547d\u4ee4\u4f20\u8f93\u5230CoreOS\u4e0a\uff0c\u90a3\u5c31\u53ef\u4ee5\u7acb\u5373\u5f00\u59cb\u90e8\u7f72\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ fleetctl load redis.service\r\n$ fleetctl start redis.service\r\n$ fleetctl load hubot.service\r\n$ fleetctl start hubot.service\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u6267\u884c\u8fd9\u4e2a\u5b83\uff0chubot\u5e94\u8be5\u7acb\u5373\u5f00\u59cb\u8fd0\u884c\u3002<br \/>\n\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528fleetctl journal &lt;service\u540d\u79f0&gt;.service\u547d\u4ee4\u6765\u67e5\u770b\u6807\u51c6\u8f93\u51fa\u5e76\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<p>\u5c06\u6765\u90e8\u7f72\u65f6\uff0c\u6784\u5efa\u5e76\u63a8\u9001 Dockerfile\u3002<\/p>\n<pre class=\"post-pre\"><code>$ fleetctl stop hubot.service\r\n$ fleetctl start hubot.service\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u505a\u5b8c\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<h2>\u6700\u540e<\/h2>\n<p>\u8fd9\u6b21\u5728CoreOS\u4e0a\u8fd0\u884chubot\u7684\u611f\u60f3\u662f\uff0c\u7531\u4e8edocker\u65e0\u6cd5\u8fdb\u884c\u8de8\u670d\u52a1\u5668\u7684\u94fe\u63a5\uff0c\u6240\u4ee5\u53ea\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff08\u6bd4\u5982\u5728AWS\u4e0a\u4f7f\u7528\u79c1\u6709DNS\u6216\u4f7f\u7528Consul\uff09\uff0c\u5c31\u4f1a\u662f\u975e\u5e38\u6709\u6f5c\u529b\u7684\u5de5\u5177\u3002\u53ef\u80fd\u5728kubernetes\u4e0a\u4e5f\u53ef\u4ee5\u5b9e\u73b0\uff0c\u4f46\u5982\u679c\u4e0d\u8003\u8651\u540d\u79f0\u89e3\u6790\u76f8\u5173\u95ee\u9898\u7684\u8bdd\uff0cfleet\u4e5f\u662f\u4e00\u4e2a\u975e\u5e38\u7b80\u5355\u7684\u5de5\u5177\uff0c\u8bf7\u52a1\u5fc5\u8bd5\u7528\u4e00\u4e0b\u3002<br \/>\n\u672a\u6765\uff0c\u6211\u4e5f\u4f1a\u516c\u5f00\u4e00\u4e9b\u76f8\u5173\u7684\u8fd0\u7ef4\u7ecf\u9a8c\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u603b\u7ed3 CoreOS\u4e0a\u306bfleet\u306eunit\u3068\u3057\u3066hubot\u3092\u7acb\u3061\u4e0a\u3052\u3066\u307f\u305f &nbsp; \u8907\u6570\u30db\u30b9\u30c8\u9593\u3067\u306eLI [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34048","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528coreos\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386\" \/>\n<meta property=\"og:description\" content=\"\u603b\u7ed3 CoreOS\u4e0a\u306bfleet\u306eunit\u3068\u3057\u3066hubot\u3092\u7acb\u3061\u4e0a\u3052\u3066\u307f\u305f &nbsp; \u8907\u6570\u30db\u30b9\u30c8\u9593\u3067\u306eLI [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528coreos\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-11T01:27:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T22:27:01+00:00\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/\",\"name\":\"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-06-11T01:27:55+00:00\",\"dateModified\":\"2024-04-28T22:27:01+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528coreos\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386\/","og_locale":"zh_CN","og_type":"article","og_title":"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386","og_description":"\u603b\u7ed3 CoreOS\u4e0a\u306bfleet\u306eunit\u3068\u3057\u3066hubot\u3092\u7acb\u3061\u4e0a\u3052\u3066\u307f\u305f &nbsp; \u8907\u6570\u30db\u30b9\u30c8\u9593\u3067\u306eLI [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528coreos\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-06-11T01:27:55+00:00","article_modified_time":"2024-04-28T22:27:01+00:00","author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/","name":"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-06-11T01:27:55+00:00","dateModified":"2024-04-28T22:27:01+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u7528CoreOS\u548cfleet\u90e8\u7f72hubot\u7684\u7ecf\u5386"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8coreos%e5%92%8cfleet%e9%83%a8%e7%bd%b2hubot%e7%9a%84%e7%bb%8f%e5%8e%86\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=34048"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34048\/revisions"}],"predecessor-version":[{"id":83596,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34048\/revisions\/83596"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=34048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=34048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=34048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}