​ 本文主要讲解如何搭建hexo博客网站,并直接部署在github上,实现通过xxx.github.io来访问博客,同时针对云服务器的用户,可以把Hexo博客同步部署到服务器上,通过宝塔Linux面板架设网站,并实现域名解析和绑定。针对没有云服务器的用户,也给出了直接部署在个人的Linux终端(比如:树莓派或者其他Linux开发板,软路由,NAS等)的方案和思路,并给出通过内网穿透方法实现通过自主域名访问博客的方法。最终实现可以通过xxx.github.io和自主域名访问博客网页。

​ 这里不对Hexo博客的特性做说明,详细的Hexo相关的内容,可以参考Hexo官方网站:https://hexo.io/zh-cn/

​ 这里用宝塔面板主要因为:一方面宝塔面板免去了Nginx的相关配置,可以直接用可视化操作来部署网页;另外一方面,一台Linux服务器可以同属部署多个网站,可以统一用宝塔面板统一管理。也方便该服务器不仅可以用来部署网站,还可以同时作为其他左右使用(比如可以用来做远程代码调试,内网穿透服务等)。

​ 本文主要分四个章节来讲解:

​ 一般情况下,自主域名需要做域名解析,所以,它只能访问你的云服务器或者你本地的Linux服务器,二选一即可,把hexo博客部署在Linux服务器上的操作在第三章节的前面两个部分。

三、部署Linux服务器,搭建宝塔Linux面板,实现远程或域名访问。

​ 可能涉及的工具和软件:

1、 Linux系统部署git服务器

  1. 如果是新的云服务器系统,一般情况下我们首先需要到云服务后台,设置安全组,对常用端口放行,主要有:SSH连接端口:22;FTP端口:20、21、39000-40000;网站访问端口:80、443;phpmyadmin访问端口:888;如果还有其他诉求,也需要放行对应端口。如果是本地的Linux系统,则不需要管这些。

    ​ 然后用ssh终端工具登录服务器。一般情况下国内的云服务器安装的Linux系统都会默认已经把软件源修改到国内了,如果是,这一步不需要操作。如果你的系统不是云服务器,或者源并不是国内的,可以用下面方法对软件源进行备份,并且替换到国内的软件源(本文替换的是阿里云的镜像,你也可以替换成其他的镜像)。

1
2
sudo cp /etc/apt/sources.list /etc/apt/sources.list.org
sudo vim /etc/apt/sources.list

​ 上面的语句是备份软件源的文件,之后便可以编辑修改/etc/apt/sources.list中的软件源地址了,即把里面与ubuntu.com的内容替换成阿里云的源地址即可。

​ 一般情况下,默认的源地址ubuntu的官方源:

archive 源(针对X86_64架构) :http://archive.ubuntu.com/ubuntu/

ports   源(针对arm,PowerPC等架构):http://ports.ubuntu.com/ubuntu-ports/

​ 或者ubuntu中国官方源

archive 源(针对X86_64架构) :http://cn.archive.ubuntu.com/ubuntu/

ports   源(针对arm,PowerPC等架构):http://cn.ports.ubuntu.com/ubuntu-ports/

​ 把对应的内容替换成阿里云镜像即可:

archive 源(针对X86_64架构) :https://mirrors.aliyun.com/ubuntu/
ports   源(针对arm,PowerPC等架构):https://mirrors.aliyun.com/ubuntu-ports/

​ 其他内容可以不变,这里给出一个快速替换网址的指令:

1
sudo sed -i -e 's/ports.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

​ 这句话的意思是把/etc/apt/sources.list文件中所有的ports.ubuntu.com字符,全部替换为mirrors.aliyun.com,从而实现软件源的替换。

​ 另外关于Ubuntu 国内软件源介绍可以参考这篇博客: https://www.cnblogs.com/Brendon-Tan/p/13236042.html

  1. 在终端中输入sudo apt updatesudo apt upgrade来同步和更新系统相关软件。
1
2
sudo apt update
sudo apt upgrade
  1. 可以通过git --version来查看系统是否安装了git,如果没有,输入sudo apt install git安装git
1
2
sudo apt install git
git --version
  1. 确保安装了git之后,我们可以为git服务器创建一个单独的账户。
1
sudo adduser git

​ 其中需要输入2次密码之后,一起其他信息,可以直接输入回车保持默认值。最后输入Y确认创建用户。创建完成之后,可以输入ls /home看是否已经存在一个名为git的文件夹,这个为该用户的默认用户文件夹,如果有,则表示用户创建成功。

  1. 接下来我们针对git账户配置ssh用户公钥,通过如下代码在/home/git目录下创建.ssh文件夹,并在里面创建authorized_keys文件:
1
2
mkdir /home/git/.ssh
touch /home/git/.ssh/authorized_keys
  1. 把之前在PC电脑上创建的id_rsa.pub文件内容复制到authorized_keys文件中,具体操作,先用下面指令打开文件,按字母i插入内容,把光标移到文件头,右击鼠标把内容粘贴到文件中,之后按ESC按键,输入:wq保存并退出
1
vim /home/git/.ssh/authorized_keys
  1. 修改该文件夹和文件的权限,确保git用户有读写目录的权限
1
2
chmod 775 /home/git/.ssh
chown -R git:git /home/git/.ssh
  1. /home/git目录下创建一个git仓库,名称为blog.git,并把其拥有者定义为git用户。
1
2
3
sudo -u git git init --bare /home/git/blog.git
cd /home/git
chown git:git -R blog.git
  1. 创建目录/www/wwwroot/blog目录,用来架设网站服务
1
mkdir -p /www/wwwroot/blog

-p的意思,以递归的形式来创建文件夹,如果时递归的形式删除文件夹,则用rm -rf dir_path

  1. 确保git用户有操作该文件夹的权限,如下操作:
1
2
sudo chown -R git:git /www/wwwroot/blog
chmod -R 755 /www/wwwroot/blog
  1. 创建一个git钩子文件,当接收到用户推送过来的文件修改时,把它推送到系统/www/wwwroot/blog目录下,以方便后面用来架设网站。
1
vim /home/git/blog.git/hooks/post-receive

​ 用上面的指令打开文件,按字母i插入内容,把光标移到文件头,右击鼠标把内容粘贴到文件中,之后按ESC按键,输入:wq保存并退出:

1
2
#!/bin/bash
git --work-tree=/www/wwwroot/blog --git-dir=/home/git/blog.git checkout -f

​ 然后给该文件设置可执行权限

1
chmod +x /home/git/blog.git/hooks/post-receive
  1. 输入sudo reboot重启系统
1
sudo reboot
  1. 等待重启完毕之后,我们再次修改PC端hexo博客根目录下的_config.yml文件,这里只需要修改\# Deployment部分内容即可,我们给hexo添加一个git服务器到我们自己的Linux服务器上(注意其中的xxx.xxx.xxx.xxx为你自己服务器的IP地址):
1
2
3
4
5
6
7
8
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repository:
server1: git@github.com:SenySunny/SenySunny.github.io.git
server2: git@xxx.xxx.xxx.xxx:/home/git/blog.git
branch: main
  1. 我们在PC端的终端中输入hexo g来重新生成静态网页, 然后通过hexo d来把生成的网页同时部署到github和我们自己的Linux服务器上,
1
2
hexo g
hexo d

​ 如果中间操作有问题,直接用hexo d部署,可能会导致由于没有文件变化,导致并没有进行重新部署,导致没有被正确响应,可以尝试先用hexo cl清除以下缓存,然后再用hexo g重新生成静态网页,再hexo d进行部署,便会把所有的文件都会进行重新部署。

  1. 此时,我们可以通过ls /www/wwwroot/blog/来查看代码是否被正确的复制到该目录下。如果该目录下有index.html等文件,就证明代码已经被正确的复制, 终端运行效果如下(文件内容根据博客网页情况会略有不同)。
1
2
git@seny:~/blog.git$ ls /www/wwwroot/blog/
2016 404.html anzhiyu archives css favicon.ico img index.html js lib

2、 安装和配置宝塔Linux面板

  1. 先输入su,输入管理员密码,以root用户登录,以确保能够获取到系统足够的权限
1
sudo root
  1. 根据系统不同,按照宝塔安装教程安装宝塔Linux面板,本人是ubuntu系统,所以再终端中输入:
1
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

​ 等待面板安装完成,安装可能会提示需要输入y回车确认,安装完成后会给出如下信息:

baota1

  1. 根据生成的内网面板地址和外网面板地址情况,再浏览器访问宝塔面板。

    • 一般情况下,如果是云服务器,我们首先需要再云服务的安全组里面,放行把他面板的端口信息,以确保我们可以正常访问宝塔面板。然后通过外网面板地址进行访问。
    • 如果是本地的Linux系统,我们直接通过内网面板地址进行访问即可。

    如果提示”您的连接不是私密连接“,直接点击”高级“,选择继续前往即可。然后输入安装完成之后提供的usernamepassword作为用户名和密码进行登录,登录之后,阅读”用户协议“,阅读完成之后,勾选<我已阅读并同意”《用户协议》“>,点击<进入面板>,进入宝塔面板界面。

  2. 进入之后,会要求你绑定宝塔账号,目前的宝塔面板,必须注册一个账号,用注册的账号进行登录,登录后界面如下,会给出一个建站需要的软件包安装推荐,因为我们本身是静态网站,所以理论上我们只需要安装Nginx软件即可满足要求,所以理论上我们选择LNMP或者JAVA都包含了Nginx,或者我们关闭它,再手动安装Nginx也是可以的。这里我们直接选择了推荐的LNMP,等待它安装完毕。

