我这里以 CentOS 7 为例来进行说明。
官方推荐最简单的安装方式就是使用 pip
,没错,这货是 python
写的。
最简化安装的 CentOS,虽然自带了 python
,但是没有相关头文件,无法安装 pip
,干脆编译安装 python3
。既然要编译,先装个开发工具包再说
1 | yum -y groupinstall 'Development Tools' |
编译 python3
,一定要注意 OpenSSL
支持是不是启用了,否则后面没办法下载各种包了,还需要这些依赖,不安装会报错的(都是试错过后的总结,都是眼泪😢)
1 | yum -y install openssl openssl-devel zlib zlib-devel libffi-devel |
下载 python3
的源码包,然后解压编译并执行 configure
1 | # 下载解压 |
执行完 configure
后,注意看 OpenSSL
支持是不是启用了。如图是成功启用的。
后面编译安装
1 | make |
这个时候没有 pip
命令,只有 pip3
。不用别名处理了,顺手更新一下 pip
版本,也会自动安装 pip
这个命令
1 | pip3 install --upgrade pip |
进入正题,安装 curator
1 | pip3 install elasticsearch-curator |
执行 curator
命令时,默认读取的配置文件在 ~/.curator/curator.yml
。创建配置文件,内容如下
1 |
|
上面的 http_auth
部分,是用户名和密码,用 :
分隔。更多配置文件写法,参考 官方文档
创建任务文件,这里提供一个参考,内容如下。详细信息参考官方文档
1 |
|
现在可以使用 --dry-run
参数试运行测试一下(这个参数的作用就是不会真正的去执行,只是模拟)。--config ~/.curator/curator.yml
可省略
1 | curator --config ~/.curator/curator.yml --dry-run ~/delete_indecies.yml |
先说一下用法,后面再列几篇文章供参考
crontab -e
,会自动打开 vim
编辑器0 0,6,12,18 * * * /usr/local/bin/curator ~/delete_indecies.yml
macOS 的文件系统不区分大小写,但在开发编码的过程中,可能会下载到需要区分大小写的文件——Git 还可以通过配置控制一下,SVN 中出现这种问题的概率就不小了——因此想要找到一个解决办法。
后来了解到 mac 的稀疏磁盘映像(sparseimage)比较不错
dmg
格式相同嗯,最后决定建一个稀疏磁盘映像,格式化成区分大小写的分区格式,来保存我的代码库
打开磁盘工具,新建空白映像(图1)
存储为
和 位置
随意,我这里是 ~/DevCaseSensitive.sparsebundle
名称
定义的是分区名称,也就是磁盘的挂载点了APFS(区分大小写)
GUID 分区图
稀疏捆绑磁盘映像
然后就可以把代码都写入这个分区了,我这里的挂载点是 /Volumes/DevCaseSensitive
hdiutil resize -size 50g ~/DevCaseSensitive.sparseimage
来修改大小hdiutil attach ~/DevCaseSensitive.sparseimage
重新挂载磁盘映像我在磁盘映像里还放了 IDE 工具(JetBrains 的 IntelliJ IDEA),而 JetBrains Toolbox 会开机自启。又由于 macOS 登录后的各程序启动都是并行的,没有先后顺序,因此不能直接将磁盘映像添加到登录项LaunchDaemons
是在系统启动后就会执行,优先于登录项,因此这里采用这种机制
LaunchAgents
的目录都是登录项,不能用,/System/Library/LaunchDaemons
是系统级的,一般不动,因此目录选择 /Library/LaunchDaemons
在 /Library/LaunchDaemons
下新建文件 cn.wdmcheng.sparseimage-loader.plist
,内容如下(xxxxx
是用户名)
1 |
|
执行命令 launchctl load /Library/LaunchDaemons/cn.wdmcheng.sparseimage-loader.plist
加载配置,重启即可生效
JetBrains 家的 IDE 需要配置一个属性,来指定使用区分大小写的模式
在 IDE 的 JVM 参数上,增加 -Didea.case.sensitive.fs=true
即可
接下来就可以正常使用啦
首先要打开Shell
1 | # 最后数字7即为最多显示7行 |
1 | # 最后数字8即为最多显示8列 |
1 | # 重启Dock |
如果你已经装了很多软件,修改之后还要手动调整图标,可以用下面的办法偷懒1
2
3
4# 重置LaunchPad的图标排列
defaults write com.apple.dock ResetLaunchPad -bool TRUE
# 重启Dock
killall Dock
1 | defaults delete com.apple.dock springboard-rows |
在 Shell 中(Windows 下可能需要使用 Git Bash)执行初始化命令:
1 | hexo init hexo-blog |
我这里使用的是 yarn
代替 npm
,关于 yarn
的安装,参考这里
我用的 Hexo
版本是 3.8.0,不需要执行 yarn install
命令了,init 的时候就做完了,因此只需要 cd 到目录下即可
_config.yml
:配置 | 原值(默认值) | 修改值 |
---|---|---|
title | Hexo | Wdmcheng |
subtitle | Java Coder | |
description | 手握日月摘星晨,世间无我这般人……嗯……吹大了 | |
author | John Doe | 雾都迷城 |
language | zh-CN | |
timezone | Asia/Shanghai | |
url | http://yoursite.com | https://www.wdmcheng.cn |
permalink | :year/:month/:day/:title/ | :title |
new_post_name | :title.md | :year/:month/:day/:title.md |
post_asset_folder | false | true |
index_generator > per_page | 10 | 20 |
per_page | 10 | 20 |
hexo server
http://localhost:4000
Ctrl+C
终止服务运行这里采用的是遇见西门教程教程的实施方案三,采用 GithubPages + CodingPages 的方式,不过有些变化。我是部署到 GitLabPages
上,然后使用 GitLab
的镜像仓库功能推送到 GitHub
与 Coding
至于 Pages 服务的配置及这些镜像配置就不多介绍了
关于主题优化,详细的教程还是要参考遇见西门的博客
404
,看不见预览,我直接 Github 搜索。Star 数最高的是 NexT 主题,但是旧版的,我这里直接使用新版根据主题说明,下载安装主题,我直接安装的最新版本
1 | git clone https://github.com/theme-next/hexo-theme-next themes/next |
修改站点配置文件 _config.yml
的 theme
字段,为主题文件夹名称,我这里就是 next
,这时候想看到效果需要重启服务了
landscape
主题了,直接删除,执行命令 rm -rf themes/landscape
因为主题是克隆的仓库,后续升级版本其实很方便,为了避免升级时候主题配置的处理太麻烦,因此采用数据文件的形式配置:
执行下面命令,创建 source/_data/
目录,并将默认主题配置文件 themes/next/_config.yml
复制到 source/_data/
下,命名为 next.yml
1 | mkdir -p source/_data |
修改新的主题配置文件 source/_data/next.yml
,将 override
修改为 true
安装 hexo-generator-feed
插件,由 Hexo 自动生成订阅源并插入链接,不需要其他配置1
yarn add -D hexo-generator-feed
source/_data/next.yml
,将 scheme
修改为 Gemini
,使用双子座主题样式menu_settings.badges
为 true
toc.wrap
为 true
back2top
下sidebar: true
scrollpercent: true
footer
下icon.name: heart
icon.animated: true
auto_excerpt.enable: true
打开 save_scroll: true
这个开关就可以在 Cookie
中保存文章的阅读位置,下次进入还会滚动到相同地方
yarn add -D hexo-symbols-count-time
修改站点配置文件 _config.yml
,添加下面代码
1 | # 字数统计与阅读时长 |
如果需要显示站点总字数
与站点阅读时长
的文字,修改主题配置文件 source/_data/next.yml
,将 symbols_count_time.item_text_total
设置为 true
主题配置文件 source/_data/next.yml
中 codeblock.copy_button.enable
设置为 true
,codeblock.copy_button.show_result
设置为 true
如果需要优化字库访问速度,可以使用国内字体镜像站 fonts.lug.ustc.edu.cn
代替默认的 fonts.googleapis.com
,修改 font
下
enable: true
host: //fonts.lug.ustc.edu.cn
global.family: Monda
headings.family: Roboto Slab
logo.family: Lobster Two
logo.size: 24
codes.family: PT Mono
menu
下,打开下面几项的注释执行下面的命令,生成 categories
tags
about
schedule
页面
1 | hexo new page categories |
生成的文件路径如下
source/categories/index.md
与 source/tags/index.md
文件,在 date
下面添加一行,分别为 type: categories
type: tags
,然后再各添加一行 comments: false
禁止评论。scaffolds/post.md
模板文件,在 title
下新添一行 description:
,在 tags
下新添一行 categories:
,这样以后创建的文章都会自动添加这两个属性Google Calendar
,需要梯子。详细配置参考这里,注意主题配置文件中的 calendar.calendar_id
不一定要填写 Google 账号对应的 E-Mail,只需要填写一个日历 ID
,一定要是公开日历
,否则会报 404
我这里使用的是 by-nc-sa,因此配置 creative_commons
项
sidebar: true
post: true
language: deed.zh
这里我写了个前言,添加一下授权协议说明,在每篇博文都默认添加,也可以手动关闭
创建文件 themes/next/layout/_custom/custom-post-preface.swig
,并输入如下内容,或者自行修改
1 | <h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2> |
编辑 scaffolds/post.md
模板文件,在 categories
下新添一行 include_preface: true
,做为显示前言的开关,这样以后创建的文章都会自动添加,并且是打开状态,具体文章的标记改为 false
,则那篇文章就不会显示前言
编辑 themes/next/layout/_macro/post.swig
文件,在下面所示的区域
1 | {#################} |
找到非 is_index
的 ,在其上添加如下代码
1 | {% if post.include_preface %} |
themes/next/layout/_custom/passage-end-tag.swig
,并输入如下内容,或者自行修改<div style="text-align: center; color: #ccc; font-size: 14px;">-------------本文结束<i class="fa fa-paw"></i>感谢您的阅读-------------</div>
在主题配置文件 source/_data/next.yml
中添加如下配置,这里是关闭的,随时开启,只需要将 passage_end_tag.enable
从 false
改为 true
1 | # 文章结束标记(需修改主题,自己添加代码) |
编辑 themes/next/layout/_macro/post.swig
文件,在下面所示的标记上面
1 | {#####################} |
添加如下代码
1 | {% if theme.passage_end_tag.enable and not is_index %} |
最大的同性交友网站 GitHub 地址还是要放的,方便其他人 Follow me。
找到 github_banner
项,修改以下配置
enable: true
permalink: https://github.com/wdmcheng
添加依赖,在 Shell 中执行命令
1 | yarn add -D hexo-generator-searchdb |
在站点配置文件 _config.yml
中,找到 Extensions
,在后面添加
1 | # 搜索功能 |
在主题配置文件 source/_data/next.yml
中,修改 local_search.enable
为 true
mobile_layout_economy: true
safari_rainbow: true
custom_scrollbar: true
Canvas-nest
,在主题配置文件 source/_data/next.yml
中,修改 canvas_nest.enable
为 true
配置 CDN 加速,修改 vendors
下的配置
1 | vendors: |
我这里还添加了 JavaScript 3D library
,在主题配置文件 source/_data/next.yml
中,下面几项配置,需要启用哪种特效,就将 false
改为 true
,我这里都是暂时关闭的
配置 CDN 加速,修改 vendors
下的配置
1 | vendors: |
使用 CDN 加速,安装 Canvas-Ribbon
,修改主题配置文件 source/_data/next.yml
,我这里没有启用,需要启用直接修改 canvas_ribbon.enable
为 true
1 | vendors: |
motion.async
默认为 false
,这里修改为 true
,感觉动画效果快一些
安装 hexo-helper-live2d
1 | yarn add -D hexo-helper-live2d |
在站点配置文件 _config.yml
中,找到 Extensions
,在后面添加
1 | # Live2D |
编辑 themes/next/source/css/_custom/custom.styl
文件,添加下面代码,我这里注释掉了,取消注释可以启用阴影1
2
3
4
5
6
7
8// 主页文章添加阴影效果
/*.post {
margin-top: 0px;
margin-bottom: 60px;
padding: 25px;
-webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);
-moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);
}*/
可以通过如下命令更新到最新的 master 分支1
2
3
4cd themes/next
git stash pull
git pull
git stash pop
我这里用的是 Google AdSense
,网络问题请自行解决
访问 Google AdSense,点击 立即注册
,然后填各种资料,最后生成一段代码,我的是
1 | <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> |
编辑 themes/next/layout/_custom/head.swig
文件,粘贴代码(稍作修改,添加一些变量及控制)
1 | {% if theme.google_adsense.enable %} |
在主题配置文件 source/_data/next.yml
中添加下面代码
1 | # Google AdSense |
等待审核通过,好运。如果失败,可再次申请。
配置 font-awesome
jquery
velocity
的 CDN 加速,在主题配置文件 source/_data/next.yml
中,修改 vendors
下的配置1
2
3
4
5vendors:
jquery: //cdn.jsdelivr.net/npm/jquery@2/dist/jquery.min.js
velocity: //cdn.jsdelivr.net/npm/velocity-animate@1/velocity.min.js
velocity_ui: //cdn.jsdelivr.net/npm/velocity-animate@1/velocity.ui.min.js
fontawesome: //cdn.jsdelivr.net/npm/font-awesome@4/css/font-awesome.min.css
如果未安装 gulo
,在 Shell 中执行以下命令:
1 | npm install gulp -g |
执行以下命令:
1 | npm install gulp -g |
在项目根目录下新建 gulpfile.js
文件,内容如下:
1 | var gulp = require('gulp'); |
以后只需要在每次 hexo generate
后,执行一下 gulp
就可以实现对静态文件的压缩,之后再执行 hexo deploy
命令发布。写一下代码,方便复制:
1 | hexo generate |
标签插件用法参考官网
在主题配置文件 source/_data/next.yml
中,修改 note
下的配置
style: modern
icons: true
border_radius: 0
light_bg_offset: -3
tabs.transition.tabs: true
修改配置 pdf.enable: true
修改配置 mermaid.enable: true
数学方程式渲染引擎可以使用 mathjax
或 katex
,由 math.engine
项配置,将 math.enable
修改为 true
即可开启
修改配置1
2
3
4fancybox: true
vendors:
fancybox: //cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js
fancybox_css: //cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css
1 | bookmark: |
1 | reading_progress: |
1 | pace: true |
1 | fastclick: true |
1 | lazyload: true |
1 | quicklink: |
启用方式就是直接按照下面修改主题配置文件 source/_data/next.yml
,我没有启用1
2
3han: true
vendors:
han: //cdnjs.cloudflare.com/ajax/libs/Han/3.3.0/han.min.css
source/_data/next.yml
中,修改 pangu: true
vendors.pangu
配置1 | vendors: |
百度分享
太丑,Likely
没有本土化,不支持微信什么的,这里使用 NeedMoreShare2
不在本地加依赖了,直接使用 CDN,修改主题配置文件 source/_data/next.yml
1 | vendors: |
修改如下配置
1 | needmoreshare2: |
我这里使用 LiveRe,注册后安装一个免费的 City 版本,在安装代码中找到 data-uid
,然后修改主题配置文件 source/_data/next.yml
,打开 livere_uid
的注释,并填入 data-uid
这里没有使用 NexT
官方推荐的,使用的是 DaoVoice,安装方法我参考了这里
注册之后,选择接入
,编程语言为 JavaScript
,会出现下面这种代码
1 | <script>(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/XXXXXXXX.js","daovoice")</script> |
1 | daovoice('init', { |
themes/next/layout/_custom/head.swig
文件中添加如下代码(修改一下 </script>
结束标签的位置,并且将 app_id
做成变量)
1 | {% if theme.daovoice.enable %} |
在主题配置文件 source/_data/next.yml
中添加下面代码,XXXXXXXX
是前面获取到的 app_id
1 | # DaoVoice 在线聊天 |
yarn add -D hexo-deployer-git
部署配置,在站点配置文件 _config.yml
中,找到 deploy
,在其节点下删除 type
,然后添加如下配置
1 | - type: git |
执行下面的命令,清理、生成静态文件、部署
1 | hexo clean |
要使用 Firebase 需要梯子,不只是配置过程,用户访问时如果不能连接服务,也是没有办法统计的,因此不建议
网络 API 密钥
和 项目 ID
,然后修改主题配置文件 source/_data/next.yml
的 firestore
部分,如下enable: true
apiKey: #<网络 API 密钥>
projectId: #<项目 ID>
Firebase 控制台
中,进入 开发 > Database
,创建一个非测试的数据库,之后进入规则
,将 allow read, write: if false;
改为 allow read, write: if true;
,然后发布source/_data/next.yml
,将 busuanzi_count.enable
改为 true
LeanCloud
,因此将 busuanzi_count.post_views
改为 false
访客数
图标修改一下,busuanzi_count.total_visitors_icon
的值从 user
改为 users
LeanCloud
的相关配置请参考
Leancloud访客统计插件重大安全漏洞修复指南
GitHub
账号注册Counter
类,之后进入设置拿到 App ID
及 App Key
source/_data/next.yml
中的 leancloud_visitors
部分enable: true
app_id: #<App ID>
app_key: #<App Key>
betterPerformance: true
LeanCloud
的设置页面,进入安全中心
,添加Web 安全域名
,注意协议、域名和端口号需严格一致,我这里是 https://www.wdmcheng.cn
部署云引擎以保证访客数量不被随意篡改
LeanCloud
的云引擎 > 部署
,点击在线编辑
创建函数 > Hook
,Hook
选择 beforeUpdate
,Class
选择 Counter
,然后粘贴下面代码
1 | var query = new AV.Query("Counter"); |
注释
处填个描述,我这里写的防止访客数量被随意篡改
部署
一下才可以生效配置数据库记录只可以本地增加,禁止删除
打开站点配置文件 _config.yml
,添加以下配置,app_id
与 app_key
是 LeanCloud
中的,username
与 password
是授权可以 create
的用户名与密码
1 | leancloud_counter_security: |
执行命令 yarn add -D hexo-leancloud-counter-security
安装相关组件
hexo lc-counter register <<username>> <<password>>
创建用户LeanCloud
的存储
,进入 Counter
类,选择其他 > 权限设定
,将 create
的权限设置为指定用户
,选择刚才创建的用户,delete
的权限也设置为指定用户
,但用户和角色都留空_config.yml
的 deploy
节点下添加 - type: leancloud_counter_security_sync
vendors.leancloud
配置1 | vendors: |
Google Analytics
,前往Google Analytics,注册或登录,获取到 Google 跟踪 ID
source/_data/next.yml
,将 google_analytics
部分的注释打开,并且在 google_analytics.tracking_id
填入 UA-XXXXXXXX-X
形式的 Google 跟踪 ID
若要关联 Google Search Console
,这里不能使用 HTML 文件
方式验证,因为使用 Hexo
部署时,会自动移除多余的 html 文件。这里采用 Google Analytics
方式验证,那么在启用了 Google Analytics
后必须部署,然后根据 Google 的向导操作
直接在 Google Analytics
的管理页面关联就可以了
打开百度统计,注册、建立网站,完成后会有一个下面这种的统计代码
,复制 https://hm.baidu.com/hm.js?xxxxxxxx
中的 xxxxxxxx
,得到统计 ID
1 | <script> |
打开主题配置文件 source/_data/next.yml
,找到 baidu_analytics
,打开注释,并修改为 baidu_analytics: xxxxxxxx
在主题配置文件 source/_data/next.yml
中,修改如下配置
disable_baidu_transformation: true
seo: true
index_with_subtitle: true
exturl: true
baidu_push: true
各种 Webmaster tools verification 需要到各自官网获取,然后填写到配置文件中,详细说明可参考NexT 主题官网,
我这里开了 google_site_verification
bing_site_verification
baidu_site_verification
三个,可以开三个页签分别配置到待验证的环节,然后配好 NexT
,一次发布,再分别点验证
减少出站链接能够有效防止权重分散,这里安装 hexo-autonofollow
,该工具可以在出站链接上自动添加属性 external nofollow noopener noreferrer
1 | yarn add -D hexo-autonofollow |
在站点配置文件 _config.yml
中添加如下配置,友链不想添加 nofollow
属性的,添加到 exclude
里
1 | nofollow: |
主题配置文件中默认的 permalink
是 :year/:month/:day/:title/
,这对搜索引擎不友好,直接修改一下链接层级,变成 :title
或者 :year-:month-:day-:title
这里参考 Hexo博客Next主题SEO优化方法
首先安装插件,自动生成 sitemap
文件,一个传统的,一个百度的
1 | yarn add -D hexo-generator-sitemap hexo-generator-baidu-sitemap |
安装完部署,这时网站就有了两个 sitemap
了
Google Search Console
和百度搜索资源平台中添加验证了站点,现在可以直接提交 sitemap.xml
了,百度提交 baidusitemap.xml
github
禁止百度爬虫,好在百度支持主动推送,因此还需要添加一个主动推送的插件,执行命令 yarn add -D hexo-baidu-url-submit
在站点配置文件 _config.yml
中,参考下面配置、注释及主动推送的接口调用地址添加配置(最后三个是熊掌号
相关的,没有注册熊掌号则不写)
1 | baidu_url_submit: |
在 deploy
下增加下面的类型(没注册熊掌号则不添加熊掌号的类型)
1 | - type: baidu_url_submitter # 百度 |
这里参考了 hexo next 新增阅读排行页面
排行榜源码如下(修改了文章链接地址),其中 leancloud_uri
leancloud_appid
leancloud_appkey
需要替换一下
1 | <div id="top"></div> |
执行 hexo new page top
命令,创建一个 top
页面,编辑该页面,在头部描述区域添加 comments: false
关闭评论功能,然后粘贴上述代码
source/_data/next.yml
,在 menu
下添加 top: /top/ || signal
themes/next/languages/zh-CN.yml
语言文件,在 menu
下添加 top: /top/ || signal
我这里是使用 GitLab
私有仓库保存源码(因为含有密钥等信息),使用 gitlab-ci
自动部署的到 GitLab 的仓库,然后使用 GitLab 的镜像仓库功能推送到 github
与 coding
,这样每次写完文章,合并到 master
分支即可
GitHub
的 Pages 服务并配置域名,需要添加 CNAME
文件,为了自动部署,直接新建 source/CNAME
文件,并在里面填写 www.wdmcheng.cn
HTTPS
,要先解析到 Coding
的服务,然后开启 Coding Pages
的 HTTPS
功能,待申请下来证书后,再添加国外 IP 解析到 GitHub
,最后再申请 GitHub Pages
的 HTTPS
Coding
续期完成再开启SSH
方式部署的,附上我的 .gitlab-ci.yml
文件1 | # This file is a template, and might need editing before it works on your project. |