将Hexo部署到云服务器
前言
2021 年 03 月 27 日重新更新此篇文章,至于为什么,大概因为昨天晚上 vercel 网络出现了波动,导致我的 cdn 无法进行回源,最终导致博客打不开。因此决定将博客同时部署到服务器做 cdn 的回源途径。多一份部署多一份保障🤭
快速开始
全程图文预警
上一次部署使用的方式是宿主机安装 nginx 开启静态服务器的方式,这次为了方便,决定使用
docker
+docker-compose
的方式进行安装 nginx。
本次教程使用的服务器环境为阿里轻量云+CentOS 7.6
安装 git(如果有则不需要安装)
1 | yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y |
安装完成后通过git --version
命令即可查看 git 当前版本,即代表成功。
创建裸露仓库
1 | // 创建用户 |
写入钩子
1 | cd hexo_blog.git/hooks |
输入以下的命令
1 | #!/bin/sh |
写入后添加可执行权限
1 | // 为刚才的文件添加可执行的权限 |
测试能否正常 clone
在自己电脑上找一个空的文件夹输入如下命令:
1 | git clone git@server_ip:/home/git/repos/hexo_blog.git |
正常情况下会出现上图的情况,即代表成功了。
建立 SSH 关系,实现免密
新建一个 ssh 证书,专门用于 git 推送使用。(你也可以直接使用你的 id_rsa(如果存在))
1
ssh-keygen -t rsa -C "这里换上你的邮箱"
按提示操作即可。注意如果你曾经有证书,记得重命名,不然会覆盖你以前的证书。
手动设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 切换到git用户
su git
//进入家目录,如果没有.ssh目录,那么需要创建。如果存在直接进入即可
cd ~
//创建.ssh目录
mkdir .ssh
// 赋予权限
chmod 700 .ssh/
// 进入.ssh目录
cd .ssh
// 编辑一个名为authorized_keys的文件,并写入公钥(git_rsa.pub)内容
vi authorized_keys
// 添加完成后赋予权限
chmod 600 authorized_keys测试
如果你生成的证书没有按照默认流程(图片示例),那么需要你将你的证书移动到
C:\Users\dream\.ssh
目录,然后在config
文件新增如下:1
2
3
4# 服务器认证
Host 你的服务ip
HostName 你的服务ip
IdentityFile ~\\.ssh\\私钥名称如果你按照默认流程了,那么不需要此操作。
都配置完毕后输入
ssh git@服务器ip
如果能够免密登录即代表成功了,如果不能请用脑子在仔细看一遍这一部分的教程。
禁用 git 用户的 shell 权限
我测试安装完后自带了git-shell
,通过which git-shell
命令查看是否能显示出路径,如果不能则需要手动添加。
1 | // 如果不是root用户请切换至root用户 |
修改 /etc/passwd
中的权限
1 | vi /etc/passwd |
1 | // 将原来的 |
hexo 配置
在配置文件添加上你的 git,每个人的配置可能不同,图片仅供参考。
示例:
1 | deploy: |
配置完成后运行一次hexo d
命令,看是否能成功推送。(使用此命令推送需要本地 id_rsa 私钥对用的公钥在服务器上,如果你按照我的流程重命名了,那么不会成功的!)
手动测试
进入
public
目录初始化仓库
命令三连
1
2
3git add .
git commit -m 'update'
git push --force --all git@server_ip:/home/git/repos/hexo_blog.git此时服务器中已经存在了文件
虽然现在很麻烦,但是后面我会介绍通过持续集成实现自动化构建并上传。那时你只需要 push 上你的源代码即可。
安装 Docker
安装 docker
1
2curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun启动 docker 服务
1
2sudo systemctl enable docker
sudo systemctl start docker推荐操作
1
2sudo groupadd docker
sudo usermod -aG docker $USER使用阿里云镜像加速(非大陆机器可忽略)
登录阿里容器镜像服务
查看加速地址
设置加速服务
创建目录
1
sudo mkdir -p /etc/docker
创建文件并写入内容
1
2
3
4
5sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://lz2nib3q.mirror.aliyuncs.com"]
}
EOF重新加载及重启 Docker 服务
1
2sudo systemctl daemon-reload
sudo systemctl restart docker
查看镜像地址
1
dokcer info
安装 docker-compose
由于国内机器直接下载 GitHub 的资源速度很慢。因此使用手动下载的方式。
进入GitHub进行下载
docker-compose-Linux-x86_64
将文件上传到
/usr/local/bin/
目录,并改名为docker-compose
赋予权限
1
sudo chmod +x /usr/local/bin/docker-compose
测试
1
docker-compose -v
配置 nginx
既然我们安装了 docker,那么我们的配置将会很简单。
下载蓝奏云文件,密码(ak1m)
将文件解压,并按照你自己的信息进行编辑
ssl 目录
存放你的网站证书,可以到腾讯云、阿里云、freessl 等平台进行申请。
nginx 目录
此目录存在 nginx 的相关配置,请按照注释修改相关配置
服务器上传这些文件(不是压缩包)
1
2cd ~
mkdir blog运行
docker-compose up -d
命令启动服务。然后使用docker-compose ps
命令查看服务是否正确运行。dns 解析。
通过 coding 自动部署
通过 coding 部署需要将我们的私钥放到环境变量里,但是 coding 的环境变量不会自动解析换行符,因此我们需要手动解析一下(也就是将换行变成\n
)。然后将其填入 coding 的环境变量。
简陋的在线转换地址:gitee Pages
在执行上传命令之前添加如下命令即可。
1 | mkdir -p ~/.ssh/ |
通过 GitHub Actions 自动部署
GitHub 的密钥支持换行符,不需要进行转化,直接粘贴即可。新加一个名称为 HEXO_DEPLOY_PRIVATE_KEY
的Secrets
在进行上传操作时执行如下步骤:
1 | - name: Setup Deploy Private Key |