baota2

  1. 软件安装完毕之后,我们就可以关闭消息盒子了(也可以关闭等待安装),到这里,宝塔面板就基本安装好了,这里我们对宝塔Linux面板做简单的配置,点击左侧的<面板设置>,既可设置相关信息,主要可能有(其他的可以自行配置):

    • 修改登录的用户名和密码,以确保安全。

    • 宝塔面板的端口号,以防止忘记宝塔面板的端口号,注意,如果修改了端口号,需要开放对应的端口信息,通过如下信息,否则可能导致无法访问宝塔面板(一般不建议采用8888,因为用户很容易猜到):

      1
      sudo iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

      云服务器除要在系统中开放对应端口之外,还需要再安全组中开启对应的端口号

    • 安全入口

  2. 点击左侧<网站>选项,选择默认的(或者皆可),点击<添加站点>,按照如图填写:

baota3

​ 这里对填入的信息做简单介绍:

  • 域名:我们只是测试hexo博客的访问情况,还没有做域名解析和绑定域名情况,在域名栏中,我们可以输入服务器的IP地址,或者IP:端口号的形式(注意:端口号必须开放访问)
  • 备注:给网站取一个名字,方便我们记住这个网站是干什么的
  • 根目录:就是我们前面部署的存放网站的目录/www/wwwroot/blog
    • ftp,数据库: 静态网站不需要
    • PHP版本: 没有用到,选择<纯静态>即可
    • 网站分类: 可以设置,或者默认
  1. 此时我们在浏览器输入服务器IP或者服务器IP:端口号来访问(有些云服务器,再国内,默认不开放80端口,必须用备案的域名访问。可能就必须用服务器IP:端口号来实现远程访问了),下面是采用开放11000端口之后,用服务器IP:11000访问的接结果:

baota4

​ 理论上我们可以再任何地点用云服务器的服务器IP:11000来访问该博客。

3、 域名解析和宝塔面板部署网站

​ 前面已经讲解网页的部署和安装,如果我们有备案的域名,我们可以把备案的域名与服务器进行绑定,做好域名解析,便可以实现通过网址访问博客。

  1. 域名备案,可以再购买域名的网站查看到,比如,这是再阿里云备案的域名情况示意图:

beian1

  1. 我们再域名控制台下,可以对域名进行域名解析:如下图:

beian2

​ 这里对域名中的几个关键词做说明:

  • 记录类型: A: 标志一个IPV4地址;AAA:标志一个IPV6地址;CHANE:将域名指向另外一个域名;其他的具体自己查询
  • 主机记录:www:表示域名前面加www.来访问;@:表示直接用域名访问;*表示泛解析;其他字母:表示该字母.开头的域名访问,比如:如果域名是senysunny.com。解析主机记录为blog。表示用blog.senysunny.com访问。
  • 记录值:一般为IP地址或者另一个域名。
  1. 做好域名解析之后,我们把对应域名的解析到对应的服务器ip,一般解析之后差不多10分钟左右生效。
  2. 此时我们再进入宝塔面板,打开左侧<网站>选项,可以看到我们建立的网站,点击设置,把我们已经做过域名解析的域名填写到域名管理中,点击<添加>按钮。

baota5

​ 此时,我们就可以用我们已经备案的域名来访问我们的博客了。

​ 这里需要提醒的是:中国的域名备案后,一般要求把备案号填写再网页的尾部位置,并链接到”ICP/IP地址/域名信息备案管理系统“网址: https://beian.miit.gov.cn。当然,如果你的云服务器本身不在大陆境内,则无需考虑备案事宜,直接做域名解析就可以了。

​ 到这里,hexo博客的建立和部署就已经完成了。我们可以发现博客的创建是比较简单的,都是一些基本的操作,hexo博客服务也提供了非常详细的文档。但是一个完整的有自己域名的博客要上线,还需要部署到自己的云服务,以及域名的解析和备案等操作。这些是需要一定的费用和操作的。实际上,我们也有很多其他选择,这里做一个简单的介绍和说明:

  1. Vercel:它是一个用于静态站点和无服务器函数的云平台,可以用来部署静态网站项目,并且可以直接与github的网页托管绑定,并且可以与自己注册的域名做域名解析,实现域名访问网站,且服务器本身不在国内,也避免了域名备案的麻烦。
  2. 现在很多人会选择把博客部署在本地(比如树莓派等开发板,软路由,NAS)上,在通过各种内网穿透服务,实现外网访问,以及域名绑定的工作。如果内网穿透服务器不在大陆的话,也不需要域名备案。建议购买域名的话还是备案使用更佳。
  3. 这里会在下一个章节给出一个把hexo博客部署在本地的Linux服务器(Linux开发板)的解决方案,这里采用了《Nanopi R6S》开发板运行Ubuntu系统作为博客服务器,然后通过内网传统实现博客的访问和使用.