<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Strong It</title>
  
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://strongit.github.io/"/>
  <updated>2016-08-10T03:59:37.194Z</updated>
  <id>http://strongit.github.io/</id>
  
  <author>
    <name>Strong It</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>使用fio测试磁盘I/O性能</title>
    <link href="http://strongit.github.io/2016/07/23/PTE-fio/"/>
    <id>http://strongit.github.io/2016/07/23/PTE-fio/</id>
    <published>2016-07-22T16:00:00.000Z</published>
    <updated>2016-08-10T03:59:37.194Z</updated>
    
    <content type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;fio是测试IOPS的非常好的工具，用来对硬件进行压力测试和验证，支持13种不同的I/O引擎，包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;简单好用的磁盘性能测试工具&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;测试准备&quot;&gt;&lt;a href=&quot;#测试准备&quot; class=&quot;headerlink&quot; title=&quot;测试准备&quot;&gt;&lt;/a&gt;测试准备&lt;/h2&gt;&lt;p&gt;工具：fio- Flexible IO Tester&lt;br&gt;官网：&lt;br&gt;[&lt;a href=&quot;http://freecode.com/projects/fio&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://freecode.com/projects/fio&lt;/a&gt;] (&lt;a href=&quot;http://freecode.com/projects/fio&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://freecode.com/projects/fio&lt;/a&gt;)&lt;br&gt;[&lt;a href=&quot;http://brick.kernel.dk/snaps/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://brick.kernel.dk/snaps/&lt;/a&gt;] (&lt;a href=&quot;http://brick.kernel.dk/snaps/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://brick.kernel.dk/snaps/&lt;/a&gt;)&lt;br&gt;扩展阅读：&lt;br&gt;fio man：[&lt;a href=&quot;http://linux.die.net/man/1/fio&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://linux.die.net/man/1/fio&lt;/a&gt;] (&lt;a href=&quot;http://linux.die.net/man/1/fio&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://linux.die.net/man/1/fio&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：性能测试建议直接通过写裸盘的方式进行测试，会得到较为真实的数据。但直接测试裸盘会破坏文件系统结构，导致数据丢失，请在测试前确认磁盘中数据已备份。&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;p&gt;安装：&lt;br&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#yum安装&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum install libaio-devel fio&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#手动安装&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum install libaio-devel&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;wget http://brick.kernel.dk/snaps/fio-2.2.10.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf fio-2.2.10.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; fio-2.2.10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make $ make install&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id=&quot;fio用法&quot;&gt;&lt;a href=&quot;#fio用法&quot; class=&quot;headerlink&quot; title=&quot;fio用法&quot;&gt;&lt;/a&gt;fio用法&lt;/h2&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;fio分顺序读，随机读，顺序写，随机写，混合随机读写模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;filename=/dev/sdb1   &lt;span class=&quot;comment&quot;&gt;#测试文件名称，通常选择需要测试的盘的data目录&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;direct=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;             &lt;span class=&quot;comment&quot;&gt;#测试过程绕过机器自带的buffer。使测试结果更真实&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rw=randwrite         &lt;span class=&quot;comment&quot;&gt;#测试随机写的I/O&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rw=randrw            &lt;span class=&quot;comment&quot;&gt;#测试随机写和读的I/O&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bs=&lt;span class=&quot;number&quot;&gt;16&lt;/span&gt;k               &lt;span class=&quot;comment&quot;&gt;#单次io的块文件大小为16k&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bsrange=&lt;span class=&quot;number&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;-2048&lt;/span&gt;     &lt;span class=&quot;comment&quot;&gt;#同上，提定数据块的大小范围&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;size=&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;G              &lt;span class=&quot;comment&quot;&gt;#本次的测试文件大小为5g，以每次4k的io进行测试&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;numjobs=&lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;           &lt;span class=&quot;comment&quot;&gt;#本次的测试线程为30个&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;runtime=&lt;span class=&quot;number&quot;&gt;1000&lt;/span&gt;         &lt;span class=&quot;comment&quot;&gt;#测试时间1000秒，如果不写则一直将5g文件分4k每次写完为止&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ioengine=psync       &lt;span class=&quot;comment&quot;&gt;#io引擎使用psync方式&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rwmixwrite=&lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;        &lt;span class=&quot;comment&quot;&gt;#在混合读写的模式下，写占30%&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;group_reporting      &lt;span class=&quot;comment&quot;&gt;#关于显示结果的，汇总每个进程的信息&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;lockmem=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;G           &lt;span class=&quot;comment&quot;&gt;#只使用1g内存进行测试&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;zero_buffers         &lt;span class=&quot;comment&quot;&gt;#用0初始化系统buffer&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;nrfiles=&lt;span class=&quot;number&quot;&gt;8&lt;/span&gt;            &lt;span class=&quot;comment&quot;&gt;#每个进程生成文件的数量&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;实例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#顺序读&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=&lt;span class=&quot;built_in&quot;&gt;read&lt;/span&gt; -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#顺序写&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#随机读&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#随机写&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#混合随机读写&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;也可以添加到配置文件里测试：&lt;br&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#复制下面的配置内容，将directory=/path/to/test修改为你测试硬盘挂载目录的地址，并另存为fio.conf&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[global]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ioengine=libaio&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;direct=1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;thread=1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;norandommap=1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;randrepeat=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;runtime=60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ramp_time=6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;size=1g&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;directory=/path/to/&lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[&lt;span class=&quot;built_in&quot;&gt;read&lt;/span&gt;4k-rand]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;stonewall&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;group_reporting&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bs=4k&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rw=randread&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;numjobs=8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;iodepth=32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[&lt;span class=&quot;built_in&quot;&gt;read&lt;/span&gt;64k-seq]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;stonewall&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;group_reporting&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bs=64k&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rw=&lt;span class=&quot;built_in&quot;&gt;read&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;numjobs=4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;iodepth=8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[write4k-rand]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;stonewall&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;group_reporting&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bs=4k&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rw=randwrite&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;numjobs=2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;iodepth=4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[write64k-seq]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;stonewall&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;group_reporting&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bs=64k&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rw=write&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;numjobs=2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;iodepth=4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#测试&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;fio fio.conf&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;测试结果主要关注bw和iops结果&lt;br&gt;bw：磁盘的吞吐量，这个是顺序读写考察的重点&lt;br&gt;iops：磁盘的每秒读写次数，这个是随机读写考察的重点&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;硬盘性能指标&quot;&gt;&lt;a href=&quot;#硬盘性能指标&quot; class=&quot;headerlink&quot; title=&quot;硬盘性能指标&quot;&gt;&lt;/a&gt;硬盘性能指标&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;顺序读写&lt;/strong&gt; （吞吐量，常用单位为MB/s）：文件在硬盘上存储位置是连续的。&lt;br&gt;适用场景：大文件拷贝（比如视频音乐）。速度即使很高，对数据库性能也没有参考价值。&lt;br&gt;&lt;strong&gt;4K随机读写&lt;/strong&gt; （IOPS，常用单位为次）：在硬盘上随机位置读写数据，每次4KB。&lt;br&gt;适用场景：操作系统运行、软件运行、数据库。&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;fio是测试IOPS的非常好的工具，用来对硬件进行压力测试和验证，支持13种不同的I/O引擎，包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;简单好用的磁盘性能测试工具&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;测试准备&quot;&gt;&lt;a href=&quot;#测试准备&quot; class=&quot;headerlink&quot; title=&quot;测试准备&quot;&gt;&lt;/a&gt;测试准备&lt;/h2&gt;&lt;p&gt;工具：fio- Flexible IO Tester&lt;br&gt;官网：&lt;br&gt;[&lt;a href=&quot;http://freecode.com/projects/fio&quot;&gt;http://freecode.com/projects/fio&lt;/a&gt;] (&lt;a href=&quot;http://freecode.com/projects/fio&quot;&gt;http://freecode.com/projects/fio&lt;/a&gt;)&lt;br&gt;[&lt;a href=&quot;http://brick.kernel.dk/snaps/&quot;&gt;http://brick.kernel.dk/snaps/&lt;/a&gt;] (&lt;a href=&quot;http://brick.kernel.dk/snaps/&quot;&gt;http://brick.kernel.dk/snaps/&lt;/a&gt;)&lt;br&gt;扩展阅读：&lt;br&gt;fio man：[&lt;a href=&quot;http://linux.die.net/man/1/fio&quot;&gt;http://linux.die.net/man/1/fio&lt;/a&gt;] (&lt;a href=&quot;http://linux.die.net/man/1/fio&quot;&gt;http://linux.die.net/man/1/fio&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：性能测试建议直接通过写裸盘的方式进行测试，会得到较为真实的数据。但直接测试裸盘会破坏文件系统结构，导致数据丢失，请在测试前确认磁盘中数据已备份。&lt;/p&gt;
    
    </summary>
    
    
      <category term="PTE" scheme="http://strongit.github.io/tags/PTE/"/>
    
  </entry>
  
  <entry>
    <title>爬虫利器之BeautifulSoup4</title>
    <link href="http://strongit.github.io/2016/07/15/spider-beautifulsoup4/"/>
    <id>http://strongit.github.io/2016/07/15/spider-beautifulsoup4/</id>
    <published>2016-07-14T16:00:00.000Z</published>
    <updated>2016-07-21T09:20:01.328Z</updated>
    
    <content type="html">&lt;p&gt;Beautiful Soup是python的一个库，最主要的功能是从网页抓取数据。官方解释如下：&lt;br&gt;&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱，通过解析文档为用户提供需要抓取的数据，因为简单，所以不需要多少代码就可以写出一个完整的应用程序。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Beautiful Soup自动将输入文档转换为Unicode编码，输出文档转换为utf&lt;span class=&quot;number&quot;&gt;-8&lt;/span&gt;编码。你不需要考虑编码方式，除非文档没有指定一个编码方式，这时，Beautiful Soup就不能自动识别编码方式了。然后，你仅仅需要说明一下原始编码方式就可以了。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Beautiful Soup已成为和lxml、html6lib一样出色的python解释器，为用户灵活地提供不同的解析策略或强劲的速度。&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;语法：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;| Python标准库     |     BeautifulSoup(markup, “html.parser”)| Python的内置标准库；执行速度适中；文档容错能力强     | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差&lt;/li&gt;
