阿里云部署Hexo博客

在云服务器上部署 Hexo 主要分为云端准备和本地准备。其中云端需要准备一个云服务器,域名,并且对云服务器和域名完成备案。本地环境只需要能够运行 Hexo 进行部署即可,若之前进行过Hexo 环境的配置,本地准备的步骤非常少。工作量主要集中在云端准备上。

云端环境

购买阿里云ECS服务器

作为学生党,服务器当然是越便宜越好,现在的阿里云有活动,可以购买99一年的云服务器,到期续费时也是99/年。

image-20240708222030648

购买域名

域名就是网站的名字,我们需要一个简单直观的名字来让别人更好的找到我们的网站,如果没有域名只能通过输入 ip 地址来访问网站。

阿里云也提供域名购买服务,顶部搜索框输入域名注册就可以挑选自己喜欢的域名了,com 后缀的域名价格与99/年的云服务器接近(首年价格会有优惠)。

image-20240708222337182

备案

根据国家法律规定,在中国服务器上部署网站需要进行备案,备案需要拥有服务器和域名,阿里云右上角可以直接进行备案服务。

ICP 备案申请审核通过后,管局(工信部)会给我们一个 ICP 备案号,我们需要将备案号在网站底部标明。网站在工信部备案成功后,还需要在网站开通之日起30日内登录全国公安机关互联网站安全管理服务平台提交公安联网备案申请。

重置实例密码

新购买的 ECS 服务器需要重置 root 密码后才能使用,点击实例->更多操作->重置实例密码,重置密码即可。

远程连接

远程连接可以通过阿里云的 Workbench 方式或 VNC 方式一键登录。

也可以通过 MobaXterm 本地登录,连接方式为 SSH。本地登录需要三个过程:

  1. 创建密钥对。密钥对可以在阿里云控制台的网络与安全->密钥对板块进行创建。

  2. 将实例绑定密钥,每个实例只能绑定一个密钥对,一个密钥对可以被多个示例绑定。在实例的更多操作->绑定密钥对进行绑定操作。

  3. 添加安全组。SSH 连接的默认端口为22,本次使用的 ECS 服务器在购买时,安全组中自动添加了端口22。如没有自动添加,需要到网络与安全->安全组->管理规则中快速添加(也可手动添加) SSH 端口。

    后续要还需要使用 nginx 服务,nginx 服务要通过80端口访问,因此还需要添加80端口安全规则。

  4. MobaXterm 设置下载的 .pem 密钥文件。

image-20240709101000494

设置完成之后即可通过 MobaXterm 免密登录阿里云ECS服务器。

云端配置

这一步需要设置云端环境,主要包括安装 nginx 服务、hexo 服务等。

yum 安装 nginx 依赖环境

1
2
3
4
5
6
7
#yum install gcc-c++

#yum install -y pcre pcre-devel

#yum install -y zlib zlib-devel

#yum install -y openssl openssl-devel

下载 nginx 安装包

1
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz 

解压安装包,并将安装包解压到/usr/local 中

可以确认nginx安装包在目录下

1
2
3
4
5
#tar -xvf nginx-1.10.1.tar.gz -C /usr/local

#cd /usr/local

#ls

执行配置文件

在nginx-1.10.1/目录下存在一个configure配置文件

1
2
3
#cd nginx-1.10.1/

#ls

执行该配置文件

1
./configure

编译并安装 nginx

1
2
3
#make

#make install

启动 nginx

查找nginx

1
#whereis nginx 

进入nginx安装目录

1
#cd /usr/local/nginx/

打开Linux的80端口号

1
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 

进入 sbin 目录并启动 nginx,没有任何信息表示启动成功。通过公网IP+端口可以访问 nginx 欢迎页面,xx.xx.xxx.xxxx:80/

