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