&lt;li&gt;| lxml HTML 解析器        |   BeautifulSoup(markup, “lxml”)   |   速度快；文档容错能力强   | 需要安装C语言库&lt;/li&gt;
&lt;li&gt;| lxml XML 解析器        |    BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”)    |  速度快；唯一支持XML的解析器  | 需要安装C语言库&lt;/li&gt;
&lt;li&gt;| html5lib  |  BeautifulSoup(markup, “html5lib”)   |  最好的容错性；以浏览器的方式解析文档；生成HTML5格式的文档 |  速度慢；不依赖外部扩展  |&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;h3 id=&quot;soup-select-选择标签问题&quot;&gt;&lt;a href=&quot;#soup-select-选择标签问题&quot; class=&quot;headerlink&quot; title=&quot;soup.select ( ) 选择标签问题&quot;&gt;&lt;/a&gt;&lt;strong&gt;soup.select ( ) 选择标签问题&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;代码原型是这样的：&lt;/p&gt;
&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; requests&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;from&lt;/span&gt; bs4 &lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; BeautifulSoup&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;web_data = requests.get(&lt;span class=&quot;string&quot;&gt;&#39;url&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;soup = BeautifulSoup(web_data.text,&lt;span class=&quot;string&quot;&gt;&#39;lxml&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;data = soup.select(&lt;span class=&quot;string&quot;&gt;&#39;选择内容&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;print&lt;/span&gt; (data)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;url: &lt;a href=&quot;http://www.meihua.info/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://www.meihua.info/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;要截取一篇文章的以下字段：&lt;/li&gt;
&lt;li&gt;日期（今天）&lt;/li&gt;
&lt;li&gt;阅读量（阅读65）&lt;/li&gt;
&lt;li&gt;类型（业界）&lt;/li&gt;
&lt;li&gt;文章标签（微信，阅读量）&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;那么在浏览器中鼠标右键点击审查 -&amp;gt; 找到字段的具体代码 -&amp;gt; 右键选择Copy -&amp;gt; Copy selector，复制的内容如下：&lt;br&gt;&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;body &amp;gt; div.main-frame &amp;gt; div.news-list-list &amp;gt; ul &amp;gt; li:nth-child(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;) &amp;gt; div.time &amp;gt; span &amp;gt; span:nth-child(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;如果直接那这个作为select ( )的参数是不行的，li:nth-child(1)要去掉，这是CSS的高级选择器，而且select ( )不支持这种类型，去掉就行。然后还要查看html结构的层级（span）。&lt;/p&gt;
&lt;p&gt;以下是我修改的select ( )参数内容：&lt;/p&gt;
&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;body &amp;gt; div.main-frame &amp;gt; div.news-list-list &amp;gt; ul.list.news-list &amp;gt; li &amp;gt; div.time &amp;gt; span.desc-font.date &amp;gt; span&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;运行代码试一下：&lt;/p&gt;
&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; requests&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;from&lt;/span&gt; bs4 &lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; BeautifulSoup &lt;span class=&quot;keyword&quot;&gt;as&lt;/span&gt; bs&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;web_data = requests.get(&lt;span class=&quot;string&quot;&gt;&#39;http://www.meihua.info/?page=1&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;soup = bs(web_data.text,&lt;span class=&quot;string&quot;&gt;&#39;lxml&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;post_date = soup.select(&lt;span class=&quot;string&quot;&gt;&#39;body &amp;gt; div.main-frame &amp;gt; div.news-list-list &amp;gt; ul.list.news-list &amp;gt; li &amp;gt; div.time &amp;gt; span.desc-font.date &amp;gt; span&#39;&lt;/span&gt;)[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;print&lt;/span&gt; (post_date.get_text())&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;--输出结果--&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;今天&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;编码输出问题&quot;&gt;&lt;a href=&quot;#编码输出问题&quot; class=&quot;headerlink&quot; title=&quot;编码输出问题&quot;&gt;&lt;/a&gt;&lt;strong&gt;编码输出问题&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;在抓取这个网页 &lt;a href=&quot;http://www.ikanchai.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://www.ikanchai.com/&lt;/a&gt; 的时候，出现乱码，如下：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;import requests&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;from bs4 import BeautifulSoup as bs&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;web_data = requests.get(&#39;http://www.ikanchai.com/&#39;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;soup = bs(web_data.text,&#39;lxml&#39;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dates = soup.select(&#39;div.sort.channel.clearfix &amp;gt; ul &amp;gt; li &amp;gt; a&#39;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;for data in dates:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    print (data)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-----输出结果-----&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;a href=&quot;http://www.ikanchai.com/view/&quot;&amp;gt;è§‚ç‚¹&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;a href=&quot;http://www.ikanchai.com/start/&quot;&amp;gt;åˆ›æŠ•&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;a href=&quot;http://www.ikanchai.com/evaluation/&quot;&amp;gt;è¯„æµ‹&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;a href=&quot;http://www.ikanchai.com/vr/&quot;&amp;gt;VR&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;a href=&quot;http://www.ikanchai.com/push/&quot;&amp;gt;ä¸“æ &amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;a href=&quot;http://app.ikanchai.com/roll.php&quot;&amp;gt;åŠ¨æ€&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;编码问题，加一句web_data.encoding = ‘utf-8’即可以了，具体的编码选择在html文档开头有说明。&lt;/p&gt;
&lt;h3 id=&quot;get-text和get-的使用&quot;&gt;&lt;a href=&quot;#get-text和get-的使用&quot; class=&quot;headerlink&quot; title=&quot;get_text和get()的使用&quot;&gt;&lt;/a&gt;get_text和get()的使用&lt;/h3&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;get_text()，是返回选择的标签文本，具体可以参考文档：&lt;a href=&quot;http://beautifulsoup.readthedocs.io/zh_CN/latest/#get-text&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://beautifulsoup.readthedocs.io/zh_CN/latest/#get-text&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;get(‘’)，这是选择标签中的属性(也就是里面有=符号的左边)，比如&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;li&amp;gt;&amp;lt;a class=&quot;reference internal&quot; href=&quot;#next-siblings-previous-siblings&quot;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;中，选择li &amp;gt; a这个标签之后，则可以用get(‘href’)获取其中的链接。&lt;/p&gt;
&lt;h3 id=&quot;findall-和select-的区别&quot;&gt;&lt;a href=&quot;#findall-和select-的区别&quot; class=&quot;headerlink&quot; title=&quot;findall()和select()的区别&quot;&gt;&lt;/a&gt;&lt;strong&gt;findall()和select()的区别&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;待续&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Beautiful Soup是python的一个库，最主要的功能是从网页抓取数据。官方解释如下：&lt;br&gt;&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱，通过解析文档为用户提供需要抓取的数据，因为简单，所以不需要多少代码就可以写出一个完整的应用程序。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Beautiful Soup自动将输入文档转换为Unicode编码，输出文档转换为utf&lt;span class=&quot;number&quot;&gt;-8&lt;/span&gt;编码。你不需要考虑编码方式，除非文档没有指定一个编码方式，这时，Beautiful Soup就不能自动识别编码方式了。然后，你仅仅需要说明一下原始编码方式就可以了。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Beautiful Soup已成为和lxml、html6lib一样出色的python解释器，为用户灵活地提供不同的解析策略或强劲的速度。&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;语法：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;| Python标准库     |     BeautifulSoup(markup, “html.parser”)| Python的内置标准库；执行速度适中；文档容错能力强     | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差&lt;/li&gt;
&lt;li&gt;| lxml HTML 解析器        |   BeautifulSoup(markup, “lxml”)   |   速度快；文档容错能力强   | 需要安装C语言库&lt;/li&gt;
&lt;li&gt;| lxml XML 解析器        |    BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”)    |  速度快；唯一支持XML的解析器  | 需要安装C语言库&lt;/li&gt;
&lt;li&gt;| html5lib  |  BeautifulSoup(markup, “html5lib”)   |  最好的容错性；以浏览器的方式解析文档；生成HTML5格式的文档 |  速度慢；不依赖外部扩展  |&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
    
    </summary>
    
    
      <category term="爬虫" scheme="http://strongit.github.io/tags/%E7%88%AC%E8%99%AB/"/>
    
  </entry>
  
  <entry>
    <title>Ansible Playbook应用</title>
    <link href="http://strongit.github.io/2016/07/03/ansible-sample-playbook/"/>
    <id>http://strongit.github.io/2016/07/03/ansible-sample-playbook/</id>
    <published>2016-07-02T16:00:00.000Z</published>
    <updated>2016-07-21T09:21:47.030Z</updated>
    
    <content type="html">&lt;p&gt;Playbooks 与 adhoc 相比,是一种完全不同的运用 ansible 的方式,是非常之强大的.简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.我们使用 adhoc 时,主要是使用 /usr/bin/ansible 程序执行任务.而使用 playbooks 时,更多是将之放入源码控制之中,用之推送你的配置或是用于确认你的远程系统的配置是否符合配置规范.&lt;/p&gt;
&lt;h3 id=&quot;目录结构&quot;&gt;&lt;a href=&quot;#目录结构&quot; class=&quot;headerlink&quot; title=&quot;目录结构&quot;&gt;&lt;/a&gt;&lt;strong&gt;目录结构&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;以下为playbook标准的目录结构，以不同级别目录层级的文件进行拆分。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@localhost playbooks]&lt;span class=&quot;comment&quot;&gt;# tree .&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── playbooks.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── roles&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   ├── common&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── files&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── handlers&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── meta&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── vars&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   ├── mysql&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   ├── nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── handlers&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   └── php-fpm&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│       └── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│       └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;└── site.yml&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;p&gt;site.yml，playbook主要配置文件，例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- name: Install web&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  hosts: webserver&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  user: root&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  roles:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    - common&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    - nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    - mysql&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;../tasks/main.yml，任务文件，例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- name: Install nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  yum: name=nginx state=present&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  notify: start nginx&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;../handlers/main.yml，处理程序文件，例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- name: start nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  service: name=nginx state=started&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;../vars/main.yml，变量文件，例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ntpserver: time.windows.com&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;../templates/，用于template调用，例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- name: copy configure&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  template: src=nginx.conf  dest=/etc/nginx/nginx.conf&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;../files/，其内的文件无需路径，直接引用，例：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- name: include files&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  - include: nginx.yml&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;条件与循环&quot;&gt;&lt;a href=&quot;#条件与循环&quot; class=&quot;headerlink&quot; title=&quot;条件与循环&quot;&gt;&lt;/a&gt;&lt;strong&gt;条件与循环&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;如果系统为redhat则重启&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;tasks:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  - name: reboot redhat host&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;built_in&quot;&gt;command&lt;/span&gt;: /usr/sbin/reboot&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    when: ansible_os_family == &lt;span class=&quot;string&quot;&gt;&quot;RedHat&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;如果result为成功状态则重启&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;tasks:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  - &lt;span class=&quot;built_in&quot;&gt;command&lt;/span&gt;: /bin/&lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    register: result&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ignore_errors: True&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  - &lt;span class=&quot;built_in&quot;&gt;command&lt;/span&gt;: /usr/sbin/reboot&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    when: result|success&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;循环语句基础&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;tasks:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  - name: install LNMP&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    yum: name=&amp;#123;&amp;#123; item &amp;#125;&amp;#125; state=present&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    with_items:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       - nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       - mysql-server&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       - php-fpm&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;循环还支持列表，使用with_flattened语句。 变量文件&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;packages_LNMP:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  - [ &lt;span class=&quot;string&quot;&gt;&#39;nginx&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;mysql-server&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;php-fpm&#39;&lt;/span&gt; ]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;引用&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;- name: Install LNMP&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  yum: name=&amp;#123;&amp;#123; item &amp;#125;&amp;#125; state=present&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  with_flattened:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     - packages_LNMP&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;简单示例&quot;&gt;&lt;a href=&quot;#简单示例&quot; class=&quot;headerlink&quot; title=&quot;简单示例&quot;&gt;&lt;/a&gt;&lt;strong&gt;简单示例&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;nginx安装的playbook示例&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;---&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;- hosts: webserver &lt;span class=&quot;comment&quot;&gt;#指定主机或组&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tasks:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; - name: Install nginx epel&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;built_in&quot;&gt;command&lt;/span&gt;: /usr/bin/rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; - name: Install nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   yum: name=nginx state=present&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   notify:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   - start nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; - name: configure nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   template: src=letong.conf dest=/etc/nginx/conf.d/ &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; - name: configure www dir&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;built_in&quot;&gt;command&lt;/span&gt;: cp -r letong-web/ /www/ &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; handlers:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   - name: start nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     service: name=nginx state=started&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;执行测试&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@localhost playbooks]&lt;span class=&quot;comment&quot;&gt;# ansible-playbook playbooks.yml &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;PLAY [webserver] ************************************************************** &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;GATHERING FACTS *************************************************************** &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ok: [192.168.1.68]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;TASK: [Install nginx] ********************************************************* &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;changed: [192.168.1.68]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;NOTIFIED: [start nginx] ******************************************************* &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;changed: [192.168.1.68]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;PLAY RECAP ******************************************************************** &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.68               : ok=3    changed=2    unreachable=0   failed=0&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;访问测试&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@localhost playbooks]&lt;span class=&quot;comment&quot;&gt;# curl -I http://192.168.1.68&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;HTTP/1.1 200 OK&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Server: nginx/1.6.2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Date: Thu, 11 Dec 2015 05:00:13 GMT&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Content-Type: text/html&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Content-Length: 3700&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Last-Modified: Wed, 22 Oct 2015 19:50:12 GMT&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Connection: keep-alive&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ETag: &lt;span class=&quot;string&quot;&gt;&quot;54480a74-e74&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Accept-Ranges: bytes&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Playbooks 与 adhoc 相比,是一种完全不同的运用 ansible 的方式,是非常之强大的.简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.我们使用 adhoc 时,主要是使用 /usr/bin/ansible 程序执行任务.而使用 playbooks 时,更多是将之放入源码控制之中,用之推送你的配置或是用于确认你的远程系统的配置是否符合配置规范.&lt;/p&gt;
&lt;h3 id=&quot;目录结构&quot;&gt;&lt;a href=&quot;#目录结构&quot; class=&quot;headerlink&quot; title=&quot;目录结构&quot;&gt;&lt;/a&gt;&lt;strong&gt;目录结构&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;以下为playbook标准的目录结构，以不同级别目录层级的文件进行拆分。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@localhost playbooks]&lt;span class=&quot;comment&quot;&gt;# tree .&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── playbooks.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── roles&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   ├── common&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── files&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── handlers&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── meta&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── vars&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   ├── mysql&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   ├── nginx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   ├── handlers&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   │   └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│   └── php-fpm&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│       └── tasks&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;│       └── main.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;└── site.yml&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="Ansible" scheme="http://strongit.github.io/tags/Ansible/"/>
    
  </entry>
  
  <entry>
    <title>Ansible简单配置篇</title>
    <link href="http://strongit.github.io/2016/07/01/ansible-sample-usage/"/>
    <id>http://strongit.github.io/2016/07/01/ansible-sample-usage/</id>
    <published>2016-06-30T16:00:00.000Z</published>
    <updated>2016-07-21T09:34:06.456Z</updated>
    
    <content type="html">&lt;p&gt;ansible自动化工具只需要在一台机器上安装，其他机器不需要安装任何东西，这就是ansible比puppet, saltstck方便的地方。ansible的特点有哪些呢？下面为你逐个介绍：&lt;br&gt;(1)、轻量级，无需在客户端安装agent，更新时，只需在操作机上进行一次更新即可；&lt;br&gt;(2)、批量任务执行可以写成脚本，而且不用分发到远程就可以执行；&lt;br&gt;(3)、使用python编写，维护更简单；&lt;br&gt;(4)、基于SSH工作；&lt;br&gt;(5)、支持文件同步并且对修改之前的文件进行备份，支持回滚；&lt;/p&gt;
&lt;p&gt;官方原文档: &lt;a href=&quot;https://docs.ansible.com/ansible/index.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;https://docs.ansible.com/ansible/index.html&lt;/a&gt;&lt;br&gt;中文翻译版：&lt;a href=&quot;http://www.ansible.com.cn/index.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://www.ansible.com.cn/index.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;简单示例&quot;&gt;&lt;a href=&quot;#简单示例&quot; class=&quot;headerlink&quot; title=&quot;简单示例&quot;&gt;&lt;/a&gt;&lt;strong&gt;简单示例&lt;/strong&gt;&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;vi /etc/ansible/hosts&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[ts]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.106&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;执行命令 ansible ts -m ping&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.106 | success &amp;gt;&amp;gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;changed&quot;&lt;/span&gt;: &lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;ping&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;pong&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;h3 id=&quot;主机或组规则&quot;&gt;&lt;a href=&quot;#主机或组规则&quot; class=&quot;headerlink&quot; title=&quot;主机或组规则&quot;&gt;&lt;/a&gt;&lt;strong&gt;主机或组规则&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;目录 /etc/ansible/hosts&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Ex 1: 未分组的主机.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;green.example.com&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;blue.example.com&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.100.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.100.10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;＃自定义webservers组&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[webservers]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;alpha.example.org&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;beta.example.org&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.100&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.110&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#使用正则表达式&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;www[001:006].example.com&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;分离主机与组的特定数据，Ansible支持将/etc/ansible/hosts定义的主机名与变量单独剥离出来放到指定存放文件中，以YAML格式保存&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;/etc/ansible/group_vars/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;/etc/ansible/host_vars/&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;模块应用&quot;&gt;&lt;a href=&quot;#模块应用&quot; class=&quot;headerlink&quot; title=&quot;模块应用&quot;&gt;&lt;/a&gt;&lt;strong&gt;模块应用&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;远程命令模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m &lt;span class=&quot;built_in&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;ls /&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m script &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;ats.sh start&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m shell &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;ats.sh&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;复制模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m copy &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;src=/1.txt dest=/data/  owner=root  group=root  mode=777&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;查看文件状态模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m &lt;span class=&quot;built_in&quot;&gt;stat&lt;/span&gt; &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;path=/data/1.txt&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;URL下载模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m get_url &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;url=http://letong.me   dest=/data/  mode=777  force=yes&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;yum模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m yum &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;name=git state=latest&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;service模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m service &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;name=httpd state=restarted&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;user模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m user &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;name=letong comment=&#39;Hello letong&#39; &quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m user &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;name=letong state=absent  remove=yes&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;mount模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible dbserver -m mount &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;name=/data  src=/dev/sdb1  fstype=ext4  opts=ro  state=present&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;cron模块&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ansible ts -m cron &lt;span class=&quot;_&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;name=&#39;ls dir&#39;  hour=&#39;5,2&#39;  job=&#39;ls -l&#39;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;ansible自动化工具只需要在一台机器上安装，其他机器不需要安装任何东西，这就是ansible比puppet, saltstck方便的地方。ansible的特点有哪些呢？下面为你逐个介绍：&lt;br&gt;(1)、轻量级，无需在客户端安装agent，更新时，只需在操作机上进行一次更新即可；&lt;br&gt;(2)、批量任务执行可以写成脚本，而且不用分发到远程就可以执行；&lt;br&gt;(3)、使用python编写，维护更简单；&lt;br&gt;(4)、基于SSH工作；&lt;br&gt;(5)、支持文件同步并且对修改之前的文件进行备份，支持回滚；&lt;/p&gt;
&lt;p&gt;官方原文档: &lt;a href=&quot;https://docs.ansible.com/ansible/index.html&quot;&gt;https://docs.ansible.com/ansible/index.html&lt;/a&gt;&lt;br&gt;中文翻译版：&lt;a href=&quot;http://www.ansible.com.cn/index.html&quot;&gt;http://www.ansible.com.cn/index.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;简单示例&quot;&gt;&lt;a href=&quot;#简单示例&quot; class=&quot;headerlink&quot; title=&quot;简单示例&quot;&gt;&lt;/a&gt;&lt;strong&gt;简单示例&lt;/strong&gt;&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;vi /etc/ansible/hosts&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[ts]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.106&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;执行命令 ansible ts -m ping&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192.168.1.106 | success &amp;gt;&amp;gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;changed&quot;&lt;/span&gt;: &lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;ping&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;pong&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="Ansible" scheme="http://strongit.github.io/tags/Ansible/"/>
    
  </entry>
  
  <entry>
    <title>Node.js原子性操作MongoDB</title>
    <link href="http://strongit.github.io/2016/06/21/mongodb-howto-nodejs-atom-op-mongodb/"/>
    <id>http://strongit.github.io/2016/06/21/mongodb-howto-nodejs-atom-op-mongodb/</id>
    <published>2016-06-20T16:00:00.000Z</published>
    <updated>2016-07-08T10:54:03.575Z</updated>
    
    <content type="html">&lt;p&gt;假设基础数据为:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
{
    &quot;name&quot; : &quot;cb&quot;,
    &quot;data&quot; : 0,
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;有时候为了充分利用多核,会同时开启多个node进程,但是若部分代码若涉及到操作mongodb就会有下面现象.&lt;br&gt;“理想情况下”,多个进程执行完后得数据为:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
{
    &quot;name&quot; : &quot;cb&quot;,
    &quot;data&quot; : 6000,
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;其实不然 !&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我们看看获得结果是怎么样的.&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
co(function* () {
    for (var i=0; i&lt; 3000; i++) {
        var getTest = yield mongoCtest.findOne({&quot;name&quot;:&quot;cb&quot;}, {&quot;fields&quot;:{&quot;_id&quot;:0}});
        getTest.data =  getTest.data+1;
        console.log(getTest);
        yield mongoCtest.update({&quot;name&quot;:&quot;good&quot;}, {&quot;$set&quot;:getTest});
    }
})();
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;上面的程序同时开两个,多个进程同时操作一个数据.&lt;br&gt;可能结果会是:&lt;br&gt;&lt;img src=&quot;http://ww1.sinaimg.cn/large/744e593bgw1enhm3w6525j20wo0n6459.jpg&quot; alt=&quot;多进程操作Mongo&quot;&gt;&lt;/p&gt;
&lt;p&gt;我们知道Mongo是不支持事务的,如果你能容忍上面的弱一致性,那么没问题.但是如果你不能容忍，要么考虑MySql关系型数据库,要么自己解决事务问题.&lt;/p&gt;
&lt;p&gt;下面我来说下基于Mongo怎么解决事务问题.&lt;br&gt;我们需要对每个数据加一个version来控制.直接上代码:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
co(function* () {
    for (var i=0; i&lt; 3000; i++) {
        while (1) {
            var getTest = yield mongoCtest.findOne({&quot;name&quot;:&quot;cb&quot;}, {&quot;fields&quot;:{&quot;_id&quot;:0}});
            getTest.data =  getTest.data+1;
            var originalVer = getTest.ver;
            getTest.ver = getTest.ver+1;
            console.log(getTest);
            var ret = yield mongoCtest.update({&quot;name&quot;:&quot;cb&quot;, &quot;ver&quot;:originalVer}, {&quot;$set&quot;:getTest});
            if (ret)  break;
        }
    }
})();
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;下面就是我们想要的结果:)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ww1.sinaimg.cn/large/744e593bgw1enhm5tgq6qj20xt0njqbo.jpg&quot; alt=&quot;原子性控制&quot;&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;假设基础数据为:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
{
    &quot;name&quot; : &quot;cb&quot;,
    &quot;data&quot; : 0,
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;有时候为了充分利用多核,会同时开启多个node进程,但是若部分代码若涉及到操作mongodb就会有下面现象.&lt;br&gt;“理想情况下”,多个进程执行完后得数据为:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
{
    &quot;name&quot; : &quot;cb&quot;,
    &quot;data&quot; : 6000,
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;其实不然 !&lt;br&gt;
    
    </summary>
    
    
      <category term="MongoDB" scheme="http://strongit.github.io/tags/MongoDB/"/>
    
  </entry>
  
  <entry>
    <title>MongoDB Map-Reduce 原理及提速</title>
    <link href="http://strongit.github.io/2016/06/18/mongodb-mongodb-map-reduce-increase-speed/"/>
    <id>http://strongit.github.io/2016/06/18/mongodb-mongodb-map-reduce-increase-speed/</id>
    <published>2016-06-17T16:00:00.000Z</published>
    <updated>2016-07-21T06:32:44.003Z</updated>
    
    <content type="html">&lt;p&gt;想要优化Map-reduce就要深入理解其原理.&lt;/p&gt;
&lt;p&gt;Map-Reduce基本原理请见下图:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ww4.sinaimg.cn/large/744e593bgw1eodjvvjkrij20r80jgdj7.jpg&quot; alt=&quot;Map-Reduce基本原理&quot;&gt;&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;p&gt;整个数据处理流程可以参见官方上图,先对要进行处理的数据进行Query,然后针对Query的数据进行map,最后针对map的数据进行reduce.&lt;/p&gt;
&lt;p&gt;简单了解之后,我们这里取一个例子熟悉下整个过程:&lt;/p&gt;
&lt;p&gt;数据基本格式为:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;js&quot;&gt;
/* 0 */
{
    &quot;code&quot; : &quot;A&quot;,
    &quot;uid&quot; : &quot;id_1&quot;,
    &quot;count&quot; : 1
}

/* 1 */
{
    &quot;code&quot; : &quot;A&quot;,
    &quot;uid&quot; : &quot;id_1&quot;,
    &quot;count&quot; : 1
}

/* 2 */
{
    &quot;code&quot; : &quot;B&quot;,
    &quot;uid&quot; : &quot;id_1&quot;,
    &quot;count&quot; : 1
}

/* 3 */
{
    &quot;code&quot; : &quot;B&quot;,
    &quot;uid&quot; : &quot;id_2&quot;,
    &quot;count&quot; : 2
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;目的:根据uid计算出count的和 且 这个合涉及到哪些code.&lt;/p&gt;
&lt;p&gt;很快就可以写出Map和Reduce函数:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
var map = function() {
    emit(this.uid, {&quot;code&quot;:this.code || &quot;&quot;, count:this.count || 1});
};

var reduce = function(key, values) {
    var result = {code:{}, count:0};
    values.forEach(function(val) {
                result.code[val.code] = 1;
                result.count += val.count;
                });
    return result;
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;结果为:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
/* 0 */
{
    &quot;_id&quot; : &quot;id_1&quot;,
    &quot;value&quot; : {
        &quot;code&quot; : {
            &quot;A&quot; : 1,
            &quot;B&quot; : 1
        },
        &quot;count&quot; : 3
    }
}

/* 1 */
{
    &quot;_id&quot; : &quot;id_2&quot;,
    &quot;value&quot; : {
        &quot;code&quot; : &quot;B&quot;,
        &quot;count&quot; : 2
    }
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;这次我省去了query的过程,直接进行Map和Reduce,我们来拆解下过程:&lt;/p&gt;
&lt;p&gt;首先,MongoDB会扫描整个数据表(这里省去Query)遍历所有documents,对于每个docuemnt都会根据key(uid)进行map存储.&lt;/p&gt;
&lt;p&gt;其次,这个时候MongoDB会对记录的size进行检查( mongod checks every 100 records that the size of the map is not over 50KB, if so it runs reduce on ALL current keys. If size of map is still over 100KB, it dumps all current documents to disk in an “incremental” collection.)&lt;/p&gt;
&lt;p&gt;最后根据map的数据进行reduce操作.&lt;/p&gt;
&lt;p&gt;好,上面三点是大概的过程,对于Mapping过程,上面实例中会进行&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
{&quot;id_1&quot;, values:[{&quot;code&quot;:&quot;A&quot;, &quot;count&quot;:1}, {&quot;code&quot;:&quot;A&quot;, &quot;count&quot;:1}, {&quot;code&quot;:&quot;B&quot;, &quot;count&quot;:1}}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;这样的Emit操作.这点是需要注意的.然后以这样得方式传入到Reduce进行处理,所以Reduce必须对values进行forEach处理.&lt;/p&gt;
&lt;p&gt;通过上面这个过程,还有一点要非常注意:如果有很多文档,而且这些文档的分布是非常随机的,当内存比较小时,MongoDB会采取把这些数据存在一个inc自增的文档中.&lt;/p&gt;
&lt;p&gt;比方说:我有A, B, C三个key, 每个key有100个, 但是这些key都是随机分布的 比如A…B…A…B..C…A..B..C..当我要先对A进行Emit时需要把所有是A的key的document获取出来,那么这个过程当内存很小时 需要把大部分得document存储到磁盘上.然后内存和磁盘一直交换数据,至到把A全部找出为止(期间每在内存中操作的部分A会先Emit出去).&lt;/p&gt;
&lt;p&gt;这种操作肯定很耗时, 如果我们对key进行索引且排好序,那么排好序的A就会大部分在内存中,减少了内存和磁盘的切换次数.&lt;/p&gt;
&lt;p&gt;所以对大数据加排序是必须要有的.这个细节至少可以提高很多倍得处理速度.&lt;/p&gt;
&lt;p&gt;基本原理先说到这,还有更多实践干货留着下次说.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;想要优化Map-reduce就要深入理解其原理.&lt;/p&gt;
&lt;p&gt;Map-Reduce基本原理请见下图:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ww4.sinaimg.cn/large/744e593bgw1eodjvvjkrij20r80jgdj7.jpg&quot; alt=&quot;Map-Reduce基本原理&quot;&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="MongoDB" scheme="http://strongit.github.io/tags/MongoDB/"/>
    
  </entry>
  
  <entry>
    <title>MONGODB的BASIC INDEXES 和 COMPOUND INDEXES 研究</title>
    <link href="http://strongit.github.io/2016/06/12/mongodb-mongodb-basic-indexes-compound-indexes/"/>
    <id>http://strongit.github.io/2016/06/12/mongodb-mongodb-basic-indexes-compound-indexes/</id>
    <published>2016-06-11T17:18:41.000Z</published>
    <updated>2016-07-08T10:51:09.166Z</updated>
    
    <content type="html">&lt;p&gt;前几天看到一个关于 MongoDB 深入索引的PPT&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/mongodb/mongodb-indexing-the-details&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;MongoDB Indexing: The Details&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;仔细的从头看到尾, 里面有个关于Compound Indexes的Range and Equality的讲解,在ppt第129页,重新回顾下这个例子.向一个collection中插入 9 条数据,像下面这样:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
&gt; db.good.find()
{ &quot;_id&quot; : ObjectId(&quot;4e8d629d8ad8bdf2ed6c1990&quot;), &quot;x&quot; : 1, &quot;y&quot; : &quot;b&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62a38ad8bdf2ed6c1991&quot;), &quot;x&quot; : 3, &quot;y&quot; : &quot;d&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62ad8ad8bdf2ed6c1992&quot;), &quot;x&quot; : 4, &quot;y&quot; : &quot;g&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62b28ad8bdf2ed6c1993&quot;), &quot;x&quot; : 5, &quot;y&quot; : &quot;c&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62ba8ad8bdf2ed6c1994&quot;), &quot;x&quot; : 6, &quot;y&quot; : &quot;a&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62c18ad8bdf2ed6c1995&quot;), &quot;x&quot; : 7, &quot;y&quot; : &quot;e&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62ce8ad8bdf2ed6c1996&quot;), &quot;x&quot; : 8, &quot;y&quot; : &quot;c&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62d38ad8bdf2ed6c1997&quot;), &quot;x&quot; : 9, &quot;y&quot; : &quot;f&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d719a6cee6416a5a75a43&quot;), &quot;x&quot; : 5, &quot;y&quot; : &quot;d&quot; }
&lt;/code&gt;
&lt;/pre&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

然后给x 和 y进行联合索引
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
db.good.ensureIndex({x:1,y:1})
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;我们来进行这样的查找&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
&gt; db.good.find({x:{$gte:4}, y:’c’}).explain()
{
    &quot;cursor&quot; : &quot;BtreeCursor x_1_y_1&quot;,
        &quot;nscanned&quot; : 7,
        &quot;nscannedObjects&quot; : 2,
        &quot;n&quot; : 2,
        &quot;millis&quot; : 0,
        &quot;nYields&quot; : 0,
        &quot;nChunkSkips&quot; : 0,
        &quot;isMultiKey&quot; : false,
        &quot;indexOnly&quot; : false,
        &quot;indexBounds&quot; : {
            &quot;x&quot; : [
                [
                    4,
                    1.7976931348623157e+308
                ]
            ],
            &quot;y&quot; : [
                [
                    &quot;c&quot;,
                    &quot;c&quot;
                ]
            ]
        }
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;可以看出 nscanned 非常高! 而 n只有 2 .官网上有这样一句话:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If nscanned is much higher than nreturned, the database is scanning many objects to find the target objects. Consider creating an index to improve this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这里nscanned可以认为是扫描的记录数.n为返回的记录数&lt;/p&gt;
&lt;p&gt;让我们配合PPT看下 nscanned:7是怎么来的:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ww3.sinaimg.cn/large/744e593bgw1end6qzl43vj20fy09t0ta.jpg&quot; alt=&quot;BTree&quot;&gt;&lt;/p&gt;
&lt;p&gt;这是MongoDB的B-tree索引树,因为x&amp;gt;=4 &amp;amp;&amp;amp; y=’c’,所以先选择左枝搜索,左枝搜索了4/g 和 5/c ,(5/c符合条件),然后搜索 右枝 搜索了 7/e, 6/a ,8/c, 9/f ,(8/c符合条件). 任何 符合的 x都要被check一下.&lt;/p&gt;
&lt;p&gt;###延伸&lt;/p&gt;
&lt;p&gt;看了PPT后到此结尾了, 真遇到这种情况,效率可不乐观,于是稍微思考了下, y 在 这颗树中只有两个节点含有,也就是说 既然是 ‘与’  那就只要先把 y 筛选出来 ,搜索次数就大大减半了 .&lt;/p&gt;
&lt;p&gt;我们在 y 上再进行Basic Indexes 的建立.&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
db.good.ensureIndex({y:1})
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;这样如果搜索时会先 搜索 y  ,也就只有2次搜索了.看下实际情况:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
&gt; db.good.find({x:{$gte:4}, y:’c’}).explain()
{
    &quot;cursor&quot; : &quot;BtreeCursor y_1&quot;,
        &quot;nscanned&quot; : 2,
        &quot;nscannedObjects&quot; : 2,
        &quot;n&quot; : 2,
        &quot;millis&quot; : 0,
        &quot;nYields&quot; : 0,
        &quot;nChunkSkips&quot; : 0,
        &quot;isMultiKey&quot; : false,
        &quot;indexOnly&quot; : false,
        &quot;indexBounds&quot; : {
            &quot;y&quot; : [
                [
                    &quot;c&quot;,
                    &quot;c&quot;
                ]
            ]
        }
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;正如预料的一样. 直接走 基本索引了.&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;前几天看到一个关于 MongoDB 深入索引的PPT&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/mongodb/mongodb-indexing-the-details&quot;&gt;MongoDB Indexing: The Details&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;仔细的从头看到尾, 里面有个关于Compound Indexes的Range and Equality的讲解,在ppt第129页,重新回顾下这个例子.向一个collection中插入 9 条数据,像下面这样:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
&gt; db.good.find()
{ &quot;_id&quot; : ObjectId(&quot;4e8d629d8ad8bdf2ed6c1990&quot;), &quot;x&quot; : 1, &quot;y&quot; : &quot;b&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62a38ad8bdf2ed6c1991&quot;), &quot;x&quot; : 3, &quot;y&quot; : &quot;d&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62ad8ad8bdf2ed6c1992&quot;), &quot;x&quot; : 4, &quot;y&quot; : &quot;g&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62b28ad8bdf2ed6c1993&quot;), &quot;x&quot; : 5, &quot;y&quot; : &quot;c&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62ba8ad8bdf2ed6c1994&quot;), &quot;x&quot; : 6, &quot;y&quot; : &quot;a&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62c18ad8bdf2ed6c1995&quot;), &quot;x&quot; : 7, &quot;y&quot; : &quot;e&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62ce8ad8bdf2ed6c1996&quot;), &quot;x&quot; : 8, &quot;y&quot; : &quot;c&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d62d38ad8bdf2ed6c1997&quot;), &quot;x&quot; : 9, &quot;y&quot; : &quot;f&quot; }
{ &quot;_id&quot; : ObjectId(&quot;4e8d719a6cee6416a5a75a43&quot;), &quot;x&quot; : 5, &quot;y&quot; : &quot;d&quot; }
&lt;/code&gt;
&lt;/pre&gt;
    
    </summary>
    
    
      <category term="MongoDB" scheme="http://strongit.github.io/tags/MongoDB/"/>
    
  </entry>
  
  <entry>
    <title>SSL基本配置</title>
    <link href="http://strongit.github.io/2016/06/10/rancher-03-Installing-Rancher-Basic-Ssl-Config/"/>
    <id>http://strongit.github.io/2016/06/10/rancher-03-Installing-Rancher-Basic-Ssl-Config/</id>
    <published>2016-06-09T16:00:00.000Z</published>
    <updated>2016-07-08T10:58:27.990Z</updated>
    
    <content type="html">&lt;p&gt;为了可以正常使用 &lt;code&gt;https&lt;/code&gt; 地址访问 Rancher 服务器，您需要设置代理的证书卸载功能。同时，我们提供了一些配置 NGINX 或 Apache 代理的例子，当然，您也可以使用其他工具。&lt;/p&gt;
&lt;h4 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h4&gt;&lt;p&gt;除了典型的 Rancher 服务器 &lt;a href=&quot;&quot;&gt;需求&lt;/a&gt; 您还需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有效的 SSL 证书：如果您的证书不包含在 Ubuntu CA 中，请参照 &lt;a href=&quot;&quot;&gt;自签名证书说明&lt;/a&gt; 。&lt;/li&gt;
&lt;li&gt;配置 DNS 记录。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;启动-Rancher-服务器&quot;&gt;&lt;a href=&quot;#启动-Rancher-服务器&quot; class=&quot;headerlink&quot; title=&quot;启动 Rancher 服务器&quot;&gt;&lt;/a&gt;启动 Rancher 服务器&lt;/h4&gt;&lt;p&gt;在我们的示例配置方案中，所有流量将通过代理被发送到 Rancher 服务器的 Docker 容器中。也有替代的配置方案可以实现，但这个示例相对比较简单。&lt;br&gt;启动 Rancher 服务器，这里我们添加了选项 &lt;code&gt;--name=rancher-server&lt;/code&gt; 用来连接代理容器和 Rancher 服务器容器。&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run -d --restart=always --name=rancher-server rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在我们的示例中，我们假设代理运行在单独的容器中。如果您的代理计划由主机提供服务，需要将 Rancher 容器的 &lt;code&gt;8080&lt;/code&gt; 端口映射至本地主机，可以向 &lt;code&gt;docker run&lt;/code&gt; 命令添加参数 &lt;code&gt;-p 127.0.0.1:8080:8080&lt;/code&gt; 实现。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果您想使用现有的 Rancher 实例，您可以基于现有的 Rancher 实例创建一个新的 Rancher 实例。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若 Rancher 实例的 MySQL 数据库运行在容器内，在启动新的 Rancher 实例时，请参照 &lt;a href=&quot;&quot;&gt;升级说明&lt;/a&gt; 创建数据容器并且在启动时添加 &lt;code&gt;--volumes-from=&amp;lt;data_container&amp;gt;&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;若 Rancher 实例使用了 &lt;a href=&quot;&quot;&gt;绑定挂载数据库&lt;/a&gt; 的方式，请参照 &lt;a href=&quot;&quot;&gt;绑定挂载实例升级说明&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;若 Rancher 实例使用外部数据库，则直接停止并删除现有的 Rancher 实例容器，并参照 &lt;a href=&quot;&quot;&gt;外部数据库连接说明&lt;/a&gt; 启动新的容器。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在新的 Rancher 实例容器运行后，请确认已经 &lt;strong&gt;删除&lt;/strong&gt; 了旧的 Rancher 实例容器，否则，在您的主机重启后，因为我们在 &lt;code&gt;docker run&lt;/code&gt; 命令时加入了 &lt;code&gt;--restart=always&lt;/code&gt; 参数，会导致旧容器启动。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;NGINX-配置示例&quot;&gt;&lt;a href=&quot;#NGINX-配置示例&quot; class=&quot;headerlink&quot; title=&quot;NGINX 配置示例&quot;&gt;&lt;/a&gt;NGINX 配置示例&lt;/h3&gt;&lt;p&gt;这里的配置是 NGINX 运行的最低配置，您应该定制配置来满足您的需求。&lt;/p&gt;
&lt;h4 id=&quot;节点设置&quot;&gt;&lt;a href=&quot;#节点设置&quot; class=&quot;headerlink&quot; title=&quot;节点设置&quot;&gt;&lt;/a&gt;节点设置&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rancher-server&lt;/code&gt; 是您的 Rancher 服务器容器名。您必须在启动 Rancher 服务器容器的时候加入 &lt;code&gt;--name=rancher-server&lt;/code&gt; 选项。并且在启动 NGINX 容器的时候加入 &lt;code&gt;--link=rancher-server&lt;/code&gt; 选项才能使这些配置正常工作。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;server&amp;gt;&lt;/code&gt; 可以任意命名，但是必须保证 http 和 https 配置中的名称相同。&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;upstream rancher &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    server rancher-server:8080;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;server &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    listen 443 ssl;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    server_name &amp;lt;server&amp;gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ssl_certificate &amp;lt;cert_file&amp;gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ssl_certificate_key &amp;lt;key_file&amp;gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    location / &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_set_header Host $host;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_set_header X-Forwarded-Proto $scheme;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_set_header X-Forwarded-Port $server_port;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_pass http://rancher;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_http_version 1.1;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_set_header Upgrade $http_upgrade;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        # This allows the ability for the execute shell window to remain open for up to 15 minutes. Without this parameter, the default is 1 minute and will automatically close.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        proxy_read_timeout 900s;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;server &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    listen 80;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    server_name &amp;lt;server&amp;gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    return 301 https://$server_name$request_uri;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h1 id=&quot;APACHE-配置示例&quot;&gt;&lt;a href=&quot;#APACHE-配置示例&quot; class=&quot;headerlink&quot; title=&quot;APACHE 配置示例&quot;&gt;&lt;/a&gt;APACHE 配置示例&lt;/h1&gt;&lt;p&gt;这是一个 Apache 的配置。&lt;/p&gt;
&lt;h4 id=&quot;节点设置-1&quot;&gt;&lt;a href=&quot;#节点设置-1&quot; class=&quot;headerlink&quot; title=&quot;节点设置&quot;&gt;&lt;/a&gt;节点设置&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;server_name&amp;gt;&lt;/code&gt; 是您 Rancher 服务器容器的名字，所以在启动 Apache 容器时需要加入 &lt;code&gt;--link=&amp;lt;server_name&amp;gt;&lt;/code&gt; 才能使配置正常工作。&lt;/li&gt;
&lt;li&gt;在代理配置中，您需要替换 &lt;code&gt;rancher&lt;/code&gt; 为您的信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ServerName &amp;lt;server_name&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  Redirect / https://&amp;lt;server_name&amp;gt;/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;VirtualHost *:443&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ServerName &amp;lt;server_name&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  SSLEngine on&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  SSLCertificateFile &amp;lt;/path/to/ssl/cert_file&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  SSLCertificateKeyFile &amp;lt;/path/to/ssl/key_file&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ProxyRequests Off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ProxyPreserveHost On&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  RewriteEngine On&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  RewriteCond %&amp;#123;HTTP:Connection&amp;#125; Upgrade [NC]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  RewriteCond %&amp;#123;HTTP:Upgrade&amp;#125; websocket [NC]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  RewriteRule /(.*) ws://rancher:8080/$1 [P,L]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  RequestHeader set X-Forwarded-Port &amp;quot;443&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;lt;Location /&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ProxyPass &amp;quot;http://rancher:8080/&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ProxyPassReverse &amp;quot;http://rancher:8080/&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;lt;/Location&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h2 id=&quot;更新主机注册&quot;&gt;&lt;a href=&quot;#更新主机注册&quot; class=&quot;headerlink&quot; title=&quot;更新主机注册&quot;&gt;&lt;/a&gt;更新主机注册&lt;/h2&gt;&lt;p&gt;在 Rancher 配置完成后，用户界面将使用 &lt;code&gt;https://&amp;lt;your domain&amp;gt;/&lt;/code&gt; 访问。在 &lt;a href=&quot;&quot;&gt;添加主机&lt;/a&gt; 之前，您需要正确配置 SSL 方式的 &lt;a href=&quot;&quot;&gt;主机注册&lt;/a&gt; 地址。&lt;/p&gt;
&lt;h2 id=&quot;在-AWS-ELB-后使用-SSL-运行-Rancher&quot;&gt;&lt;a href=&quot;#在-AWS-ELB-后使用-SSL-运行-Rancher&quot; class=&quot;headerlink&quot; title=&quot;在 AWS ELB 后使用 SSL 运行 Rancher&quot;&gt;&lt;/a&gt;在 AWS ELB 后使用 SSL 运行 Rancher&lt;/h2&gt;&lt;p&gt;默认情况下，ELB 不支持在 HTTP/HTTPS 模式下启用 websockets 。由于 Rancher 使用了 websockets ，则 ELB 必须修改配置以便 Rancher 的 websockets 可以正常工作。&lt;/p&gt;
&lt;h4 id=&quot;Rancher-的-ELB-配置需求&quot;&gt;&lt;a href=&quot;#Rancher-的-ELB-配置需求&quot; class=&quot;headerlink&quot; title=&quot;Rancher 的 ELB 配置需求&quot;&gt;&lt;/a&gt;Rancher 的 ELB 配置需求&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;启用 &lt;a href=&quot;http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;代理协议&lt;/a&gt; 模式&lt;/li&gt;
&lt;li&gt;配置 TLS/SSL 方式的前端以及 TCP 方式的后端&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;使用自签名证书（测试）&quot;&gt;&lt;a href=&quot;#使用自签名证书（测试）&quot; class=&quot;headerlink&quot; title=&quot;使用自签名证书（测试）&quot;&gt;&lt;/a&gt;使用自签名证书（测试）&lt;/h2&gt;&lt;h4 id=&quot;免责声明&quot;&gt;&lt;a href=&quot;#免责声明&quot; class=&quot;headerlink&quot; title=&quot;免责声明&quot;&gt;&lt;/a&gt;免责声明&lt;/h4&gt;&lt;p&gt;这个配置可以工作在单节点 Rancher 服务器（非HA安装）模式的核心服务上，没有人验证是否支持 &lt;a href=&quot;&quot;&gt;Rancher 目录&lt;/a&gt; 是否被支持。&lt;/p&gt;
&lt;p&gt;Rancher Compose 命令行默认需要将 CA 证书存储在操作系统，请参照 &lt;a href=&quot;https://golang.org/src/crypto/x509/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Golang&lt;/a&gt;。&lt;/p&gt;
&lt;h4 id=&quot;服务器必备条件&quot;&gt;&lt;a href=&quot;#服务器必备条件&quot; class=&quot;headerlink&quot; title=&quot;服务器必备条件&quot;&gt;&lt;/a&gt;服务器必备条件&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;CA 证书 PEM 格式的文件&lt;/li&gt;
&lt;li&gt;已经签署证书的 Rancher 服务器&lt;/li&gt;
&lt;li&gt;NGINX 和 Apache 配置证书卸载，并反向代理到 Rancher 服务器&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;Rancher-服务器&quot;&gt;&lt;a href=&quot;#Rancher-服务器&quot; class=&quot;headerlink&quot; title=&quot;Rancher 服务器&quot;&gt;&lt;/a&gt;Rancher 服务器&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;使用修改后的 Docker 命令启动 Rancher 服务器容器。证书 &lt;strong&gt;必须&lt;/strong&gt; 在容器中被命名为 &lt;code&gt;ca.crt&lt;/code&gt;。&lt;/p&gt;
 &lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run -d --restart=always -p 8080:8080 -v /some/dir/cert.crt:/ca.crt rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你正在运行 NGINX 或 Apache 容器，您可以直接访问这些实例，不需要通过 Rancher 服务器的 8080 端口访问用户界面。&lt;br&gt; 这条命令将会配置 Rancher 服务器的证书链，所以 Rancher 的服务，如机器配置，目录和 compose 均可以和 Rancher 服务器通讯。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;如果您正在使用一个 NGINX 或 Apache 容器卸载证书，您需要在启动容器的命令增加 &lt;code&gt;--link=&lt;/code&gt; 选项。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;https&lt;/code&gt; 访问 Rancher 用户界面，即 &lt;code&gt;https://rancher.server.domain&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;更新 &lt;a href=&quot;&quot;&gt;主机注册&lt;/a&gt; 为 SSL 方式。&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;除非您的机器信任了用于签署 Rancher 服务器的 CA 证书，否则当你访问页面时，浏览器会给出一个不可信网站的警告信息。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;添加主机&quot;&gt;&lt;a href=&quot;#添加主机&quot; class=&quot;headerlink&quot; title=&quot;添加主机&quot;&gt;&lt;/a&gt;添加主机&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;如果您想添加主机到 Rancher ，您必须在主机上以 pem 格式将 CA 证书保存到 &lt;code&gt;/var/lib/rancher/etc/ssl&lt;/code&gt; 目录并命名为 &lt;code&gt;ca.crt&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;添加 &lt;a href=&quot;&quot;&gt;自定义主机&lt;/a&gt; ，也就是从用户界面粘贴命令。命令已经加入了 &lt;code&gt;-v /var/lib/rancher:/var/lib/rancher&lt;/code&gt; 选项，所以文件会被自动复制到您的主机上。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;From： &lt;a href=&quot;http://docs.rancher.com/rancher/latest/en/installing-rancher/installing-server/basic-ssl-config/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://docs.rancher.com/rancher/latest/en/installing-rancher/installing-server/basic-ssl-config/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;为了可以正常使用 &lt;code&gt;https&lt;/code&gt; 地址访问 Rancher 服务器，您需要设置代理的证书卸载功能。同时，我们提供了一些配置 NGINX 或 Apache 代理的例子，当然，您也可以使用其他工具。&lt;/p&gt;
