Hexo 部署到 aliyun
之前个人所有笔记都是放在语雀上,主要除了学生也没啥人看,后面接触多了感觉写写博客好像也蛮不错的。
陆陆续续也搭建过 WordPress 和 Hexo 再三权衡(拖了半年)最后还是选择了 Hexo,并将 Hexo 博客托管在了 GitHub 上并绑定了 yongz.icu 这个域名(现在不用了)。
但总所周知 GitHub 由于某些原因在国内访问速度极慢,hexo deploy 慢的一匹。最后还是下定决心买了阿里云服务器,然后将 Hexo 博客部署到云服务器上,顺便绑个新域名。
[!Note]
本文来自 koenli 大佬:https://www.koenli.com/bda2f0d3.html
1 服务器配置
服务器配置如下表所示~~(有点破烂)~~:
CPU/内存:由于 Hexo 是静态博客,不需要多高的配置,1 核 1G 都是随便跑(
访问量贼大当我没说)。操作系统:这里我必须要吐槽,Ubuntu 为什么不行,我装了三遍都不行,最终认命装了 CentOS 7.6 就可以了(
我敲)。Git:大佬博客上写的是 Git 在 CentOS 上版本会很旧,我直接就用 yum 安装了一个,实际试下来,没啥问题。
Web:可自行安装 Nginx 或 Apache~~(不嫌麻烦的话)~~,这里推荐使用宝塔,因为其不仅可以方便的添加网站和开启 HTTPS,还支持对服务器进行资源监控,端口管理等功能,是一款能够有效提升运维效率的服务器管理软件(
不是推广)。
2 Git 配置
2.1 创建 Git 用户并配置 sudo 权限
创建一个 Git 用户,用于 SSH 连接:
useradd git
由于 Git 用户会涉及到 root 命令的使用,配置一下 sudo 权限(CentOS visudo 用的是 Vim,Ubuntu 用的是 Nano):
visudo
找到 root ALL=(ALL) ALL,在下面一行添加以下内容并保存退出:
root ALL=(ALL) ALL
git ALL=(ALL) ALL
2.2 配置 SSH 密钥
在本地机器执行以下命令创建密钥,如果本地机器是 Windows 则在 Git Bash 中执行(可以不用,但是最好要用)。
ssh-keygen
[!Warning]
如果本地机器已有密钥,可跳过此步,无需重复创建~
生成的公钥文件,Windows 和 Linux 的位置有所不同:
Windows:
C:/User/%USERNAME%/.ssh/id_rsa.pubLinux:
~/.ssh/id_rsa.pub
在服务器上执行如下命令,创建 .ssh 目录和 authorized_keys 文件,并修改文件权限(非常重要,权限问题会导致 SSH 连接失败):
## 切换至 git 用户,连同环境变量一起
su - git
mkdir ~/.ssh
## 这里其实不太建议用 echo,建议是 vim ~/.ssh/authorized_keys,然后直接粘贴保存
echo "替换为id_rsa.pub文件的内容" > ~/.ssh/authorized_keys
## 修改文件权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
## 切换回root用户
exit
测试从本地机器上是否可以通过 git 用户免密登录服务器:
ssh git@<yourIP>
2.3 创建网站根目录
[!Info]
这里我是直接照搬大佬博客的路径(
其实就是懒)。此网站根目录对应 Web 软件的网站发布目录,可自定义。
使用如下命令创建目录,并转移用户所属主和组:
mkdir -p /data/web/blog
chown git:git -R /data/web/blog
2.4 初始化 Git 裸仓库并配置自动化部署
使用如下命令初始化 git 仓库:
## 创建 git 目录
mkdir -p /data/git
cd /data/git/
## 一定要加上 --bare 参数,将仓库设置为共享仓库
git init --bare blog.git
chown git:git -R blog.git
此时在 Git 仓库目录(/data/git/blog.git)下,有一个自动生成的 hooks 目录,在 hooks 目录下创建一个新的钩子 post-receive,用于自动化部署:
vim /data/git/blog.git/hooks/post-receive
在文件中添加以下内容,根据实际情况修改工作树目录和 Git 目录:
#!/bin/bash
## git --work-tree=<work-tree-dir> --git-dir=<git-dir> checkout -f
git --work-tree=/data/web/blog --git-dir=/data/git/blog.git checkout -f
修改文件权限:
chown git:git /data/git/blog.git/hooks/post-receive
chmod +x /data/git/blog.git/hooks/post-receive
3 安装并配置宝塔
3.1 安装宝塔
宝塔 Linux 面板是提升运维效率的服务器管理软件,支持一键 LAMP/LNMP/ 集群 / 监控 / 网站 / FTP / 数据库 / JAVA 等 100 多项服务器管理功能。
由于此处我用的是 CentOS,安装命令如下(记得一定要是==纯净系统==):
cd /tmp ; yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
中间会让确认是否默认安装到 /www 目录下,输入 y 回车即可:
Do you want to install Bt-Panel to the /www directory now?(y/n):y
网络状况良好的情况下大概 3 分钟即可安装完成,安装成功会输出如下内容,其中包括面板的外网、内网访问地址和默认的用户名密码,这些信息也可通过之后再通过 /etc/init.d/bt default 命令查看:
==================================================================
Congratulations! Installed successfully!
==================================================================
外网面板地址: https://xxx.xxx.xxx.xxx:39893/f0621e2c
内网面板地址: https://172.19.10.62:39893/f0621e2c
username: l8fxgpwg
password: 62420ae9
If you cannot access the panel,
release the following panel port [39893] in the security group
若无法访问面板,请检查防火墙/安全组是否有放行面板[39893]端口
注意:初始密码仅在首次登录面板前能正确获取,其它时间请通过 bt 5 命令修改密码
==================================================================
Time consumed: 3 Minute!
[!Warning]
云服务器记得配置端口组,开放相关端口。
3.2 配置宝塔 Linux 面板
通过浏览器访问面板地址,通过上述的默认用户名密码登录即可。因为宝塔面板许多功能都依赖于官网,第一次登录后需要绑定宝塔账号,如果还没有宝塔账号可以点击 “登录” 按钮下方的 “未有账号,免费注册” 跳转到注册,如果已有宝塔账号则直接输入账号信息点击 “登录” 进行绑定。
在 “推荐安装套件” 窗口选择安装 LNMP (推荐),仅勾选安装 “Nginx”,安装方式选择 “极速安装”,最后点击 “一键安装”,等待安装完成(我已经装完了,用下大佬的图):

