在私有服务器上部署Hexo博客

问题的提出

上传github太慢了,而且本地的服务器更好控制,因此选择将hexo博客转移到自己的私有服务器

思路

由于hexo本身就是一个静态站,所以只需要用nginx指向对应的hexo文件夹,然后设置好文件格式就可以直接使用

操作

在服务器端设置git裸仓库

# 需要注意的是此处不建议使用root用户,否则到后面会有权限冲突,使用非root用户即可
mkdir blog.git 
cd blog.git 
# 注意此处使用的是gitd的裸仓库,远端服务器一般建议直接使用裸仓库
git init --bare 

裸仓库是一个重要的git仓库概念,可以参考裸仓库的相关介绍这篇文章。

总结就是

  1. 裸仓库

    由版本控制文件组成,其本身就是.git文件夹的结构。不能在裸仓库文件夹下直接操作,例如add和commit操作都是不允许的,其文件夹中也看不到git分支中的文件。这种仓库只能在远端推送或者拉取,通常用于多人协作,版本库放在服务器上

  2. 普通仓库

    普通仓库由源代码和版本控制文件组成,其根目录下就是源代码,根目录中的.git文件夹里面放的就是版本控制文件,可以对其中的源代码进行直接操作,但是不能在远端直接推送代码到当前分支,故常用于本地的版本控制

本地调试

因为我本身有一个正常的hexo博客,故本地调试只需要改一下_config.yml文件,在其中的deploy项中填写:

deploy:
    type: git
    message: update
    # 注意master和main分支的处理
    repo: yourusername@server_ip:~/path_to_your_blog.git,main

然后就可以上传了

# hexo打包
hexo g
# hexo上传至服务器
hexo d

复制仓库

因为git裸仓库是无法直接操作文件的,也就无法让nginx直接指向文件夹,所以我们需要使用git clone来将其中的分支来复制到一个普通仓库中,即

mkdir blog
cd blog 
# 初始化一个git普通仓库
git init
# 把blog.git复制到blog中
git clone /XXXX/blog.git /XXXX/blog 
# 在blog中拉取blog.git中的对应分支
git pull origin main

此时能够在blog文件夹中看到对应的hexo文件了

Nginx配置

复制一下我的nginx配置,nginx默认配置文件在/etc/nginx/niginx.conf里面

server {

    listen 9000 ssl ;
    listen [::]:9000 ssl;

    root /home/yyh/blog/;
    server_name blog.yyhnet.top;
    ssl_certificate /etc/letsencrypt/live/blog.yyhnet.top/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.yyhnet.top/privkey.pem;

    location / {
            root /home/yyh/blog/;
            expires 1h;
            index index.html;
            #下面这个types很重要,不使用的话会导致CSS不加载
            types {
                    text/html  html;
                    image/gif  gif;
                    image/jpeg jpg;
                    image/png  png;
                    image/vnd.microsoft.icon  ico;
                    text/css   css;
                    application/javascript  js;
            }
            default_type application/octet-stream;

            if (-f $request_filename) {
                    rewrite ^/(.*)$ /$1 break;
            }

    }

}

然后检查一下nginx的配置文件的可用性,然后重启nginx服务即可

# 检查配置文件
nginx -t
# 重启nginx服务
service nginx restart

后续使用

后续使用的话有三步

# 本地客户端打包上传至服务器
hexo g
hexo d
# 进入blog文件夹
cd blog
# 与裸仓库进行同步
git pull origin main

后续优化

上文中的方法在本机上传blog后,还需要进入服务器让blog文件夹与裸仓库进行同步,十分的不便,因此在这里加入一个git钩子,使得本机上传后自动触发blog文件夹与裸仓库的同步,此后就不需要再进入服务器进行同步了。

此处我们修改的是post-receive文件,其位于我们裸仓库中的.git/hooks/文件夹中,需要我们手动创建,其中hooks文件夹还可以放很多其他的文件,这些文件的文件名表示了这些钩子的触发条件,例如此处的post-receive表示在收到上传后运行钩子程序。这里的钩子程序实际上就是一个bash脚本

#脚本的Shebang行,用于
#!/bin/bash -l

#将GIT_REPO这个变量赋值为/home/yyh/blog.git
GIT_REPO=/home/yyh/blog.git

#将TMP_GIT_CLONE这个变量赋值为/home/yyh/temp/blog
TMP_GIT_CLONE=/home/yyh/temp/blog

PUBLIC_WWW=/home/yyh/blog

#进行脚本实际操作
#删除之前的blog临时文件夹
rm -rf ${TMP_GIT_CLONE}

#从裸仓库复制到blog临时文件夹中
git clone -b main $GIT_REPO $TMP_GIT_CLONE

#删除之前的blog文件夹
rm -rf ${PUBLIC_WWW}

cp -rf ${TMP_GIT_CLONE} ${PUBLIC_WWW}

参考文献

如何在个人服务器上部署Hexo博客-简书

Hexo部署到云服务器后CSS样式无效的问题-CSDN

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值