搭建过程
第一部分: Hexo博客架构及发布原理
第二部分: 本地软件安装,包括NodeJS、Git、hexo-cli软件、Hexo初始化,生成静态网站
第三部分: 服务器环境搭建,包括安装 Git 、Nginx基本配置 、创建 git 用户 。
第四部分: 使用Git自动化部署发布博客
第五部分: 其它设置
第六部分: 文章引用
博客架构
通过下图先理解博客发布原理,知道为什么要这样做,而不是Step by step。知其然,更要知其所以然。
整个流程就是本地将 *.md 渲染成静态文件,然后Git推送到服务器的repository,服务器再通过 git-hooks 同步网站根目录。
本地(Windows端)软件安装
包括NodeJS、 Git、 Hexo-cli软件
安装Git for Windows
软件下载
客户端系统采用Windos系统,需要安装Git for Windows。下载Git for Windows。
Git for Windows64位下载
Git for Windows32位下载
软件安装
下载完成后,直接点击Git-2.14.3-64-bit.exe 进行安装,安装方式采用默认安装就行了,全部下一步,如果你想安装在其它目录,可以自行修改安装目录(建议默认路径)。
Git本地配置
打开Git Bash
终端**(以后如无特殊说明,均在GitBash内执行)**,执行以下命令:
# 修改为你在代码中的用户名
git config --global user.name "YourName"
# 修改为你登录用的邮箱
git config --global user.email "Yourmail@domain.com"
#生成密钥,采用的邮箱一定要和上面的邮箱相同,否则后面登录无效
ssh-keygen -t rsa -C "Yourmail@domain.com"
其它系统安装
Linux系统如下安装执行:
# 基于 Redhat 系统
$sudo yum install git -y
# 基于 Debian 系统
$sudo apt-get install git -y
Mac系统:
下载地址:Git for Mac
安装Nodejs
下载Nodejs
Nodejs_64位下载地址: Nodejs中文64位 || Nodejs英文64位
安装Nodejs.msi
下载完成后,直接点击node-v8.7.0-x64.msi
进行安装,安装方式采用默认安装就行了,全部下一步,如果你想安装在其它目录,可以自行修改安装目录(建议默认路径)。
安装、初始化 Hexo-cli 生成本地博客
安装 Hexo-cli
在Git Bash
上执行安装
npm install -g hexo-cli
初始化Hexo程序
先建立主目录,然后初始化。
# 在D盘下新建blog目录,做为博客主目录。
mkdir -p /d/hexo
# 进入博客主目录
cd /d/hexo
#初始化hexo并指定名称为blog
hexo init blog
安装插件
执行初始化后,安装hexo-deployer-git
(git部署插件)、hexo-server
(本地服务器插件)、hexo-asset-image(图片插件)
hexo-deployer-git帮助文档
hexo-server帮助文档
hexo-asset-image 参考
hexo-abbrLink 参考
在添加图片插件前,需要修改博客目录下的_config.yml
文件。
# 修改值为 true
post_asset_folder:true
然后执行以下安装命令。
cd blog
# 用于文章自动发布
npm install hexo-deployer-git --save
#用于本地测试
npm install hexo-server
# 图片插件
npm install hexo-asset-image --save
# 用于生成永久链接
npm install hexo-abbrlink --save
在建立文件时,Hexo会自动建立一个与文章同名的文件夹,您可以把与该文章相关的所有资源都放到那个文件夹,如此一来,您便可以更方便的使用资源。 你可以使用两种两种方法添加文件:
# 1、markdown 语法
 # 这个在使用永久链接后失效,推荐使用下面的方法。
# 2、使用标签插件
{% asset_img 图片.jpg This is image %}
#### 生成博客文章
使用 hexo new <文章名称>
来新建文章,该命令会成成一个 .md
文件放置在 sources/_posts
文件夹。
你可以使用其它软件编辑,或直接使用vim
编辑
hexo new "我的第一篇博客"
vim sources/_posts/我的第一篇博客.md
编辑完毕后,使用hexo g
将.md
文件渲染成静态文件,然后启动服务器 hexo-server
hexo g
hexo server
现在就可以使用浏览器访问 http://localhost:4000查看博客了。
服务器端搭建
Git和NodeJS安装(CentOS环境)
#以下操作无特殊说明,均在服务器上执行。
# 安装Git
yum install git
# 添加NodeJS 8.x安装源
curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
# 安装NodeJS 8.x
yum install nodejs
NodeJS 安装可以参考: Linux安装NodeJS
创建git用户并设置免密登录
# 添加用户
adduser git
#设置用户密码
passwd git
# 把用户添加到Sudo用户组
vim /etc/sudoers
找到以下内容:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在下面添加一行:
git ALL=(ALL) ALL
# 然后使用 ``wq!`` 强制保存退出``vim``编辑器。
切换到git用户,添加~/.ssh
文件夹和~/.ssh/authorized_key
文件,并赋予相应权限。
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
切换到本地GitBash
,执行:
# 复制刚才生成的公钥
cat ~/.ssh/id_rsa.pub
回到服务器端把公钥粘贴到authorized_keys
文件中,保存退出。
修改文件权限。
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
# 回到客户端``Git Bash``执行``ssh``命令,测试是否可以免密登录。
ssh -v git@Server #Server=你的服务器地址
到此,git用户添加,免密登录完成。
安装配置Nginx
安装nginx
这里使用yum
方式安装nginx
,更多安装方法请百度、google查找
yum install nginx
配置Nginx
在/etc/nginx
下找到nginx.conf
文件并修改,如果仅有管理一个网站,则直接在此配置文件下修改;如果有多个网站,建议将每个网站做单独的配置文件,以便修改。
# vim +37 /etc/nginx/nginx.conf # 直接定位到要操作的行
# include /etc/nginx/default.d/*.conf; # 添加此语句到37行,保存退出。
这样就可以在``/etc/nginx/default.d/``文件夹下添加独立网站的配置文件了。
新建配置文件``blog.conf``
vim /etc/nginx/default.d/blog.conf
添加如下内容,保存退出 :
server #服务
{
listen 80; #监听IPV4的本地80端口
#listen [::]:80; #监听IPV6的本地80端口
server_name www.seekbetter.me seekbetter.me; #目录绑定的域名
index index.html index.htm index.php #默认主页 default.php;
#这里要改成网站的根目录
root /path/to/www; #网站根目录
#error_page 404 /404.html; 错误页跳转
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$ #可显示的图片
{
access_log off; #日志开关
expires 1d; #记录时长
}
location ~ .*\.(js|css|txt|xml)?$ #可解析的文件
{
access_log off; #日志开关
expires 12h;#记录时长
}
location / { # 网站根目录
try_files $uri $uri/ =404; #404跳转页
}
access_log /var/log/nginx/blog.log; #日志路径
}
我的采用SSL证书,使用HTTPS访问所以配置文件如下:
server { # 服务
listen 80; # 监听本地80端口
server_name blog.longger.net; # 绑定的域名
location / { # 本地配置
root /var/www/html/blog; # 本地根目录
}
error_page 404 https://blog.longger.net/; # 错误跳转,直接跳转到https
}
server { # 服务
listen 443; # 监听本地443端口
server_name blog.longger.net; #绑定的域名
ssl on; # SSL是否打开
ssl_certificate /etc/nginx/cert/blog.pem; # 网站证书
ssl_certificate_key /etc/nginx/cert/blog.key; # 网站密钥
ssl_session_timeout 5m; # session 时间
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 密钥
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSL版本
ssl_prefer_server_ciphers on;
location / {
root /var/www/html/blog; # 本地目录
index index.htm index.html; # 首页
access_log off; # 日志开关
expires 1d; # 记录时长
}
access_log /var/log/nginx/blog.log; # 日志路径
}
把/var/www/html/blog/
目录授权给git用户。否则在同步部署时git用户没有权限,不容易部署成功。
chown -R git:git /var/www/html/blog
使用Git自动化部署发布博客
在服务器上建立git裸库
创建一个裸仓库,裸仓库就是只保存git信息的Repository
, 首先切换到git用户确保git用户拥有仓库所有权
一定要加 --bare,这样才是一个裸库。
su git
cd ~
git init -bare blog.git
使用git-hooks同步网站
在这里我们使用的是post-receive
这个钩子,当git
有收发的时候就会调用这个钩子。 在 ~/blog.git
裸库的hooks
文件夹中,
新建post-receive
文件。
vim ~/blog.git/hooks/post-receive
添加如下内容,保存退出
#!/bin/sh
git --work-tree=/var/www/html/blog --git-dir=/home/git/blog.git checkout -f
赋予可执行权限
chmod +x post-receive
配置_config.yml
文件,完成自动化部署
回到客户端在Git Bash
编辑在博客根目录下的_config.yml文件。
$vim +79 /d/Hexo/blog/_config.yml
修改添加以下内容:
deploy:
type: git
repo: git@SERVER:/home/git/blog.git # 远端库地址<repository url>
# 同时发布到多个网站,如github,gitlab,gitee等,则可以添加多个repo,如:
# github: git@github.com:***/***.git
# gitlab: ****
branch: master # 这里填写分支,默认填写 master [branch]
message: # 提交的信息,这里保持为空就行了
保存后,把我们新建立的文章部署到服务器上。
```shell
hexo clean # 清除缓存 或 hexo cl
hexo generate --deploy # 生成文件并部署 或 hexo g -d
其它设置
更换主题
到 https://hexo.io/themes
查找主题然后下载,启用。
# 进入博客目录
cd /d/hexo/blog
# 执行git clone ,前面是git路径,后面是本地存放路径。
git clone https://github.com/wuchong/jacman.git themes/jacman
# 修改``/d/hexo/blog/_config.yml``文件中 ``themes``为新主题。
vim +75 /d/hexo/blog/_config.yml
文章链接唯一化
也许你会数次更改文章题目或者变更文章发布时间,在默认设置下,文章链接都会改变,不利于搜索引擎收录,也不利于分享。唯一永久链接才是更好的选择。
安装
npm install hexo-abbrlink --save
在站点配置文件
中查找代码permalink
,将其更改为:
permalink: posts/:abbrlink/ # “posts/” 可自行更换
然后在站点配置
文件中添加如下代码:
# abbrlink config
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex
引用
主题参考:
使用Hexo搭建博客(三),博客配置、主题和写作
如何使用 Jacman 主题
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin