-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
127 lines (75 loc) · 141 KB
/
Copy pathatom.xml
File metadata and controls
127 lines (75 loc) · 141 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Wdmcheng</title>
<subtitle>Java Coder</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://www.wdmcheng.cn/"/>
<updated>2019-05-27T07:21:11.000Z</updated>
<id>https://www.wdmcheng.cn/</id>
<author>
<name>雾都迷城</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Curator-管理你的Elasticsearch索引</title>
<link href="https://www.wdmcheng.cn/Curator-%E7%AE%A1%E7%90%86%E4%BD%A0%E7%9A%84Elasticsearch%E7%B4%A2%E5%BC%95/"/>
<id>https://www.wdmcheng.cn/Curator-管理你的Elasticsearch索引/</id>
<published>2019-05-27T06:02:14.000Z</published>
<updated>2019-05-27T07:21:11.000Z</updated>
<content type="html"><![CDATA[<h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><p>我这里以 CentOS 7 为例来进行说明。</p><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p>官方推荐最简单的安装方式就是使用 <code>pip</code>,没错,这货是 <code>python</code> 写的。</p><ol><li><p>最简化安装的 CentOS,虽然自带了 <code>python</code>,但是没有相关头文件,无法安装 <code>pip</code>,干脆编译安装 <code>python3</code>。既然要编译,先装个开发工具包再说</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum -y groupinstall <span class="string">'Development Tools'</span></span><br></pre></td></tr></table></figure></li><li><p>编译 <code>python3</code>,一定要注意 <code>OpenSSL</code> 支持是不是启用了,否则后面没办法下载各种包了,还需要这些依赖,不安装会报错的(都是试错过后的总结,都是眼泪😢)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum -y install openssl openssl-devel zlib zlib-devel libffi-devel</span><br></pre></td></tr></table></figure></li><li><p>下载 <code>python3</code> 的源码包,然后解压编译并执行 <code>configure</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载解压</span></span><br><span class="line">wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz</span><br><span class="line">tar -Jxf Python-3.7.3.tar.xz</span><br><span class="line"><span class="built_in">cd</span> Python-3.7.3/</span><br><span class="line"><span class="comment"># 执行配置</span></span><br><span class="line">./configure</span><br></pre></td></tr></table></figure></li><li><p>执行完 <code>configure</code> 后,注意看 <code>OpenSSL</code> 支持是不是启用了。如图是成功启用的。<br><img src="OpenSSL.png" alt="包含 OpenSSL 支持"></p></li><li><p>后面编译安装</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure></li><li><p>这个时候没有 <code>pip</code> 命令,只有 <code>pip3</code>。不用别名处理了,顺手更新一下 <code>pip</code> 版本,也会自动安装 <code>pip</code> 这个命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip3 install --upgrade pip</span><br></pre></td></tr></table></figure></li><li><p>进入正题,安装 <code>curator</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip3 install elasticsearch-curator</span><br></pre></td></tr></table></figure></li></ol><h3 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h3><ol><li><p>执行 <code>curator</code> 命令时,默认读取的配置文件在 <code>~/.curator/curator.yml</code>。创建配置文件,内容如下</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="comment"># Remember, leave a key empty if there is no value. None will be a string,</span></span><br><span class="line"><span class="comment"># not a Python "NoneType"</span></span><br><span class="line"><span class="attr">client:</span></span><br><span class="line"> <span class="comment"># ES 节点列表</span></span><br><span class="line"><span class="attr"> hosts:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="number">10.0</span><span class="number">.79</span><span class="number">.14</span></span><br><span class="line"><span class="bullet"> -</span> <span class="number">10.0</span><span class="number">.79</span><span class="number">.22</span></span><br><span class="line"><span class="bullet"> -</span> <span class="number">10.0</span><span class="number">.79</span><span class="number">.23</span></span><br><span class="line"><span class="bullet"> -</span> <span class="number">10.0</span><span class="number">.79</span><span class="number">.24</span></span><br><span class="line"><span class="attr"> port:</span> <span class="number">9200</span></span><br><span class="line"><span class="attr"> url_prefix:</span></span><br><span class="line"><span class="attr"> use_ssl:</span> <span class="literal">False</span></span><br><span class="line"><span class="attr"> certificate:</span></span><br><span class="line"><span class="attr"> client_cert:</span></span><br><span class="line"><span class="attr"> client_key:</span></span><br><span class="line"><span class="attr"> ssl_no_validate:</span> <span class="literal">False</span></span><br><span class="line"><span class="attr"> http_auth:</span> <span class="attr">username:password</span></span><br><span class="line"><span class="attr"> timeout:</span> <span class="number">30</span></span><br><span class="line"><span class="attr"> master_only:</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="attr">logging:</span></span><br><span class="line"><span class="attr"> loglevel:</span> <span class="string">INFO</span></span><br><span class="line"> <span class="comment"># logfile 文件路径,一定要保证文件的父级文件夹存在</span></span><br><span class="line"><span class="attr"> logfile:</span> <span class="string">/data/es-curator-log/es-curator.log</span></span><br><span class="line"><span class="attr"> logformat:</span> <span class="string">default</span></span><br><span class="line"><span class="attr"> blacklist:</span> <span class="string">['elasticsearch',</span> <span class="string">'urllib3'</span><span class="string">]</span></span><br></pre></td></tr></table></figure><p>上面的 <code>http_auth</code> 部分,是用户名和密码,用 <code>:</code> 分隔。更多配置文件写法,参考 <span class="exturl" data-url="aHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lbGFzdGljc2VhcmNoL2NsaWVudC9jdXJhdG9yL2N1cnJlbnQvY29uZmlnZmlsZS5odG1s" title="https://www.elastic.co/guide/en/elasticsearch/client/curator/current/configfile.html">官方文档<i class="fa fa-external-link"></i></span></p></li><li><p>创建任务文件,这里提供一个参考,内容如下。详细信息参考<span class="exturl" data-url="aHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lbGFzdGljc2VhcmNoL2NsaWVudC9jdXJhdG9yL2N1cnJlbnQvYWN0aW9uZmlsZS5odG1s" title="https://www.elastic.co/guide/en/elasticsearch/client/curator/current/actionfile.html">官方文档<i class="fa fa-external-link"></i></span></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="comment"># Remember, leave a key empty if there is no value. None will be a string,</span></span><br><span class="line"><span class="comment"># not a Python "NoneType"</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="comment"># Also remember that all examples have 'disable_action' set to True. If you</span></span><br><span class="line"><span class="comment"># want to use this action as a template, be sure to set this to False after</span></span><br><span class="line"><span class="comment"># copying it.</span></span><br><span class="line"><span class="attr">actions:</span></span><br><span class="line"> <span class="number">1</span><span class="string">:</span></span><br><span class="line"><span class="attr"> action:</span> <span class="string">delete_indices</span></span><br><span class="line"><span class="attr"> description:</span> <span class="string">>-</span></span><br><span class="line"> <span class="string">Delete</span> <span class="string">indices</span> <span class="string">older</span> <span class="string">than</span> <span class="number">31</span> <span class="string">days</span> <span class="string">(based</span> <span class="string">on</span> <span class="string">index</span> <span class="string">name),</span> <span class="string">for</span> <span class="bullet">-pro-</span> <span class="string">indices.</span></span><br><span class="line"></span><br><span class="line"> <span class="string">删除31天之前的</span> <span class="bullet">-pro-</span> <span class="string">索引</span></span><br><span class="line"><span class="attr"> options:</span></span><br><span class="line"><span class="attr"> ignore_empty_list:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> timeout_override:</span> <span class="number">300</span></span><br><span class="line"><span class="attr"> continue_if_exception:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> disable_action:</span> <span class="literal">False</span></span><br><span class="line"><span class="attr"> filters:</span></span><br><span class="line"><span class="attr"> - filtertype:</span> <span class="string">pattern</span></span><br><span class="line"><span class="attr"> kind:</span> <span class="string">regex</span></span><br><span class="line"><span class="attr"> value:</span> <span class="string">'.*-pro-.*'</span></span><br><span class="line"><span class="attr"> exclude:</span></span><br><span class="line"><span class="attr"> - filtertype:</span> <span class="string">age</span></span><br><span class="line"><span class="attr"> source:</span> <span class="string">name</span></span><br><span class="line"><span class="attr"> direction:</span> <span class="string">older</span></span><br><span class="line"><span class="attr"> timestring:</span> <span class="string">'%Y.%m.%d'</span></span><br><span class="line"><span class="attr"> unit:</span> <span class="string">days</span></span><br><span class="line"><span class="attr"> unit_count:</span> <span class="number">31</span></span><br><span class="line"><span class="attr"> exclude:</span></span><br><span class="line"> <span class="number">2</span><span class="string">:</span></span><br><span class="line"><span class="attr"> action:</span> <span class="string">delete_indices</span></span><br><span class="line"><span class="attr"> description:</span> <span class="string">>-</span></span><br><span class="line"> <span class="string">Delete</span> <span class="string">indices</span> <span class="string">older</span> <span class="string">than</span> <span class="number">7</span> <span class="string">days</span> <span class="string">(based</span> <span class="string">on</span> <span class="string">index</span> <span class="string">name),</span> <span class="string">except</span> <span class="bullet">-pro-</span> <span class="string">indices.</span></span><br><span class="line"></span><br><span class="line"> <span class="string">删除7天之前的非</span> <span class="bullet">-pro-</span> <span class="string">索引</span></span><br><span class="line"><span class="attr"> options:</span></span><br><span class="line"><span class="attr"> ignore_empty_list:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> timeout_override:</span> <span class="number">300</span></span><br><span class="line"><span class="attr"> continue_if_exception:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> disable_action:</span> <span class="literal">False</span></span><br><span class="line"><span class="attr"> filters:</span></span><br><span class="line"><span class="attr"> - filtertype:</span> <span class="string">pattern</span></span><br><span class="line"><span class="attr"> kind:</span> <span class="string">regex</span></span><br><span class="line"><span class="attr"> value:</span> <span class="string">'.*-pro-.*'</span></span><br><span class="line"><span class="attr"> exclude:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> - filtertype:</span> <span class="string">age</span></span><br><span class="line"><span class="attr"> source:</span> <span class="string">name</span></span><br><span class="line"><span class="attr"> direction:</span> <span class="string">older</span></span><br><span class="line"><span class="attr"> timestring:</span> <span class="string">'%Y.%m.%d'</span></span><br><span class="line"><span class="attr"> unit:</span> <span class="string">days</span></span><br><span class="line"><span class="attr"> unit_count:</span> <span class="number">7</span></span><br><span class="line"><span class="attr"> exclude:</span></span><br><span class="line"> <span class="number">3</span><span class="string">:</span></span><br><span class="line"><span class="attr"> action:</span> <span class="string">delete_indices</span></span><br><span class="line"><span class="attr"> description:</span> <span class="string">>-</span></span><br><span class="line"> <span class="string">Delete</span> <span class="string">indices</span> <span class="string">older</span> <span class="string">than</span> <span class="number">3</span> <span class="string">days</span> <span class="string">(based</span> <span class="string">on</span> <span class="string">index</span> <span class="string">name),</span> <span class="string">for</span> <span class="string">system</span> <span class="string">indices.</span></span><br><span class="line"></span><br><span class="line"> <span class="string">删除3天之前的系统索引</span></span><br><span class="line"><span class="attr"> options:</span></span><br><span class="line"><span class="attr"> ignore_empty_list:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> timeout_override:</span> <span class="number">300</span></span><br><span class="line"><span class="attr"> continue_if_exception:</span> <span class="literal">True</span></span><br><span class="line"><span class="attr"> disable_action:</span> <span class="literal">False</span></span><br><span class="line"><span class="attr"> filters:</span></span><br><span class="line"><span class="attr"> - filtertype:</span> <span class="string">pattern</span></span><br><span class="line"><span class="attr"> kind:</span> <span class="string">regex</span></span><br><span class="line"><span class="attr"> value:</span> <span class="string">'^\..*-.*'</span></span><br><span class="line"><span class="attr"> exclude:</span></span><br><span class="line"><span class="attr"> - filtertype:</span> <span class="string">age</span></span><br><span class="line"><span class="attr"> source:</span> <span class="string">name</span></span><br><span class="line"><span class="attr"> direction:</span> <span class="string">older</span></span><br><span class="line"><span class="attr"> timestring:</span> <span class="string">'%Y.%m.%d'</span></span><br><span class="line"><span class="attr"> unit:</span> <span class="string">days</span></span><br><span class="line"><span class="attr"> unit_count:</span> <span class="number">3</span></span><br><span class="line"><span class="attr"> exclude:</span></span><br></pre></td></tr></table></figure></li><li><p>现在可以使用 <code>--dry-run</code> 参数试运行测试一下(这个参数的作用就是不会真正的去执行,只是模拟)。<code>--config ~/.curator/curator.yml</code> 可省略</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curator --config ~/.curator/curator.yml --dry-run ~/delete_indecies.yml</span><br></pre></td></tr></table></figure></li></ol><h3 id="配置定时任务"><a href="#配置定时任务" class="headerlink" title="配置定时任务"></a>配置定时任务</h3><p>先说一下用法,后面再列几篇文章供参考</p><ol><li>执行 <code>crontab -e</code>,会自动打开 <code>vim</code> 编辑器</li><li>我这里是每隔6个小时执行一次,因此添加一行 <code>0 0,6,12,18 * * * /usr/local/bin/curator ~/delete_indecies.yml</code></li><li>保存后大功告成</li></ol><h3 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h3><ul><li><span class="exturl" data-url="aHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lbGFzdGljc2VhcmNoL2NsaWVudC9jdXJhdG9yL2N1cnJlbnQvaW5kZXguaHRtbA==" title="https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html">Curator 文档<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTE5ODQwNi9hcnRpY2xlL2RldGFpbHMvNzkwNzU1MDI=" title="https://blog.csdn.net/weixin_39198406/article/details/79075502">crontab 参数解释<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vbWluZ2ZvcnlvdS9wLzM5MzA2MzYuaHRtbA==" title="https://www.cnblogs.com/mingforyou/p/3930636.html">Linux 定时任务<i class="fa fa-external-link"></i></span></li></ul>]]></content>
<summary type="html">
当你需要定期删除或者关闭ES的索引时怎么办?自己写个程序或者脚本,调用API吗?不需要的,Curator可以帮你做到。官方出品哦。
</summary>
<category term="elastic" scheme="https://www.wdmcheng.cn/tags/elastic/"/>
<category term="elasticsearch" scheme="https://www.wdmcheng.cn/tags/elasticsearch/"/>
<category term="es" scheme="https://www.wdmcheng.cn/tags/es/"/>
<category term="curator" scheme="https://www.wdmcheng.cn/tags/curator/"/>
<category term="python" scheme="https://www.wdmcheng.cn/tags/python/"/>
<category term="python3" scheme="https://www.wdmcheng.cn/tags/python3/"/>
<category term="pip" scheme="https://www.wdmcheng.cn/tags/pip/"/>
<category term="crontab" scheme="https://www.wdmcheng.cn/tags/crontab/"/>
</entry>
<entry>
<title>macOS文件系统区分大小写的环境配置</title>
<link href="https://www.wdmcheng.cn/macOS%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%8C%BA%E5%88%86%E5%A4%A7%E5%B0%8F%E5%86%99%E7%9A%84%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/"/>
<id>https://www.wdmcheng.cn/macOS文件系统区分大小写的环境配置/</id>
<published>2019-05-26T07:53:31.000Z</published>
<updated>2019-05-26T16:22:21.000Z</updated>
<content type="html"><![CDATA[<h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>macOS 的文件系统不区分大小写,但在开发编码的过程中,可能会下载到需要区分大小写的文件——Git 还可以通过配置控制一下,SVN 中出现这种问题的概率就不小了——因此想要找到一个解决办法。</p><ol><li>如果将文件系统直接改成区分大小写的,又会有一些软件无法正常使用(譬如 Adobe 家的),所以不想自找麻烦。</li><li>如果对磁盘进行分区,分出一块空间专门用来开发,格式化为区分大小写的。这就会造成一定程度的磁盘空间浪费(不继续 Windows 的使用习惯了,就是不想分区),总是会很心疼的,毕竟 mac 的磁盘空间很贵。</li></ol><h2 id="方案"><a href="#方案" class="headerlink" title="方案"></a>方案</h2><p>后来了解到 mac 的稀疏磁盘映像(sparseimage)比较不错</p><ul><li>对映像文件的操作与 <code>dmg</code> 格式相同</li><li>使用多少空间,其真实占用空间就是那么大,不会造成空间浪费。假设新建一个稀疏磁盘映像,大小为50GB,里面存了5GB的代码,那么这个映像文件实际占用5GB存储空间</li><li>映像声明的空间不够了,还可以随时扩容。当然前提是你的物理磁盘装得下</li><li>性能几乎无损</li><li>需要备份、迁移代码库?零散文件的读写哪有单个文件快呀,直接复制磁盘映像,你的代码库就备份了</li></ul><p>嗯,最后决定建一个稀疏磁盘映像,格式化成区分大小写的分区格式,来保存我的代码库</p><h2 id="实施"><a href="#实施" class="headerlink" title="实施"></a>实施</h2><h3 id="建立磁盘映像"><a href="#建立磁盘映像" class="headerlink" title="建立磁盘映像"></a>建立磁盘映像</h3><ol><li><p>打开磁盘工具,新建空白映像(图1)</p><ul><li>其中 <code>存储为</code> 和 <code>位置</code> 随意,我这里是 <code>~/DevCaseSensitive.sparsebundle</code></li><li>下面的 <code>名称</code> 定义的是分区名称,也就是磁盘的挂载点了</li><li>大小根据自身情况来填</li><li>格式我选的是 <code>APFS(区分大小写)</code></li><li>分区就单个分区就行,选择 <code>GUID 分区图</code></li><li>映像格式选择 <code>稀疏捆绑磁盘映像</code><br><img src="图1.png" alt="图1"></li></ul></li><li><p>然后就可以把代码都写入这个分区了,我这里的挂载点是 <code>/Volumes/DevCaseSensitive</code></p></li><li>如果你有很多项目了,又懒得一个一个去处理,用软连接吧(先学会用,注意数据安全)</li><li>如果映像空间不够了,可以扩容的<ul><li>关闭所有使用该分区的程序</li><li>卸载该磁盘映像</li><li>使用 <code>hdiutil resize -size 50g ~/DevCaseSensitive.sparseimage</code> 来修改大小</li><li><code>hdiutil attach ~/DevCaseSensitive.sparseimage</code> 重新挂载磁盘映像</li><li>使用命令行或者磁盘工具调整分区大小</li></ul></li></ol><h3 id="开机自动挂载"><a href="#开机自动挂载" class="headerlink" title="开机自动挂载"></a>开机自动挂载</h3><p>我在磁盘映像里还放了 IDE 工具(JetBrains 的 IntelliJ IDEA),而 JetBrains Toolbox 会开机自启。又由于 macOS 登录后的各程序启动都是并行的,没有先后顺序,因此不能直接将磁盘映像添加到登录项<br><code>LaunchDaemons</code> 是在系统启动后就会执行,优先于登录项,因此这里采用这种机制</p><ol><li>参考文章<ul><li><span class="exturl" data-url="aHR0cHM6Ly9hZm9vLm1lL3Bvc3RzLzIwMTQtMTItMTItdW5kZXJzdGFuZGluZy1sYXVuY2gtZGFlbW9ucy1vZi1tYWNvc3guaHRtbA==" title="https://afoo.me/posts/2014-12-12-understanding-launch-daemons-of-macosx.html">了解LaunchDaemons<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9zc3BhaS5jb20vcG9zdC8zNzI1OA==" title="https://sspai.com/post/37258">利用 Launchd 定制 Mac 启动任务<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly95cS5hbGl5dW4uY29tL2FydGljbGVzLzM0MjE2Ni8=" title="https://yq.aliyun.com/articles/342166/">Mac OS启动服务优化高级篇(launchd tuning)<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cDovL3d3dy50YW5oYW8ubWUvdGFsay8xMjg3Lmh0bWwv" title="http://www.tanhao.me/talk/1287.html/">Mac OSX的开机启动配置<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvYXJjaGl2ZS90ZWNobm90ZXMvdG4yMDgzL19pbmRleC5odG1s" title="https://developer.apple.com/library/archive/technotes/tn2083/_index.html">Daemons and Agents<i class="fa fa-external-link"></i></span></li></ul></li><li><p><code>LaunchAgents</code> 的目录都是登录项,不能用,<code>/System/Library/LaunchDaemons</code> 是系统级的,一般不动,因此目录选择 <code>/Library/LaunchDaemons</code><br>在 <code>/Library/LaunchDaemons</code> 下新建文件 <code>cn.wdmcheng.sparseimage-loader.plist</code>,内容如下(<code>xxxxx</code> 是用户名)</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="meta"><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></span></span><br><span class="line"><span class="tag"><<span class="name">plist</span> <span class="attr">version</span>=<span class="string">"1.0"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">dict</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">key</span>></span>Label<span class="tag"></<span class="name">key</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">string</span>></span>cn.wdmcheng.sparseimage-loader<span class="tag"></<span class="name">string</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">key</span>></span>ProgramArguments<span class="tag"></<span class="name">key</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">array</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">string</span>></span>hdiutil<span class="tag"></<span class="name">string</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">string</span>></span>attach<span class="tag"></<span class="name">string</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">string</span>></span>/Users/xxxxx/DevCaseSensitive.sparseimage<span class="tag"></<span class="name">string</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">array</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">key</span>></span>RunAtLoad<span class="tag"></<span class="name">key</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">true</span>/></span></span><br><span class="line"> <span class="tag"><<span class="name">key</span>></span>StandardErrorPath<span class="tag"></<span class="name">key</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">string</span>></span>/dev/null<span class="tag"></<span class="name">string</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">key</span>></span>StandardOutPath<span class="tag"></<span class="name">key</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">string</span>></span>/dev/null<span class="tag"></<span class="name">string</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">dict</span>></span></span><br><span class="line"><span class="tag"></<span class="name">plist</span>></span></span><br></pre></td></tr></table></figure></li><li><p>执行命令 <code>launchctl load /Library/LaunchDaemons/cn.wdmcheng.sparseimage-loader.plist</code> 加载配置,重启即可生效</p></li></ol><h3 id="IDE-配置"><a href="#IDE-配置" class="headerlink" title="IDE 配置"></a>IDE 配置</h3><p>JetBrains 家的 IDE 需要配置一个属性,来指定使用区分大小写的模式<br>在 IDE 的 JVM 参数上,增加 <code>-Didea.case.sensitive.fs=true</code> 即可<br>接下来就可以正常使用啦</p>]]></content>
<summary type="html">
macOS的文件系统默认不区分大小写,这对于开发人员的某些代码来说不太友好。本文介绍一下不重装不分区的解决办法,让你随心所欲。
</summary>
<category term="macOS" scheme="https://www.wdmcheng.cn/tags/macOS/"/>
<category term="mac" scheme="https://www.wdmcheng.cn/tags/mac/"/>
<category term="LaunchDaemons" scheme="https://www.wdmcheng.cn/tags/LaunchDaemons/"/>
<category term="CaseSensitive" scheme="https://www.wdmcheng.cn/tags/CaseSensitive/"/>
<category term="sparseimage" scheme="https://www.wdmcheng.cn/tags/sparseimage/"/>
</entry>
<entry>
<title>macOS调整Launchpad图标大小</title>
<link href="https://www.wdmcheng.cn/macOS%E8%B0%83%E6%95%B4Launchpad%E5%9B%BE%E6%A0%87%E5%A4%A7%E5%B0%8F/"/>
<id>https://www.wdmcheng.cn/macOS调整Launchpad图标大小/</id>
<published>2019-05-26T06:10:06.000Z</published>
<updated>2019-05-26T16:12:45.000Z</updated>
<content type="html"><![CDATA[<h2 id="调整方式"><a href="#调整方式" class="headerlink" title="调整方式"></a>调整方式</h2><p>首先要打开Shell</p><h3 id="调整可以显示多少行"><a href="#调整可以显示多少行" class="headerlink" title="调整可以显示多少行"></a>调整可以显示多少行</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 最后数字7即为最多显示7行</span></span><br><span class="line">defaults write com.apple.dock springboard-rows -int 7</span><br></pre></td></tr></table></figure><h3 id="调整可以显示多少列"><a href="#调整可以显示多少列" class="headerlink" title="调整可以显示多少列"></a>调整可以显示多少列</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 最后数字8即为最多显示8列</span></span><br><span class="line">defaults write com.apple.dock springboard-columns -int 8</span><br></pre></td></tr></table></figure><h3 id="最后重启Dock生效"><a href="#最后重启Dock生效" class="headerlink" title="最后重启Dock生效"></a>最后重启Dock生效</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启Dock</span></span><br><span class="line">killall Dock</span><br></pre></td></tr></table></figure><h3 id="使Launchpad重新排列图标"><a href="#使Launchpad重新排列图标" class="headerlink" title="使Launchpad重新排列图标"></a>使Launchpad重新排列图标</h3><p>如果你已经装了很多软件,修改之后还要手动调整图标,可以用下面的办法偷懒<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重置LaunchPad的图标排列</span></span><br><span class="line">defaults write com.apple.dock ResetLaunchPad -bool TRUE</span><br><span class="line"><span class="comment"># 重启Dock</span></span><br><span class="line">killall Dock</span><br></pre></td></tr></table></figure></p><h3 id="恢复默认图标大小"><a href="#恢复默认图标大小" class="headerlink" title="恢复默认图标大小"></a>恢复默认图标大小</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">defaults delete com.apple.dock springboard-rows</span><br><span class="line">defaults delete com.apple.dock springboard-columns</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
macOS系统Launchpad图标很大,每页显示数量很少。本文记录一下调整大小的方法,让你的mac用着更舒服。
</summary>
<category term="macOS" scheme="https://www.wdmcheng.cn/tags/macOS/"/>
<category term="mac" scheme="https://www.wdmcheng.cn/tags/mac/"/>
<category term="LaunchPad" scheme="https://www.wdmcheng.cn/tags/LaunchPad/"/>
</entry>
<entry>
<title>记录一下本博客搭建过程</title>
<link href="https://www.wdmcheng.cn/%E8%AE%B0%E5%BD%95%E4%B8%80%E4%B8%8B%E6%9C%AC%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA%E8%BF%87%E7%A8%8B/"/>
<id>https://www.wdmcheng.cn/记录一下本博客搭建过程/</id>
<published>2019-03-26T14:19:22.000Z</published>
<updated>2019-05-26T16:12:45.000Z</updated>
<content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><ol><li>欢迎在文末留言,共同进步。</li><li>本文采用<span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo" title="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">署名-非商业性使用-相同方式共享 4.0 国际<i class="fa fa-external-link"></i></span>(<span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC8=" title="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0<i class="fa fa-external-link"></i></span>) 许可协议,转载请注明出处!</li></ol><h2 id="博客搭建"><a href="#博客搭建" class="headerlink" title="博客搭建"></a>博客搭建</h2><h3 id="准备环境"><a href="#准备环境" class="headerlink" title="准备环境"></a>准备环境</h3><ol><li>关于基础组件的安装,这里不做详细介绍了,可以查看官网<ul><li><span class="exturl" data-url="aHR0cHM6Ly9naXQtc2NtLmNvbS8=" title="https://git-scm.com/">Git<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9ub2RlanMub3Jn" title="https://nodejs.org">Node.js<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv" title="https://hexo.io">Hexo<i class="fa fa-external-link"></i></span></li></ul></li><li><p>在 Shell 中(Windows 下可能需要使用 Git Bash)执行初始化命令:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo init hexo-blog</span><br><span class="line"><span class="built_in">cd</span> hexo-blog</span><br></pre></td></tr></table></figure><p>我这里使用的是 <code>yarn</code> 代替 <code>npm</code>,关于 <code>yarn</code> 的安装,参考<span class="exturl" data-url="aHR0cHM6Ly95YXJucGtnLmNvbS9lbi9kb2NzL2luc3RhbGw=" title="https://yarnpkg.com/en/docs/install">这里<i class="fa fa-external-link"></i></span><br>我用的 <code>Hexo</code> 版本是 3.8.0,不需要执行 <code>yarn install</code> 命令了,init 的时候就做完了,因此只需要 cd 到目录下即可</p></li><li>修改站点配置文件 <code>_config.yml</code>:</li></ol><table><thead><tr><th style="text-align:left">配置</th><th style="text-align:left">原值(默认值)</th><th style="text-align:left">修改值</th></tr></thead><tbody><tr><td style="text-align:left">title</td><td style="text-align:left">Hexo</td><td style="text-align:left">Wdmcheng</td></tr><tr><td style="text-align:left">subtitle</td><td style="text-align:left"></td><td style="text-align:left">Java Coder</td></tr><tr><td style="text-align:left">description</td><td style="text-align:left"></td><td style="text-align:left">手握日月摘星晨,世间无我这般人……嗯……吹大了</td></tr><tr><td style="text-align:left">author</td><td style="text-align:left">John Doe</td><td style="text-align:left">雾都迷城</td></tr><tr><td style="text-align:left">language</td><td style="text-align:left"></td><td style="text-align:left">zh-CN</td></tr><tr><td style="text-align:left">timezone</td><td style="text-align:left"></td><td style="text-align:left">Asia/Shanghai</td></tr><tr><td style="text-align:left">url</td><td style="text-align:left"><span class="exturl" data-url="aHR0cDovL3lvdXJzaXRlLmNvbQ==" title="http://yoursite.com">http://yoursite.com<i class="fa fa-external-link"></i></span></td><td style="text-align:left"><a href="https://www.wdmcheng.cn">https://www.wdmcheng.cn</a></td></tr><tr><td style="text-align:left">permalink</td><td style="text-align:left">:year/:month/:day/:title/</td><td style="text-align:left">:title</td></tr><tr><td style="text-align:left">new_post_name</td><td style="text-align:left">:title.md</td><td style="text-align:left">:year/:month/:day/:title.md</td></tr><tr><td style="text-align:left">post_asset_folder</td><td style="text-align:left">false</td><td style="text-align:left">true</td></tr><tr><td style="text-align:left">index_generator > per_page</td><td style="text-align:left">10</td><td style="text-align:left">20</td></tr><tr><td style="text-align:left">per_page</td><td style="text-align:left">10</td><td style="text-align:left">20</td></tr></tbody></table><ol start="4"><li>启动服务器就可以预览看到效果:<br><code>hexo server</code></li><li>默认地址:<span class="exturl" data-url="aHR0cDovL2xvY2FsaG9zdDo0MDAw" title="http://localhost:4000"><code>http://localhost:4000</code><i class="fa fa-external-link"></i></span></li><li>能正常访问,就说明环境基本搭建成功了,可以进行下一步了,先根据提示按 <code>Ctrl+C</code> 终止服务运行</li></ol><h3 id="实施方案"><a href="#实施方案" class="headerlink" title="实施方案"></a>实施方案</h3><p>这里采用的是<span class="exturl" data-url="aHR0cHM6Ly93d3cuc2ltb245Ni5vbmxpbmUvMjAxOC8xMC8xMi9oZXhvLXR1dG9yaWFsLyMlRTYlOTYlQjklRTYlQTElODglRTQlQjglODklRUYlQkMlOUFHaXRodWJQYWdlcy1Db2RpbmdQYWdlcy0lRTUlOUYlOUYlRTUlOTAlOEQ=" title="https://www.simon96.online/2018/10/12/hexo-tutorial/#%E6%96%B9%E6%A1%88%E4%B8%89%EF%BC%9AGithubPages-CodingPages-%E5%9F%9F%E5%90%8D">遇见西门教程<i class="fa fa-external-link"></i></span>教程的实施方案三,采用 GithubPages + CodingPages 的方式,不过有些变化。我是部署到 <code>GitLabPages</code> 上,然后使用 <code>GitLab</code> 的镜像仓库功能推送到 <code>GitHub</code> 与 <code>Coding</code><br>至于 Pages 服务的配置及这些镜像配置就不多介绍了</p><h3 id="主题"><a href="#主题" class="headerlink" title="主题"></a>主题</h3><p>关于主题优化,详细的教程还是要参考<span class="exturl" data-url="aHR0cHM6Ly93d3cuc2ltb245Ni5vbmxpbmUvMjAxOC8xMC8xMi9oZXhvLXR1dG9yaWFsLyMlRTQlQjglQkIlRTklQTIlOTglRTQlQkMlOTglRTUlOEMlOTYtMQ==" title="https://www.simon96.online/2018/10/12/hexo-tutorial/#%E4%B8%BB%E9%A2%98%E4%BC%98%E5%8C%96-1">遇见西门的博客<i class="fa fa-external-link"></i></span></p><h4 id="应用主题"><a href="#应用主题" class="headerlink" title="应用主题"></a>应用主题</h4><ol><li>官网的<span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL3RoZW1lcy8=" title="https://hexo.io/themes/">主题页面<i class="fa fa-external-link"></i></span>很坑,有时候各种<code>404</code>,看不见预览,我直接 <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9xPWhleG8tdGhlbWU=" title="https://github.com/search?q=hexo-theme">Github 搜索<i class="fa fa-external-link"></i></span>。Star 数最高的是 <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2lpc3NuYW4vaGV4by10aGVtZS1uZXh0" title="https://github.com/iissnan/hexo-theme-next">NexT<i class="fa fa-external-link"></i></span> 主题,但是旧版的,我这里直接使用<span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL3RoZW1lLW5leHQvaGV4by10aGVtZS1uZXh0" title="https://github.com/theme-next/hexo-theme-next">新版<i class="fa fa-external-link"></i></span></li><li><p>根据主题说明,下载安装主题,我直接安装的最新版本</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/theme-next/hexo-theme-next themes/next</span><br></pre></td></tr></table></figure></li><li><p>修改站点配置文件 <code>_config.yml</code> 的 <code>theme</code> 字段,为主题文件夹名称,我这里就是 <code>next</code>,这时候想看到效果需要重启服务了</p></li><li>不需要默认的 <code>landscape</code> 主题了,直接删除,执行命令 <code>rm -rf themes/landscape</code></li></ol><h4 id="主题修改与优化"><a href="#主题修改与优化" class="headerlink" title="主题修改与优化"></a>主题修改与优化</h4><p>因为主题是克隆的仓库,后续升级版本其实很方便,为了避免升级时候主题配置的处理太麻烦,因此采用<span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL3RoZW1lLW5leHQvaGV4by10aGVtZS1uZXh0L2Jsb2IvbWFzdGVyL2RvY3MvemgtQ04vREFUQS1GSUxFUy5tZA==" title="https://github.com/theme-next/hexo-theme-next/blob/master/docs/zh-CN/DATA-FILES.md">数据文件<i class="fa fa-external-link"></i></span>的形式配置:</p><ol><li><p>执行下面命令,创建 <code>source/_data/</code> 目录,并将默认主题配置文件 <code>themes/next/_config.yml</code> 复制到 <code>source/_data/</code> 下,命名为 <code>next.yml</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mkdir -p <span class="built_in">source</span>/_data</span><br><span class="line">cp -p themes/next/_config.yml <span class="built_in">source</span>/_data/next.yml</span><br></pre></td></tr></table></figure></li><li><p>修改新的主题配置文件 <code>source/_data/next.yml</code>,将 <code>override</code> 修改为 <code>true</code></p></li></ol><h5 id="RSS-支持"><a href="#RSS-支持" class="headerlink" title="RSS 支持"></a>RSS 支持</h5><p>安装 <code>hexo-generator-feed</code> 插件,由 Hexo 自动生成订阅源并插入链接,不需要其他配置<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yarn add -D hexo-generator-feed</span><br></pre></td></tr></table></figure></p><h5 id="修改主题样式"><a href="#修改主题样式" class="headerlink" title="修改主题样式"></a>修改主题样式</h5><ol><li>修改主题配置文件 <code>source/_data/next.yml</code>,将 <code>scheme</code> 修改为 <code>Gemini</code>,使用双子座主题样式</li><li>配置菜单显示文章数,修改 <code>menu_settings.badges</code> 为 <code>true</code></li><li>配置文章目录自动换行,修改 <code>toc.wrap</code> 为 <code>true</code></li><li>配置侧边栏显示 Back to Top 按钮,并显示阅读百分比,修改 <code>back2top</code> 下<ul><li><code>sidebar: true</code></li><li><code>scrollpercent: true</code></li></ul></li><li>配置 footer,修改 <code>footer</code> 下<ul><li><code>icon.name: heart</code></li><li><code>icon.animated: true</code></li></ul></li></ol><h5 id="主页文章只显示摘要"><a href="#主页文章只显示摘要" class="headerlink" title="主页文章只显示摘要"></a>主页文章只显示摘要</h5><p><code>auto_excerpt.enable: true</code></p><h5 id="记录文章阅读位置"><a href="#记录文章阅读位置" class="headerlink" title="记录文章阅读位置"></a>记录文章阅读位置</h5><p>打开 <code>save_scroll: true</code> 这个开关就可以在 <code>Cookie</code> 中保存文章的阅读位置,下次进入还会滚动到相同地方</p><h5 id="字数统计与阅读时长"><a href="#字数统计与阅读时长" class="headerlink" title="字数统计与阅读时长"></a>字数统计与阅读时长</h5><ol><li>执行命令 <code>yarn add -D hexo-symbols-count-time</code></li><li><p>修改站点配置文件 <code>_config.yml</code>,添加下面代码</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 字数统计与阅读时长</span></span><br><span class="line"><span class="attr">symbols_count_time:</span></span><br><span class="line"><span class="attr"> symbols:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> time:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> total_symbols:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> total_time:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> exclude_codeblock:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure></li><li><p>如果需要显示<code>站点总字数</code>与<code>站点阅读时长</code> 的文字,修改主题配置文件 <code>source/_data/next.yml</code>,将 <code>symbols_count_time.item_text_total</code> 设置为 <code>true</code></p></li></ol><h5 id="代码片段复制按钮"><a href="#代码片段复制按钮" class="headerlink" title="代码片段复制按钮"></a>代码片段复制按钮</h5><p>主题配置文件 <code>source/_data/next.yml</code> 中 <code>codeblock.copy_button.enable</code> 设置为 <code>true</code>,<code>codeblock.copy_button.show_result</code> 设置为 <code>true</code></p><h5 id="优化字库访问速度"><a href="#优化字库访问速度" class="headerlink" title="优化字库访问速度"></a>优化字库访问速度</h5><p>如果需要优化字库访问速度,可以使用国内字体镜像站 <code>fonts.lug.ustc.edu.cn</code> 代替默认的 <code>fonts.googleapis.com</code>,修改 <code>font</code> 下</p><ul><li><code>enable: true</code></li><li><code>host: //fonts.lug.ustc.edu.cn</code></li><li><code>global.family: Monda</code></li><li><code>headings.family: Roboto Slab</code></li><li><code>logo.family: Lobster Two</code></li><li><code>logo.size: 24</code></li><li><code>codes.family: PT Mono</code></li></ul><h5 id="配置菜单项"><a href="#配置菜单项" class="headerlink" title="配置菜单项"></a>配置菜单项</h5><ol><li><code>menu</code> 下,打开下面几项的注释<ul><li>about</li><li>tags</li><li>categories</li><li>schedule</li></ul></li><li><p>执行下面的命令,生成 <code>categories</code> <code>tags</code> <code>about</code> <code>schedule</code> 页面</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">hexo new page categories</span><br><span class="line">hexo new page tags</span><br><span class="line">hexo new page about</span><br><span class="line">hexo new page schedule</span><br></pre></td></tr></table></figure></li><li><p>生成的文件路径如下</p><ul><li>source/categories/index.md</li><li>source/tags/index.md</li><li>source/about/index.md</li><li>source/schedule/index.md</li></ul></li><li>编辑 <code>source/categories/index.md</code> 与 <code>source/tags/index.md</code> 文件,在 <code>date</code> 下面添加一行,分别为 <code>type: categories</code> <code>type: tags</code>,然后再各添加一行 <code>comments: false</code> 禁止评论。</li><li>另外两个文件自己随意修改</li><li>编辑 <code>scaffolds/post.md</code> 模板文件,在 <code>title</code> 下新添一行 <code>description:</code>,在 <code>tags</code> 下新添一行 <code>categories:</code>,这样以后创建的文章都会自动添加这两个属性</li><li>还可添加日程表,使用 <code>Google Calendar</code>,需要梯子。详细配置参考<span class="exturl" data-url="aHR0cHM6Ly90aGVtZS1uZXh0Lm9yZy9kb2NzL3RoZW1lLXNldHRpbmdzL2N1c3RvbS1wYWdlcy8=" title="https://theme-next.org/docs/theme-settings/custom-pages/">这里<i class="fa fa-external-link"></i></span>,注意主题配置文件中的 <code>calendar.calendar_id</code> 不一定要填写 Google 账号对应的 E-Mail,只需要填写一个<code>日历 ID</code>,一定要是<code>公开日历</code>,否则会报 <code>404</code></li></ol><h5 id="添加创作共用协议"><a href="#添加创作共用协议" class="headerlink" title="添加创作共用协议"></a>添加创作共用协议</h5><p>我这里使用的是 <span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo" title="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">by-nc-sa<i class="fa fa-external-link"></i></span>,因此配置 <code>creative_commons</code> 项</p><ul><li><code>sidebar: true</code></li><li><code>post: true</code></li><li><code>language: deed.zh</code></li></ul><h5 id="文章开始统一添加前言"><a href="#文章开始统一添加前言" class="headerlink" title="文章开始统一添加前言"></a>文章开始统一添加前言</h5><p>这里我写了个前言,添加一下授权协议说明,在每篇博文都默认添加,也可以手动关闭</p><ol><li><p>创建文件 <code>themes/next/layout/_custom/custom-post-preface.swig</code>,并输入如下内容,或者自行修改</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">h2</span> <span class="attr">id</span>=<span class="string">"前言"</span>></span><span class="tag"><<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#前言"</span> <span class="attr">class</span>=<span class="string">"headerlink"</span> <span class="attr">title</span>=<span class="string">"前言"</span>></span><span class="tag"></<span class="name">a</span>></span>前言<span class="tag"></<span class="name">h2</span>></span></span><br><span class="line"><span class="tag"><<span class="name">ol</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>欢迎在文末留言,共同进步。<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span></span><br><span class="line"> 本文采用<span class="tag"><<span class="name">span</span> <span class="attr">class</span>=<span class="string">"exturl"</span> <span class="attr">data-url</span>=<span class="string">"aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo"</span> <span class="attr">title</span>=<span class="string">"https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"</span>></span>署名 - 非商业性使用 - 相同方式共享 4.0 国际<span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-external-link"</span>></span><span class="tag"></<span class="name">i</span>></span><span class="tag"></<span class="name">span</span>></span></span><br><span class="line"> (<span class="tag"><<span class="name">span</span> <span class="attr">class</span>=<span class="string">"exturl"</span> <span class="attr">data-url</span>=<span class="string">"aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC8="</span> <span class="attr">title</span>=<span class="string">"https://creativecommons.org/licenses/by-nc-sa/4.0/"</span>></span>CC BY-NC-SA 4.0<span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-external-link"</span>></span><span class="tag"></<span class="name">i</span>></span><span class="tag"></<span class="name">span</span>></span>) 许可协议,转载请注明出处!</span><br><span class="line"> <span class="tag"></<span class="name">li</span>></span></span><br><span class="line"><span class="tag"></<span class="name">ol</span>></span></span><br></pre></td></tr></table></figure></li><li><p>编辑 <code>scaffolds/post.md</code> 模板文件,在 <code>categories</code> 下新添一行 <code>include_preface: true</code>,做为显示前言的开关,这样以后创建的文章都会自动添加,并且是打开状态,具体文章的标记改为 <code>false</code>,则那篇文章就不会显示前言</p></li><li><p>编辑 <code>themes/next/layout/_macro/post.swig</code> 文件,在下面所示的区域</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">{#################}</span><br><span class="line">{### POST BODY ###}</span><br><span class="line">{#################}</span><br></pre></td></tr></table></figure><p>找到非 <code>is_index</code> 的 <code></code>,在其上添加如下代码</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">{% if post.include_preface %}</span><br><span class="line"> {% include '../_custom/custom-post-preface.swig' %}</span><br><span class="line">{% endif %}</span><br></pre></td></tr></table></figure></li></ol><h5 id="文章末尾统一添加结束标记"><a href="#文章末尾统一添加结束标记" class="headerlink" title="文章末尾统一添加结束标记"></a>文章末尾统一添加结束标记</h5><ol><li>创建文件 <code>themes/next/layout/_custom/passage-end-tag.swig</code>,并输入如下内容,或者自行修改<br><code><div style="text-align: center; color: #ccc; font-size: 14px;">-------------本文结束<i class="fa fa-paw"></i>感谢您的阅读-------------</div></code></li><li><p>在主题配置文件 <code>source/_data/next.yml</code> 中添加如下配置,这里是关闭的,随时开启,只需要将 <code>passage_end_tag.enable</code> 从 <code>false</code> 改为 <code>true</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 文章结束标记(需修改主题,自己添加代码)</span></span><br><span class="line"><span class="attr">passage_end_tag:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure></li><li><p>编辑 <code>themes/next/layout/_macro/post.swig</code> 文件,在下面所示的标记上面</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">{#####################}</span><br><span class="line">{### END POST BODY ###}</span><br><span class="line">{#####################}</span><br></pre></td></tr></table></figure><p>添加如下代码</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">{% if theme.passage_end_tag.enable and not is_index %}</span><br><span class="line"> <span class="tag"><<span class="name">div</span>></span>{% include '../_custom/passage-end-tag.swig' %}<span class="tag"></<span class="name">div</span>></span></span><br><span class="line">{% endif %}</span><br></pre></td></tr></table></figure></li></ol><h5 id="添加-GitHub-Banner"><a href="#添加-GitHub-Banner" class="headerlink" title="添加 GitHub Banner"></a>添加 GitHub Banner</h5><p>最大的同性交友网站 GitHub 地址还是要放的,方便其他人 Follow me。<br>找到 <code>github_banner</code> 项,修改以下配置</p><ul><li><code>enable: true</code></li><li><code>permalink: https://github.com/wdmcheng</code></li></ul><h5 id="添加搜索功能"><a href="#添加搜索功能" class="headerlink" title="添加搜索功能"></a>添加搜索功能</h5><ol><li><p>添加依赖,在 Shell 中执行命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yarn add -D hexo-generator-searchdb</span><br></pre></td></tr></table></figure></li><li><p>在站点配置文件 <code>_config.yml</code> 中,找到 <code>Extensions</code>,在后面添加</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 搜索功能</span></span><br><span class="line"><span class="attr">search:</span></span><br><span class="line"><span class="attr"> path:</span> <span class="string">search.xml</span></span><br><span class="line"><span class="attr"> field:</span> <span class="string">post</span></span><br><span class="line"><span class="attr"> format:</span> <span class="string">html</span></span><br><span class="line"><span class="attr"> limit:</span> <span class="number">10000</span></span><br></pre></td></tr></table></figure></li><li><p>在主题配置文件 <code>source/_data/next.yml</code> 中,修改 <code>local_search.enable</code> 为 <code>true</code></p></li></ol><h5 id="移动设备适配"><a href="#移动设备适配" class="headerlink" title="移动设备适配"></a>移动设备适配</h5><p><code>mobile_layout_economy: true</code></p><h5 id="Safari-菜单栏着色"><a href="#Safari-菜单栏着色" class="headerlink" title="Safari 菜单栏着色"></a>Safari 菜单栏着色</h5><p><code>safari_rainbow: true</code></p><h5 id="自定义滚动条件支持"><a href="#自定义滚动条件支持" class="headerlink" title="自定义滚动条件支持"></a>自定义滚动条件支持</h5><p><code>custom_scrollbar: true</code></p><h5 id="添加特效"><a href="#添加特效" class="headerlink" title="添加特效"></a>添加特效</h5><ol><li>启用 <code>Canvas-nest</code>,在主题配置文件 <code>source/_data/next.yml</code> 中,修改 <code>canvas_nest.enable</code> 为 <code>true</code></li><li><p>配置 CDN 加速,修改 <code>vendors</code> 下的配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> canvas_nest:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-canvas-nest@1/canvas-nest.min.js</span></span><br><span class="line"><span class="attr"> canvas_nest_nomobile:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-canvas-nest@1/canvas-nest-nomobile.min.js</span></span><br></pre></td></tr></table></figure></li><li><p>我这里还添加了 <code>JavaScript 3D library</code>,在主题配置文件 <code>source/_data/next.yml</code> 中,下面几项配置,需要启用哪种特效,就将 <code>false</code> 改为 <code>true</code>,我这里都是暂时关闭的</p><ul><li>three_waves: false</li><li>canvas_lines: false</li><li>canvas_sphere: false</li></ul></li><li><p>配置 CDN 加速,修改 <code>vendors</code> 下的配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> three:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/three.min.js</span></span><br><span class="line"><span class="attr"> three_waves:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/three-waves.min.js</span></span><br><span class="line"><span class="attr"> canvas_lines:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/canvas_lines.min.js</span></span><br><span class="line"><span class="attr"> canvas_sphere:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/canvas_sphere.min.js</span></span><br></pre></td></tr></table></figure></li><li><p>使用 CDN 加速,安装 <code>Canvas-Ribbon</code>,修改主题配置文件 <code>source/_data/next.yml</code>,我这里没有启用,需要启用直接修改 <code>canvas_ribbon.enable</code> 为 <code>true</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> canvas_ribbon:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-canvas-ribbon@1/canvas-ribbon.min.js</span></span><br></pre></td></tr></table></figure></li></ol><h5 id="修改动画"><a href="#修改动画" class="headerlink" title="修改动画"></a>修改动画</h5><p><code>motion.async</code> 默认为 <code>false</code>,这里修改为 <code>true</code>,感觉动画效果快一些</p><h5 id="添加-Live2D-动画角色"><a href="#添加-Live2D-动画角色" class="headerlink" title="添加 Live2D 动画角色"></a>添加 Live2D 动画角色</h5><ol><li><p>安装 <code>hexo-helper-live2d</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yarn add -D hexo-helper-live2d</span><br></pre></td></tr></table></figure></li><li><p>在站点配置文件 <code>_config.yml</code> 中,找到 <code>Extensions</code>,在后面添加</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Live2D</span></span><br><span class="line"><span class="comment"># https://github.com/EYHN/hexo-helper-live2d</span></span><br><span class="line"><span class="attr">live2d:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># local,从本地加载,需要配置 pluginRootPath、pluginJsPath、pluginModelPath 三个属性;后面三种配置从网络加载,不需要配置</span></span><br><span class="line"> <span class="comment">#scriptFrom: local 默认</span></span><br><span class="line"> <span class="comment">#pluginRootPath: live2dw/ # 插件在站点上的根目录(相对路径)</span></span><br><span class="line"> <span class="comment">#pluginJsPath: lib/ # 脚本文件相对与插件根目录路径</span></span><br><span class="line"> <span class="comment">#pluginModelPath: assets/ # 模型文件相对与插件根目录路径</span></span><br><span class="line"> <span class="comment">#scriptFrom: jsdelivr # jsdelivr CDN</span></span><br><span class="line"> <span class="comment">#scriptFrom: unpkg # unpkg CDN</span></span><br><span class="line"><span class="attr"> scriptFrom:</span> <span class="attr">https://cdn.jsdelivr.net/npm/live2d-widget@3.x/lib/L2Dwidget.min.js</span></span><br><span class="line"><span class="attr"> tagMode:</span> <span class="literal">false</span> <span class="comment"># 标签模式, 是否仅替换 live2d tag 标签而非插入到所有页面中</span></span><br><span class="line"><span class="attr"> debug:</span> <span class="literal">false</span> <span class="comment"># 调试, 是否在控制台输出日志</span></span><br><span class="line"><span class="attr"> model:</span></span><br><span class="line"> <span class="comment"># 第一种需要安装相应的包才可用;第二种和第三种需要手动放置相关文件</span></span><br><span class="line"> <span class="comment">#use: live2d-widget-model-z16 # npm-module package name</span></span><br><span class="line"> <span class="comment">#use: miku # 博客根目录/live2d_models/ 下的目录名</span></span><br><span class="line"> <span class="comment">#use: ./wives/wanko # 相对于博客根目录的路径</span></span><br><span class="line"><span class="attr"> use:</span> <span class="attr">https://cdn.jsdelivr.net/npm/live2d-widget-model-haruto@1.x/assets/haruto.model.json</span> <span class="comment"># 自定义 URL,可设定 CDN</span></span><br><span class="line"><span class="attr"> display:</span></span><br><span class="line"><span class="attr"> position:</span> <span class="string">right</span></span><br><span class="line"><span class="attr"> width:</span> <span class="number">300</span></span><br><span class="line"><span class="attr"> height:</span> <span class="number">600</span></span><br><span class="line"><span class="attr"> mobile:</span></span><br><span class="line"><span class="attr"> show:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure></li></ol><h5 id="主页文章添加阴影效果"><a href="#主页文章添加阴影效果" class="headerlink" title="主页文章添加阴影效果"></a>主页文章添加阴影效果</h5><p>编辑 <code>themes/next/source/css/_custom/custom.styl</code> 文件,添加下面代码,我这里注释掉了,取消注释可以启用阴影<br><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">// 主页文章添加阴影效果</span><br><span class="line"><span class="comment">/*.post {</span></span><br><span class="line"><span class="comment"> margin-top: 0px;</span></span><br><span class="line"><span class="comment"> margin-bottom: 60px;</span></span><br><span class="line"><span class="comment"> padding: 25px;</span></span><br><span class="line"><span class="comment"> -webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);</span></span><br><span class="line"><span class="comment"> -moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);</span></span><br><span class="line"><span class="comment">}*/</span></span><br></pre></td></tr></table></figure></p><h5 id="更新主题"><a href="#更新主题" class="headerlink" title="更新主题"></a>更新主题</h5><p>可以通过如下命令更新到最新的 master 分支<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> themes/next</span><br><span class="line">git stash pull</span><br><span class="line">git pull</span><br><span class="line">git stash pop</span><br></pre></td></tr></table></figure></p><h3 id="加入广告"><a href="#加入广告" class="headerlink" title="加入广告"></a>加入广告</h3><p>我这里用的是 <code>Google AdSense</code>,网络问题请自行解决</p><ol><li><p>访问 <span class="exturl" data-url="aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9pbnRsL3poLUNOX2NuL2Fkc2Vuc2Uvc3RhcnQv" title="https://www.google.com/intl/zh-CN_cn/adsense/start/">Google AdSense<i class="fa fa-external-link"></i></span>,点击 <code>立即注册</code>,然后填各种资料,最后生成一段代码,我的是</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">async</span> <span class="attr">src</span>=<span class="string">"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"</span>></span><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line"><span class="tag"><<span class="name">script</span>></span><span class="undefined"></span></span><br><span class="line"><span class="undefined"> (adsbygoogle = window.adsbygoogle || []).push({</span></span><br><span class="line"><span class="undefined"> google_ad_client: "ca-pub-6923016589675745",</span></span><br><span class="line"><span class="undefined"> enable_page_level_ads: true</span></span><br><span class="line"><span class="undefined"> });</span></span><br><span class="line"><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure></li><li><p>编辑 <code>themes/next/layout/_custom/head.swig</code> 文件,粘贴代码(稍作修改,添加一些变量及控制)</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">{% if theme.google_adsense.enable %}</span><br><span class="line"> <span class="tag"><<span class="name">script</span> <span class="attr">async</span> <span class="attr">src</span>=<span class="string">"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"</span>></span><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">script</span>></span><span class="undefined"></span></span><br><span class="line"><span class="undefined"> (adsbygoogle = window.adsbygoogle || []).push({</span></span><br><span class="line"><span class="undefined"> google_ad_client: "{{ theme.google_adsense.google_ad_client }}",</span></span><br><span class="line"><span class="undefined"> enable_page_level_ads: true</span></span><br><span class="line"><span class="undefined"> });</span></span><br><span class="line"><span class="undefined"> </span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line">{% endif %}</span><br></pre></td></tr></table></figure></li><li><p>在主题配置文件 <code>source/_data/next.yml</code> 中添加下面代码</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Google AdSense</span></span><br><span class="line"><span class="attr">google_adsense:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> google_ad_client:</span> <span class="string">ca-pub-6923016589675745</span></span><br></pre></td></tr></table></figure></li><li><p>等待审核通过,好运。如果失败,可再次申请。</p></li></ol><h3 id="CDN-加速"><a href="#CDN-加速" class="headerlink" title="CDN 加速"></a>CDN 加速</h3><p>配置 <code>font-awesome</code> <code>jquery</code> <code>velocity</code> 的 CDN 加速,在主题配置文件 <code>source/_data/next.yml</code> 中,修改 <code>vendors</code> 下的配置<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> jquery:</span> <span class="string">//cdn.jsdelivr.net/npm/jquery@2/dist/jquery.min.js</span></span><br><span class="line"><span class="attr"> velocity:</span> <span class="string">//cdn.jsdelivr.net/npm/velocity-animate@1/velocity.min.js</span></span><br><span class="line"><span class="attr"> velocity_ui:</span> <span class="string">//cdn.jsdelivr.net/npm/velocity-animate@1/velocity.ui.min.js</span></span><br><span class="line"><span class="attr"> fontawesome:</span> <span class="string">//cdn.jsdelivr.net/npm/font-awesome@4/css/font-awesome.min.css</span></span><br></pre></td></tr></table></figure></p><h3 id="静态资源压缩"><a href="#静态资源压缩" class="headerlink" title="静态资源压缩"></a>静态资源压缩</h3><ol><li><p>如果未安装 <code>gulo</code>,在 Shell 中执行以下命令:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install gulp -g</span><br></pre></td></tr></table></figure></li><li><p>执行以下命令:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm install gulp -g</span><br><span class="line">yarn add -D gulp gulp-clean-css gulp-uglify gulp-htmlmin gulp-htmlclean gulp-imagemin</span><br></pre></td></tr></table></figure></li><li><p>在项目根目录下新建 <code>gulpfile.js</code> 文件,内容如下:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> gulp = <span class="built_in">require</span>(<span class="string">'gulp'</span>);</span><br><span class="line"><span class="keyword">var</span> cleancss = <span class="built_in">require</span>(<span class="string">'gulp-clean-css'</span>);</span><br><span class="line"><span class="keyword">var</span> uglify = <span class="built_in">require</span>(<span class="string">'gulp-uglify'</span>);</span><br><span class="line"><span class="keyword">var</span> htmlmin = <span class="built_in">require</span>(<span class="string">'gulp-htmlmin'</span>);</span><br><span class="line"><span class="keyword">var</span> htmlclean = <span class="built_in">require</span>(<span class="string">'gulp-htmlclean'</span>);</span><br><span class="line"><span class="keyword">var</span> imagemin = <span class="built_in">require</span>(<span class="string">'gulp-imagemin'</span>);</span><br><span class="line"><span class="comment">// 压缩css文件</span></span><br><span class="line">gulp.task(<span class="string">'clean-css'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src(<span class="string">'./public/**/*.css'</span>)</span><br><span class="line"> .pipe(cleancss())</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public'</span>));</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 压缩html文件</span></span><br><span class="line">gulp.task(<span class="string">'minify-html'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src(<span class="string">'./public/**/*.html'</span>)</span><br><span class="line"> .pipe(htmlclean())</span><br><span class="line"> .pipe(htmlmin({</span><br><span class="line"> removeComments: <span class="literal">true</span>,</span><br><span class="line"> minifyJS: <span class="literal">true</span>,</span><br><span class="line"> minifyCSS: <span class="literal">true</span>,</span><br><span class="line"> minifyURLs: <span class="literal">true</span>,</span><br><span class="line"> }))</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public'</span>))</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 压缩js文件</span></span><br><span class="line">gulp.task(<span class="string">'minify-js'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src([<span class="string">'./public/**/.js'</span>,<span class="string">'!./public/js/**/*min.js'</span>])</span><br><span class="line"> .pipe(uglify())</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public'</span>));</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 压缩 public/demo 目录内图片</span></span><br><span class="line">gulp.task(<span class="string">'minify-images'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src(<span class="string">'./public/demo/**/*.*'</span>)</span><br><span class="line"> .pipe(imagemin({</span><br><span class="line"> optimizationLevel: <span class="number">7</span>, <span class="comment">//类型:Number 默认:3 取值范围:0-7(优化等级)</span></span><br><span class="line"> progressive: <span class="literal">true</span>, <span class="comment">//类型:Boolean 默认:false 无损压缩jpg图片</span></span><br><span class="line"> interlaced: <span class="literal">false</span>, <span class="comment">//类型:Boolean 默认:false 隔行扫描gif进行渲染</span></span><br><span class="line"> multipass: <span class="literal">false</span>, <span class="comment">//类型:Boolean 默认:false 多次优化svg直到完全优化</span></span><br><span class="line"> }))</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public/uploads'</span>));</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 默认任务</span></span><br><span class="line">gulp.task(<span class="string">'default'</span>, gulp.parallel(<span class="string">'minify-html'</span>, <span class="string">'clean-css'</span>, <span class="string">'minify-js'</span>, <span class="string">'minify-images'</span>));</span><br></pre></td></tr></table></figure></li><li><p>以后只需要在每次 <code>hexo generate</code> 后,执行一下 <code>gulp</code> 就可以实现对静态文件的压缩,之后再执行 <code>hexo deploy</code> 命令发布。写一下代码,方便复制:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">hexo generate</span><br><span class="line">gulp</span><br><span class="line">hexo deploy</span><br></pre></td></tr></table></figure></li></ol><h3 id="功能增强"><a href="#功能增强" class="headerlink" title="功能增强"></a>功能增强</h3><h4 id="标签插件"><a href="#标签插件" class="headerlink" title="标签插件"></a>标签插件</h4><p>标签插件用法参考<span class="exturl" data-url="aHR0cHM6Ly90aGVtZS1uZXh0Lm9yZy9kb2NzL3RhZy1wbHVnaW5zLw==" title="https://theme-next.org/docs/tag-plugins/">官网<i class="fa fa-external-link"></i></span></p><h5 id="Note-标签-Bootstrap-Callout"><a href="#Note-标签-Bootstrap-Callout" class="headerlink" title="Note 标签 - Bootstrap Callout"></a>Note 标签 - Bootstrap Callout</h5><p>在主题配置文件 <code>source/_data/next.yml</code> 中,修改 <code>note</code> 下的配置</p><ul><li><code>style: modern</code></li><li><code>icons: true</code></li><li><code>border_radius: 0</code></li><li><code>light_bg_offset: -3</code></li></ul><h5 id="Tabs-标签支持"><a href="#Tabs-标签支持" class="headerlink" title="Tabs 标签支持"></a>Tabs 标签支持</h5><p><code>tabs.transition.tabs: true</code></p><h5 id="PDF-标签支持"><a href="#PDF-标签支持" class="headerlink" title="PDF 标签支持"></a>PDF 标签支持</h5><p>修改配置 <code>pdf.enable: true</code></p><h5 id="Mermaid-gantt-图标签支持"><a href="#Mermaid-gantt-图标签支持" class="headerlink" title="Mermaid gantt 图标签支持"></a>Mermaid gantt 图标签支持</h5><p>修改配置 <code>mermaid.enable: true</code></p><h4 id="数学方程式渲染支持"><a href="#数学方程式渲染支持" class="headerlink" title="数学方程式渲染支持"></a>数学方程式渲染支持</h4><p>数学方程式渲染引擎可以使用 <code>mathjax</code> 或 <code>katex</code>,由 <code>math.engine</code> 项配置,将 <code>math.enable</code> 修改为 <code>true</code> 即可开启</p><h4 id="启用-Fancybox"><a href="#启用-Fancybox" class="headerlink" title="启用 Fancybox"></a>启用 Fancybox</h4><p>修改配置<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">fancybox:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> fancybox:</span> <span class="string">//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js</span></span><br><span class="line"><span class="attr"> fancybox_css:</span> <span class="string">//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css</span></span><br></pre></td></tr></table></figure></p><h4 id="启用书签功能"><a href="#启用书签功能" class="headerlink" title="启用书签功能"></a>启用书签功能</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">bookmark:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> auto:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> bookmark:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-bookmark@1/bookmark.min.js</span></span><br></pre></td></tr></table></figure><h4 id="启用顶部阅读进度条"><a href="#启用顶部阅读进度条" class="headerlink" title="启用顶部阅读进度条"></a>启用顶部阅读进度条</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">reading_progress:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> reading_progress:</span> <span class="string">//cdn.jsdelivr.net/gh/theme-next/theme-next-reading-progress@1/reading_progress.min.js</span></span><br></pre></td></tr></table></figure><h4 id="启用顶部加载进度条"><a href="#启用顶部加载进度条" class="headerlink" title="启用顶部加载进度条"></a>启用顶部加载进度条</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">pace:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> pace:</span> <span class="string">//cdn.jsdelivr.net/npm/pace-js@1/pace.min.js</span></span><br><span class="line"><span class="attr"> pace_css:</span> <span class="string">//cdn.jsdelivr.net/npm/pace-js@1/themes/blue/pace-theme-minimal.min.css</span></span><br></pre></td></tr></table></figure><h4 id="启用-FastClick"><a href="#启用-FastClick" class="headerlink" title="启用 FastClick"></a>启用 FastClick</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">fastclick:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> fastclick:</span> <span class="attr">https://cdn.jsdelivr.net/npm/fastclick@1/lib/fastclick.min.js</span></span><br></pre></td></tr></table></figure><h4 id="启用-Jquery-Lazyload-图像延迟加载"><a href="#启用-Jquery-Lazyload-图像延迟加载" class="headerlink" title="启用 Jquery Lazyload 图像延迟加载"></a>启用 Jquery Lazyload 图像延迟加载</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">lazyload:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> lazyload:</span> <span class="string">//cdn.jsdelivr.net/npm/jquery_lazyload@1/jquery.lazyload.min.js</span></span><br></pre></td></tr></table></figure><h4 id="启用-Quicklink-预加载"><a href="#启用-Quicklink-预加载" class="headerlink" title="启用 Quicklink 预加载"></a>启用 Quicklink 预加载</h4><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">quicklink:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> quicklink:</span> <span class="string">//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js</span></span><br></pre></td></tr></table></figure><h4 id="启用汉字标准格式支持"><a href="#启用汉字标准格式支持" class="headerlink" title="启用汉字标准格式支持"></a>启用汉字标准格式支持</h4><p>启用方式就是直接按照下面修改主题配置文件 <code>source/_data/next.yml</code>,我没有启用<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">han:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> han:</span> <span class="string">//cdnjs.cloudflare.com/ajax/libs/Han/3.3.0/han.min.css</span></span><br></pre></td></tr></table></figure></p><h4 id="启用盘古支持——在中英文之间自动添加空格"><a href="#启用盘古支持——在中英文之间自动添加空格" class="headerlink" title="启用盘古支持——在中英文之间自动添加空格"></a>启用盘古支持——在中英文之间自动添加空格</h4><ol><li>在主题配置文件 <code>source/_data/next.yml</code> 中,修改 <code>pangu: true</code></li><li>不使用 CDN 的话,需要安装 <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL3RoZW1lLW5leHQvdGhlbWUtbmV4dC1wYW5ndQ==" title="https://github.com/theme-next/theme-next-pangu">theme-next-pangu<i class="fa fa-external-link"></i></span>,我这里使用 CDN 加速,直接修改 <code>vendors.pangu</code> 配置<figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> pangu:</span> <span class="string">//cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js</span></span><br></pre></td></tr></table></figure></li></ol><h4 id="内容分享"><a href="#内容分享" class="headerlink" title="内容分享"></a>内容分享</h4><p><code>百度分享</code>太丑,<code>Likely</code> 没有本土化,不支持微信什么的,这里使用 <code>NeedMoreShare2</code></p><ol><li><p>不在本地加依赖了,直接使用 CDN,修改主题配置文件 <code>source/_data/next.yml</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> needmoreshare2_js:</span> <span class="attr">https://cdn.jsdelivr.net/gh/theme-next/theme-next-needmoreshare2@1/needsharebutton.min.js</span></span><br><span class="line"><span class="attr"> needmoreshare2_css:</span> <span class="attr">https://cdn.jsdelivr.net/gh/theme-next/theme-next-needmoreshare2@1/needsharebutton.min.css</span></span><br></pre></td></tr></table></figure></li><li><p>修改如下配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">needmoreshare2:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> postbottom:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> options:</span></span><br><span class="line"><span class="attr"> networks:</span> <span class="string">Weibo,Wechat,Douban,QQZone,Twitter,Facebook,Linkedin,Mailto,Evernote</span></span><br><span class="line"><span class="attr"> float:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> options:</span></span><br><span class="line"><span class="attr"> networks:</span> <span class="string">Weibo,Wechat,Douban,QQZone,Twitter,Facebook,Linkedin,Mailto,Evernote</span></span><br></pre></td></tr></table></figure></li></ol><h4 id="评论系统"><a href="#评论系统" class="headerlink" title="评论系统"></a>评论系统</h4><p>我这里使用 <span class="exturl" data-url="aHR0cHM6Ly9saXZlcmUuY29tLw==" title="https://livere.com/">LiveRe<i class="fa fa-external-link"></i></span>,注册后安装一个免费的 City 版本,在安装代码中找到 <code>data-uid</code>,然后修改主题配置文件 <code>source/_data/next.yml</code>,打开 <code>livere_uid</code> 的注释,并填入 <code>data-uid</code></p><h4 id="在线聊天系统"><a href="#在线聊天系统" class="headerlink" title="在线聊天系统"></a>在线聊天系统</h4><p>这里没有使用 <code>NexT</code> 官方推荐的,使用的是 <span class="exturl" data-url="aHR0cDovL3d3dy5kYW92b2ljZS5pby8=" title="http://www.daovoice.io/">DaoVoice<i class="fa fa-external-link"></i></span>,安装方法我参考了<span class="exturl" data-url="aHR0cHM6Ly9ob3hpcy5naXRodWIuaW8vaGV4by1uZXh0LWRhb3ZvaWNlLmh0bWwjJUU2JUIzJUE4JUU1JTg2JThD" title="https://hoxis.github.io/hexo-next-daovoice.html#%E6%B3%A8%E5%86%8C">这里<i class="fa fa-external-link"></i></span></p><ol><li><p>注册之后,选择<code>接入</code>,编程语言为 <code>JavaScript</code>,会出现下面这种代码</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">script</span>></span><span class="javascript">(<span class="function"><span class="keyword">function</span>(<span class="params">i,s,o,g,r,a,m</span>)</span>{i[<span class="string">"DaoVoiceObject"</span>]=r;i[r]=i[r]||<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{(i[r].q=i[r].q||[]).push(<span class="built_in">arguments</span>)},i[r].l=<span class="number">1</span>*<span class="keyword">new</span> <span class="built_in">Date</span>();a=s.createElement(o),m=s.getElementsByTagName(o)[<span class="number">0</span>];a.async=<span class="number">1</span>;a.src=g;a.charset=<span class="string">"utf-8"</span>;m.parentNode.insertBefore(a,m)})(<span class="built_in">window</span>,<span class="built_in">document</span>,<span class="string">"script"</span>,(<span class="string">'https:'</span> == <span class="built_in">document</span>.location.protocol ? <span class="string">'https:'</span> : <span class="string">'http:'</span>) + <span class="string">"//widget.daovoice.io/widget/XXXXXXXX.js"</span>,<span class="string">"daovoice"</span>)</span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">daovoice(<span class="string">'init'</span>, {</span><br><span class="line"> app_id: <span class="string">"XXXXXXXX"</span></span><br><span class="line">});</span><br><span class="line">daovoice(<span class="string">'update'</span>);</span><br></pre></td></tr></table></figure></li><li><p><code>themes/next/layout/_custom/head.swig</code> 文件中添加如下代码(修改一下 <code></script></code> 结束标签的位置,并且将 <code>app_id</code> 做成变量)</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">{% if theme.daovoice.enable %}</span><br><span class="line"> <span class="tag"><<span class="name">script</span>></span><span class="undefined"></span></span><br><span class="line"><span class="javascript"> (<span class="function"><span class="keyword">function</span>(<span class="params">i,s,o,g,r,a,m</span>)</span>{i[<span class="string">"DaoVoiceObject"</span>]=r;i[r]=i[r]||<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{(i[r].q=i[r].q||[]).push(<span class="built_in">arguments</span>)},i[r].l=<span class="number">1</span>*<span class="keyword">new</span> <span class="built_in">Date</span>();a=s.createElement(o),m=s.getElementsByTagName(o)[<span class="number">0</span>];a.async=<span class="number">1</span>;a.src=g;a.charset=<span class="string">"utf-8"</span>;m.parentNode.insertBefore(a,m)})(<span class="built_in">window</span>,<span class="built_in">document</span>,<span class="string">"script"</span>,(<span class="string">'https:'</span> == <span class="built_in">document</span>.location.protocol ? <span class="string">'https:'</span> : <span class="string">'http:'</span>) + <span class="string">"//widget.daovoice.io/widget/{{ theme.daovoice.daovoice_app_id }}.js"</span>,<span class="string">"daovoice"</span>)</span></span><br><span class="line"><span class="javascript"> daovoice(<span class="string">'init'</span>, {</span></span><br><span class="line"><span class="javascript"> app_id: <span class="string">"{{ theme.daovoice.daovoice_app_id }}"</span></span></span><br><span class="line"><span class="undefined"> });</span></span><br><span class="line"><span class="javascript"> daovoice(<span class="string">'update'</span>);</span></span><br><span class="line"><span class="undefined"> </span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line">{% endif %}</span><br></pre></td></tr></table></figure></li><li><p>在主题配置文件 <code>source/_data/next.yml</code> 中添加下面代码,<code>XXXXXXXX</code> 是前面获取到的 <code>app_id</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># DaoVoice 在线聊天</span></span><br><span class="line"><span class="attr">daovoice:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> daovoice_app_id:</span> <span class="string">XXXXXXXX</span></span><br></pre></td></tr></table></figure></li></ol><h2 id="部署"><a href="#部署" class="headerlink" title="部署"></a>部署</h2><ol><li>执行命令 <code>yarn add -D hexo-deployer-git</code></li><li><p>部署配置,在站点配置文件 <code>_config.yml</code> 中,找到 <code>deploy</code>,在其节点下删除 <code>type</code>,然后添加如下配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">- type:</span> <span class="string">git</span></span><br><span class="line"><span class="attr"> repo:</span> <span class="string">git@gitlab.com:wdmcheng/wdmcheng.gitlab.io.git</span></span><br><span class="line"><span class="attr"> branch:</span> <span class="string">master</span></span><br></pre></td></tr></table></figure></li><li><p>执行下面的命令,清理、生成静态文件、部署</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line">hexo generate</span><br><span class="line">gulp</span><br><span class="line">hexo deploy</span><br></pre></td></tr></table></figure></li></ol><h2 id="站长工具"><a href="#站长工具" class="headerlink" title="站长工具"></a>站长工具</h2><h3 id="阅读量统计工具"><a href="#阅读量统计工具" class="headerlink" title="阅读量统计工具"></a>阅读量统计工具</h3><h4 id="Firebase"><a href="#Firebase" class="headerlink" title="Firebase"></a>Firebase</h4><p>要使用 Firebase 需要梯子,不只是配置过程,用户访问时如果不能连接服务,也是没有办法统计的,因此不建议</p><ol><li>注册或登录 <span class="exturl" data-url="aHR0cHM6Ly9jb25zb2xlLmZpcmViYXNlLmdvb2dsZS5jb20v" title="https://console.firebase.google.com/">Firebase<i class="fa fa-external-link"></i></span>,配置好项目,获取到 <code>网络 API 密钥</code> 和 <code>项目 ID</code>,然后修改主题配置文件 <code>source/_data/next.yml</code> 的 <code>firestore</code> 部分,如下<ul><li><code>enable: true</code></li><li><code>apiKey: #<网络 API 密钥></code></li><li><code>projectId: #<项目 ID></code></li></ul></li><li><code>Firebase 控制台</code>中,进入 <code>开发 > Database</code>,创建一个非测试的数据库,之后进入<code>规则</code>,将 <code>allow read, write: if false;</code> 改为 <code>allow read, write: if true;</code>,然后发布</li></ol><h4 id="不蒜子"><a href="#不蒜子" class="headerlink" title="不蒜子"></a>不蒜子</h4><ol><li>修改主题配置文件 <code>source/_data/next.yml</code>,将 <code>busuanzi_count.enable</code> 改为 <code>true</code></li><li>这里只使用不蒜子的站点统计,文章阅读量交给 <code>LeanCloud</code>,因此将 <code>busuanzi_count.post_views</code> 改为 <code>false</code></li><li>页面底部的<code>访客数</code>图标修改一下,<code>busuanzi_count.total_visitors_icon</code> 的值从 <code>user</code> 改为 <code>users</code></li></ol><h4 id="LeanCloud"><a href="#LeanCloud" class="headerlink" title="LeanCloud"></a>LeanCloud</h4><p><code>LeanCloud</code> 的相关配置请参考<br><span class="exturl" data-url="aHR0cHM6Ly9sZWFmZXJ4Lm9ubGluZS8yMDE4LzAyLzExL2xjLXNlY3VyaXR5Lw==" title="https://leaferx.online/2018/02/11/lc-security/">Leancloud访客统计插件重大安全漏洞修复指南<i class="fa fa-external-link"></i></span></p><ol><li>到 <span class="exturl" data-url="aHR0cHM6Ly9sZWFuY2xvdWQuY24v" title="https://leancloud.cn/">LeanCloud 官网<i class="fa fa-external-link"></i></span>注册,可以直接使用 <code>GitHub</code> 账号注册</li><li>创建一个开发版的应用</li><li>建立一个无限制的 <code>Counter</code> 类,之后进入设置拿到 <code>App ID</code> 及 <code>App Key</code></li><li>修改主题配置文件 <code>source/_data/next.yml</code> 中的 <code>leancloud_visitors</code> 部分<ul><li><code>enable: true</code></li><li><code>app_id: #<App ID></code></li><li><code>app_key: #<App Key></code></li><li><code>betterPerformance: true</code></li></ul></li><li>在 <code>LeanCloud</code> 的设置页面,进入<code>安全中心</code>,添加<code>Web 安全域名</code>,注意协议、域名和端口号需严格一致,我这里是 <code>https://www.wdmcheng.cn</code></li><li><p>部署云引擎以保证访客数量不被随意篡改</p><ol><li>打开 <code>LeanCloud</code> 的<code>云引擎 > 部署</code>,点击<code>在线编辑</code></li><li><p><code>创建函数 > Hook</code>,<code>Hook</code> 选择 <code>beforeUpdate</code>,<code>Class</code> 选择 <code>Counter</code>,然后粘贴下面代码</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> query = <span class="keyword">new</span> AV.Query(<span class="string">"Counter"</span>);</span><br><span class="line"><span class="keyword">if</span> (request.object.updatedKeys.indexOf(<span class="string">'time'</span>) !== <span class="number">-1</span>) {</span><br><span class="line"> <span class="keyword">return</span> query.get(request.object.id).then(<span class="function"><span class="keyword">function</span> (<span class="params">obj</span>) </span>{</span><br><span class="line"> <span class="keyword">if</span> (obj.get(<span class="string">"time"</span>) + <span class="number">1</span> !== request.object.get(<span class="string">"time"</span>)) {</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> AV.Cloud.Error(<span class="string">'Invalid update!'</span>);</span><br><span class="line"> }</span><br><span class="line"> })</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li><li><p><code>注释</code>处填个描述,我这里写的<code>防止访客数量被随意篡改</code></p></li><li>然后要<code>部署</code>一下才可以生效</li></ol></li><li><p>配置数据库记录只可以本地增加,禁止删除</p><ol><li><p>打开站点配置文件 <code>_config.yml</code>,添加以下配置,<code>app_id</code> 与 <code>app_key</code> 是 <code>LeanCloud</code> 中的,<code>username</code> 与 <code>password</code> 是授权可以 <code>create</code> 的用户名与密码</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">leancloud_counter_security:</span></span><br><span class="line"><span class="attr"> enable_sync:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> app_id:</span> <span class="comment">#<App ID></span></span><br><span class="line"><span class="attr"> app_key:</span> <span class="comment">#<App Key></span></span><br><span class="line"><span class="attr"> username:</span></span><br><span class="line"><span class="attr"> password:</span></span><br></pre></td></tr></table></figure></li><li><p>执行命令 <code>yarn add -D hexo-leancloud-counter-security</code> 安装相关组件</p></li><li>执行命令 <code>hexo lc-counter register <<username>> <<password>></code> 创建用户</li><li>打开 <code>LeanCloud</code> 的<code>存储</code>,进入 <code>Counter</code> 类,选择<code>其他 > 权限设定</code>,将 <code>create</code> 的权限设置为<code>指定用户</code>,选择刚才创建的用户,<code>delete</code> 的权限也设置为<code>指定用户</code>,但用户和角色都留空</li><li>站点配置文件 <code>_config.yml</code> 的 <code>deploy</code> 节点下添加 <code>- type: leancloud_counter_security_sync</code></li></ol></li><li>配置 CDN 加速,修改 <code>vendors.leancloud</code> 配置<figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line"><span class="attr"> leancloud:</span> <span class="string">//cdn.jsdelivr.net/npm/leancloud-storage@3/dist/av-min.js</span></span><br></pre></td></tr></table></figure></li></ol><h3 id="数据分析工具"><a href="#数据分析工具" class="headerlink" title="数据分析工具"></a>数据分析工具</h3><h4 id="Google-Analytics"><a href="#Google-Analytics" class="headerlink" title="Google Analytics"></a>Google Analytics</h4><h5 id="启用-Google-Analytics"><a href="#启用-Google-Analytics" class="headerlink" title="启用 Google Analytics"></a>启用 Google Analytics</h5><ol><li>启用 <code>Google Analytics</code>,前往<span class="exturl" data-url="aHR0cHM6Ly9hbmFseXRpY3MuZ29vZ2xlLmNvbQ==" title="https://analytics.google.com">Google Analytics<i class="fa fa-external-link"></i></span>,注册或登录,获取到 <code>Google 跟踪 ID</code></li><li>修改主题配置文件 <code>source/_data/next.yml</code>,将 <code>google_analytics</code> 部分的注释打开,并且在 <code>google_analytics.tracking_id</code> 填入 <code>UA-XXXXXXXX-X</code> 形式的 <code>Google 跟踪 ID</code></li></ol><h5 id="关联-Google-Search-Console"><a href="#关联-Google-Search-Console" class="headerlink" title="关联 Google Search Console"></a>关联 Google Search Console</h5><p>若要关联 <code>Google Search Console</code>,这里不能使用 <code>HTML 文件</code> 方式验证,因为使用 <code>Hexo</code> 部署时,会自动移除多余的 html 文件。这里采用 <code>Google Analytics</code> 方式验证,那么在启用了 <code>Google Analytics</code> 后必须部署,然后根据 Google 的向导操作</p><h5 id="关联-Google-AdSense"><a href="#关联-Google-AdSense" class="headerlink" title="关联 Google AdSense"></a>关联 Google AdSense</h5><p>直接在 <code>Google Analytics</code> 的管理页面关联就可以了</p><h4 id="百度统计"><a href="#百度统计" class="headerlink" title="百度统计"></a>百度统计</h4><ol><li><p>打开<span class="exturl" data-url="aHR0cHM6Ly90b25namkuYmFpZHUuY29t" title="https://tongji.baidu.com">百度统计<i class="fa fa-external-link"></i></span>,注册、建立网站,完成后会有一个下面这种的<code>统计代码</code>,复制 <code>https://hm.baidu.com/hm.js?xxxxxxxx</code> 中的 <code>xxxxxxxx</code>,得到<code>统计 ID</code></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">script</span>></span><span class="undefined"></span></span><br><span class="line"><span class="javascript"><span class="keyword">var</span> _hmt = _hmt || [];</span></span><br><span class="line"><span class="javascript">(<span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span></span><br><span class="line"><span class="javascript"> <span class="keyword">var</span> hm = <span class="built_in">document</span>.createElement(<span class="string">"script"</span>);</span></span><br><span class="line"><span class="javascript"> hm.src = <span class="string">"https://hm.baidu.com/hm.js?xxxxxxxx"</span>;</span></span><br><span class="line"><span class="javascript"> <span class="keyword">var</span> s = <span class="built_in">document</span>.getElementsByTagName(<span class="string">"script"</span>)[<span class="number">0</span>]; </span></span><br><span class="line"><span class="undefined"> s.parentNode.insertBefore(hm, s);</span></span><br><span class="line"><span class="undefined">})();</span></span><br><span class="line"><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure></li><li><p>打开主题配置文件 <code>source/_data/next.yml</code>,找到 <code>baidu_analytics</code>,打开注释,并修改为 <code>baidu_analytics: xxxxxxxx</code></p></li></ol><h3 id="搜索引擎相关"><a href="#搜索引擎相关" class="headerlink" title="搜索引擎相关"></a>搜索引擎相关</h3><h4 id="搜索引擎优化(SEO)"><a href="#搜索引擎优化(SEO)" class="headerlink" title="搜索引擎优化(SEO)"></a>搜索引擎优化(SEO)</h4><ol><li><p>在主题配置文件 <code>source/_data/next.yml</code> 中,修改如下配置</p><ul><li><code>disable_baidu_transformation: true</code></li><li><code>seo: true</code></li><li><code>index_with_subtitle: true</code></li><li><code>exturl: true</code></li><li><code>baidu_push: true</code></li></ul><p>各种 Webmaster tools verification 需要到各自官网获取,然后填写到配置文件中,详细说明可参考<span class="exturl" data-url="aHR0cHM6Ly90aGVtZS1uZXh0Lm9yZy9kb2NzL3RoZW1lLXNldHRpbmdzL3Nlby8jV2VibWFzdGVyLVRvb2xz" title="https://theme-next.org/docs/theme-settings/seo/#Webmaster-Tools">NexT 主题官网<i class="fa fa-external-link"></i></span>,<br>我这里开了 <code>google_site_verification</code> <code>bing_site_verification</code> <code>baidu_site_verification</code> 三个,可以开三个页签分别配置到待验证的环节,然后配好 <code>NexT</code>,一次发布,再分别点验证</p></li><li><p>减少出站链接能够有效防止权重分散,这里安装 <code>hexo-autonofollow</code>,该工具可以在出站链接上自动添加属性 <code>external nofollow noopener noreferrer</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yarn add -D hexo-autonofollow</span><br></pre></td></tr></table></figure></li><li><p>在站点配置文件 <code>_config.yml</code> 中添加如下配置,友链不想添加 <code>nofollow</code> 属性的,添加到 <code>exclude</code> 里</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">nofollow:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> exclude:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">友链地址1</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">友链地址2</span></span><br></pre></td></tr></table></figure></li><li><p>主题配置文件中默认的 <code>permalink</code> 是 <code>:year/:month/:day/:title/</code>,这对搜索引擎不友好,直接修改一下链接层级,变成 <code>:title</code> 或者 <code>:year-:month-:day-:title</code></p></li></ol><h4 id="搜索引擎抓取"><a href="#搜索引擎抓取" class="headerlink" title="搜索引擎抓取"></a>搜索引擎抓取</h4><p>这里参考 <span class="exturl" data-url="aHR0cHM6Ly9ob3hpcy5naXRodWIuaW8vSGV4bytOZXh0JTIwU0VPJUU0JUJDJTk4JUU1JThDJTk2Lmh0bWw=" title="https://hoxis.github.io/Hexo+Next%20SEO%E4%BC%98%E5%8C%96.html">Hexo博客Next主题SEO优化方法<i class="fa fa-external-link"></i></span></p><ol><li><p>首先安装插件,自动生成 <code>sitemap</code> 文件,一个传统的,一个百度的</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yarn add -D hexo-generator-sitemap hexo-generator-baidu-sitemap</span><br></pre></td></tr></table></figure></li><li><p>安装完部署,这时网站就有了两个 <code>sitemap</code> 了</p></li><li>前面已经在 <code>Google Search Console</code> 和<span class="exturl" data-url="aHR0cHM6Ly96aXl1YW4uYmFpZHUuY29t" title="https://ziyuan.baidu.com">百度搜索资源平台<i class="fa fa-external-link"></i></span>中添加验证了站点,现在可以直接提交 <code>sitemap.xml</code> 了,百度提交 <code>baidusitemap.xml</code></li><li><code>github</code> 禁止百度爬虫,好在百度支持主动推送,因此还需要添加一个主动推送的插件,执行命令 <code>yarn add -D hexo-baidu-url-submit</code></li><li><p>在站点配置文件 <code>_config.yml</code> 中,参考下面配置、注释及主动推送的接口调用地址添加配置(最后三个是<code>熊掌号</code>相关的,没有注册熊掌号则不写)</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">baidu_url_submit:</span></span><br><span class="line"><span class="attr"> count:</span> <span class="number">1000</span> <span class="comment">## 提交最新的一个链接</span></span><br><span class="line"><span class="attr"> host:</span> <span class="string">alili.tech</span> <span class="comment">## 在百度站长平台中注册的域名</span></span><br><span class="line"><span class="attr"> token:</span> <span class="string">xxxxx</span> <span class="comment">## 请注意这是您的秘钥,所以请不要把博客源代码发布在公众仓库里!</span></span><br><span class="line"><span class="attr"> path:</span> <span class="string">baidu_urls.txt</span> <span class="comment">## 文本文档的地址,新链接会保存在此文本文档里</span></span><br><span class="line"><span class="attr"> xz_appid:</span> <span class="string">'xxxxxx'</span> <span class="comment">## 你的熊掌号 appid</span></span><br><span class="line"><span class="attr"> xz_token:</span> <span class="string">'xxxxxx'</span> <span class="comment">## 你的熊掌号 token</span></span><br><span class="line"><span class="attr"> xz_count:</span> <span class="number">10</span> <span class="comment">## 从所有的提交的数据当中选取最新的10条,该数量跟你的熊掌号而定</span></span><br></pre></td></tr></table></figure></li><li><p>在 <code>deploy</code> 下增加下面的类型(没注册熊掌号则不添加熊掌号的类型)</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">- type:</span> <span class="string">baidu_url_submitter</span> <span class="comment"># 百度</span></span><br><span class="line"><span class="attr">- type:</span> <span class="string">baidu_xz_url_submitter</span> <span class="comment"># 百度熊掌号</span></span><br></pre></td></tr></table></figure></li></ol><h2 id="添加热度排行榜"><a href="#添加热度排行榜" class="headerlink" title="添加热度排行榜"></a>添加热度排行榜</h2><p>这里参考了 <span class="exturl" data-url="aHR0cHM6Ly9ob3hpcy5naXRodWIuaW8vaGV4by1uZXh0LXJlYWQtcmFuay5odG1s" title="https://hoxis.github.io/hexo-next-read-rank.html">hexo next 新增阅读排行页面<i class="fa fa-external-link"></i></span></p><ol><li><p>排行榜源码如下(修改了文章链接地址),其中 <code>leancloud_uri</code> <code>leancloud_appid</code> <code>leancloud_appkey</code> 需要替换一下</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">div</span> <span class="attr">id</span>=<span class="string">"top"</span>></span><span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"leancloud_uri"</span>></span><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line"><span class="tag"><<span class="name">script</span>></span><span class="javascript">AV.initialize(<span class="string">"leancloud_appid"</span>, <span class="string">"leancloud_appkey"</span>);</span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">type</span>=<span class="string">"text/javascript"</span>></span><span class="undefined"></span></span><br><span class="line"><span class="javascript"><span class="keyword">let</span> time = <span class="number">0</span></span></span><br><span class="line"><span class="javascript"><span class="keyword">let</span> title = <span class="string">""</span></span></span><br><span class="line"><span class="javascript"><span class="keyword">let</span> url = <span class="string">""</span></span></span><br><span class="line"><span class="javascript"><span class="keyword">let</span> query = <span class="keyword">new</span> AV.Query(<span class="string">'Counter'</span>);</span></span><br><span class="line"><span class="javascript">query.notEqualTo(<span class="string">'id'</span>, <span class="number">0</span>);</span></span><br><span class="line"><span class="javascript">query.descending(<span class="string">'time'</span>);</span></span><br><span class="line"><span class="undefined">query.limit(1000);</span></span><br><span class="line"><span class="javascript">query.find().then(<span class="function"><span class="keyword">function</span> (<span class="params">todo</span>) </span>{</span></span><br><span class="line"><span class="javascript"> <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i < <span class="number">1000</span>; i++){</span></span><br><span class="line"><span class="javascript"> <span class="keyword">const</span> result = todo[i].attributes;</span></span><br><span class="line"><span class="undefined"> time = result.time;</span></span><br><span class="line"><span class="undefined"> title = result.title;</span></span><br><span class="line"><span class="undefined"> url = result.url;</span></span><br><span class="line"><span class="xml"> const content="<span class="tag"><<span class="name">p</span>></span><span class="tag"><<span class="name">font</span> <span class="attr">color</span>=<span class="string">'#1C1C1C'</span>></span>【文章热度:"+time+"℃】<span class="tag"></<span class="name">font</span>></span><span class="tag"><<span class="name">a</span> <span class="attr">href</span>=<span class="string">'"+url+"'</span>></span>"+title+"<span class="tag"></<span class="name">a</span>></span><span class="tag"></<span class="name">p</span>></span>";</span></span><br><span class="line"><span class="javascript"> <span class="built_in">document</span>.getElementById(<span class="string">"top"</span>).innerHTML += content</span></span><br><span class="line"><span class="undefined"> }</span></span><br><span class="line"><span class="javascript">}, <span class="function"><span class="keyword">function</span> (<span class="params">error</span>) </span>{</span></span><br><span class="line"><span class="javascript"> <span class="built_in">console</span>.log(<span class="string">"error"</span>);</span></span><br><span class="line"><span class="undefined">});</span></span><br><span class="line"><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure></li><li><p>执行 <code>hexo new page top</code> 命令,创建一个 <code>top</code> 页面,编辑该页面,在头部描述区域添加 <code>comments: false</code> 关闭评论功能,然后粘贴上述代码</p></li><li>修改主题配置文件 <code>source/_data/next.yml</code>,在 <code>menu</code> 下添加 <code>top: /top/ || signal</code></li><li>编辑 <code>themes/next/languages/zh-CN.yml</code> 语言文件,在 <code>menu</code> 下添加 <code>top: /top/ || signal</code></li></ol><h2 id="自动化部署"><a href="#自动化部署" class="headerlink" title="自动化部署"></a>自动化部署</h2><p>我这里是使用 <code>GitLab</code> 私有仓库保存源码(因为含有密钥等信息),使用 <code>gitlab-ci</code> 自动部署的到 GitLab 的仓库,然后使用 GitLab 的镜像仓库功能推送到 <code>github</code> 与 <code>coding</code>,这样每次写完文章,合并到 <code>master</code> 分支即可</p><ol><li>使用 <code>GitHub</code> 的 Pages 服务并配置域名,需要添加 <code>CNAME</code> 文件,为了自动部署,直接新建 <code>source/CNAME</code> 文件,并在里面填写 <code>www.wdmcheng.cn</code></li><li>如果要使用 <code>HTTPS</code>,要先解析到 <code>Coding</code> 的服务,然后开启 <code>Coding Pages</code> 的 <code>HTTPS</code> 功能,待申请下来证书后,再添加国外 IP 解析到 <code>GitHub</code>,最后再申请 <code>GitHub Pages</code> 的 <code>HTTPS</code></li><li>三个月证书到期需要续期时,需要先暂停国外 IP 解析,<code>Coding</code> 续期完成再开启</li><li>自动化部署的工作流配置,参考 <span class="exturl" data-url="aHR0cHM6Ly9naXRsYWIuY29tL3BhZ2VzL2hleG8vdHJlZS9tYXN0ZXI=" title="https://gitlab.com/pages/hexo/tree/master">GitLab Pages examples<i class="fa fa-external-link"></i></span> 和 <span class="exturl" data-url="aHR0cHM6Ly90aGVtZS1uZXh0Lm9yZy9kb2NzL2dldHRpbmctc3RhcnRlZC9kZXBsb3ltZW50LyNDb250aW51b3VzLUludGVncmF0aW9u" title="https://theme-next.org/docs/getting-started/deployment/#Continuous-Integration">NexT 主题官网<i class="fa fa-external-link"></i></span>,我这里采用的是 <code>SSH</code> 方式部署的,附上我的 <code>.gitlab-ci.yml</code> 文件<figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># This file is a template, and might need editing before it works on your project.</span></span><br><span class="line"><span class="comment"># Full project: https://gitlab.com/pages/hexo</span></span><br><span class="line"><span class="attr">image:</span> <span class="attr">node:10.15.3</span></span><br><span class="line"></span><br><span class="line"><span class="attr">before_script:</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">export</span> <span class="string">TZ='Asia/Shanghai'</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">git</span> <span class="string">config</span> <span class="bullet">--global</span> <span class="string">user.name</span> <span class="string">"wdmcheng"</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">git</span> <span class="string">config</span> <span class="bullet">--global</span> <span class="string">user.email</span> <span class="string">"idea_2008@126.com"</span></span><br><span class="line"><span class="comment"># Restore last modified time</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">"git ls-files -z | while read -d '' path; do touch -d \"$(git log -1 --format=\"@%ct\" \"$path\")\" \"$path\"; done"</span></span><br><span class="line"><span class="comment"># Install ssh-agent if not already installed, it is required by Docker.</span></span><br><span class="line"><span class="comment"># (change apt-get to yum if you use a CentOS-based image)</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'</span></span><br><span class="line"><span class="comment"># Run ssh-agent (inside the build environment)</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">eval</span> <span class="string">$(ssh-agent</span> <span class="bullet">-s)</span></span><br><span class="line"><span class="comment"># Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">ssh-add</span> <span class="string"><(echo</span> <span class="string">"$DEPLOY_PRIVATE_KEY"</span><span class="string">)</span></span><br><span class="line"><span class="comment"># For Docker builds disable host key checking. Be aware that by adding that</span></span><br><span class="line"><span class="comment"># you are suspectible to man-in-the-middle attacks.</span></span><br><span class="line"><span class="comment"># WARNING: Use this only with the Docker executor, if you use it with shell</span></span><br><span class="line"><span class="comment"># you will overwrite your user's SSH config.</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">mkdir</span> <span class="bullet">-p</span> <span class="string">~/.ssh</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">'[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'</span></span><br><span class="line"><span class="comment"># In order to properly check the server's host key, assuming you created the</span></span><br><span class="line"><span class="comment"># SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines</span></span><br><span class="line"><span class="comment"># instead.</span></span><br><span class="line"><span class="comment"># - mkdir -p ~/.ssh</span></span><br><span class="line"><span class="comment"># - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">apt-get</span> <span class="string">update</span> <span class="bullet">-qq</span> <span class="string">&&</span> <span class="string">apt-get</span> <span class="string">install</span> <span class="bullet">-y</span> <span class="bullet">-qq</span> <span class="string">pandoc</span></span><br><span class="line"></span><br><span class="line"><span class="attr">cache:</span></span><br><span class="line"><span class="attr"> paths:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">node_modules/</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">.deploy_git/</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">source/leancloud.memo</span></span><br><span class="line"></span><br><span class="line"><span class="attr">pages:</span></span><br><span class="line"><span class="attr"> script:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">npm</span> <span class="string">install</span> <span class="string">hexo-cli</span> <span class="string">yarn</span> <span class="string">gulp@^4.0.0</span> <span class="bullet">-g</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">test</span> <span class="bullet">-e</span> <span class="string">package.json</span> <span class="string">&&</span> <span class="string">yarn</span> <span class="string">install</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">hexo</span> <span class="string">clean</span> <span class="string">&&</span> <span class="string">hexo</span> <span class="string">generate</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">gulp</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">hexo</span> <span class="string">deploy</span></span><br><span class="line"><span class="attr"> artifacts:</span></span><br><span class="line"><span class="attr"> paths:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">public</span></span><br><span class="line"><span class="attr"> only:</span></span><br><span class="line"><span class="bullet"> -</span> <span class="string">master</span></span><br></pre></td></tr></table></figure></li></ol><h2 id="致谢"><a href="#致谢" class="headerlink" title="致谢"></a>致谢</h2><ul><li><span class="exturl" data-url="aHR0cHM6Ly93d3cuc2ltb245Ni5vbmxpbmUv" title="https://www.simon96.online/">遇见西门<i class="fa fa-external-link"></i></span>的博文<span class="exturl" data-url="aHR0cHM6Ly93d3cuc2ltb245Ni5vbmxpbmUvMjAxOC8xMC8xMi9oZXhvLXR1dG9yaWFsLw==" title="https://www.simon96.online/2018/10/12/hexo-tutorial/">【持续更新】最全Hexo博客搭建+主题优化+插件配置+常用操作+错误分析<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly93d3cuamlhbnNodS5jb20vdS9jZjVhYmI5OWFiYTc=" title="https://www.jianshu.com/u/cf5abb99aba7">my_杨哥<i class="fa fa-external-link"></i></span>的简书文章<span class="exturl" data-url="aHR0cHM6Ly93d3cuamlhbnNodS5jb20vcC8zYTA1MzUxYTM3ZGM=" title="https://www.jianshu.com/p/3a05351a37dc">Hexo的Next主题详细配置<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9sZWFmZXJ4Lm9ubGluZS8=" title="https://leaferx.online/">LEAFERx<i class="fa fa-external-link"></i></span> 的博文 <span class="exturl" data-url="aHR0cHM6Ly9sZWFmZXJ4Lm9ubGluZS8yMDE4LzAyLzExL2xjLXNlY3VyaXR5Lw==" title="https://leaferx.online/2018/02/11/lc-security/">Leancloud访客统计插件重大安全漏洞修复指南<i class="fa fa-external-link"></i></span></li><li><span class="exturl" data-url="aHR0cHM6Ly9ob3hpcy5naXRodWIuaW8v" title="https://hoxis.github.io/">hoxis<i class="fa fa-external-link"></i></span> 的博文 <span class="exturl" data-url="aHR0cHM6Ly9ob3hpcy5naXRodWIuaW8vaGV4by1uZXh0LWRhb3ZvaWNlLmh0bWw=" title="https://hoxis.github.io/hexo-next-daovoice.html">hexo next 配置 DaoVoice 实现在线聊天功能<i class="fa fa-external-link"></i></span>及 <span class="exturl" data-url="aHR0cHM6Ly9ob3hpcy5naXRodWIuaW8vaGV4by1uZXh0LXJlYWQtcmFuay5odG1s" title="https://hoxis.github.io/hexo-next-read-rank.html">hexo next 新增阅读排行页面<i class="fa fa-external-link"></i></span></li></ul>]]></content>
<summary type="html">
技术需要沉淀,所以有了搭建博客的想法,本文记录一下我搭建这个博客的步骤,分享的同时,整理自己的思路。
</summary>
<category term="Hexo" scheme="https://www.wdmcheng.cn/tags/Hexo/"/>
<category term="NexT" scheme="https://www.wdmcheng.cn/tags/NexT/"/>
</entry>
</feed>