本文将介绍如何把自己搭建的hexo发布到云服务器上

购买云服务器、域名以及ICP备案

想要部署hexo博客,有一台具有公网ip的云服务器是必须的。

如果想要别人能够方便的访问你的博客,还需要申请一个域名。

如果你希望你的博客能够在大陆地区被正常访问,那么还需要进行ICP备案。

以上三者作为前置条件,本文不做赘述,请自行上网搜索相关教程。

在云服务器上配置好ssh公钥登录

在你希望使用的账户的~目录下的.ssh文件夹中,创建authorized_keys文件,将你的公钥复制进去。注意公钥是一行一个。然后把这个文件的权限改为600。

1
chmod 600 authorized_keys

这样就可以进行ssh公钥登录了。

可以尝试使用ssh命令登录一下,如果没叫你输密码,那么就可以进行下一步了。

安装Nginxgit

ubuntu和debian系列执行

1
sudo apt install nginx git

centos系列执行

1
2
sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
sudo yum install nginx git

如果你显示安装不了nginx,可以选择使用下载源码进行编译的方式,具体如下:

1
2
3
4
5
6
7
8
mkdir -p /usr/local/nginx
cd /usr/local/nginx
wget https://nginx.org/download/nginx-1.24.0.tar.gz.asc
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install

然后将 /usr/local/nginx/sbin 添加到环境变量中,这样就可以使用nginx命令了。

具体方法如下:

1
2
echo 'export PATH=$PATH:/usr/local/nginx/sbin' >> /etc/profile
source /etc/profile

就可以了。
然后使用nginx -V查看版本号,如果显示版本号,那么就安装成功了。

接下来配置 systemctl 来使nginx开机自启动

1
vim /usr/lib/systemd/system/nginx.service

在里面输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

然后保存退出,执行

1
2
systemctl enable nginx.service
systemctl start nginx.service

接下来使用命令

1
systemctl status nginx.service

查看nginx的状态,如果显示active,那么就安装成功了。

在服务器端创建git仓库

1
mkdir /var/repo/

这里我们选择把仓库建立在 /var/repo/ 下面,你也可以选在自己的路径

然后修改权限

1
2
chown -R $USER:$USER /var/repo/
chmod -R 755 /var/repo/

创建远程的git仓库

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

这里和hexo也可以改成你喜欢的名字

配置http下的nginx

创建托管的地址

1
2
3
4
mkdir -p /var/www/hexo

chown -R $USER:$USER /var/www/hexo
chmod -R 755 /var/www/hexo

此时选择在 /var/www/hexo下面进行托管
输入

1
nginx -t

查看配置文件的路径然后修改配置文件,在http那个大括号下面写入:

1
2
3
4
5
6
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name YOUR_DOMAIN;
root /var/www/hexo;
}

然后输入

1
sudo systemctl restart nginx.service

测试一下是不是真的配置好了,建立一个文件 /var/www/hexo/index.html

输入

1
2
3
4
5
6
7
<html>

<body>
<p>Testing nginx 2333</p>
</body>

</html>

在云服务器提供商那里打开防火墙,在你本地使用 {服务器ip}:80 的方式查看,出现了正确的网页表示成功

创建git hook一键部署

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

在文件中写入

1
2
3
#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/var/repo/ganahBlog.git checkout -f

保存后更改权限

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

检查远程git仓库配置是否正确

记得把下面的USER换成你自己的用户名

1
git clone USER@{云服务器IP}:/var/repo/hexo.git

克隆成功就ok了

部署本地的hexo博客到远程

在本地的 _config.yml 的最后,改成下面这个样子

1
2
3
4
5
6
7
deploy:
- type: git
repository: USER@{云服务器IP}:/var/repo/hexo.git
branch: master
- type: git
repo: git@github.com:{USER_NAME}/{USER_NAME}.github.io.git
branch: master

第二个部分如果你没有配置 github pages 可以不用管

然后使用

1
2
hexo g
hexo d

部署,如果能够通过 {云服务器ip}:80访问成功,就大功告成了

配置域名解析

在域名注册商那里加一条A记录,指向你的服务器ip,然后测试域名访问

在博客底端悬挂ICP备案号

这里我使用的是butterfly主题,悬挂的方法可以是在butterfly的主题配置文件里面的Footer Settings配置成如下样式

1
2
3
4
5
6
7
8
# Footer Settings
# --------------------------------------
footer:
owner:
enable: true
since: 2023
custom_text: <imgsrc="https://haiyong.site/img/icp.png"><a href="https://beian.miit.gov.cn/#/Integrated/index" style="color:white" target="_blank">你的备案号</a>
copyright: true # Copyright of theme and framework

配置https

如果你以上都成功了,那么就可以考虑配置一下https了。这里给出一种使用 let's encrypt 申请免费证书的方法

安装 certbot

输入

1
yum install certbot

一键安装

使用 certbot 申请证书

输入

1
sudo certbot certonly -d your_domain --manual --preferred-challenges dns

进行申请,注意替换你的 your_domain,然后按照提示,输入邮箱,再添加一条TXT记录,指向它给你的值,然后回车。

配置nginx为https

在配置文件里面,添加一下内容:

1
2
3
4
5
6
7
server {
listen 443 ssl;
server_name YOUR_DOMAIN;
ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN/privkey.pem;
root /var/www/hexo;
}

重新使用命令

1
sudo systemctl restart nginx.service

就可以了