&lt;h4 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h4&gt;&lt;p&gt;除了典型的 Rancher 服务器 &lt;a href=&quot;&quot;&gt;需求&lt;/a&gt; 您还需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有效的 SSL 证书：如果您的证书不包含在 Ubuntu CA 中，请参照 &lt;a href=&quot;&quot;&gt;自签名证书说明&lt;/a&gt; 。&lt;/li&gt;
&lt;li&gt;配置 DNS 记录。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;启动-Rancher-服务器&quot;&gt;&lt;a href=&quot;#启动-Rancher-服务器&quot; class=&quot;headerlink&quot; title=&quot;启动 Rancher 服务器&quot;&gt;&lt;/a&gt;启动 Rancher 服务器&lt;/h4&gt;&lt;p&gt;在我们的示例配置方案中，所有流量将通过代理被发送到 Rancher 服务器的 Docker 容器中。也有替代的配置方案可以实现，但这个示例相对比较简单。&lt;br&gt;启动 Rancher 服务器，这里我们添加了选项 &lt;code&gt;--name=rancher-server&lt;/code&gt; 用来连接代理容器和 Rancher 服务器容器。&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run -d --restart=always --name=rancher-server rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在我们的示例中，我们假设代理运行在单独的容器中。如果您的代理计划由主机提供服务，需要将 Rancher 容器的 &lt;code&gt;8080&lt;/code&gt; 端口映射至本地主机，可以向 &lt;code&gt;docker run&lt;/code&gt; 命令添加参数 &lt;code&gt;-p 127.0.0.1:8080:8080&lt;/code&gt; 实现。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果您想使用现有的 Rancher 实例，您可以基于现有的 Rancher 实例创建一个新的 Rancher 实例。&lt;br&gt;
    
    </summary>
    
    
      <category term="rancher" scheme="http://strongit.github.io/tags/rancher/"/>
    
  </entry>
  
  <entry>
    <title>多节点高可用(HA)</title>
    <link href="http://strongit.github.io/2016/06/04/rancher-03-Installing-Rancher-Multi-Nodes/"/>
    <id>http://strongit.github.io/2016/06/04/rancher-03-Installing-Rancher-Multi-Nodes/</id>
    <published>2016-06-03T16:00:00.000Z</published>
    <updated>2016-07-08T10:58:42.742Z</updated>
    
    <content type="html">&lt;h6 id=&quot;基于-Rancher-v1-0-1&quot;&gt;&lt;a href=&quot;#基于-Rancher-v1-0-1&quot; class=&quot;headerlink&quot; title=&quot;基于 Rancher v1.0.1&quot;&gt;&lt;/a&gt;基于 Rancher v1.0.1&lt;/h6&gt;&lt;h4 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;多节点的HA配置请参照单一节点&lt;a href=&quot;&quot;&gt;需求&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;节点需要开放的端口&lt;ul&gt;
