接近于完美版的 docker-hexo 实现~

2016-05-26 08:55:49 +08:00
 iyannik0215

Github 地址: https://github.com/iyannik0215/docker-hexo

DockerHub 地址: https://hub.docker.com/r/iyannik0215/docker-hexo/

起因

换了电脑后想要继续写博客, 就必须去装 hexonodejs + git, 但是毕竟不是玩 nodejs 的人, 每次装都会出点错误什么的, 最牛逼的一次是直接 rm -rf /usr/local/bin 里的所有东西删没了, 于是就想到了 docker 去做个镜像来完成 hexoserver 预览 和 deploy 部署 github 的任务.

作为一个程序狗, 电脑里可以没有 nodejs, 但是不能没有 Docker, →_→#.

下药

如果使用了 docker-hexo 那么你电脑里就再也不需要安装你不需要的 nodejs 了, 只需要保存 hexo 一下三样东西, 就可以实现 各种平台的无缝迁移~~.

使用方法

拉取镜像, 当前只有一个版本为 Hexo3.2 版本

docker pull iyannik0215/docker-hexo

使用 run 命令创建容器

docker run -p 80:80 -d iyannik0215/docker-hexo {你的 github username} {你的 github email} server
 
eg: docker run -p 80:80 -d iyannik0215/docker-hexo iyannik0215 admin@mashiro.io server

docker run -p 4000:80 --name hexo-server -d \

-v {你的用户文件夹路径}/.ssh:/root/.ssh \
-v {你的博客文件夹路径}/source:/Hexo/source \
-v {你的博客文件夹路径}/themes:/Hexo/themes \
-v {你的博客文件夹路径}/scaffolds:/Hexo/scaffolds \
-v {你的博客文件夹路径}/_config.yml:/Hexo/_config.yml \

iyannik0215/docker-hexo {你的 github username} {你的 github email} server

真实效果:

docker run --name hexo-deploy -d \

-v {你的用户文件夹路径}/.ssh:/root/.ssh \
-v {你的博客文件夹路径}/source:/Hexo/source \
-v {你的博客文件夹路径}/themes:/Hexo/themes \
-v {你的博客文件夹路径}/_config.yml:/Hexo/_config.yml \

iyannik0215/docker-hexo {你的 github username} {你的 github email} deploy

真实效果:

后续的使用

如果需要创建文章就手动创建到 source/_posts 目录下, 使用 docker start hexo-server, 就可以在 浏览器中实时预览了.

如果需要部署 blog, 就可以直接使用 docker start hexo-deploy, 容器会后台部署, 完毕后自动退出的.

15157 次点击
所在节点    Hexo
48 条回复
iyannik0215
2016-05-26 10:54:43 +08:00
@dphdjy 莫名没看懂...

@kenshinhu 还可以~, 体验一把? →_→#.

@loading 话说这个 Docker 完全没有做删除 repo 的操作,也没有 git clone 的操作呀...

@zvving 感觉好牛逼,, 有没有详细教程→_→#, 一直想玩 travis 的说.
4679kun
2016-05-26 11:14:21 +08:00
不如用 hugo 单文件
iyannik0215
2016-05-26 11:16:10 +08:00
@4679kun 很想用, 但是没有好看的主题...
zhenjiachen
2016-05-26 11:18:45 +08:00
docker 在国内慢的一逼。我一般是在我的 vps 上构建 docker
zrp1994
2016-05-26 11:19:17 +08:00
虽然使用 Docker 来创建本地 Hexo 工作环境有些创意,但是我觉着距离完美还是有不小的距离。
在经过实际 Pull 了楼主的镜像,外加自己也从 Dockerfile Build 了一下镜像,我在这里提几点小小的建议:

1. container 不适合做持久存储,所以可以直接挂载整个 Hexo 目录,而不是分别挂载包括 themes 、 source 这样的子目录。这样如果用户安装了其它插件, package.json 就能在本地保留,并且这些插件会生成其它文件的话(例如 hexo-generator-json-content 这个插件就会在网站根目录生成 content.json 文件),这些文件就不会被保存到 container 里,并且当 container 被删除时,你生成的这些文件不会消失,下次再使用 docker 来运行 blog 的时候, node_modules 也不用重新再安装一遍。另外当安装了一定数量的 node_modules 后, container 会变得很大;
2. 直接将整个.ssh 挂载到 container 中有些不妥,可以改成挂载单一的 key ;
3. 尝试合并 RUN 命令可以减小 Image 的大小,另外 hexo init 产生的 package.json 里面好像已经包含了"hexo-generator-archive", "hexo-generator-category", "hexo-generator-index", "hexo-generator-tag",在 Dockerfile 里面单独安装是多余的。不过考虑到 1 里面提到的问题,我觉着可以把所有的 npm 安装都从 image 里面拿掉,让用户自己在 package.json 里面修改,然后 docker run -it IMAGE_NAME npm install 安装依赖;
4. 与其从 Ubuntu 下面安装 node ,楼主可以试一下直接用 node:6.2.0-slim 作为 base image 来制作镜像,应该能减少不少 image 大小。
timothyye
2016-05-26 11:19:54 +08:00
@dphdjy 6666666
wsdjeg
2016-05-26 11:29:15 +08:00
为什么不用 travis-ci 自动部署?
iyannik0215
2016-05-26 11:52:21 +08:00
@zhenjiachen 我是直接交给了 hub docker.

@zrp1994
1. 的东西感觉还是分开挂载的好, 因为 nodejs 每个人之前用的版本不一样, 插件的版本也会变化吧. 如果这样的话 容器用的 6.x 的 nodejs 但是用户以前使用的是 4.x 或者 别的版本应该会导致 容器不能正常工作的, 我是这么认为的.

2, 3, 4 的意见都很好~, 有时间的话就去改改~~

感谢~~

@wsdjeg 想试试 但是没研究过 travis-ci
niko
2016-05-26 13:39:04 +08:00
@iyannik0215 有的。 hexo 的作者自己就有写过,看这里: https://zespia.tw/blog/2015/01/21/continuous-deployment-to-github-with-travis/
iyannik0215
2016-05-26 15:06:05 +08:00
@niko 谢了~, 一会有时间就去看看.~
4679kun
2016-05-26 17:07:41 +08:00
Smirnoff
2016-05-26 17:36:01 +08:00
不能下载 docker pull iyannik0215/docker-hexo
docker 还需要翻墙吗?
mianju
2016-05-26 19:17:34 +08:00
Mac 上装 docker 感觉好用么?表示怕出安装麻烦,一直都是用云服务器装 docker 用的
jamiesun
2016-05-26 19:20:35 +08:00
还是 github page 好使吧,
ghw
2016-05-26 19:55:15 +08:00
大神好厉害
iyannik0215
2016-05-26 19:55:43 +08:00
@Smirnoff 作為程序狗怎麼能不會翻牆…

@mianju 很方便,至少比裝 nodejs 安裝 hexo 簡單。

@jamiesun 看個人…
iyannik0215
2016-05-26 21:25:07 +08:00
@ghw 我是个渣渣...
Smirnoff
2016-05-26 23:21:40 +08:00
@iyannik0215 镜像已经搞定,但是 docker pull iyannik0215/docker-hexo 的文件
kitematic 运行的时候怎么找不到,使用 kitematic 需要在他那里下载镜像才可以吗
iyannik0215
2016-05-26 23:36:42 +08:00
@Smirnoff 用他的 cli 执行 docker pull iyannik0215/docker-hexo 就可以了, 话说应该不会找不到吧, 你重启一下 kitematic 看看.
z742364692
2016-05-26 23:40:14 +08:00
mark

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX