闲话
我不想在宿主机上安装Nodejs,于是就有了这篇文章。本文的目的就在于让写作的人只专注于写作这件事本身,而无需关注写作平台的构建。以后我也会逐渐将各种中间件使用docker的方式构建,让runtime开箱即用,让Coding也成为纯粹的Coding,在Coding时无需花时间在运行环境的配置。
使用dockerfile构建镜像
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
| FROM node:15.7.0-alpine3.10 MAINTAINER wanf3ng <wanf3ng@gmail.com>
WORKDIR /usr/blog
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add bash git openssh
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone \ && apk del tzdata
RUN \ npm config set registry https://registry.npm.taobao.org \ &&npm install \ &&npm install hexo-cli -g \ && npm install hexo-server --save \ && npm install hexo-asset-image --save \ && npm install hexo-wordcount --save \ && npm install hexo-generator-sitemap --save \ && npm install hexo-generator-baidu-sitemap --save \ && npm install hexo-deployer-git --save
EXPOSE 4000
|
构建完image后也可以push到dockerhub方便以后使用,以后只需pull即可,如:
1
| docker pull wanf3ng/blog
|
启动容器
将容器内的/usr/blog映射到本地D:\myblog\
1 2
| docker run -d -ti -p 4000:4000 -v d:\myblog\:/usr/blog/ blog /bin/bash
|
进入容器内验证是否安装完成
1 2 3 4 5 6 7 8
| docker exec -it [container ID] /bin/bash
hexo init
hexo g
hexo s
|
设置主题
1
| npm install --save hexo-theme-fluid
|
然后在博客目录下创建 _config.fluid.yml
,将主题的 _config.yml (opens new window)内容复制过去。
配置git一键发布
用ssh-keygen
命令生成ssh key,将~/.ssh/id_rsa.pub
里的内容复制到Github
1 2 3 4
| ssh-keygen -t rsa -C "youremail@example.com" git config --global user.name "你用github用户名" git config --global user.email "你的github邮箱地址"
|
配置_config.yml
文件
1 2 3 4 5
| deploy: type: git repo: git@github.com:wanf3ng/wanf3ng.github.io.git branch: master message: Site updated at {{ now("YYYY-MM-DD HH:mm:ss") }}
|
最后使用hexo g -d
就可以一键部署了,如果要在宿主机上一键部署,只需输入以下命令即可,也可以写成脚本文件执行
1
| docker exec -it [container ID] /bin/bash -c 'cd /usr/blog && hexo g -d'
|
注:如果安装了hexo-all-minifier
用来压缩生成文件,需要额外安装c程序的编译工具
1
| apk add libtool automake autoconf nasm gcc g++ make
|
在使用npm安装完后需要把node_module
删掉,用yarn重新编译一下。因为在容器里npm不编译hexo-all-minifier
的一些C++依赖包,rebuild也没用。而yarn会编译,所以是个挺奇怪的bug。