&lt;li&gt;全局访问：TCP 端口&lt;code&gt;22&lt;/code&gt;,&lt;code&gt;80&lt;/code&gt;,&lt;code&gt;443&lt;/code&gt;,&lt;code&gt;18080&lt;/code&gt;（可选：用于在集群启动前 &lt;a href=&quot;&quot;&gt;查看并管理栈&lt;/a&gt; ）&lt;/li&gt;
&lt;li&gt;节点间连接：&lt;ul&gt;
&lt;li&gt;UDP 端口：&lt;code&gt;500&lt;/code&gt;,&lt;code&gt;4500&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TCP 端口：&lt;code&gt;2181&lt;/code&gt;,&lt;code&gt;2376&lt;/code&gt;,&lt;code&gt;2888&lt;/code&gt;,&lt;code&gt;3888&lt;/code&gt;,&lt;code&gt;6379&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MySQL 数据库&lt;ul&gt;
&lt;li&gt;至少 1GB 内存&lt;/li&gt;
&lt;li&gt;每 Rancher Server 节点 50 连接（如：一个 3 节点的安装至少需要支持 150 连接）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;外部负载均衡器&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;建议使用更大的部署&quot;&gt;&lt;a href=&quot;#建议使用更大的部署&quot; class=&quot;headerlink&quot; title=&quot;建议使用更大的部署&quot;&gt;&lt;/a&gt;建议使用更大的部署&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;每个 Rancher Server 节点应该有 4GB 或 8GB 可用内存，意味着至少需要 8GB 或 16GB 的物理内存&lt;/li&gt;
&lt;li&gt;MySQL 数据库应该使用高速的磁盘&lt;/li&gt;
&lt;li&gt;对于真正的高可用，建议使用复制的 MySQL 并做适当的备份。由于存在事物锁，可以选择 Galera 或强制写入单节点的方式。&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;配置高可用-HA-的准备&quot;&gt;&lt;a href=&quot;#配置高可用-HA-的准备&quot; class=&quot;headerlink&quot; title=&quot;配置高可用(HA)的准备&quot;&gt;&lt;/a&gt;配置高可用(HA)的准备&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;根据 &lt;a href=&quot;&quot;&gt;使用外部数据库启动单节点&lt;/a&gt; 说明部署一个至少拥有 1GB 内存的 MySQL 数据库，但是不要使用其中启动 Rancher Server 的相关指令。因为默认情况下， 用户只能从本地访问数据库，你需要授权所有 Rancher Server 节点的网络。&lt;/li&gt;
&lt;li&gt;配置一个外部负载均衡器并将端口 80 和 443 的流量指向运行 Rancher Server 的节点池。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;使用这篇文档准备所有节点。这些节点都应该满足单节点部署 Rancher Server 的&lt;a href=&quot;&quot;&gt;需求&lt;/a&gt;。（可选）您可以提前拉取 &lt;code&gt;rancher/server&lt;/code&gt; 镜像到这些节点上。&lt;/p&gt;
&lt;p&gt; 目前，我们的高可用集群支持 3 种配置。&lt;em&gt; 1 节点：没有高可用 &lt;/em&gt; 3 节点：任何一台主机可以宕机 * 5 节点：任何两台主机可以宕机&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这些节点可以分布在同一个地区并使用稳定的高速链路连接的多个数据中心，不建议分布在过大的区域。如果你选择分布节点在同一个区域，Zookeeper 可以保证集群的高可用。如果你的节点分布在不同的数据中心，那么你只能保留问题最少的那个区域。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;在其中一个节点上，启动一个 Rancher Server 用于生成配置脚本。下面这个脚本用于生成 Rancher Server 同时连接到外部数据库并初始化数据。它将被引导高可用部署过程。最终，Rancher Server 容器将使用此步骤替换为支持高可用的 Rancher Server 容器。&lt;/p&gt;
 &lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run -d -p 8080:8080 \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-e CATTLE_DB_CATTLE_MYSQL_HOST=&amp;lt;hostname or IP of MySQL instance&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-e CATTLE_DB_CATTLE_MYSQL_PORT=&amp;lt;port&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-e CATTLE_DB_CATTLE_MYSQL_NAME=&amp;lt;Name of Database&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-e CATTLE_DB_CATTLE_USERNAME=&amp;lt;Username&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-e CATTLE_DB_CATTLE_PASSWORD=&amp;lt;Password&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-v /var/run/docker.sock:/var/run/docker.sock \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rancher/server:v1.0.1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;请耐心等待，这个初始化步骤可能要15分钟才能完成&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;（可选）预先抓取 &lt;code&gt;rancher/server&lt;/code&gt; 镜像到 Rancher 节点。这里抓取的镜像可用于配置脚本生成 Rancher Server 。&lt;/p&gt;
 &lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;# The version would be whatever was used in Step 4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker pull rancher/server:v1.0.1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;生成配置脚本&quot;&gt;&lt;a href=&quot;#生成配置脚本&quot; class=&quot;headerlink&quot; title=&quot;生成配置脚本&quot;&gt;&lt;/a&gt;生成配置脚本&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;访问 Rancher Server 地址 &lt;code&gt;http://&amp;lt;server_IP&amp;gt;:8080&lt;/code&gt; 生成脚本。在 &lt;strong&gt;Admin&lt;/strong&gt; -&amp;gt; &lt;strong&gt;HA&lt;/strong&gt; 确认 Rancher Server 已经成功连接到外部数据库。如果没有正确配置，请重复上一节中的步骤 1 和 4 。&lt;/li&gt;
