Hexo部署和发布新博客

经过前两篇文章Hexo搭建个人博客Hexo安装NexT主题,博客系统已经可以完美运行在自己的电脑上,但此时的博客系统只能自己访问,要想让互联网的用户都能访问到,可以通过以下两种方式:

  1. 把博客系统部署到云服务器上
    需要有云服务器,适合有服务器的人,好处是可以通过web页面编辑、发布博客,本文选择此方式

  2. 把博客编译后的文件放到CDN或Git服务器上
    节省了自己买/租云服务器的成本,但是编辑博客不方便,需要先在本地编辑、编译,最后手动上传(也可以用Github Hooks自动上传)到CDN或者云服务上。

下文详细介绍通过方式1完成博客的运行,整体流程如下:

  1. 本地搭建好博客
  2. 博客代码托管到Git服务器
  3. 在服务器部署运行博客
  4. 通过web管理页面发布新博客
  5. 手动提交代码(可选)

本地搭建好博客

包括基础的hexo、主题、在线编辑博客插件等,参考:

  1. Hexo搭建个人博客
  2. Hexo安装NexT主题

博客代码托管到Git服务器

为了后续的一键部署和博客内文章的安全性,把博客代码托管到Git器,可以选择Github或者Gitee,本文选择托管到Github。

1
git init && git remote add origin https://github.com/duan847/blog-manager.git && git add . && git commit -m 'init' && git push -u origin master

在服务器部署运行博客

有两种方式,本文使用方式2。

  1. 简单版:直接运行hexo
    直接用docker运行hexo,步骤比较简单,但是不能配置https,而且需要单独占用80端口才能配置域名。
  2. 升级版:运行hexo和nginx
    docker-compose同时编排部署hexo和nginx,步骤比较复杂一点,但可以配置https,同时不单独占用80端口。

两种方式都需要先安装Docker,CentOS上安装Docker命令如下:

1
2
3
4
5
6
7
## CentOS 7执行以下命令
curl -fsSL get.docker.com -o get-docker.sh && sudo sh get-docker.sh --mirror Aliyun && sudo systemctl start docker && sudo systemctl enable docker

## CentOS 8执行以下命令
sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

curl -fsSL get.docker.com -o get-docker.sh && sudo sh get-docker.sh --mirror Aliyun && sudo systemctl start docker && sudo systemctl enable docker

简单版

1
docker rm -f hexo;docker run -d --name hexo -p 4000:4000 -e PUBLIC_HEXO_GITHUB_URL=https://[username]:[password]@github.com/duan847/blog-manager.git zeusro/hexo

ps:把PUBLIC_HEXO_GITHUB_URL换成你的仓库地址。
如果仓库是私有仓库,[username]和[password]必须要写,否则删掉[username]:[password]@

部署成功就可以通过ip:4000浏览博客。通过ip:4000/admin博客编辑。

升级版

安装docker-compose

1
2
## 使用daocloud下载安装,安装效率更快
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

生成nginx和hexo编排脚本

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
30
mkdir docker-compose-blog && cd docker-compose-blog && rm -rf docker-compose.yaml 
echo 'version: "3.4"
services:
nginx:
image: nginx
container_name: nginx
volumes:
- "~/docker/nginx/www:/usr/share/nginx/html"
- "~/docker/nginx/conf.d:/etc/nginx/conf.d"
- "~/docker/nginx/cert:/etc/nginx/cert"
ports:
- "80:80"
- "443:443"
restart: always
networks:
- blog
hexo:
image: zeusro/hexo:latest
container_name: hexo
ports:
- "4000:4000"
environment:
PUBLIC_HEXO_GITHUB_URL: https://[username]:[password]@github.com/duan847/blog-manager.git
networks:
- blog

networks:
blog:
driver: bridge
' >> docker-compose.yaml

ps:把PUBLIC_HEXO_GITHUB_URL换成你的仓库地址。
如果仓库是私有仓库,[username]和[password]必须要写,否则删掉[username]:[password]@

配置nginx的https

创建nginx需要的目录
1
mkdir ~/docker/nginx/www && mkdir ~/docker/nginx/conf && mkdir ~/docker/nginx/cert
上传https证书
  1. 在云服务器申请https证书(有免费的https);
  2. 下载对应Nginx的证书文件,如:3838899_www.duanjw.com.pem3838899_www.duanjw.com.key
  3. 把证书文件上传到~/docker/nginx/cert目录下。
设置nginx配置文件

使用443端口,并把80端口的请求重定向到443。

  1. 需要把3838899_www.duanjw.com.pem3838899_www.duanjw.com.key换成你的https证书文件名;
  2. server_name localhost;换成你的域名。
    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
    30
    31
    32
    33
    echo 'server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/cert/3838899_www.duanjw.com.pem; # pem
    ssl_certificate_key /etc/nginx/cert/3838899_www.duanjw.com.key; # 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;
    ssl_prefer_server_ciphers on;

    server_name localhost;
    charset utf-8;

    ## gzip
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    #gzip_http_version 1.0;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary off;


    location / {
    proxy_pass http://hexo:4000;
    }
    }
    server {
    listen 80;
    server_name localhost;
    return 301 https://$server_name$request_uri;
    }

    '> ~/docker/nginx/conf.d/default.conf

启动博客

1
docker-compose up -d

部署成功就可以通过ip浏览博客。

通过web管理页面发布新博客

通过ip或者host:4000/admin博客编辑。方式2通过ip或者host:80/admin无法访问到编辑博客界面,不知道什么原因。

手动提交代码

可以每一次编辑博客提交一次代码,也可以一段时间后提交一次代码。

  1. 执行以下命令创建提交代码脚本:

    1
    echo "docker exec -it hexo /bin/sh -c 'cd blog-manager; git config --global user.email "554343346@qq.com"; git config --global user.name "duanjiawei" && git pull && git add -A ; git commit -m \"nocommit\" ; git push'"> ~/push.sh
  2. 提交代码

执行sh push.sh

坚持原创技术分享,您的支持将鼓励我继续创作!