• 之前个人所有笔记都是放在语雀上,主要除了学生也没啥人看,后面接触多了感觉写写博客好像也蛮不错的。
  • 陆陆续续也搭建过 WordPress 和 Hexo 再三权衡(拖了半年)最后还是选择了 Hexo,并将 Hexo 博客托管在了 GitHub 上并绑定了 yongz.icu 这个域名(现在不用了)。
  • 但总所周知 GitHub 由于某些原因在国内访问速度极慢,hexo deploy 慢的一匹。最后还是下定决心买了阿里云服务器,然后将 Hexo 博客部署到云服务器上,顺便绑个新域名。

本文来自 koenli 大佬:https://www.koenli.com/bda2f0d3.html

服务器配置

CPU 内存 操作系统 Git Web
2 核 2G CentOS 7.6 yum install 宝塔
  • CPU/内存:由于 Hexo 是静态博客,不需要多高的配置,1 核 1G 都是随便带(访问量贼大当我没说)。
  • 操作系统:这里我必须要吐槽,Ubuntu 为什么不行,我装了三遍都不行,最终认命装了 CentOS 7.3 就可以了(我敲)。
  • Git:大佬博客上写的是 Git 在 CentOS 上版本会很旧,我直接就用 yum 安装了一个,实际试下来,没啥问题。
  • Web:可自行安装 Nginx 或 Apache(不嫌麻烦的话),这里推荐使用宝塔是因为其不仅可以方便的添加网站和开启 HTTPS,还支持对服务器进行资源监控,端口管理等功能,是一款能够有效提升运维效率的服务器管理软件(不是推广)。

Git 配置

创建 Git 用户并配置 sudo 权限

  • 创建一个 Git 用户,用于 SSH 连接:
1
useradd git
  • 由于 Git 用户会涉及到 root 命令的使用,配置一下 sudo 权限(CentOS visudo 用的是 Vim,Ubuntu 用的是 Nano):
1
visudo
  • 找到root ALL=(ALL) ALL,在下面一行添加以下内容并保存退出:
1
2
root ALL=(ALL) ALL
git ALL=(ALL) ALL

配置 SSH 密钥

  • 在本地机器执行以下命令创建密钥,如果本地机器是 Windows 则在 Git Bash 中执行(可以不用,但是最好要用)。

注意:如果本地机器已有密钥,可跳过此步,无需重复创建~

1
ssh-keygen
  • 生成的公钥文件,Windows 和 Linux 的位置有所不同:
    • Windows:c:/User/username/.ssh/id_rsa.pub
    • Linux:~/.ssh/id_rsa.pub
  • 在服务器上执行如下命令,创建.ssh目录和authorized_keys文件,并修改文件权限(非常主要,权限问题会导致 SSH 连接失败):
1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换至 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 用户免密登录服务器:
1
ssh git@<yourIP>

创建网站根目录

注:

  • 这里我是直接照搬大佬博客的路径(其实就是懒)。
  • 此网站根目录对应 Web 软件的网站发布目录,可自定义。
  • 使用如下命令创建目录,并转移用户所属主和组:
1
2
mkdir -p /data/web/blog
chown git:git -R /data/web/blog

初始化 Git 裸仓库并配置自动化部署

  • 使用如下命令初始化 git 仓库:
1
2
3
4
5
6
7
# 创建 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,用于自动化部署:
1
vim /data/git/blog.git/hooks/post-receive
  • 在文件中添加以下内容,根据实际情况修改工作树目录和 Git 目录:
1
2
3
#!/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
  • 修改文件权限:
1
2
chown git:git /data/git/blog.git/hooks/post-receive
chmod +x /data/git/blog.git/hooks/post-receive

安装并配置宝塔

安装宝塔

  • 宝塔 Linux 面板是提升运维效率的服务器管理软件,支持一键 LAMP/LNMP/ 集群 / 监控 / 网站 / FTP / 数据库 / JAVA 等 100 多项服务器管理功能。
  • 宝塔官网:https://www.bt.cn/new/index.html
  • 由于此处我用的是 CentOS,安装命令如下(记得一定要是纯净系统):
1
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 回车即可:
1
Do you want to install Bt-Panel to the /www directory now?(y/n):y
  • 网络状况良好的情况下大概 3 分钟即可安装完成,安装成功会输出如下内容,其中包括面板的外网、内网访问地址和默认的用户名密码,这些信息也可通过之后再通过 /etc/init.d/bt default 命令查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
==================================================================
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!

注:服务器端口记得开放。

配置宝塔 Linux 面板

  • 通过浏览器访问面板地址,通过上述的默认用户名密码登录即可。
  • 因为宝塔面板许多功能都依赖于官网,第一次登录后需要绑定宝塔账号,如果还没有宝塔账号可以点击 “登录” 按钮下方的 “未有账号,免费注册” 跳转到注册,如果已有宝塔账号则直接输入账号信息点击 “登录” 进行绑定。
  • 在 “推荐安装套件” 窗口选择安装 LNMP (推荐),仅勾选安装 “Nginx”,安装方式选择 “极速安装”,最后点击 “一键安装”,等待安装完成(我已经装完了,用下大佬的图):

image-20230902161828955

添加网站并按需配置 SSL 证书

  • 点击 “网站”,选择 “添加站点”:

image-20230902161838860

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

image-20230902161843713

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

image-20230902161847538

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

image-20230902161854332

  • 到这里服务器上需要配置的内容就结束了。

配置本地 Hexo

  • 由于之前我是配置提交到 GitHub 上,选在需要修改提交到自己的服务器上,在博客根目录 _config.yml 中添加以下内容:
1
2
3
4
5
6
7
8
9
# 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 # 主分支
  • 执行部署:
1
hexo clean all && hexo g && hexo d
  • 访问前需要在域名注册商配置域名解析,将域名解析到云服务器 IP 地址,如果是本地服务器也可通过配置 hosts 解析进行测试:

image-20230902161858870

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

image-20230902161903332