&lt;li&gt;选择集群大小，应该为您的 Rancher Server 节点数量，参照上一节中步骤 3 。&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;Host Registration URL&lt;/strong&gt; 中填写外部负载均衡器的 IPv4 地址或主机名。&lt;/li&gt;
&lt;li&gt;选择您想使用的证书类型。Rancher Server 可以为您生成一个自签名证书或者使用自己的有效证书。&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;Generate Config Script&lt;/strong&gt; 。&lt;/li&gt;
&lt;li&gt;下载脚本并保存到本地。&lt;/li&gt;
&lt;li&gt;保存脚本后，停止用于生成脚本的 Rancher Server 容器。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;启动高可用的-Rancher&quot;&gt;&lt;a href=&quot;#启动高可用的-Rancher&quot; class=&quot;headerlink&quot; title=&quot;启动高可用的 Rancher&quot;&gt;&lt;/a&gt;启动高可用的 Rancher&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;为了使所有节点支持高可用，你需要在所有节点上使用配置脚本启动 Rancher Server 。脚本将启动一个 Rancher Server 容器并连接到之前创建的外部数据库。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;请确保您已经停止用于生成脚本 &lt;code&gt;rancher-ha.sh&lt;/code&gt; 的 Rancher Server 容器后再运行配置脚本。否则，在你尝试在同一个节点运行配置脚本时，将会有一个端口冲突导致高可用节点无法启动。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;如果你之前生成配置脚本时提供了 &lt;strong&gt;Host Registration URL&lt;/strong&gt; ，请导航到外部负载均衡器的 IP 或主机名。请注意，Rancher Server 的用户界面可能需要几分钟才可以使用。如果你的用户界面仍不可用，请参照 &lt;a href=&quot;&quot;&gt;查看并管理栈&lt;/a&gt; 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;一旦用户界面可用，您将可以添加主机到 Rancher 高可用集群。在 &lt;strong&gt;Admin&lt;/strong&gt; -&amp;gt; &lt;strong&gt;HA&lt;/strong&gt; 标签可以查看高可用节点的数量。添加主机前，您需要保存证书 &lt;code&gt;/var/lib/rancher/etc/ssl/ca.crt&lt;/code&gt; 并赋予 &lt;code&gt;400&lt;/code&gt; 权限到您要添加的主机上。注册命令可以自动创建使用并管理证书。&lt;/li&gt;
&lt;li&gt;在您向环境中添加主机后，高可用设置已经完成，您可以开始通过用户界面 &lt;a href=&quot;&quot;&gt;添加服务&lt;/a&gt; ，从 Catalog &lt;a href=&quot;&quot;&gt;启动模板&lt;/a&gt; 或使用 &lt;a href=&quot;&quot;&gt;rancher-compose&lt;/a&gt; 启动服务。&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果您正在使用 AWS ，你需要为添加到 Rancher 的主机配置 IP 。如果你想添加 &lt;a href=&quot;&quot;&gt;自定义主机&lt;/a&gt; ，你需要在配置页面中填写公网 IP ，启动 Rancher agent 的命令会相应改变。已经通过页面添加的主机，必须 &lt;a href=&quot;&quot;&gt;ssh&lt;/a&gt; 登陆到机器重启 Rancher agent 使 IP 生效。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;From： &lt;a href=&quot;http://docs.rancher.com/rancher/installing-rancher/installing-server/multi-nodes/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://docs.rancher.com/rancher/installing-rancher/installing-server/multi-nodes/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    
    <summary type="html">
    
      &lt;h6 id=&quot;基于-Rancher-v1-0-1&quot;&gt;&lt;a href=&quot;#基于-Rancher-v1-0-1&quot; class=&quot;headerlink&quot; title=&quot;基于 Rancher v1.0.1&quot;&gt;&lt;/a&gt;基于 Rancher v1.0.1&lt;/h6&gt;&lt;h4 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;多节点的HA配置请参照单一节点&lt;a href=&quot;&quot;&gt;需求&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;节点需要开放的端口&lt;ul&gt;
&lt;li&gt;全局访问：TCP 端口&lt;code&gt;22&lt;/code&gt;,&lt;code&gt;80&lt;/code&gt;,&lt;code&gt;443&lt;/code&gt;,&lt;code&gt;18080&lt;/code&gt;（可选：用于在集群启动前 &lt;a href=&quot;&quot;&gt;查看并管理栈&lt;/a&gt; ）&lt;/li&gt;
&lt;li&gt;节点间连接：&lt;ul&gt;
&lt;li&gt;UDP 端口：&lt;code&gt;500&lt;/code&gt;,&lt;code&gt;4500&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TCP 端口：&lt;code&gt;2181&lt;/code&gt;,&lt;code&gt;2376&lt;/code&gt;,&lt;code&gt;2888&lt;/code&gt;,&lt;code&gt;3888&lt;/code&gt;,&lt;code&gt;6379&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MySQL 数据库&lt;ul&gt;
&lt;li&gt;至少 1GB 内存&lt;/li&gt;
&lt;li&gt;每 Rancher Server 节点 50 连接（如：一个 3 节点的安装至少需要支持 150 连接）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;外部负载均衡器&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;建议使用更大的部署&quot;&gt;&lt;a href=&quot;#建议使用更大的部署&quot; class=&quot;headerlink&quot; title=&quot;建议使用更大的部署&quot;&gt;&lt;/a&gt;建议使用更大的部署&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;每个 Rancher Server 节点应该有 4GB 或 8GB 可用内存，意味着至少需要 8GB 或 16GB 的物理内存&lt;/li&gt;
&lt;li&gt;MySQL 数据库应该使用高速的磁盘&lt;/li&gt;
&lt;li&gt;对于真正的高可用，建议使用复制的 MySQL 并做适当的备份。由于存在事物锁，可以选择 Galera 或强制写入单节点的方式。
    
    </summary>
    
    
      <category term="rancher" scheme="http://strongit.github.io/tags/rancher/"/>
    
  </entry>
  
  <entry>
    <title>Zabbix邮件报警脚本</title>
    <link href="http://strongit.github.io/2016/05/01/zabbix-email/"/>
    <id>http://strongit.github.io/2016/05/01/zabbix-email/</id>
    <published>2016-04-30T16:00:00.000Z</published>
    <updated>2016-07-08T10:58:07.415Z</updated>
    
    <content type="html">&lt;p&gt;Zabbix安装教程请移步 &lt;a href=&quot;http://strongit.blog.51cto.com/10020534/1709616&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Zabbix Install&lt;/a&gt;&lt;br&gt;zabbix邮件报警配置步骤说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1、准备一个发送邮件的脚本&lt;/p&gt;
&lt;p&gt;2、修改zabbix配置文件中指定的脚本路径&lt;/p&gt;
&lt;p&gt;3、关联脚本名称&lt;/p&gt;
&lt;p&gt;4、用户设置收件邮箱与报警时间&lt;/p&gt;
&lt;p&gt;5、配置报警触发器&lt;/p&gt;
&lt;p&gt;6、添加多个用户，同时给多个人发邮件&lt;/p&gt;
&lt;p&gt;7、邮件接收测试&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;1、发送邮件的脚本&quot;&gt;&lt;a href=&quot;#1、发送邮件的脚本&quot; class=&quot;headerlink&quot; title=&quot;1、发送邮件的脚本&quot;&gt;&lt;/a&gt;1、发送邮件的脚本&lt;/h3&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# -*- coding:utf-8 -*-&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# author:Strong It&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# send zabbix message by email,usage: ./zabbix_email.py 收件人 标题 邮件内容&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;import smtplib&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;import sys&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;import time&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;from email.MIMEText import MIMEText&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;from email.Header import Header&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;from email.utils import parseaddr, formataddr&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;from email import encoders&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;reload(sys)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sys.setdefaultencoding(&lt;span class=&quot;string&quot;&gt;&#39;utf8&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;current_time=time.strftime(&lt;span class=&quot;string&quot;&gt;&#39;%Y-%m-%d  %H:%M&#39;&lt;/span&gt;,time.localtime(time.time()))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mail_host =&lt;span class=&quot;string&quot;&gt;&#39;smtp.exmail.qq.com&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mail_user =&lt;span class=&quot;string&quot;&gt;&#39;Strong It@*****.com&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mail_&lt;span class=&quot;built_in&quot;&gt;pwd&lt;/span&gt; = &lt;span class=&quot;string&quot;&gt;&#39;*****&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#地址格式化函数&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;def _format_addr(s):&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    name, addr = parseaddr(s)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;built_in&quot;&gt;return&lt;/span&gt; formataddr(( \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        Header(name, &lt;span class=&quot;string&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;).encode(), \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        addr.encode(&lt;span class=&quot;string&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; isinstance(addr, unicode) &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; addr))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#发送邮件函数&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;def send_email( content,mailto, get_sub ):&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    msg = MIMEText( content,_subtype = &lt;span class=&quot;string&quot;&gt;&#39;plain&#39;&lt;/span&gt;, _charset = &lt;span class=&quot;string&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;#msg = MIMEText(content,_subtype=&#39;plain&#39;,_charset=&#39;gb2312&#39;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    msg[&lt;span class=&quot;string&quot;&gt;&#39;From&#39;&lt;/span&gt;] = _format_addr(u&lt;span class=&quot;string&quot;&gt;&#39;Zabbix监控 &amp;lt;%s&amp;gt;&#39;&lt;/span&gt; % mail_user)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    msg[&lt;span class=&quot;string&quot;&gt;&#39;Subject&#39;&lt;/span&gt;] = _format_addr(u&lt;span class=&quot;string&quot;&gt;&#39;报警信息 &amp;lt;%s&amp;gt;&#39;&lt;/span&gt; % get_sub)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    msg[&lt;span class=&quot;string&quot;&gt;&#39;To&#39;&lt;/span&gt;] = &lt;span class=&quot;string&quot;&gt;&quot;,&quot;&lt;/span&gt;.join( mailto )  &lt;span class=&quot;comment&quot;&gt;#多邮件账号格式用,分开&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    try:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        s = smtplib.SMTP_SSL( mail_host, 465)       &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;comment&quot;&gt;#s = smtplib.SMTP( mail_host, 25)       &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        s.login(mail_user, mail_&lt;span class=&quot;built_in&quot;&gt;pwd&lt;/span&gt; )&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        s.sendmail(mail_user, mailto,msg.as_string())&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        s.close()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    except Exception as e:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;built_in&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;Exception: &#39;&lt;/span&gt;, e&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#注意以下格式对齐&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;title = sys.argv[2]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cont = &lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;---------------------------------&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;摘要：  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;%s&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;---------------------------------&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;时间：  %s&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;---------------------------------&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;%(sys.argv[3],current_time)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;to_list = [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         &lt;span class=&quot;string&quot;&gt;&#39;%s&#39;&lt;/span&gt;%(sys.argv[1]),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#发送邮件的日志记录到/tmp/sendmail.log&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;with open(&lt;span class=&quot;string&quot;&gt;&#39;/tmp/sendmail_qs.log&#39;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&#39;ab&#39;&lt;/span&gt;) as f:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    f.write(&lt;span class=&quot;string&quot;&gt;&#39;%s  Receive address:  %s Title: %s \n&#39;&lt;/span&gt;%(current_time,sys.argv[1],title))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; __name__ == &lt;span class=&quot;string&quot;&gt;&#39;__main__&#39;&lt;/span&gt;:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    send_email( cont, to_list, title)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;脚本名称：zabbix_email.py，使用格式：./zabbix_email.py 收件人 标题 邮件内容&lt;/p&gt;
&lt;h3 id=&quot;2、更改zabbix配置文件的脚本路径&quot;&gt;&lt;a href=&quot;#2、更改zabbix配置文件的脚本路径&quot; class=&quot;headerlink&quot; title=&quot;2、更改zabbix配置文件的脚本路径&quot;&gt;&lt;/a&gt;2、更改zabbix配置文件的脚本路径&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@zabbix alertscripts]&lt;span class=&quot;comment&quot;&gt;# cat /etc/zabbix/zabbix_server.conf |grep AlertScriptsPath&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;### Option: AlertScriptsPath&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# AlertScriptsPath=$&amp;#123;datadir&amp;#125;/zabbix/alertscripts&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;AlertScriptsPath=/usr/lib/zabbix/alertscripts&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;3、关联脚本名称&quot;&gt;&lt;a href=&quot;#3、关联脚本名称&quot; class=&quot;headerlink&quot; title=&quot;3、关联脚本名称&quot;&gt;&lt;/a&gt;3、关联脚本名称&lt;/h3&gt;&lt;p&gt;【Administration –&amp;gt; Media types】&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/media-types.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;4、用户设置收件邮箱与报警时间&quot;&gt;&lt;a href=&quot;#4、用户设置收件邮箱与报警时间&quot; class=&quot;headerlink&quot; title=&quot;4、用户设置收件邮箱与报警时间&quot;&gt;&lt;/a&gt;4、用户设置收件邮箱与报警时间&lt;/h3&gt;&lt;p&gt;【Administration –&amp;gt; Users】&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/zabbix-user.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/user-permission.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;5、配置报警触发器&quot;&gt;&lt;a href=&quot;#5、配置报警触发器&quot; class=&quot;headerlink&quot; title=&quot;5、配置报警触发器&quot;&gt;&lt;/a&gt;5、配置报警触发器&lt;/h3&gt;&lt;p&gt;【Configuration –&amp;gt; Actions】&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/zabbix-action.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/action-operation.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;6、添加多个用户，同时给多个人发邮件&quot;&gt;&lt;a href=&quot;#6、添加多个用户，同时给多个人发邮件&quot; class=&quot;headerlink&quot; title=&quot;6、添加多个用户，同时给多个人发邮件&quot;&gt;&lt;/a&gt;6、添加多个用户，同时给多个人发邮件&lt;/h3&gt;&lt;p&gt;【Administration –&amp;gt; Users】&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/multi-user.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;7、接收邮件报警测试&quot;&gt;&lt;a href=&quot;#7、接收邮件报警测试&quot; class=&quot;headerlink&quot; title=&quot;7、接收邮件报警测试&quot;&gt;&lt;/a&gt;7、接收邮件报警测试&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/img/test-email.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;至此，Zabbix邮件告警已完成。&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Zabbix安装教程请移步 &lt;a href=&quot;http://strongit.blog.51cto.com/10020534/1709616&quot;&gt;Zabbix Install&lt;/a&gt;&lt;br&gt;zabbix邮件报警配置步骤说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1、准备一个发送邮件的脚本&lt;/p&gt;
&lt;p&gt;2、修改zabbix配置文件中指定的脚本路径&lt;/p&gt;
&lt;p&gt;3、关联脚本名称&lt;/p&gt;
&lt;p&gt;4、用户设置收件邮箱与报警时间&lt;/p&gt;
&lt;p&gt;5、配置报警触发器&lt;/p&gt;
&lt;p&gt;6、添加多个用户，同时给多个人发邮件&lt;/p&gt;
&lt;p&gt;7、邮件接收测试&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;1、发送邮件的脚本&quot;&gt;&lt;a href=&quot;#1、发送邮件的脚本&quot; class=&quot;headerlink&quot; title=&quot;1、发送邮件的脚本&quot;&gt;&lt;/a&gt;1、发送邮件的脚本&lt;/h3&gt;
    
    </summary>
    
    
      <category term="zabbix" scheme="http://strongit.github.io/tags/zabbix/"/>
    
  </entry>
  
  <entry>
    <title>单节点服务器安装</title>
    <link href="http://strongit.github.io/2016/04/28/rancher-03-Installing-Rancher-Single-Node/"/>
    <id>http://strongit.github.io/2016/04/28/rancher-03-Installing-Rancher-Single-Node/</id>
    <published>2016-04-27T16:00:00.000Z</published>
    <updated>2016-07-08T10:58:55.614Z</updated>
    
    <content type="html">&lt;p&gt;Rancher 使用基于 Docker 容器的部署方式。仅需简单的启动两个容器即可运行。一个容器用于管理 Rancher 服务，其他容器使用代理的方式管理主机或节点。&lt;/p&gt;
