个人hexo博客的服务端部署及构建

2020-02-24 12:23:14 浏览数 (1)

hexo博客的服务端部署及构建

0.导语

之前的Hexo博客放在Github上,速度太慢了,在腾讯云上买了台服务器,将博客放到上面,本节主要阐述Nginx服务端部署 Nginx优化 HTTPS部署。

个人网站部署预览:https://light-city.club/

可以点击阅读原文,或者公众号右下角博客。

1.总图

首先来看一下总图:

分为几个步骤:

  • 一般大多数人在自己的电脑上部署好hexo博客,这便是上述的hexo客户端
  • hexo部署的时候会先通过hexo g生成html文件到public文件夹下,最后hexo d部署到某个git服务器
  • 这里是将hexo d部署到我们自己的服务器上,那便是在自己的服务器上构建git仓库。
  • 远程git仓库通过hook,监听到有新的push,这个文件夹又会同步到nginx配置好的环境
  • 访客就能通过访问我们的nginx服务器,访问我们的文章。

2.服务端

本机客户端搭建网上教程很多就不阐述,在服务端主要需要git与nginx,我们下面一一介绍。

2.1 nginx

nginx可以源码安装,也可以yum直接安装(centos 用yum,ubuntu 用apt-get)。

源码安装

代码语言:javascript复制
#下载
wget http://nginx.org/download/nginx-1.17.8.tar.gz
#解压
tar -xzf nginx-1.17.8.tar.gz
cd nginx-1.17.8

编译环境

代码语言:javascript复制
yum update
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

编译安装

代码语言:javascript复制
#创建用户,用户名为git
adduser git
#设置密码
passwd git

#配置
./configure 
--user=git 
--group=git 
--prefix=/usr/local/nginx 
--with-http_ssl_module 
--with-http_stub_status_module 
--with-http_realip_module 
--with-threads

#编译
make

#安装
make install

紧接着就是配置文件修改:

代码语言:javascript复制
server {
        listen       80;
        server_name  light-city.club;

        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/local/nginx/html/blog;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/nginx/html/blog;
        }
}

主要是修改server_name与root,server_name修改为域名,没有域名就不用修改了,root就是blog静态资源文件目录。

2.2 git

安装git与nodejs

代码语言:javascript复制
yum install git
yum install nodejs

前面已经创建了git用户与设置密码,这里就直接使用。

sudo用户组

把git用户添加到sudo用户组中 输入以下代码sudo vi /etc/sudoers,打开sudoers文件,输入:/root进行搜索,搜索到代码行root ALL=(ALL) ALL,然后在这一行下添加以下代码git ALL=(ALL) ALL。输入完毕之后,按wq!强制保存退出vi。

ssh公钥

切换到git用户,添加SSH Key文件并且设置相应的读写与执行权限。

代码语言:javascript复制
# 切换用户
su git
# 创建目录
mkdir ~/.ssh
# 新建文件
vim ~/.ssh/authorized_keys

然后把之前在客户端设置的SSH Key,复制到authorized_keys文件中,保存后退出。

这样做的目的是以后在客户端hexo d之后就不用输入密码了。

配置文件权限

代码语言:javascript复制
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

git用户登录

代码语言:javascript复制
ssh git@ServerIP

把ServerIP替换为自己的ip就可以直接登录到服务端了。

网站目录

代码语言:javascript复制
sudo mkdir -p /usr/local/nginx/html/blog
sudo chown -R git:git /usr/local/nginx/html/blog

初始化一个git裸库

代码语言:javascript复制
su git
cd ~
git init --bare blog.git

配置Hook

代码语言:javascript复制
vim ~/blog.git/hooks/post-receive

然后在该文件中输入以下内容:

代码语言:javascript复制
#!/bin/sh
git --work-tree=/usr/local/nginx/html/blog --git-dir=/home/git/blog.git checkout -f

添加权限:

代码语言:javascript复制
chmod  x ~/blog.git/hooks/post-receive

3.客户端

配置本地_config.yml文件夹

回到本地的机器上,进入你的hexo文件夹(就是你完成hexo init的那个) 找到_config.yml, 修改里面的deploy

代码语言:javascript复制
deploy:
type: git
repo: git@SERVER:/home/git/blog.git //填上远程主机地址和git仓库路径
branch: master

SERVER改为自己的IP地址即可。

保存后,执行客户端执行下列命令:

代码语言:javascript复制
hexo clean
hexo g
hexo d

网站便可以访问了:

4.配置HTTPS

  • 申请一个SSL证书,因为我的博客部署在腾讯云上,所以是去腾讯云页面上申请的 申请链接

https://console.zijiebao.com/ssl

  • 点击下载,然后就解压缩,获得以下几个文件夹。

可以看到是给不同的Server来使用,服务器部署在Nginx中,所以打开Nginx文件夹,你可以看到一个秘钥文件一个crt文件。

  • 上传

将nginx目录下的所有文件上传到云服务器的/usr/local/nginx/cert目录下,cert目录是自己创建的。

  • nginx配置
代码语言:javascript复制
server {
    listen       443 ssl;
    server_name  _;
    ssl_certificate /usr/local/nginx/cert/1_light-city.club_bundle.crt;
    ssl_certificate_key /usr/local/nginx/cert/2_light-city.club.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        root   /usr/local/nginx/html/blog;
        index  index.html index.htm;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

可以直接使用我的配置,把上述的路径文件改了就行。

最后看到域名有个锁头,这下http访问便可以直接跳转到https访问了,哈哈~

5.nginx优化

在静态blog中,Nginx可以做图片压缩优化,那么配置如下,开启gzip。

下面是与server同层次,在http{}里面。

代码语言:javascript复制
gzip  on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6].";
gzip_vary on;

0 人点赞