本地Hexo部署

参考我的这篇文章:Hexo+Github 搭建个人博客 | lxs

服务器端部署

输入

1
sudo su root

安装Git

1
yum install git

创建git账户

1
2
3
adduser git
chmod 740 /etc/sudoers
vim /etc/sudoers

添加git ALL=(ALL) ALL权限

image-20241129222224419

改回权限

1
chmod 400 /etc/sudoers

设置 git 账户密码(371203)

1
sudo passwd git

切换至 git 用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限

1
2
3
4
5
6
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys

chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh

在本地登录

1
ssh -v git@SERVER

在本地 Git 终端中测试是否能免密登录 git,其中 SERVER 为填写自己的云主机 IP,执行输入 yes 后输入你之前配置的 git 密码,无报错就说明好了。

配置仓库与相关配置

在 var 目录下创建 repo 作为 Git 仓库目录,返回服务端命令行切换到 root 账户,然后输入:

1
2
3
4
5
sudo su root

mkdir /var/repo
chmod -R 755 /var/repo
chown -R git:git /var/repo/

创建新的库

1
2
cd /var/repo
git init --bare hexo.git

创建一个新的 Git 钩子,用于自动部署。在 /var/repo/hexo.git 下,有一个自动生成的 hooks 文件夹。我们需要在里边新建一个新的钩子文件 post-receive。

1
vim /var/repo/hexo.git/hooks/post-receive

进入编辑模式,然后将下面那两行代码粘贴进去,保存退出。

1
2
3
4
5
6
#!/bin/bash
git --work-tree=/www/wwwroot/hexo --git-dir=/var/repo/hexo.git checkout -f

chown -R git:git /var/repo/hexo.git/hooks/post-receive

chmod +x /var/repo/hexo.git/hooks/post-receive

新建一个文件用做网站的根目录,记得给权限。

1
2
3
mkdir /www/wwwroot/hexo
chmod -R 755 /www/wwwroot/hexo
chown -R git:git /www/wwwroot/hexo

Nginx

1
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

image-20241129222613219

打开防火墙

image-20241129222645502

复制上述地址即可。用户名与密码也有在用户面板中。
打开软件商店输入Nginx。选择免费的安装。等待安装结束。

image-20241129222724740

部署完成之后,点击网站,添加站点,填写你的域名(加上3w),没有的话写你的服务器 ip 地址。根目录选我们之前建立的/www/wwwroot/hexo

image-20241129222830165

回到服务器终端,重启宝塔服务

1
service bt restart

部署本地文件

接下来需要将本地的生成好的/public推送到服务器。进入本地电脑 hexo 博客的根目录,编辑站点配置文件 _config.yml,找到 deploy,修改成以下

1
2
3
4
5
deploy:
type: git
#repo改为repo: git@域名:/var/repo/hexo.git
repo: git@1.15.172.21:/var/repo/hexo.git
branch: master

然后使用

1
2
npm i  hexo-deployer-git  -- save
hexo clean && hexo g && hexo d

可能会报错

image-20241129223017533

在服务器终端输入以下命令即可:

1
chown -R git:git /var/repo/

添加HTTPS访问

一般购买域名的网站会配套提供SSL证书服务,这里我采用了两种方式:

  • 在阿里云/腾讯云申请免费SSL证书(有效期90天,限额50次)
  • Namecheap上申请(Github Student Developer Pack 1年免费)

阿里云/腾讯云申请免费SSL证书

参考:将 Hexo 部署到阿里云轻量服务器_hexo部署到阿里云-CSDN博客

因为我的域名是在腾讯云买的,所以顺带申请证书

image-20241130135954276

image-20241130140028377

image-20241130140324491

这里.pem文件和.crt内容是一样的

image-20241130140406816

密钥:下载解压得到的.key文件

证书:下载解压得到的.pem文件

这里换成了namecheap网站的证书,实际腾讯云的免费SSL证书有效期是90天

Namecheap网站申请SSL证书

GitHub Student Developer Pack

image-20241130140731047

购买完成后需要激活SSL证书

参考:Namecheap SSL证书(PositiveSSL)激活和Nginx环境SSL获取 | 老左笔记

登录我们当前VPS服务器,执行下面命令生成CSR。

1
openssl req -new -newkey rsa:2048 -nodes -keyout {}.key -out {}.csr

{}部分换成自己的域名,这样容易辨别证书是哪个域名的。

1
2
3
4
5
6
7
8
9
10
11
12
Country Name (2 letter code) [AU]:CN //国家简称
State or Province Name (full name) [Some-State]: JS //省份简称
Locality Name (eg, city) []:SZ //城市简称
Organization Name (eg, company) [Internet Widgits Pty Ltd]: //组织名称可以不写
Organizational Unit Name (eg, section) []: //可以不写
Common Name (eg, YOUR name) []: laozuo.org //填写我们的域名WWW和不带WWW不同
Email Address []:邮箱地址

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []://不写
An optional company name []://不写

然后就可以在当前路径中生成2个证书文件 ,一个是KEY,一个是CSR

