# 前言

之前我的博客是部署在 Gitee 上的,前段时间发现博客无法访问了,登录 Gitee 一看,发现是服务被停用了

upload successful

真的很无语,之前 51CTO 的博客也是这样,突然就把我的博客停了,也没有消息通知和提醒我是什么内容违规了,体验贼差

一番思索后,决定把 hexo 部署到自己的阿里云服务器上,咱不受这个气

# 前期准备

在把 hexo 部署到自己服务器之前,你需要先购买一台云服务器,另外需要申请一个域名,提交域名备案信息,添加域名 A 记录解析到自己服务器地址

本地准备一台客户端,搭建好 Hexogit 服务,这个大家百度一下 hexo教程 或者去 hexo 官网查看安装教程

由于这些我之前就已经准备好了,就不多废话了

# 服务器准备

我这边的本地客户端和服务器都是 CentOS 8 系统,如果你的客户端和服务器的操作系统和我不一样,请不要无脑复制粘贴,其实不管你的操作系统是 Windows 还是 ubuntu ,方法都是差不多的,只是命令和操作上会有些差别

# 安装服务

登录自己的服务器,先安装 nginxgit 服务

l
dnf install nginx git -y

upload successful

# nginx 配置

安装完 nginxgit 后,启动 nginx 服务,并添加开机启动

l
systemctl start nginx && systemctl enable nginx

upload successful

# git 配置

先添加一个 git 用户,并设置密码

l
useradd git	#添加 git 用户
passwd git	#设置 git 密码

git

su 命令切换到 git 用户,在其家目录下建立我们的 git 仓库

如果不切换 git 用户,后续需要自己对目录添加 git 权限,否则客户端会推送失败,比较麻烦

切换 git 账户后,用 cd 命令切换自己的家目录,先创建一个博客目录,然后再创建一个 git仓库目录 ,切换到仓库目录,初始化仓库

l
cd /home/git
mkdir -p hexo/blogs
mkdir repos && cd repos
git init --bare blogs.git

upload successful

初始化完成后,切换到仓库下的 hook 目录,用 vi 创建一个 post-receivehook脚本 ,并添加执行权限

l
vim post-receive
#!/bin/sh
git --work-tree=/home/git/hexo/blogs --git-dir=/home/git/repos/blogs.git checkout -f
chmod +x post-receive

upload successful

# SSH 免密码登录

到这里 git 仓库就算是配置好了,接下来配置 ssh 公钥登录,不然每次客户端推送都需要输入密码,麻烦。。。

需要注意,这个 ssh证书 是在客户端生成,不是在云服务器,千万不要搞错了哦!!!

l
cd ~ #切换到家目录
mkdir .ssh && cd .ssh  # 创建.ssh 目录并切换到该目录
ssh-keygen #生成秘钥

upload successful

命令执行完成后,会生成 id_rsaid_rsa.pub 两个文件,我们需要复制 id_rsa.pub 公钥文件到服务器的 git 家目录

l
scp id_rsa.pub git@服务器地址:/home/git

upload successful

返回我们的服务器,切换到 git 家目录,创建 .ssh 文件夹,把 id_rsa.pub 移动到 .ssh 文件夹,并重命名为 authorized_keys , 然后修改 authorized_keys.ssh 权限

upload successful

如果前面的配置都没有问题,现在我们应该可以直接在客户端克隆服务器的 blogs 仓库

upload successful

如果提示需要输入密码,请查看之前 ssh 配置步骤是否有错

# 禁止 git 登录 shell

服务器上的 git 用户是我们用来部署 hexo 博客的,并不需要有 shell 的权限,它只需要有 git-shell 的权限即可

返回服务器,退出 git 账号,切换到 root , 先查看 git-shell 是否在 shells 配置里面,如果不在则添加 git-shell 路径

upload successful

接下来修改 passwd 文件 git 的登录 shell

upload successful