3.3 添加网站并按需配置 SSL 证书
点击 “网站”,选择 “添加站点”:

填写网站相关信息后,点击 “提交”:
域名:设置网站域名,如需填写多个域名,请换行填写,每行一个域名,默认为 80 端口。
根目录:此处设置的根目录就是之前创建的网站根目录
/data/web/blog,如果不是根据教程创建的,选择相应的目录即可。
先到 aliyun 上购买个免费证书,信息填写完后,大概十分钟就能发到邮箱:

到域名注册商根据服务器类型(此处为 Nginx)下载对应域名的 SSL 证书(以阿里云为例),其中 .key 后缀的是密钥,.pem 后缀的是证书:

点击刚创建的网站 SSL 证书下的 “未部署” 字样,选择 “当前证书”,用文本编辑器完整复制粘贴密钥(KEY)和证书 (PEM 或 CRT 格式) 的内容到对应的文本框中,点击 “保存”并强制开始 HTTPS:

到这里服务器上需要配置的内容就结束了。
2025 更新:现在宝塔上可以直接支持部署免费证书啦~
4 配置本地 Hexo
由于之前我是配置提交到 GitHub 上,选在需要修改提交到自己的服务器上,在博客根目录 _config.yml 中添加以下内容:
## Deployment
### Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: 'git'
## repo: 'https://github.com/Y0n9zh/Y0n9zh.github.io.git' # 仓库地址
## repo: git@<x.x.x.x>(服务器IP):<git-dir> #仓库地址
## repo: ssh://git@<x.x.x.x>(服务器IP):<ssh-port><git-dir> #发布至SSH非22端口服务器
repo: git@xxx.xxx.xxx.xxx:/data/git/blog.git
branch: master # 主分支
执行部署:
hexo clean all && hexo g && hexo d
访问前需要在域名注册商配置域名解析,将域名解析到云服务器 IP 地址,如果是本地服务器也可通过配置 hosts 解析进行测试:

访问一下博客域名,查看是否成功:

完结撒花~