【玩转Lighthouse】Docker与Hexo博客的部署实战

2022-04-27 21:35:48 浏览数 (1)

准备工作

  1. 一台Lighthouse服务器
  2. Docker环境
  3. Hexo环境(Node.js)
  4. 宝塔面板 or 任意Web服务软件

购买一台Lighthouse服务器

Lighthouse服务器介绍

轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、APP、电商应用、云盘/图床和各类开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖基础云资源并提供高带宽流量包,将热门开源软件融合打包实现一键构建应用,提供极简上云体验。

之所以选用轻量应用服务器,是因为相比起云服务器CVM,轻量应用服务器更加精简便捷易用,创建轻量服务器时更有流行的开源软件打包镜像,实现一键完成应用的构建部署。对于我们这种低负载的个人以及中小企业来说,成本低,性价比更加适合。废话不多说,让我们直接开始吧。

轻量应用服务器购买界面轻量应用服务器购买界面

这里其实可以直接选择应用镜像。从上文得知,我们需要一个Docker环境,一个Node环境,一个Web服务器应用。

为了方便管理在使用轻量应用服务器过程中,我大多都是使用了宝塔面板的,这里我就直接选择宝塔面板的应用镜像。原因嘛,一个是宝塔面板的安装比较傻瓜式不大需要详细列出,一个就是本文的重点之一,Docker的部署。如果直接选用Docker的应用镜像,那就只剩下Hexo的部署可写了。而且Docker的手动安装我觉得还是可以学习一下的。

如果要是用Docker,推荐选用内存大的服务器,4G起步。当然如果像本文一样,只是部署一个Node环境,2G内存也是可以的。这里看个人选择了。

服务器购买完成后,对宝塔面板的初始化和登录,详情可以参考下面这篇文章,我就不再详细阐述了。不过文中的PHP和Mysql我们可以选择不安装,只安装Nginx。

【玩转Lighthouse】使用宝塔面板快速部署Web环境 - 云 社区 - 腾讯云 (tencent.com)

Docker环境部署

腾讯云轻量应用服务器的宝塔面板应用镜像,默认使用的CentOS系统,所以下文我们以CentOS下的Docker安装为例:

代码语言:javascript复制
$ sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine

这一步是先删除可能存在的旧版本Docker。

为了方便管理和升级,我们为yum添加Docker库来安装Docker。

首先我们安装依赖包

代码语言:javascript复制
$ sudo yum install -y yum-utils

然后添加Docker库。

代码语言:javascript复制
$ sudo yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

如果使用国内服务器的话,可以改用国内源来加快速度。

Docker库添加好后,我们先更新下源。

代码语言:javascript复制
$ sudo yum update

然后安装Docker。

代码语言:javascript复制
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完毕之后,我们使用Systemctl命令来控制Docker。

设置开机启动Docker。

代码语言:javascript复制
$ sudo systemctl enable docker

启动Docker。

代码语言:javascript复制
$ sudo systemctl start docker

到这里,Docker就算安装完成了。但为了更加方便的使用Docker,我们可以再安装Docker Compose。

首先创建一个cli-plugins文件夹。

代码语言:javascript复制
$ mkdir /usr/local/lib/docker/cli-plugins

然后安装Docker Compose,目前最新版本是2.4.1,我就直接安装最新的版本啦。

代码语言:javascript复制
$ curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose

为Docker Compose添加权限。

代码语言:javascript复制
$ sudo chmod  x /usr/local/lib/docker/cli-plugins/docker-compose

测试Docker Compose是否安装成功。

代码语言:javascript复制
$ docker compose version

这行命令会输出当前Docker Compose的版本。

到这里Docker就算完全部署完毕啦。下一步我们开始部署Hexo。

使用Docker部署Hexo

这里我们直接使用Docker Compose来部署一个具有Hexo的Node容器。

在你喜欢的目录里新建一个文件夹,名字任意。这里为了方便示例,我直接在home目录下创建一个文件夹Docker

代码语言:javascript复制
$ mkdir /home/Docker

然后进入Docker文件夹。

代码语言:javascript复制
$ cd /home/Docker

然后在Docker文件夹里新建一个名为docker-compose.yml的文件。

代码语言:javascript复制
$ nano /home/Docker/docker-compose.yml

填入以下内容:

代码语言:javascript复制
version: '3'
services:
  hexo:
    image: node:16-alpine
    container_name: hexo-blog
    restart: unless-stopped
    ports:
      - "4000:4000"
    working_dir: /usr/blog
    volumes:
      - "home/Data/hexo:/usr/blog"
      - "./entrypoint.sh:/entrypoint.sh"
    stdin_open: true
    tty:  true
    entrypoint: /entrypoint.sh

然后再新建一个名为entrypoint.sh的文件并填入以下内容。

代码语言:javascript复制
#!/bin/sh
set -e
echo "切换中科大源"
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
echo 安装bash git openssh 以及c的编译工具
apk add bash git openssh
echo 设置容器时区为上海
apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
&& echo "Asia/Shanghai" > /etc/timezone 
&& apk del tzdata
npm install hexo-cli -g
npm install hexo-server --save
if [ "${1#-}" != "${1}" ] || [ -z "$(command -v "${1}")" ]; then
  set -- node "$@"
