前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转Lighthouse】Docker与Hexo博客的部署实战

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

原创
作者头像
用户1542270
发布2022-04-27 21:35:48
2.5K1
发布2022-04-27 21:35:48
举报
文章被收录于专栏:丕丕丕

准备工作

  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。

WebHook
WebHook

安装完成之后我先添加一个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你的新文章来试试吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 购买一台Lighthouse服务器
    • Lighthouse服务器介绍
    • Docker环境部署
    • 使用Docker部署Hexo
    • 部署Web服务器
    • 利用WebHook自动部署Hexo
    相关产品与服务
    轻量应用服务器
    轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档