【彻底搞懂如何应用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-develyum 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/sudoersvim /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 anywhereroot    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 gitmkdir ~/.sshvim ~/.ssh/authorized_keys

    留神这里的门路是~即以后用户的用户文件夹,因为只有git这个用户能力这个rsa公钥

  • 批改权限

    cd ~chmod 600 .ssh/authorized_keyschmod 700 .ssh

    这里请读者思考下,每跳命令后以后文件的权限变为了什么呢?欢送留言~

  • 本地测试git服务

    至此咱们的git服务曾经配置胜利,咱们来测试下git服务是否能胜利运行呢?在本地运行:

    ssh -v git@SERVER //@后是你本人的服务器公网IP,如果不呈现failed字样,阐明胜利

GitHubPages作为Web服务器->装置并配置Nginx云服务器的Web服务

云服务其中创立站点目录

su root //应用root用户mkdir /home/hexo // 创立网站根目录为/home/hexochown 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 rootcd /home/gitgit init --bare blog.gitchown 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/shgit --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-develyum 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/sudoersvim /etc/sudoers
  • 在如下内容前面增加:

    ## Allow root to run any commands anywhereroot    ALL=(ALL)       ALL--在这里增加----git ALL=(ALL) ALL
  • 批改权限

    chmod 400 /etc/sudoers
  • 本地创立rsa秘钥,留神这里是本地操作不是近程服务器

    ssh-keygen -t rsa
  • 将id_rsa.pub文件里的内容复制到近程服务器的authorized_keys文件中

    su gitmkdir ~/.sshvim ~/.ssh/authorized_keys
  • 批改权限

    cd ~chmod 600 .ssh/authorized_keyschmod 700 .ssh
  • 本地测试git服务

    ssh -v git@SERVER //@后是你本人的服务器公网IP,如果不呈现failed字样,阐明胜利
  • 云服务其中创立站点目录

    su root //应用root用户mkdir /home/hexo // 创立网站根目录为/home/hexochown 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 rootcd /home/gitgit init --bare blog.gitchown git:git -R blog.git
  • 关上blog.git/hooks/post-receive文件并填入如下内容

    vim blog.git/hooks/post-receive// 填入如下内容#!/bin/shgit --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