fi
exec "$@"

最后在当前文件里输入Docker Compose命令就可以启动这个容器了。

代码语言:javascript复制
$ docker-compose up -d

容器启动之后,我们来初始化Hexo。

首先进入容器的bash环境。从docker-compose.yml文件可以知道,Hexo的容器我命名为:hexo-blog

代码语言:javascript复制
$ docker exec -it hexo-blog /bin/bash

进入容器的命令行之后,我们来初始化Hexo。

代码语言:javascript复制
$ hexo init

下面是2个有可能会用到的hexo命令。

生成静态文件。

代码语言:javascript复制
$ hexo g

启动hexo的预览功能。

代码语言:javascript复制
$ hexo s

到这里Hexo的环境就算搭建完成了。

详细的Hexo使用教程,可以参考Hexo官方文档。

部署Web服务器

Hexo部署完成之后,还需要生成静态文件,然后利用Web服务器来发布,使其可以在浏览器中访问。

这里我们使用的宝塔面板,所以我们直接在宝塔面板上安装Nginx来发布Hexo的静态文件。

首先登陆宝塔面板,之后在软件商店里找到Nginx,点击安装,就可以一键安装Nginx了。

宝塔面板安装Nginx宝塔面板安装Nginx

安装完成之后,我们去网站选项里,添加一个新的网站,并且指向容器映射到本机的Hexo文件夹里的静态文件存放文件夹。

docker-compose.yml文件中,我们映射到本机的地址是:/home/Data/hexo

根据Hexo官方文档可以得知,存放生成好的静态文件的文件夹默认名为:public

最后可得出存放静态文件的文件夹地址为:/home/Data/hexo/public

所以新建网站时,根目录那行填上上文地址。

添加网站添加网站

添加好网站后,就能访问生成好的静态文件了。具体的网站其他设置,例如SSL之类的,我就不多说啦,大家可以参考宝塔面板的教程。

到这里Docker和Hexo的部署就完成啦。

利用WebHook自动部署Hexo

下面我就再多说一个点,也是为什么我要安装宝塔面板的原因:WebHook。

有了WebHook这个宝塔里的软件,我们利用它和Github完成Hexo的自动部署。

我们把文章的markdown文件存放在Github上,每当我们写完新的文章,并且同步到Github上之后,利用Webhook自动在服务器上完成拉取新的文章,自动生成新的静态文件,从而达到自动部署,不用在手动连接服务器执行hexo g生成命令。

首先我们在宝塔面板中添加WebHook。

WebHookWebHook

安装完成之后我先添加一个webhook。

添加webhook执行脚本添加webhook执行脚本

脚本内容需要根据自己的实际情况来更改一下,注意!不要直接复制使用!

路径需要根据自己的实际情况来修改,以及后面的生成静态文件命令也需要根据自己的Docker容器名字来修改。

代码语言:javascript复制
 docker exec hexo-blog hexo g 
   
 这里的hexo-blog是我上面的yml文件中命名的容器名字,如果你的不一样,这里需要修改成你使用的容器名字

代码语言:javascript复制
#!/bin/bash
# git项目路径,路径需要根据你自己的使用情况来更改。
POSTS_PATH='/home/Data/hexo/source/_posts'
USER='www'
USERGROUP='www'
# git 网址
gitHttp='你自己的git网址'

echo ""
# 输出当前时间
date --date='0 days ago' " %Y-%m-%d %H:%M:%S"
echo "Start"

echo "Web站点路径:$POSTS_PATH"
echo "删除旧文件。"
# 下面的路径需要根据你自己的使用情况来更改。
rm -rf /home/Data/hexo/source/_posts/*
# 判断项目路径是否存在
if [ -d "$POSTS_PATH" ]; then
        cd $POSTS_PATH
        # 判断是否存在git目录
        if [ ! -d ".git" ]; then
                echo "在该目录下克隆 git"
                git clone $gitHttp gittemp
                mv gittemp/.git .
                rm -rf gittemp
        fi
        # 拉取最新的项目文件
        git reset --hard origin/master
        git pull
        # 设置目录权限
        chown -R $USER:$USERGROUP $POSTS_PATH
        echo "Hexo g Hexo生成部署"
        docker exec hexo-blog hexo g
        echo "End"
        exit
else
        echo "该项目路径不存在"
        echo "End"
        exit
fi

添加完成之后,我们还需要查看密钥,并且记录下来密钥和网址,然后去Github中设置Webhook,添加密钥和网址,来完成自动部署。

你也可以点击查看密钥后面的测试来试试脚本是否生效,执行情况可以点击日志查看。

接下来,我们来到Github,你保存文章的那个仓库,点击Setting

然后按照下图。填入刚刚记录下来的网址和密钥。

最后,到这里就完成啦,快点push你的新文章来试试吧。

0 人点赞