知识点准备
我主要参考了两篇文章:
- 【持续更新】最全Hexo博客搭建+主题优化+插件配置+常用操作+错误分析
- 基于CentOS搭建Hexo博客
我采用的方案是云服务器+域名的方式
首先是要搞懂一些概念
Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。在这里的主要作用就是挂载相关目录到对应端口(或者说让其他计算机访问服务器的某个端口时,直接访问对应目录)。该教程中只需要装在服务器。
Git
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。简单来说就是代码库及版本管理工具。在这里的作用就是:在服务器中创建仓库(钩子),然后在本地的git工具中拉取项目和提交项目。其中hexo里面集成了提交打包好的文件的命令,即hexo d。该教程需安装在服务器和客户端。
Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。一般用于服务器的操作系统,多用户这个概念很重要,不同的用户对文件的操作权限都会不同。在这里的作用只要是用root管理员权限安装一些软件和开启一些服务、创建git操作用户和分配权限。git用户只能对git仓库所在文件夹进行操作。
注意:在这里使用的是centos版本。其中yum是centos自带的包管理工具。文中编辑文本信息都用的是vim编辑器。
Node.js
Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。也就是说node.js是一个后台语言。这个是hexo的依赖环境,同时我们还需要用到node.js里面包含的包管理工具npm。一般来说这个只需要安装在本地即可,也就是说你要对博客进行操作或者开发的时候,就一定要有node.js的环境。
思路整理
结合上面涉及的知识点,我先大概列一下服务器端和客户端所需要做的事情。
服务器端:
- 安装Git、创建仓库、及配置自动部署
- 创建git用户并分配好文件夹权限
- 安装Nginx和配置好
客户端:
- 安装Git
- 安装node.js
- 安装hexo框架
客户端配置
客户端方面的配置比起服务器端就简单很多,因为客户端的工作只要负责编辑文章、修改项目文件、推送文章等操作。
本人使用的操作系统是windows,下面的配置项也只提供windows的操作方法。
安装Git
安装了之后配置一下个人信息,输入以下命令。
git config --global user.name "yourname"
git config --global user.email "youremail"
(第一次安装git的跳过这一步)然后检查该电脑有没有创建ssh密匙对,“id_rsa”(私匙)和“id_rsa.pub(公匙)”这两个。找到图中的目录(Administrator这个是我的用户名,视个人情况而定。)。
(已经有密匙对的话跳过这一步)在git bash中输入以下命令创建密匙对(注意修改自己的邮箱):
ssh-keygen -t rsa -C "自己的邮箱"
到这里就应该已经完成了密匙对的创建了,注意一下这个 id_rsa.pub ,待会服务器配置会用得上。
安装Node.js
很简单,直接到 官网 下载、安装即可。
安装了Node.js之后里面包含了npm包管理工具。
安装hexo
这一步就需要用到刚刚下载Node.js里面的npm命令了。
首先通过npm全局安装hexo,打开cmd命令行输入:
npm install -g hexo-cli
等到安装完成后,就要开始创建、初始化项目了。先把刚刚的命令窗口关掉吧。然后进入你要创建项目的目录,比如在 D:/projects/ 创建之后就是 D:/projects/blog,然后在当前目录打开命令行,输入:
hexo init blog
等到安装结束后进入项目目录。找到"package.json",编辑文件,在"dependencies"中追加以下一行:
在当前项目目录下执行以下命令:
npm install
到这里客户端的项目就已经可以启动了,输入以下验证下:
hexo s
如果看到这条信息,说明项目启动成功,打开浏览器访问 localhost:4000 就可以看到网站了。
客户端的就差不多了,其中还有个服务器仓库配置在“服务器端配置”章中底部会说明。
文章末还会有一些常用命令的小补充。
服务器端配置
安装Nginx和配置
登录服务器的root用户,运行以下代码安装nginx:
yum -y update
yum install -y nginx
配置nginx
接下来要修改配置,设置网站映射的根目录和访问域名。使用vim编辑以下文件:
vi /etc/nginx/conf.d/default.conf
找到对应配置,修改中文的地方:
server {
listen 80; #这里填端口号,80即默认端口,访问时不需带端口号。
server_name 这里填写域名
root 这里填写网站根目录地址;
}
启动nginx:
service nginx start
安装git和创建钩子
安装git:
yum install -y git
创建git用户以及设置密码(创建git用户是为了安全起见,防止权限太大进行其他操作):
adduser git
passwd git
给git用户分配更高级的权限
输入以下代码 sudo vi /etc/sudoers
,打开sudoers文件,输入 :/root
进行搜索,搜索到代码行 root ALL=(ALL) ALL
,然后在这一行下添加以下代码 git ALL=(ALL) ALL
。输入完毕之后,命令模式下输入 wq!
强制保存退出vi。
效果如下图:
图片来自网站:https://segmentfault.com/a/11...
切换到git用户登录,在用户home目录中添加密匙文件。作用是识别客户端的主机身份,可免登录操作git仓库
su git
mkdir ~/.ssh
vi ~/.ssh/authorized_keys
编辑 authorized_keys 文件时将(上文提过)客户端创建的公匙 “id_rsa.pub” 内容复制到文件中。
接下来就要分配权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
现在就验证下之前的配置是否生效,在客户端的git bash中输入(记得改服务器ip):
ssh -v git@服务器ip
在git的home目录中创建 初始化一个裸库,以管理代码。
cd ~
git init --bare blog.git
创建一个钩子,作用是当仓库文件有新的推送时,把文件拷贝到站点根目录下。使用vim创建并编辑post-receive文件:
vi ~/blog.git/hooks/post-receive
添加以下内容进去(其中/var/www这个是网站根目录,记得修改成自己的。):
#!/bin/sh
git --work-tree=/var/www --git-dir=/home/git/blog.git checkout -f
保存之后,修改文件权限
chmod +x ~/blog.git/hooks/post-receive
最后一步,开放服务器中的80端口。
先输入以下命令确认防火墙有无开发80端口:
iptables -L -n
# 注意 Chain OUTPUT里面有无以下这行,没有的话就是没有开发
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
若没有开放则需要修改配置:
vi /etc/sysconfig/iptables
#打开后在配置项找到对应的位置插入以下这行。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
然后重启防火墙以更新配置
service iptables restart
到这里服务器端的就配置完啦
接下来就是上文说到的仓库地址配置
在客户端的项目目录下找到_config.yml,修改下面的对应信息:
deploy:
type: git
repo: git@SERVER:/home/git/blog.git #此处的SERVER需改为你自己服务器的ip
branch: master
补充
hexo还有很多用户制作的主题供大家选择,可以在 官网主题 上找,进去对应的主题中会有教程的了。
hexo常用指令有如下(都可以只写第一个字母,如 hexo n):
hexo clean # 清空缓存文件和已生成的静态文件
hexo new [名字] # 新建一篇文章
hexo generate # 生成静态文件,即html文件
hexo deploy # 部署网站,即提交到服务器的仓库(之前的git钩子已设置成仓库文件一旦更新,会自动更新到站点目录)。
更多指令可在 官方文档 中查询。
第一次写一篇这么长的文章,口水话很多,也有很多不清晰的地方。不过相信会越写越好的。
祝大家学习愉快,工作顺利!