CSR文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@VM-12-3-centos ~]# cat lxs04.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICvzCCAacCAQAwejELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkpTMQswCQYDVQQH
DAJTWjEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDERMA8GA1UEAwwIbHhz
MDQubWUxIDAeBgkqhkiG9w0BCQEWETEzNjI2MzczNjZAcXEuY29tMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6dLAT7F0xcWaFRcVtAdhTo7y2pBc2zi8
HSNjYLBLug7iGBICVDPM1JUFa/YI1S68S+Uzs+O5TImnHeguo6Z4tWJbdAL7cJgF
vfnCWZVql9I0Hd2nmxOVXoF6U3bmT9zg0nLQxitgY52amJOUO8nhQKhVB6g1m5gv
h2P/tM4JMpE36VLCJogCvgIzBw2mqFxL53EGufmN4OL59Mh7k9kNjbnYFuRV1cvO
ZdJ2FsGonSFYzdN9KFIaMx7W6wzR98JbTz1FAYIsrFN8eWfS+THkRGfNywF/dThC
iaOPcMgrR9waEaXtPO4K1LoYEx5N1MSNXKJ6aebKS7kScMGNLCBdnwIDAQABoAAw
DQYJKoZIhvcNAQELBQADggEBAHGN1iKuYxhAA6QgeRDLxdW9ecL7rhBdwPewIsjb
KjjW7q3t6MV4XhYBL/2+uDlRXi1DtHjAgXueokkcZMYYH6BLfkUJ7Ckl4dl5CNGt
l5C3XLKhI7F9kO9UWF9AHjX6SRVWCvD2A8PR2pX7lMvVfCnAzqVDR4HcxD9fFwlr
8yCxhEe2em5mQEm5AO4tPOexTcWfa4VBtASLPpP1yX/9b7CK0C/3t2xy69UH1aGV
c1UZqDwd3g1gZAtNluMgA58Gs4v4f29KR+d/9297llTITirneVguD1P+LDWVc6/H
DKsekwctscIaaAHWUpeXZpK9sh9/rLQ0AwUI53g4BiWweMw=
-----END CERTIFICATE REQUEST----

KEY文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@VM-12-3-centos ~]# cat lxs04.key
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDp0sBPsXTFxZoV
FxW0B2FOjvLakFzbOLwdI2NgsEu6DuIYEgJUM8zUlQVr9gjVLrxL5TOz47lMiacd
6C6jpni1Ylt0AvtwmAW9+cJZlWqX0jQd3aebE5VegXpTduZP3ODSctDGK2BjnZqY
k5Q7yeFAqFUHqDWbmC+HY/+0zgkykTfpUsImiAK+AjMHDaaoXEvncQa5+Y3g4vn0
yHuT2Q2NudgW5FXVy85l0nYWwaidIVjN030oUhozHtbrDNH3wltPPUUBgiysU3x5
Z9L5MeREZ83LAX91OEKJo49wyCtH3BoRpe087grUuhgTHk3UxI1conpp5spLuRJw
wY0sIF2fAgMBAAECggEAQIUrE9J/ymLwVYl9L6Qpsae4U58qQEOzhMbTEUcUXk7l
DIdLpTh1+OL2EAhf/5NZ2gdw8N6RrxD80D/VPssc29A8NBLulu8cBoP4oQed1i7m
uqcDLMOGoAFSY92XR8pHL0sHWOd3PYWrtxZh/O2D/nd0nxxHTpv74Xwyfw2rdAwf
Ly/0KeCA8H+4WgRKEw3s+lYs0fHhv6qT0sIovGdrP0BO//43QOeVIRsIbi2+A8ps
jyi1lbEdmNaDBjbrFl/ZGXXv0v55Wt3t95D0yxJrWHPgwUY5epYPWVcn1b6Y3bY0
Kncpxe8tiTStxwcbnoVfv2BQSQWJN3SPgY607lbUoQKBgQD8TpINYW/lpbm89+RO
ou+rMYnlIFUcwcpt88o5nu6AOrBnRMb4Xv/9Oi5bFH/VsFTY9aN87E4fOgi3KvFb
7AI+gmJH0meuDheqcKueFHo+18frf6ixC2TPjOTGgJuEFw+5qT8lHLUEOSyjKqDa
AhfFhHKPKwWVjsfs8Y2M/vb/wwKBgQDtPut3iGIVCjsV8U+ta6G9wVpf1DXqODuM
UyCiziBLNKK/lNRi+BYxbDDaRQsfLTtAkoVv3T6KUaVUZqth7QSxQGIiQozCGH8U
Joj0yz9XWtr7pVaAmYKszz1+hUoPmiIi52uI6s/wH0logvMUuiRz+QdS6AxhASZG
bCVbNsqI9QKBgQDdHJZOd6eyoAwomS5R4+UaKG3qiO1OKF8ZAN+mo6vsYIKb3eBp
Zgf9ifF6DHsDcGbLRGokXosQPrHIpC+lGS3WTjmHK9OE7AC9c8RS4ytGy5/+uH/D
uHJ+mcEcXTTtC7DSSop2IbRZoSmHTSJuLAtdI/eplFBugxSeiAo/GGqqNQKBgFgb
nPE4ikyMDyN4CgI6zceeDkU2l4tTtPHJUX6FFMM5WhPSXwoeXoeeSYpWR+odLzss
7zd7MCXIaqEsvAtTLgHyCj/0/Td8R32hTg2zieOUT21TmwuJd1lcYdciAz5GHNVf
orUnl2/y/p08vK/+7VjQrGKi4S4JckCHG1yDvbYdAoGBAIrSl2XEGW03cw+ArOYO
SVLJkqNiW3bL1Ml0doJTv+9y7KdMM+yZegzotdyspmfGzL7fKwz+5nRJjITtd4KH
z/H8tSYlG6DpZHmJF/qK6VTHtxEYfOI3Hl8t7n3BuNVACR6VvmdKg6vMm5gfQmBs
90dLtQkjW08TPmHdIPRxMxhT
-----END PRIVATE KEY-----

激活过程可以看这个视频:How to complete the DCV process for an SSL using the CNAME method

验证通过后接收邮件

image-20241130142154199

image-20241130140406816

密钥:服务器端生成的.key文件

证书:下载解压得到的.crt文件