【彻底搞懂如何应用 Hexo+GitHubPages 搭建集体博客】解说了如何应用 Hexo+GitHubPages 来搭建一款属于本人的集体博客。应用了一段时间后,发现访问速度偏慢,而且本人也在前段时间腾讯云做流动的时候购买了一台云服务器,所以将我的集体博客迁徙到了腾讯云上。其实不肯定是腾讯云,心愿通过本文,您能够将原来部署到 GitHubPages 上的博客部署到任何云服务器上。
还是为了彻底搞懂目标,我也是参考了很多文章,大多是依照文章中的指引一行行的命令来配置部署,期间还应用过宝塔面板。起初因为原来的服务器到期了,不得不重新部署一遍。因为没有彻底搞懂,前面又不得找文章【玩转腾讯云】Hexo 博客部署腾讯云来一遍遍跟着指引来配置。然而这次在配置之后我总结发现,其实把步骤搞清楚了,明确每个步骤的目标,把 Hexo 部署到服务器上没有那么简单,而且第一次配置的很多步骤都是不须要的。
浏览指引
环境
- CentOS 7.6 64 位
配置步骤
-
服务器配置并装置 Git 仓库托管
- 装置 git 编译所须要的依赖包
- 装置 git
- 创立 git 用户
- 配置 rsa 公钥
-
GitHubPages 作为 Web 服务器 -> 装置并配置 Nginx 云服务器的 Web 服务
- 云服务其中创立站点目录
-
装置配置 Nginx
- 云服务器装置 Nginx
- 配置 Nginx
- 重启 Nginx 服务
-
git 仓库配置
- 建设 git 仓库并批改权限
- 同步网站根目录(配置 git hook)
- 批改权限
- 域名解析到 GitHubPages-> 域名解析到云服务器的 IP
批改域名解析
- Hexo 配置推送到 github 仓库 ->Hexo 配置推送到云服务器 git 仓库
批改 Hexo 配置
- 测试
首先我会分步骤解说所有的环节,文章的最初我会将这些命令步骤进行整合,不便你在了解后能够依照配置指引进行配置。心愿通过这套合成和整合动作让你彻底搞懂如何将 Hexo 部署到云服务器。
后期筹备
首先须要一台云服务器,腾讯云、阿里云、京东云不论啥云,啥云便宜用啥云。学生的话各大平台都有优惠,如果你买不到打折的云产品,能够私聊我(不是广告啊,因为我过后也是因为贵没买,个人用户动不动大几千吓人,起初才晓得有渠道)
而后就是你曾经参照我的上一篇文章 [彻底搞懂如何应用 Hexo+GitHubPages 搭建集体博客] 搭建好了一款基于 Hexo+GitHubPages 的 Blog,上面就开始咱们的迁徙工作。
迁徙工作
整体思路
原来应用的 GitHubPages 来作为博客的 Web 服务器,当初替换为本人的云服务器,那么只须要在云服务器上实现原来 GitHubPages 提供的相干性能即可。回顾一下,原来的 github 来托管 blog 相干的资源和文件,那么须要服务器具备 git 的性能;应用 GitHubPages 来作为 Web 服务器,那么须要云服务具备 Web 相干服务;原来的 GitHubPages 对域名进行了解析,通过域名配置跳转到了 GitHubPages 的地址,当初前移到了云服务器,云服务器具备本人的 IP 地址,所以也必定要批改原来的域名解析,在服务器做域名相干的配置;最初,原来 Hexo 中配置了 Hexo 的推送地址为 GitHub 上的仓库,这里必定也要批改推送地址
而 Hexo 相干工作都是在咱们本地实现将 md 文件转换为 HTML 先关文件的工作,所以并不需要在装置 HTML 先关工作。所以概括下来,高深莫测,须要如下工作,:
- github 的代码托管服务 -> 服务器装置 git 配置 git 仓库托管相干服务
- GitHubPages 作为 Web 服务器 -> 装置并配置 Nginx 云服务器的 Web 服务
- 域名解析到 GitHubPages-> 域名解析到云服务器的 IP
- Hexo 配置推送到 github 仓库 ->Hexo 配置推送到云服务器 git 仓库
服务器配置并装置 Git 仓库托管
咱们原来应用 GitHubPages 来上传并治理咱们的 Hexo 相干的文件,当初在云平台上当然须要一个工具来实现相似于代码托管的性能来托管咱们的 blog 文件,这里就须要首先装置 Git。如果原来服务器上有 git 工具,其实能够省略这一步。如果 git 版本太低,也最好装置一个最新版本。
装置 git 编译所须要的依赖包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
这两个命令上来有点懵,都是啥啊,反正我已开始就是键盘一通梭,配置完了回来合成了解。其实就是一堆 Git 工作须要调用的库,上面就每个依赖包的作用,你能够先开始前面的操作,前面回来缓缓看。
-
curl-devel
cURL is a tool for getting files from FTP, HTTP, Gopher, Telnet, and
Dict servers, using any of the supported protocols. The curl-devel
package includes files needed for developing applications which can
use cURL’s capabilities internally.大抵翻译下是:cURL 包是一个从 FTP/HTTP/Gopher/Telent/Dic 服务器获取文件的工具,这个工具应用所有任何反对的协定。curl-devel 包集成了所有应用 cURL 包开发利用时的文件。如果不装置这个依赖,编译 git 时未装置 (lib)curl-devel 可能会导致 在 git clone 期间“找不到’https’的近程帮忙程序”的问题。
-
expat-devel
a stream-oriented XML parser library written in C.
Expat excels with files too large to fit RAM, and where performance and flexibility are crucial.一个用 C 编写的面向流的 XML 解析器库。Expat 善于解决那些大到无奈装入内存的文件,性能和灵活性至关重要。
-
gettext-devel
Specifically, the GNU gettext utilities are a set of tools that provides a framework to help other GNU packages produce multi-lingual messages. These tools include a set of conventions about how programs should be written to support message catalogs, a directory and file naming organization for the message catalogs themselves, a runtime library supporting the retrieval of translated messages, and a few stand-alone programs to massage in various ways the sets of translatable strings, or already translated strings.
具体来说,GNU gettext 实用程序是一组工具,它提供了一个框架来帮忙其余 GNU 包生成多语言音讯。这些工具包含一组约定对于应该如何写程序来反对音讯目录, 目录和文件的命名组织音讯目录自身, 一个运行时库反对翻译的检索信息, 和一些独立的程序以各种形式按摩可翻译字符串的汇合, 或者曾经翻译后的字符串。
- openssl-devel
这个字面意思就是 openssl 相干的库
- zlib-devel
zlib-devel 包蕴含开发应用 zlib 压缩和解压缩库的程序所需的头文件和库。
- gcc
gcc 相干的包
- perl-ExtUtils-MakeMaker
ExtUtils::MakeMaker 模块,这个模块是用于创立 Makefile 文件的模块。
很显著前面两条是因为如果你的云服务器没有装置 gcc 相干的工具,用来装置 C 语言编译相干工具的,因为 git 是用 C 写的。
装置 git
装置好了 git 编译所须要的依赖,开始来装置 Git。
-
如果装置了一个版本较低的 git,首先须要卸载原来的 git
yum remove git
- 查看 git 的最新版本,咱们登陆 git 官网来查看最新的版本号,这里能够看到是 2.31.0
-
进入到 git 装置目录,这里抉择 /usr/local/src
cd /usr/local/src // 抉择文件保留地位
-
下载 git
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.31.0.tar.gz // 下载链接
留神这里将版本号替换为你想下载的版本号
-
解压
tar -zxvf git-2.18.4.tar.gz // 解压
这里总是记不住 tar 命令几个参数的含意,正好温习一下
- - z 或 –gzip 或 –ungzip 通过 gzip 指令解决备份文件。
- - x 或 –extract 或 –get 从备份文件中还原文件
- - v 或 –verbose 显示指令执行过程
- -f< 备份文件 > 或 –file=< 备份文件 > 指定备份文件。
-
装置并编译
cd git-2.19.0 // 进入文件夹 make prefix=/usr/local/git all // 编译源码 make prefix=/usr/local/git install // 装置至 /usr/local/git 门路
首先是编译,第二条命令中 all 是 makefile 中指定的一个编译指标,如果 make 没有加 all,那么默认会执行 makefile 中的第一个编译指标,这是两者的不同之处。然而,在大多数的 makefile 中,会将 all 作为第一个编译指标,如果是这样,那么 all 加不加都是一样的,因而,实在的执行后果依赖于 makefile 的写法,是否把 all 作为第一个编译指标。
-
编辑并配置 git 的门路到环境配置文件中
vim /etc/profile // 在文件开端增加如下内容 PATH=$PATH:/usr/local/git/bin // git 的目录 export PATH // 保留后刷新环境变量 source /etc/profile
创立 git 用户
在云服务器个别不会应用 root 用户来进行所有的操作,所以当应用 Hexo 向云服务器上传文件时,须要为这个操作创立一个 git 用户并批改权限。
-
新建 git 用户
adduser git // 为服务器增加用户名为 git 的用户 passwd git // 明码设置为 git 这里 git 替换为将要设置的明码
-
将新创建的 git 用户增加到 sudo 组
chmod 740 /etc/sudoers vim /etc/sudoers
chmod 是对文件权限的批改,740 每一位代表对拥有者、群组、其余组的权限。
这里就是拥有者的权限是 7,以后用户所在群组的权限是 4、其余组的权限是 0,那么 7,4,0 又代表什么呢?
一个文件具备读、写、执行也就是以 r、w、x,对应权限为 4、2、1(二进制),所以读权限是 4,写权限是 2,执行权限是 1。一个用户或组具备的权限为这三种操作的和也就是:
– 若要同时设置 rwx (可读写运行)权限则将该权限位 设置 为 4 + 2 + 1 = 7
– 若要同时设置 rw-(可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6
– 若要同时设置 r-x(可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5
这里 chmod 740 /etc/sudoers 就是设置对文件领有这的权限是可读写运行,对用户所在组的权限设置为可写,对其余组的权限设置为不可读不可写不可运行。简略了解就是对以后用户进行提前因为下一步要批改这个文件。
/etc/sudoers 文件治理 sudo 组的用户,这里编辑这个文件,将 git 用户退出到这个用户组。当前就不须要用 sudo 命令来输明码啦~
在如下内容前面增加:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
#在这里增加
git ALL=(ALL) ALL
第一个 ALL 批示容许从任何终端、机器拜访 sudo
第二个 (ALL) 批示 sudo
命令被容许以任何用户身份执行
第三个 ALL 示意所有命令都能够作为 root 执行
-
批改权限,即把以后用户的权限降为只能读文件,其余用户不能读写批改此文件。
chmod 400 /etc/sudoers
配置 rsa 公钥
-
本地创立 rsa 秘钥,留神这里是本地操作不是近程服务器
ssh-keygen -t rsa
如果你曾经创立了 rsa 的公钥就用以前的,就你之前在 github 上配置的 rsa 公钥
rsa 公钥默认寄存的地址是~/.ssh
-
将 id_rsa.pub 文件里的内容复制到近程服务器的 authorized_keys 文件中
su git mkdir ~/.ssh vim ~/.ssh/authorized_keys
留神这里的门路是~ 即以后用户的用户文件夹,因为只有 git 这个用户能力这个 rsa 公钥
-
批改权限
cd ~ chmod 600 .ssh/authorized_keys chmod 700 .ssh
这里请读者思考下,每跳命令后以后文件的权限变为了什么呢?欢送留言~
-
本地测试 git 服务
至此咱们的 git 服务曾经配置胜利,咱们来测试下 git 服务是否能胜利运行呢?在本地运行:
ssh -v git@SERVER //@后是你本人的服务器公网 IP,如果不呈现 failed 字样,阐明胜利
GitHubPages 作为 Web 服务器 -> 装置并配置 Nginx 云服务器的 Web 服务
云服务其中创立站点目录
su root // 应用 root 用户
mkdir /home/hexo // 创立网站根目录为 /home/hexo
chown git:git -R /home/hexo
chown git:git -R /home/hexo 用来设置文件所有者和文件关联组的命令。将 /home/hexo 目录及其子目录下的所有文件的拥有者设为 git,群体的使用者为 git 组。
-R : 解决指定目录以及其子目录下的所有文件
装置配置 Nginx
-
云服务器装置 Nginx
yum install -y nginx // 装置 systemctl start nginx.service // 启动服务
这里 yum install -y 在遇到 Is this OK[y/d/N] 提醒时会主动抉择 y
-
配置 Nginx
查看 nginx.conf 配置文件的地位
nginx -t // 查看地位,个别为 /etc/nginx/nginx.conf。
批改配置文件
vim /etc/nginx/nginx.conf // 批改配置文件 // root 后增加 /home/hexo
这里 root 就是你的 web 根目录,这里设置为咱们博客站点的根目录
-
重启 Nginx 服务
systemctl restart nginx.service
git 仓库配置 git hook
应用 Hexo 命令本地推送不能间接推送到网站的根目录,而是 git 的文件仓库。因为 git 仓库只是用来对文件就行推送更新治理的和 web 的根目录的作用不同,所以不能是同一个。首先须要新建一个文件夹作为 git 仓库,并应用 git 的 git hook 性能,将推送到 git 仓库中的文件同步到 web 根目录 /home/hexo。
-
建设 git 仓库并批改权限
su root cd /home/git git init --bare blog.git chown git:git -R blog.git
git init –bare 创立一个裸库,在工作目录下,只有一个.git 目录。与 git init 创立一个一般仓库的区别能够参考一下材料【What is a bare git repository?】。
-
同步网站根目录(配置 git hook)
关上 blog.git/hooks/post-receive 文件并填入如下内容:
vim blog.git/hooks/post-receive // 填入如下内容 #!/bin/sh git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f
利用
git
的 hooks 中的post-receive
来实现代码提交实现之后的动作。将仓库指定一个--work-tree
而后进行检出操作checkout --force
-
批改权限
chmod +x /home/git/blog.git/hooks/post-receive
后面的
chmod
指令都是数字示意权限,这里 + x 简略来时就是给执行权限
域名解析到 GitHubPages-> 域名解析到云服务器的 IP
这里须要两步,首先是配置服务器上的 nginx,在其配置文件中增加本人已备案的域名,如何找到这个配置文件参考上一章节
-
批改 Nginx 配置文件中的域名信息
vim /etc/nginx/nginx.conf // 批改配置文件 // 在 server_name 后增加本人的域名
- 在本人的 DNS 解析控制台批改域名解析 IP,批改 A 记录
之前应用过宝塔面板,有趣味的能够尝试一下,可视化操作也挺棒的。
Hexo 配置推送到 github 仓库 ->Hexo 配置推送到云服务器 git 仓库
-
在本地 Hexo 目录下批改_config.yml 文件中的 deploy 后的 repo
git@SERVER:/home/git/blog.git //@后为云服务器公网 IP
blog.git 就是你的推送仓库目录
-
部署测试一下
hexo g
Nice! 相熟的页面呈现你的 Hexo 集体 Blog 曾经胜利部署到集体云服务器上了!
配置命令指引
这里汇总下所有的命令,依照上面步骤的指引,就可实现云服务器上集体 Blog 的部署,不便参考:
-
装置 git 编译所须要的依赖包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc perl-ExtUtils-MakeMaker
-
装置 git,如果装置了一个版本较低的 git,首先须要卸载原来的 git
yum remove git
-
进入到 git 装置目录,这里抉择 /usr/local/src
cd /usr/local/src // 抉择文件保留地位
-
下载 git
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.31.0.tar.gz // 下载链接
-
解压
tar -zxvf git-2.18.4.tar.gz // 解压
-
装置并编译
cd git-2.19.0 // 进入文件夹 make prefix=/usr/local/git all // 编译源码 make prefix=/usr/local/git install // 装置至 /usr/local/git 门路
-
编辑并配置 git 的门路到环境配置文件中
vim /etc/profile // 在文件开端增加如下内容 PATH=$PATH:/usr/local/git/bin // git 的目录 export PATH // 保留后刷新环境变量 source /etc/profile
-
新建 git 用户
adduser git // 为服务器增加用户名为 git 的用户 passwd git // 明码设置为 git 这里 git 替换为将要设置的明码
-
将新创建的 git 用户增加到 sudo 组
chmod 740 /etc/sudoers vim /etc/sudoers
-
在如下内容前面增加:
## Allow root to run any commands anywhere root ALL=(ALL) ALL -- 在这里增加 ---- git ALL=(ALL) ALL
-
批改权限
chmod 400 /etc/sudoers
-
本地创立 rsa 秘钥,留神这里是本地操作不是近程服务器
ssh-keygen -t rsa
-
将 id_rsa.pub 文件里的内容复制到近程服务器的 authorized_keys 文件中
su git mkdir ~/.ssh vim ~/.ssh/authorized_keys
-
批改权限
cd ~ chmod 600 .ssh/authorized_keys chmod 700 .ssh
-
本地测试 git 服务
ssh -v git@SERVER //@后是你本人的服务器公网 IP,如果不呈现 failed 字样,阐明胜利
-
云服务其中创立站点目录
su root // 应用 root 用户 mkdir /home/hexo // 创立网站根目录为 /home/hexo chown git:git -R /home/hexo
-
云服务器装置 Nginx
yum install -y nginx // 装置 systemctl start nginx.service // 启动服务
-
查看 nginx.conf 配置文件的地位
nginx -t // 查看地位,个别为 /etc/nginx/nginx.conf
-
批改配置文件
vim /etc/nginx/nginx.conf // 批改配置文件 // root 后增加 /home/hexo
-
重启 Nginx 服务
systemctl restart nginx.service
-
建设 git 仓库并批改权限
su root cd /home/git git init --bare blog.git chown git:git -R blog.git
-
关上 blog.git/hooks/post-receive 文件并填入如下内容
vim blog.git/hooks/post-receive // 填入如下内容 #!/bin/sh git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f
-
批改权限
chmod +x /home/git/blog.git/hooks/post-receive
-
批改 Nginx 配置文件中的域名信息
vim /etc/nginx/nginx.conf // 批改配置文件 // 在 server_name 后增加本人的域名
- 在本人的 DNS 解析控制台批改域名解析 IP,批改 A 记录
-
在本地 Hexo 目录下批改_config.yml 文件中的 deploy 后的 repo
git@SERVER:/home/git/blog.git //@后为云服务器公网 IP
-
部署测试一下
hexo g
常见谬误
在最初执行 hexo g 的时候遇到了如下谬误:
bash: git-receive-pack: 未找到命令
fatal: Could not read from remote repository.
起因:近程服务器上的 git 装置门路是 /usr/local/src/git,不是默认门路,所以
建设链接文件:
ln -s /usr/local/src/git/bin/git-receive-pack /usr/bin/git-receive-pack
目前还没有遇到过其余问题,如果您呈现了其余问题能够评论交换。
参考资料
- 【玩转腾讯云】Hexo 博客部署到腾讯云
- Linux 获取最新版本 Git 并编译装置
- SLC5X: Development Libraries: curl-devel
- libexpat git 仓库介绍
- gettext 介绍
- ExtUtils::MakeMaker
- Linux tar 命令
- 每天学习一个命令:sudo 来治理 Linux 下权限
- Linux chown 命令
- git 利用 post-receive 自动化部署
- Linux chmod 命令
- git-receive-pack: command not found