# 客户端部署 hexo 到服务器

ok, 现在 git 用户应该不能登录 shell 了,我们回到客户端测试能不能把 hexo 部署我们的服务器

编辑 hexo 的主配置文件 _config.yml ,在 deploy 这里配置自己服务器的仓库地址

upload successful

保存后,清理 hexo 缓存文件,重新生成静态文件,然后部署到服务器

l
hexo clean && hexo g && hexo d

upload successful

可以看到部署过程中没有任何报错,我们回到服务器查看 blogs 是否已经接收到客户端推送过来的文件

upload successful

从结果可以看到客户端已经成功把 hexo 的文件推送过来了,接下来我们只需要配置 nginx 的虚拟主机目录就可以浏览我们的博客了

# nginx 目录配置

切换到服务器 nginx 目录下,编辑 nginx.conf 配置文件,这里有两处地方是需要更改的

l
user nginx; 	# 这里 nginx 需要改成 root,否则会出现 403 禁止访问
server {
     39         listen       80 default_server;
     40         listen       [::]:80 default_server;
     41         server_name  _;
     42         root /home/git/hexo/blogs; # 这里改成 blogs 所在路径
     43 
     44         # Load configuration files for the default server block.
     45         include /etc/nginx/default.d/*.conf;
     46 
     47         location / {
     48         }

upload successful

改完后重启 nginx 服务,访问我们的域名,应该可以正常显示我们的博客页面了

upload successful

# 配置 SSL

上面的截图可以看到已经能够正常的通过域名访问我们的 hexo 博客了,但是 http 已经被互联网所抛弃了,所以还是申请配置一下 SSL证书

我这里以阿里云为例,打开阿里云 SSL 证书页面,选择购买免费的单域名证书

upload successful

购买后点击创建证书,填写相关的信息后,点击下一步申请,一般 1~5 分钟签发生效

upload successful

生效后点击右侧的下载,服务器类型选择 Nginx

upload successful

下载后解压出来有两个文件,一个 pem 和 key 文件

upload successful

在服务器 nginx 安装目录下新建一个 cert 文件,并把这两个文件上传到该目录,文件名最好改成域名,便于识别

upload successful

nginx 安装目录下的 conf.d 目录创建一个 server 配置

l
vi /etc/nginx/conf.d/www.conf
#以下属性中,以 ssl 开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置 HTTPS 的默认访问端口为 443。
    #如果未在此处配置 HTTPS 的默认访问端口,可能会造成 Nginx 无法启动。
    #如果您使用 Nginx 1.15.0 及以上版本,请使用 listen 443 ssl 代替 listen 443 和 ssl on。
    server_name yourdomain.com; #需要将 yourdomain.com 替换成证书绑定的域名。
    root html;
    index index.html index.htm;
    ssl_certificate cert/cert-file-name.pem;  #需要将 cert-file-name.pem 替换成已上传的证书文件的名称。
    ssl_certificate_key cert/cert-file-name.key; #需要将 cert-file-name.key 替换成已上传的证书密钥文件的名称。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的类型。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的 TLS 协议的类型。
    ssl_prefer_server_ciphers on;
    location / {
        root html;  #站点目录。
        index index.html index.htm;
    }
}

upload successful

保存后重启 nginx 服务,再次访问我们的博客,就成功显示小锁头了 ^ _ ^

upload successful

# 添加备案信息

最后,我们的域名是有备案的,需要在网站底部添加域名的备案信息,避免不必要的麻烦

由于 hexo 首页信息是在主题下的 \layout\_partials\footer 文件设置,所以需要在客户端上修改

登录客户端,切换到主题下的 _partials目录 ,然后编辑 footer 文件

upload successful

在底部找个合适的位置插入 <a href="http://beian.miit.gov.cn/">你的备案号</a> 这条语句即可

upload successful

效果不错,就酱吧,这个教程到此结束 (o゚▽゚) o