(#./nginx -s stop 可以关闭nginx服务)

1
#cd /usr/local/nginx/sbin
1
#./nginx

可以在网上搜索配置 nginx 环境变量,在任何路径都可以启动、关闭 nginx

image-20240709110438055

为 nginx 配置服务器路由

  • 创建一个部署 hexo 的目录

    1
    #mkdir -p /home/myblog/hexo
  • 编辑 nginx 配置文件

    1
    2
    3
    4
    5
    #cd /usr/local/nginx/conf

    #ls

    #vim nginx.conf

    进入之后,按i建将命令模式切换为编辑模式,修改后按Esc切换为命令模式输入:wq 保存。

  • 部署根目录root修改为创建的文件夹(/home/myblog/hexo)

  • 域名(server_name)修改为注册的域名,若无域名可使用公网IP代替。

  • 查看监听端口(listen)是否默认为80端口

    image-20240711081657481

创建 Hexo 环境

  • 安装node.js

    返回根目录安装node.js

    1
    2
    3
    4
    5
    6
    7
    #cd ~

    #curl -sL https://rpm.nodesource.com/setup_16.x | bash -

    #yum install -y nodejs

    #node -v

    查看版本号

    1
    #npm -v 
  • 安装Git

    1
    #yum install git

    查看版本号

    1
    #git --version 

创造 git 用户避免使用 root 用户登录

创建git用户

1
#adduser git 

修改git用户权限

1
#chmod 740 /etc/sudoers

打开文件在root ALL=(ALL) ALL下面添加 git ALL=(ALL) ALL

1
#vim /etc/sudoers

保存后恢复git之前的权限

1
#chmod 400 /etc/sudoers

设置git用户密码

1
#sudo passwd git

为 git 用户配置免密登录

这一节 # 开头代表在服务端输入指令,$ 开头代表在本地计算机输入的指令。

  • 服务端切换到 git 用户,并且在根目录下创建一个 .ssh 文件夹存放密钥(/home/git/.ssh)

    1
    2
    3
    4
    5
    #su git

    #cd ~

    #mkdir .ssh
  • 本地计算机右键打开 GitBash 生成密钥,一路回车即可

    1
    2
    3
    4
    5
    $cd ~

    $cd .ssh

    $ssh-keygen

    会在(C/User/用户)下生成 .ssh 隐藏文件夹,其中包含id_rsa (私钥)和 id_rsa.pub (公钥)

  • 本地计算机上为私钥设置权限

    1
    2
    3
    $chmod 700 ~/.ssh

    $chmod 600 ~/.ssh/id_rsa
  • 将 id_rsa (私钥)和 id_rsa.pub (公钥)文件上传至 git 用户的 .ssh 目录中,这一步我使用的是 MobaXterm ,也可以使用阿里云的文件上传工具 FileZilla 。并且新建 authorized_keys 文件,将 id_rsa.pub 的内容复制进去。

    1
    2
    3
    4
    5
    #cd ~/.ssh

    #cd id_rsa.pub authorized_keys

    #cat id_rsa.pub >> ~/.ssh/authorized_keys
  • 服务器中设置文件权限

    1
    2
    3
    #chmod 600 ~/.ssh/authorized_keys

    #chmod 700 ~/.ssh
  • 恢复文件安全上下文,确保设置了正确的 SELinux 上下文

    1
    #restorecon -Rv ~/.ssh
  • 本地计算机测试

    在本地计算机的 GitBash 上,使用 ssh 连接云服务器

    1
    2
    3
    4
    5
    $ssh -v git@服务器公网IP



    $ssh git@服务器公网IP

    成功登录

    image-20240709200800455

配置 Git 仓库并在仓库中新建钩子文件,用于提交到仓库后自动上传到服务器( git用户 )。

1
2
3
4
5
#cd ~

#git init --bare hexo.git

#vi ~/hexo.git/hooks/post-receive

进入编辑模式输入:

1
git --work-tree=/home/myblog/hexo --git-dir=/home/git/hexo.git checkout -f 

钩子文件运行会删除 /home/myblog/hexo 目录下的原有文件,然后从 blog.git 仓库 clone 新的博客静态文件到 /home/myblog/hexo 目录下。

赋予钩子文件执行权限

1
2
3
#chmod +x ~/hexo.git/hooks/post-receive
#cd ~
#sudo chmod -R 777 /home/myblog/hexo

重启ECS服务器实例,服务器配置结束。

本地环境

若之前未进行过 Hexo 相关环境的配置,建议去网上搜索 Hexo 博客搭建教程,能够在本地访问 Hexo 欢迎页面之后,再进行以下步骤。

修改本地计算机的 hexo 目录下的 _config.yml 配置文件

image-20240709202707357

安装 hexo-deployer-git 和 hexo-server 插件(如之前已经进行过 GithubPages 配置可以跳过下述步骤)

GitBash 中输入指令:

1
2
3
$npm install hexo-deployer-git --save

$npm install hexo-server

前者可以实现 Git 自动部署,后者可以进行 hexo 本地调试。

本地计算机配置 Git 全局变量

1
2
3
$ git config --global user.email "xxxxxxxxxx@qq.com"

$ git config --global user.name “xxxx”

通过浏览器访问博客主页

在Hexo目录下先部署一下博客

1
2
3
$hexo clean

$hexo g -d

浏览器输入http://公网IP:80/进入博客主页

注意事项:

  1. 每一次部署之后需要重新启动云服务器实例,否则博客网页不会变化。
  2. 部署之后 github 上不会更新,云服务器上才会更新。
  3. 重启云服务器之后,记得打开 nginx ,否则博客网页会显示重置链接。

参考文章:

https://www.bilibili.com/read/cv5086357/