&lt;h4 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;任何支持 Docker 1.10.3 的 Linux 发行版。而 &lt;a href=&quot;http://docs.rancher.com/os/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;RancherOS&lt;/a&gt;，Ubuntu，RHEL/CentOS 7 经过了更多测试&lt;/li&gt;
&lt;li&gt;1GB 内存&lt;/li&gt;
&lt;li&gt;MySQL 服务，并且设置 max_connections &amp;gt; 150&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;启动-Rancher-服务器&quot;&gt;&lt;a href=&quot;#启动-Rancher-服务器&quot; class=&quot;headerlink&quot; title=&quot;启动 Rancher 服务器&quot;&gt;&lt;/a&gt;启动 Rancher 服务器&lt;/h4&gt;&lt;p&gt;在安装了 Docker 的服务器上可以很简单的使用命令启动 Rancher 服务&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run &lt;span class=&quot;_&quot;&gt;-d&lt;/span&gt; --restart=always -p 8080:8080 rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h6 id=&quot;RANCHER-UI&quot;&gt;&lt;a href=&quot;#RANCHER-UI&quot; class=&quot;headerlink&quot; title=&quot;RANCHER UI&quot;&gt;&lt;/a&gt;RANCHER UI&lt;/h6&gt;&lt;p&gt;Rancher 的 UI 和 API 将开放 8080 端口。Docker 镜像下载后，还需要 1-2 分钟才可以成功启动并显示页面。&lt;/p&gt;
&lt;p&gt;访问以下地址：&lt;code&gt;http://&amp;lt;SERVER_IP&amp;gt;:8080&lt;/code&gt;，这里&lt;code&gt;&amp;lt;SERVER_IP&amp;gt;&lt;/code&gt;是指运行 Rancher 服务并可用于访问的IP地址。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一旦 UI 处于启动和运行状态，就可以开始 &lt;a href=&quot;!--￼9--&amp;gt;/rancher/installing-rancher/add-host/&quot;&gt;添加主机&lt;/a&gt; 。主机添加到 Rancher 后，您可以开始添加 &lt;a href=&quot;&quot;&gt;服务&lt;/a&gt; 或 使用 &lt;a href=&quot;&quot;&gt;Rancher catalog&lt;/a&gt; 启动模板。&lt;/p&gt;
&lt;h4 id=&quot;开启活动目录或-OpenLDAP-支持-TLS&quot;&gt;&lt;a href=&quot;#开启活动目录或-OpenLDAP-支持-TLS&quot; class=&quot;headerlink&quot; title=&quot;开启活动目录或 OpenLDAP 支持(TLS)&quot;&gt;&lt;/a&gt;开启活动目录或 OpenLDAP 支持(TLS)&lt;/h4&gt;&lt;p&gt;为了开启 Rancher 活动目录或 OpenLDAP 支持(TLS)，Rancher Server 容器在启动时需要加载证书。您需要在运行 Rancher Server 的 Linux 主机上保存证书。&lt;/p&gt;
&lt;p&gt;启动 Rancher 服务并使用绑定挂载卷的方式加载证书，证书在容器中 &lt;strong&gt;必须&lt;/strong&gt; 使用&lt;code&gt;ca.crt&lt;/code&gt;命名。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run &lt;span class=&quot;_&quot;&gt;-d&lt;/span&gt; --restart=always -p 8080:8080 \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  -v /dir_that_contains_the_cert/cert.crt:/ca.crt rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;您可以通过检查 Rancher Server 容器日志确认&lt;code&gt;ca.crt&lt;/code&gt;已经成功传递给 Rancher。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ docker logs &amp;lt;server_container_id&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;在日志的开始，会提示证书 &lt;code&gt;ca.crt&lt;/code&gt; 已经添加。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;DEFAULT_CATTLE_RANCHER_COMPOSE_WINDOWS_URL=https://releases.rancher.com/compose/beta/latest/rancher-compose-windows-386.zip&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Adding ca.crt to Certs.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Updating certificates &lt;span class=&quot;keyword&quot;&gt;in&lt;/span&gt; /etc/ssl/certs... 1 added, 0 removed; done.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Running hooks &lt;span class=&quot;keyword&quot;&gt;in&lt;/span&gt; /etc/ca-certificates/update.d....&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;done.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;done.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[BOOTSTRAP] Starting Cattle&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h4 id=&quot;绑定挂载-MYSQL-卷&quot;&gt;&lt;a href=&quot;#绑定挂载-MYSQL-卷&quot; class=&quot;headerlink&quot; title=&quot;绑定挂载 MYSQL 卷&quot;&gt;&lt;/a&gt;绑定挂载 MYSQL 卷&lt;/h4&gt;&lt;p&gt;如果你想将容器内数据库持久化在主机上，可以在启动 Rancher Server 时绑定并挂载 MySQL 卷。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run &lt;span class=&quot;_&quot;&gt;-d&lt;/span&gt; -v &amp;lt;host_vol&amp;gt;:/var/lib/mysql --restart=always -p 8080:8080 rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;使用这个命令，数据库将持久化在主机上。如果您是一个已有的 Rancher 容器，请参照我们的 &lt;a href=&quot;&quot;&gt;升级文档&lt;/a&gt; 。&lt;/p&gt;
&lt;h4 id=&quot;使用外部数据库&quot;&gt;&lt;a href=&quot;#使用外部数据库&quot; class=&quot;headerlink&quot; title=&quot;使用外部数据库&quot;&gt;&lt;/a&gt;使用外部数据库&lt;/h4&gt;&lt;p&gt;如果您更希望使用外部数据库运行 Rancher Server ，请参照如下操作连接 Rancher 到数据库。您需要一个已经创建好的数据库，但是不需要创建任何数据库对象，Rancher 将会自动创建所有相关的数据库对象。&lt;/p&gt;
&lt;p&gt;以下环境变量需要通过&lt;code&gt;docker run&lt;/code&gt;命令启动 Rancher Server 来支持外部数据库。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CATTLE_DB_CATTLE_MYSQL_HOST:  数据库实例的主机名或IP地址&lt;/li&gt;
&lt;li&gt;CATTLE_DB_CATTLE_MYSQL_PORT:  3306&lt;/li&gt;
&lt;li&gt;CATTLE_DB_CATTLE_MYSQL_NAME:  数据库名&lt;/li&gt;
&lt;li&gt;CATTLE_DB_CATTLE_USERNAME:  用户名&lt;/li&gt;
&lt;li&gt;CATTLE_DB_CATTLE_PASSWORD:  密码&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数据库名称和用户必须已经存在，Rancher 不会创建数据库。 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是一个用于创建数据库和用户的 SQL 命令。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sql CREATE DATABASE IF NOT EXISTS cattle COLLATE = &lt;span class=&quot;string&quot;&gt;&#39;utf8_general_ci&#39;&lt;/span&gt; CHARACTER SET = &lt;span class=&quot;string&quot;&gt;&#39;utf8&#39;&lt;/span&gt;; GRANT ALL ON cattle.* TO &lt;span class=&quot;string&quot;&gt;&#39;cattle&#39;&lt;/span&gt;@&lt;span class=&quot;string&quot;&gt;&#39;%&#39;&lt;/span&gt; IDENTIFIED BY &lt;span class=&quot;string&quot;&gt;&#39;cattle&#39;&lt;/span&gt;; GRANT ALL ON cattle.* TO &lt;span class=&quot;string&quot;&gt;&#39;cattle&#39;&lt;/span&gt;@&lt;span class=&quot;string&quot;&gt;&#39;localhost&#39;&lt;/span&gt; IDENTIFIED BY &lt;span class=&quot;string&quot;&gt;&#39;cattle&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;创建数据库和用户后，使用环境变量启动 Rancher Server。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run &lt;span class=&quot;_&quot;&gt;-d&lt;/span&gt; --restart=always -p 8080:8080 \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; CATTLE_DB_CATTLE_MYSQL_HOST=&amp;lt;hostname or IP of MySQL instance&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; CATTLE_DB_CATTLE_MYSQL_PORT=&amp;lt;port&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; CATTLE_DB_CATTLE_MYSQL_NAME=&amp;lt;Name of Database&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; CATTLE_DB_CATTLE_USERNAME=&amp;lt;Username&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; CATTLE_DB_CATTLE_PASSWORD=&amp;lt;Password&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h4 id=&quot;使用-HTTP-代理环境启动-Rancher-Server&quot;&gt;&lt;a href=&quot;#使用-HTTP-代理环境启动-Rancher-Server&quot; class=&quot;headerlink&quot; title=&quot;使用 HTTP 代理环境启动 Rancher Server&quot;&gt;&lt;/a&gt;使用 HTTP 代理环境启动 Rancher Server&lt;/h4&gt;&lt;p&gt;为了使用 HTTP 代理，需要修改 Docker 服务支持代理。在 Rancher Server 启动前，编辑&lt;code&gt;/etc/defalut/docker&lt;/code&gt;文件指定您的代理并重新启动 Docker 服务。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo vi /etc/default/docker&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;在这个文件中编辑&lt;code&gt;#export http_proxy=&amp;quot;http://127.0.0.1:3128/&amp;quot;&lt;/code&gt;指向您的代理。保存修改并重新启动Docker服务，每个操作系统重新启动Docker服务的方式是不同的。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果您使用 systemd 运行 Docker ，请参照 Docker &lt;a href=&quot;https://docs.docker.com/articles/systemd/#http-proxy&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;文档&lt;/a&gt; 配置 HTTP 代理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;为了加载 &lt;a href=&quot;&quot;&gt;Rancher catalog&lt;/a&gt; ，需要在启动 Rancher Server 时加载 HTTP 代理的环境变量信息。&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run &lt;span class=&quot;_&quot;&gt;-d&lt;/span&gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; http_proxy=&amp;lt;proxyURL&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; https_proxy=&amp;lt;proxyURL&amp;gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;_&quot;&gt;-e&lt;/span&gt; no_proxy=&lt;span class=&quot;string&quot;&gt;&quot;localhost,127.0.0.1&quot;&lt;/span&gt; \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    --restart=always -p 8080:8080 rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;如果不使用 &lt;a href=&quot;&quot;&gt;Rancher catalog&lt;/a&gt; ，则使用正常方式运行启动 Rancher Server 命令。&lt;/p&gt;
&lt;p&gt;在 Rancher 中 &lt;a href=&quot;!--￼10--&amp;gt;/rancher/installing-rancher/add-host/&quot;&gt;添加主机&lt;/a&gt; ，无需使用 HTTP 代理。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;From： &lt;a href=&quot;http://docs.rancher.com/rancher/installing-rancher/installing-server/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://docs.rancher.com/rancher/installing-rancher/installing-server/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Rancher 使用基于 Docker 容器的部署方式。仅需简单的启动两个容器即可运行。一个容器用于管理 Rancher 服务，其他容器使用代理的方式管理主机或节点。&lt;/p&gt;
&lt;h4 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;任何支持 Docker 1.10.3 的 Linux 发行版。而 &lt;a href=&quot;http://docs.rancher.com/os/&quot;&gt;RancherOS&lt;/a&gt;，Ubuntu，RHEL/CentOS 7 经过了更多测试&lt;/li&gt;
&lt;li&gt;1GB 内存&lt;/li&gt;
&lt;li&gt;MySQL 服务，并且设置 max_connections &amp;gt; 150&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;启动-Rancher-服务器&quot;&gt;&lt;a href=&quot;#启动-Rancher-服务器&quot; class=&quot;headerlink&quot; title=&quot;启动 Rancher 服务器&quot;&gt;&lt;/a&gt;启动 Rancher 服务器&lt;/h4&gt;&lt;p&gt;在安装了 Docker 的服务器上可以很简单的使用命令启动 Rancher 服务&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ sudo docker run &lt;span class=&quot;_&quot;&gt;-d&lt;/span&gt; --restart=always -p 8080:8080 rancher/server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h6 id=&quot;RANCHER-UI&quot;&gt;&lt;a href=&quot;#RANCHER-UI&quot; class=&quot;headerlink&quot; title=&quot;RANCHER UI&quot;&gt;&lt;/a&gt;RANCHER UI&lt;/h6&gt;&lt;p&gt;Rancher 的 UI 和 API 将开放 8080 端口。Docker 镜像下载后，还需要 1-2 分钟才可以成功启动并显示页面。&lt;/p&gt;
&lt;p&gt;访问以下地址：&lt;code&gt;http://&amp;lt;SERVER_IP&amp;gt;:8080&lt;/code&gt;，这里&lt;code&gt;&amp;lt;SERVER_IP&amp;gt;&lt;/code&gt;是指运行 Rancher 服务并可用于访问的IP地址。&lt;br&gt;
    
    </summary>
    
    
      <category term="rancher" scheme="http://strongit.github.io/tags/rancher/"/>
    
  </entry>
  
  <entry>
    <title>First Of My Hexo Blog</title>
    <link href="http://strongit.github.io/2016/04/23/hello-world/"/>
    <id>http://strongit.github.io/2016/04/23/hello-world/</id>
    <published>2016-04-22T16:00:00.000Z</published>
    <updated>2016-07-08T10:57:47.047Z</updated>
    
    <content type="html">&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;documentation&lt;/a&gt; for more info. If you get any problems when using Hexo, you can find the answer in &lt;a href=&quot;https://hexo.io/docs/troubleshooting.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;troubleshooting&lt;/a&gt; or you can ask me on &lt;a href=&quot;https://github.com/hexojs/hexo/issues&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;以上是hexo第一篇默认内容，hexo出自台湾大学生tommy351之手,是由Node.js驱动的一款快速、简单且功能强大的博客框架。Node.js是一个可以快速构建网络服务及应用的平台 ，nvm是Node.js的版本控制工具。&lt;/p&gt;
