准备工作
- 一台Lighthouse服务器
- Docker环境
- Hexo环境(Node.js)
- 宝塔面板 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
文件夹。
$ 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
。
$ mkdir /home/Docker
然后进入Docker文件夹。
代码语言:javascript复制$ cd /home/Docker
然后在Docker文件夹里新建一个名为docker-compose.yml
的文件。
$ 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
的文件并填入以下内容。
#!/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
。
$ 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了。
安装完成之后,我们去网站选项里,添加一个新的网站,并且指向容器映射到本机的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。
脚本内容需要根据自己的实际情况来更改一下,注意!不要直接复制使用!
路径需要根据自己的实际情况来修改,以及后面的生成静态文件命令也需要根据自己的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你的新文章来试试吧。