03 Hexo基于Docker上运行并发表到Gitlab
一 需求说明
- 需求1:
hexo
快速迁机.hexo
的源文件是存放在一台主机上的.而到了后期迁机会带来一系列麻烦,不是很方便.需要寻找一种能快速迁机的方法. - 需求2:让百度收录
hexo
页面.我之前hexo
生成的静态文件是发布到github
上的,考虑到github
禁止百度抓取网页,导致百度将不能收录博客上的文章.需要实现百度能抓取网站收录的方法.
1 需求解决方案说明.
1.1 关于"hexo
快速迁机"实现说明.
hexo
基于docker
可以实现快速迁机.流程操作步骤如下(点击查看实例):
1.1.1 配置dockerfile
文件并构建hexo
项目;
1.1.2 收集迁机所需要的文件;
1.1.3 迁机测试;
1.1.4 迁机小结和讨论;
1.2 关于"让百度收录hexo
页面"实现说明.
由于gitlab
是允许百度抓取的,所以将发布到github
的页面改为gitab
,实现百度收录.
- 注:由于这个时间不够,只能下次再补上
gitlab
的相关教程了,这里是gitlab
的hexo
官方教程,把例子拉下来再把markdown
和主题挂上去再推送上去就行了,嗯,就这简单
2 准备工作
- 安装好
docker
工具,没有安装的可以参考docker-从入门到实踐进行安装; - 一个
gitlab
帐号,没有帐号去gitlab
官网注册.
3 方案最终实现的理想结果
在任意一台安装docker
且联网的主机上导入打包好的源码文件,一键自动化完成迁移,并实现在容器中发布能被百度收录的网站,实现快捷完全迁机,并且跟原来原来宿主主机的环境基本一致.
- 整个源码文件+
docke
构建文件,用一条命令在已经安装好docker
且能联网的主机上,自动化构建镜像完成全部自动化布署。由于我已经预见结果了,就先说下成功总结:由于镜像是由dockfile
构建的非黑盒镜像,dockefile
几乎不占用空间,而且hexo
需要的依赖库由于会在构建时自动化下载,可以在源码文件中删除掉。所以整个项目的迁移大小其实就是你写的一些markdown
文本和静态文件加上一个40多M的hexo
框架,整个迁机的过程是非常轻量化的,操作很方便。
二 好,开干
实例:1.1.1 配置dockerfile
文件并构建hexo
项目;
新建一个任意目录并进入,这里用hexo
目录做演示mkdir hexo && cd hexo;
.以下是Dockerfile
构建文件内容并保存起来,也可以根据自己的需求来定制.
#基于debian 8.8
FROM node:8.2.0
# 安装hexo推送依赖git工具
RUN apt-get upgrade -y \
&& apt-get -y install git \
#git用户名,如:
&& git config --global user.name "wuchuheng" \
#git用户email,如:
&& git config --global user.email "wuchuheng@163.com" \
# 淘宝npm镜像
&& npm install -g cnpm --registry=https://registry.npm.taobao.org \
# 安装hexo命令行工具
&& cnpm install -g hexo-cli \
#初始化hexo项目目录,置于/hexo
&& hexo init /hexo && cd /hexo \
#根据自己喜好来安装插件,如:
#git 插件用于推送到仓库,必备插件之一,
&& cnpm install hexo-deployer-git --save \
#RRS功能插件
&& cnpm install hexo-generator-feed --save \
#next主题本地搜索插件,查找资料很管用不用next主题的可以不用
&& cnpm install hexo-generator-searchdb --savea \
#安装next主题,如果不喜欢默认主题就选择自己喜欢的来安装
&& git clone https://github.com/theme-next/hexo-theme-next /hexo/themes/next \
#next 本地搜索
&& cnpm install hexo-generator-searchdb --save;
WORKDIR /hexo
EXPOSE 4000
ENTRYPOINT ["hexo","server"]
保存好构建文件Dockerfile
,目录hexo
下执行命令开始构建镜像:
sudo systemctl start docker.servic; # 启动docker
sudo docker build -t hexo:0.1 . ; # 本地构建自定义镜像hexo 0.1
suodo docker images;
查看已经生成的镜像:
实例:1.1.2 收集迁机所需要的文件
统一的rsa
文件能确保hexo
发布问题.本地hexo
目录下将本地rsa
文件复制cp ~/.ssh ./ -r ;
;如没有.ssh
目录,就 ssh-keygen -t rsa -C "" ;
一路回车就行,然后重复上面操作.hexo
结果目录如下.
实例:1.1.3 迁机测试;
说明下:这里的迁机是指将本地的.ssh
目录,source
目录,_config.yml
文件,themes
目录通过Dockerfile
将hexo
的整个运行环境在容器给构建出来,然后再把我们的这个文章的源数据source
,themes
主题目录,用于推送的密钥.ssh
和hexo
配置文件_config.yml
给挂载到容器对应的位置中去.然后在容器中启动hexo
就行了.也就是说要迁机只要把这挂载的几个文件和目录以及这个Dockerfile
给拿走就行了,其它的就不用管,它们会通过Dockerfile
去生成就行了.真正实现了轻量级迁机.
启动一个新的容器并将hexo
目录下的文件对应挂载到容器上,映射4000
端口;sudo docker run -itd -v $PWD/source/:/hexo/source/ -v $PWD/_config.yml:/hexo/_config.yml -v $PWD/themes/:/hexo/themes -v $PWD/.ssh/:/root/.ssh/ --privileged=true --name hexo_debug -p 4000:4000 hexo:0.2 /bin/bash ;
实例:1.1.4 迁机讨论和小结
回顾下整个流程,有点绕是第2步的收集迁机文件,有3个地方可能会困惑:1一个是:我们需要构建出hexo
的容器,从容器里给复制到临时的挂载目录tmp
,再从容器外面把文件给收集起来,那为什么不能直接从容器中导出来呢?答案是否定的!如果要从容器中原本的文件导出来,我目前也就发现这种方法而已.
另一个是:.ssh
目录?这个很好解释,如果我们不使用统一的密钥,到时候迁机要推送数据的时候又要去生成一个密钥再加到代码仓库那边,很麻烦,所以就算进迁机文件中了.
最后一个是:themes
主题目录?这个也很好解释为什么要加入到迁机目录中.如果我们使用别人的主题的话.这个主题文件是在构建容器的同时下载下来的.由于每个主题的都有着它们的配置文件,要配置才能使用,那就会出现每次迁机都要去主题配置一下,不如算进迁机文件中,这样就再也不用再次去配置了,而且也规避了一个版本风险,其实主题在迭代同时也可能会带来配置改变,同样的配置在新的主题版本不一定有用,导致hexo
运行,无疑增加学习成本.不如选一个主题版本配置后,算进迁机上目录中.
说到版本迭代,这种轻量级迁机可能会存在一个版本迭代的风险,只是有可能^_^! hexo
它有一个配置_config.yml
文件算在迁机文件中的所以它是不变的.但每次在构建镜像时都是下载最新版本hexo
,如有一天迁机文件_config.yml
配置不能满足新版本的话,可能会导致hexo
不能正常启动.这是个问题,如果你有解决的方法也可以告诉我下,但愿我不要遇到它.
当然你也可以把整个容器镜像也导出来,这样就不会出现这样的可能了.