&lt;h3 id=&quot;安装Hexo&quot;&gt;&lt;a href=&quot;#安装Hexo&quot; class=&quot;headerlink&quot; title=&quot;安装Hexo&quot;&gt;&lt;/a&gt;安装Hexo&lt;/h3&gt;&lt;p&gt;平台：Centos6.5 git1.8&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装nvm&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;或&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;或&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ git &lt;span class=&quot;built_in&quot;&gt;clone&lt;/span&gt; https://github.com/creationix/nvm.git ~/.nvm &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; ~/.nvm &amp;amp;&amp;amp; git checkout `git describe --abbrev=0 --tags`&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;export NVM_DIR=&quot;&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$HOME&lt;/span&gt;/.nvm&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~./bashrc &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;[ -s &quot;&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$NVM_DIR&lt;/span&gt;/nvm.sh&lt;span class=&quot;string&quot;&gt;&quot; ] &amp;amp;&amp;amp; . &quot;&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$NVM_DIR&lt;/span&gt;/nvm.sh&lt;span class=&quot;string&quot;&gt;&quot; # This loads nvm&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~./bashrc&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 使用Node.js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ nvm install v5.10.1 &amp;amp;&amp;amp; nvm &lt;span class=&quot;built_in&quot;&gt;alias&lt;/span&gt; default v5.10.1 &amp;amp;&amp;amp; nvm use 5.10.1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;下面安装hexo及相关插件：&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo -g&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-generator-index --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-generator-archive --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-generator-category --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-generator-tag --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-server --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-deployer-git --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-deployer-heroku --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-deployer-rsync --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-deployer-openshift --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-renderer-marked@0.2 --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-renderer-stylus@0.2 --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-generator-feed@1 --save&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install hexo-generator-sitemap@1 --save&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;初始化&quot;&gt;&lt;a href=&quot;#初始化&quot; class=&quot;headerlink&quot; title=&quot;初始化&quot;&gt;&lt;/a&gt;初始化&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ hexo init Myblog &lt;span class=&quot;comment&quot;&gt;#初始化 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ .&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── _config.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── db.json&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── node_modules&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── package.json&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── public&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── scaffolds&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ ├── &lt;span class=&quot;built_in&quot;&gt;source&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ └── themes&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ hexo new [layout] &amp;lt;title&amp;gt;  &lt;span class=&quot;comment&quot;&gt;#创建新文章，默认layout是post&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;文章摘要&quot;&gt;&lt;a href=&quot;#文章摘要&quot; class=&quot;headerlink&quot; title=&quot;文章摘要&quot;&gt;&lt;/a&gt;文章摘要&lt;/h3&gt;&lt;p&gt;在需要显示摘要的地方添加如下代码即可：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ 以上是摘要&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ &amp;lt;!--more--&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ 以下是余下全文&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;文章中插入图片&quot;&gt;&lt;a href=&quot;#文章中插入图片&quot; class=&quot;headerlink&quot; title=&quot;文章中插入图片&quot;&gt;&lt;/a&gt;文章中插入图片&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;链接地址&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对于hexo，使用本地路径：在/source目录下新建一个img文件夹，将图片放入该文件夹下，插入图片时链接即为/img/图片名称。&lt;/p&gt;
&lt;p&gt;More info: &lt;a href=&quot;https://hexo.io/docs/writing.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Writing&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;Run-server&quot;&gt;&lt;a href=&quot;#Run-server&quot; class=&quot;headerlink&quot; title=&quot;Run server&quot;&gt;&lt;/a&gt;Run server&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ hexo server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;More info: &lt;a href=&quot;https://hexo.io/docs/server.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Server&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;Generate-static-files&quot;&gt;&lt;a href=&quot;#Generate-static-files&quot; class=&quot;headerlink&quot; title=&quot;Generate static files&quot;&gt;&lt;/a&gt;Generate static files&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ hexo generate&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;More info: &lt;a href=&quot;https://hexo.io/docs/generating.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Generating&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;Deploy-to-remote-sites&quot;&gt;&lt;a href=&quot;#Deploy-to-remote-sites&quot; class=&quot;headerlink&quot; title=&quot;Deploy to remote sites&quot;&gt;&lt;/a&gt;Deploy to remote sites&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ hexo deploy&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ [root@myou _posts]&lt;span class=&quot;comment&quot;&gt;# tail -6 ../../_config.yml &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ &lt;span class=&quot;comment&quot;&gt;# Deployment&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ &lt;span class=&quot;comment&quot;&gt;## Docs: https://hexo.io/docs/deployment.html&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ deploy:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$   &lt;span class=&quot;built_in&quot;&gt;type&lt;/span&gt;: git&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$   repo: https://github.com/strongit/strongit.github.io&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$   branch: master&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;More info: &lt;a href=&quot;https://hexo.io/docs/deployment.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Deployment&lt;/a&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot;&gt;documentation&lt;/a&gt; for more info. If you get any problems when using Hexo, you can find the answer in &lt;a href=&quot;https://hexo.io/docs/troubleshooting.html&quot;&gt;troubleshooting&lt;/a&gt; or you can ask me on &lt;a href=&quot;https://github.com/hexojs/hexo/issues&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;以上是hexo第一篇默认内容，hexo出自台湾大学生tommy351之手,是由Node.js驱动的一款快速、简单且功能强大的博客框架。Node.js是一个可以快速构建网络服务及应用的平台 ，nvm是Node.js的版本控制工具。&lt;/p&gt;
&lt;h3 id=&quot;安装Hexo&quot;&gt;&lt;a href=&quot;#安装Hexo&quot; class=&quot;headerlink&quot; title=&quot;安装Hexo&quot;&gt;&lt;/a&gt;安装Hexo&lt;/h3&gt;&lt;p&gt;平台：Centos6.5 git1.8&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装nvm&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;或&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;或&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ git &lt;span class=&quot;built_in&quot;&gt;clone&lt;/span&gt; https://github.com/creationix/nvm.git ~/.nvm &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; ~/.nvm &amp;amp;&amp;amp; git checkout `git describe --abbrev=0 --tags`&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;export NVM_DIR=&quot;&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$HOME&lt;/span&gt;/.nvm&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~./bashrc &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;[ -s &quot;&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$NVM_DIR&lt;/span&gt;/nvm.sh&lt;span class=&quot;string&quot;&gt;&quot; ] &amp;amp;&amp;amp; . &quot;&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$NVM_DIR&lt;/span&gt;/nvm.sh&lt;span class=&quot;string&quot;&gt;&quot; # This loads nvm&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~./bashrc&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 使用Node.js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ nvm install v5.10.1 &amp;amp;&amp;amp; nvm &lt;span class=&quot;built_in&quot;&gt;alias&lt;/span&gt; default v5.10.1 &amp;amp;&amp;amp; nvm use 5.10.1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;下面安装hexo及相关插件：&lt;br&gt;
    
    </summary>
    
    
      <category term="Hexo" scheme="http://strongit.github.io/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>EMOS的安装与使用</title>
    <link href="http://strongit.github.io/2016/04/23/EMOS/"/>
    <id>http://strongit.github.io/2016/04/23/EMOS/</id>
    <published>2016-04-22T16:00:00.000Z</published>
    <updated>2016-07-21T09:20:41.498Z</updated>
    
    <content type="html">&lt;p&gt;EMOS是一个基于CentOS，集成了ExtMail Server全部组件的小型Linux系统，10分钟即可完成安装及配置，成为完备的企业邮局系统。它的诞生将彻底改变邮件系统复杂的安装和配置局面，使只具备基本linux知识的用户就可轻松架设邮局。&lt;/p&gt;
&lt;h2 id=&quot;获取软件&quot;&gt;&lt;a href=&quot;#获取软件&quot; class=&quot;headerlink&quot; title=&quot;获取软件&quot;&gt;&lt;/a&gt;获取软件&lt;/h2&gt;&lt;h3 id=&quot;百度云盘地址：&quot;&gt;&lt;a href=&quot;#百度云盘地址：&quot; class=&quot;headerlink&quot; title=&quot;百度云盘地址：&quot;&gt;&lt;/a&gt;&lt;strong&gt;百度云盘地址：&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://pan.baidu.com/s/1nvaSrUh&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;EMOS&lt;/a&gt; 访问密码：lcr4&lt;/p&gt;
&lt;h3 id=&quot;yum安装方式：&quot;&gt;&lt;a href=&quot;#yum安装方式：&quot; class=&quot;headerlink&quot; title=&quot;yum安装方式：&quot;&gt;&lt;/a&gt;&lt;strong&gt;yum安装方式：&lt;/strong&gt;&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@emos /]&lt;span class=&quot;comment&quot;&gt;# vi /etc/yum.repos.d/EMOS-Base.repo&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# EMOS-Base.repo&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Created by ExtMail Dev Team: http://www.extmail.org/&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# $Id$&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[EMOS-base]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;name=EMOS-Base&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;baseurl=http://mirror.extmail.org/yum/emos/1.5/os/&lt;span class=&quot;variable&quot;&gt;$basearch&lt;/span&gt;/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;gpgcheck=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;priority=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;protect=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[EMOS-update]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;name=EMOS-Updates&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/&lt;span class=&quot;variable&quot;&gt;$basearch&lt;/span&gt;/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;gpgcheck=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;priority=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;protect=0&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;保存后，然后尝试执行一下yum list 等操作，看看是否已经成功；&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;使用技巧：&quot;&gt;&lt;a href=&quot;#使用技巧：&quot; class=&quot;headerlink&quot; title=&quot;使用技巧：&quot;&gt;&lt;/a&gt;&lt;strong&gt;使用技巧：&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;安装过程很简单，以下是使用过后觉得可以优化的地方：&lt;/p&gt;
&lt;h3 id=&quot;webmail中设置显示默认域名，不显示ip&quot;&gt;&lt;a href=&quot;#webmail中设置显示默认域名，不显示ip&quot; class=&quot;headerlink&quot; title=&quot;webmail中设置显示默认域名，不显示ip&quot;&gt;&lt;/a&gt;webmail中设置显示默认域名，不显示ip&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@emos /]&lt;span class=&quot;comment&quot;&gt;# vi /var/www/extsuite/extmail/html/default/index.html&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;156                 &amp;lt;TD&amp;gt;&amp;lt;%password%&amp;gt;&amp;lt;/TD&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;157                 &amp;lt;TD&amp;gt;&amp;lt;INPUT TYPE=&lt;span class=&quot;string&quot;&gt;&quot;password&quot;&lt;/span&gt; class=&lt;span class=&quot;string&quot;&gt;&quot;input_n&quot;&lt;/span&gt; NAME=&lt;span class=&quot;string&quot;&gt;&quot;password&quot;&lt;/span&gt;&amp;gt;&amp;lt;/TD&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;158         &amp;lt;/TR&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;159         &amp;lt;TR&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;160                 &amp;lt;TD&amp;gt;&amp;lt;%domain%&amp;gt;&amp;lt;/TD&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;161                 &amp;lt;TD&amp;gt;&amp;lt;INPUT TYPE=&lt;span class=&quot;string&quot;&gt;&quot;text&quot;&lt;/span&gt; class=&lt;span class=&quot;string&quot;&gt;&quot;input_n&quot;&lt;/span&gt; NAME=&lt;span class=&quot;string&quot;&gt;&quot;domain&quot;&lt;/span&gt; value=&lt;span class=&quot;string&quot;&gt;&quot;域名&quot;&lt;/span&gt;&amp;gt;&amp;lt;/TD&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;官方wiki&quot;&gt;&lt;a href=&quot;#官方wiki&quot; class=&quot;headerlink&quot; title=&quot;官方wiki&quot;&gt;&lt;/a&gt;&lt;strong&gt;官方wiki&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.extmail.org/doku.php&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;Main Page&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.extmail.org/forum/forum-15-1.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;forum&lt;/a&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;EMOS是一个基于CentOS，集成了ExtMail Server全部组件的小型Linux系统，10分钟即可完成安装及配置，成为完备的企业邮局系统。它的诞生将彻底改变邮件系统复杂的安装和配置局面，使只具备基本linux知识的用户就可轻松架设邮局。&lt;/p&gt;
&lt;h2 id=&quot;获取软件&quot;&gt;&lt;a href=&quot;#获取软件&quot; class=&quot;headerlink&quot; title=&quot;获取软件&quot;&gt;&lt;/a&gt;获取软件&lt;/h2&gt;&lt;h3 id=&quot;百度云盘地址：&quot;&gt;&lt;a href=&quot;#百度云盘地址：&quot; class=&quot;headerlink&quot; title=&quot;百度云盘地址：&quot;&gt;&lt;/a&gt;&lt;strong&gt;百度云盘地址：&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://pan.baidu.com/s/1nvaSrUh&quot;&gt;EMOS&lt;/a&gt; 访问密码：lcr4&lt;/p&gt;
&lt;h3 id=&quot;yum安装方式：&quot;&gt;&lt;a href=&quot;#yum安装方式：&quot; class=&quot;headerlink&quot; title=&quot;yum安装方式：&quot;&gt;&lt;/a&gt;&lt;strong&gt;yum安装方式：&lt;/strong&gt;&lt;/h3&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;[root@emos /]&lt;span class=&quot;comment&quot;&gt;# vi /etc/yum.repos.d/EMOS-Base.repo&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# EMOS-Base.repo&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Created by ExtMail Dev Team: http://www.extmail.org/&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# $Id$&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[EMOS-base]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;name=EMOS-Base&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;baseurl=http://mirror.extmail.org/yum/emos/1.5/os/&lt;span class=&quot;variable&quot;&gt;$basearch&lt;/span&gt;/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;gpgcheck=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;priority=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;protect=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[EMOS-update]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;name=EMOS-Updates&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/&lt;span class=&quot;variable&quot;&gt;$basearch&lt;/span&gt;/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;gpgcheck=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;priority=0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;protect=0&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;保存后，然后尝试执行一下yum list 等操作，看看是否已经成功；&lt;br&gt;
    
    </summary>
    
    
      <category term="Extmail" scheme="http://strongit.github.io/tags/Extmail/"/>
    
  </entry>
  
</feed>
