前言

2021年03月27日重新更新此篇文章,至于为什么,大概因为昨天晚上vercel网络出现了波动,导致我的cdn无法进行回源,最终导致博客打不开。因此决定将博客同时部署到服务器做cdn的回源途径。多一份部署多一份保障🤭

快速开始

全程图文预警

上一次部署使用的方式是宿主机安装nginx开启静态服务器的方式,这次为了方便,决定使用docker+docker-compose的方式进行安装nginx。

本次教程使用的服务器环境为阿里轻量云+CentOS 7.6

安装git(如果有则不需要安装)

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y
yum install -y git

安装完成后通过git --version命令即可查看git当前版本,即代表成功。

image-20210327101301179

创建裸露仓库

// 创建用户
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

image-20210327101624787

写入钩子

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

image-20210327102246035

正常情况下会出现上图的情况,即代表成功了。

建立SSH关系,实现免密

  1. 新建一个ssh证书,专门用于git推送使用。(你也可以直接使用你的id_rsa(如果存在))

    ssh-keygen -t rsa -C "这里换上你的邮箱"

    按提示操作即可。注意如果你曾经有证书,记得重命名,不然会覆盖你以前的证书。

    image-20210327102824405

  2. 手动设置

    // 切换到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

    image-20210327103047351

  3. 测试

    如果你生成的证书没有按照默认流程(图片示例),那么需要你将你的证书移动到C:\Users\dream\.ssh目录,然后在config文件新增如下:

    # 服务器认证
    Host 你的服务ip
        HostName 你的服务ip
        IdentityFile ~\\.ssh\\私钥名称

    image-20210327103710656

    如果你按照默认流程了,那么不需要此操作。

    都配置完毕后输入ssh git@服务器ip如果能够免密登录即代表成功了,如果不能请用脑子在仔细看一遍这一部分的教程。

    image-20210327103901579

禁用git用户的shell权限

我测试安装完后自带了git-shell,通过which git-shell命令查看是否能显示出路径,如果不能则需要手动添加。

image-20210327104350613

// 如果不是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,每个人的配置可能不同,图片仅供参考。

image-20210327104911059

示例:

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私钥对用的公钥在服务器上,如果你按照我的流程重命名了,那么不会成功的!)

手动测试

  1. 进入public目录

  2. 初始化仓库

  3. 命令三连

    git add .
    git commit -m 'update'
    git push --force --all git@server_ip:/home/git/repos/hexo_blog.git

    image-20210327105822053

  4. 此时服务器中已经存在了文件

    image-20210327110317070

虽然现在很麻烦,但是后面我会介绍通过持续集成实现自动化构建并上传。那时你只需要push上你的源代码即可。

安装Docker

  1. 安装docker

    curl -fsSL get.docker.com -o get-docker.sh
    sudo sh get-docker.sh --mirror Aliyun

    image-20210327095433092

  2. 启动docker服务

    sudo systemctl enable docker
    sudo systemctl start docker
  3. 推荐操作

    sudo groupadd docker
    sudo usermod -aG docker $USER

    image-20210327095647687

  4. 使用阿里云镜像加速(非大陆机器可忽略)

    1. 登录阿里容器镜像服务

    2. 查看加速地址

      image-20210227190110321

    3. 设置加速服务

      • 创建目录

        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
    4. 查看镜像地址

      dokcer info

      image-20210327100102166

安装docker-compose

由于国内机器直接下载GitHub的资源速度很慢。因此使用手动下载的方式。

  1. 进入GitHub进行下载docker-compose-Linux-x86_64

  2. 将文件上传到 /usr/local/bin/ 目录,并改名为 docker-compose

    image-20210327100914341

  3. 赋予权限

    sudo chmod +x /usr/local/bin/docker-compose
  4. 测试

    docker-compose -v

    image-20210327100958402

配置nginx

既然我们安装了docker,那么我们的配置将会很简单。

  1. 下载蓝奏云文件,密码(ak1m)

  2. 将文件解压,并按照你自己的信息进行编辑

    • ssl目录

      存放你的网站证书,可以到腾讯云、阿里云、freessl等平台进行申请。

    • nginx目录

      此目录存在nginx的相关配置,请按照注释修改相关配置

  3. 服务器上传这些文件(不是压缩包)

    cd ~
    mkdir blog

    image-20210327113346229

  4. 运行docker-compose up -d命令启动服务。然后使用docker-compose ps命令查看服务是否正确运行。

    image-20210327113622914

  5. dns解析。

    image-20210327113645222

通过coding自动部署

通过coding部署需要将我们的私钥放到环境变量里,但是coding的环境变量不会自动解析换行符,因此我们需要手动解析一下(也就是将换行变成\n)。然后将其填入coding的环境变量。

简陋的在线转换地址:gitee Pages

image-20210327145311021

在执行上传命令之前添加如下命令即可。

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_KEYSecrets

在进行上传操作时执行如下步骤:

- 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