接近于完美版的 docker-hexo 实现~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iyannik0215
V2EX    Hexo

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

  •  
  •   iyannik0215 2016-05-26 08:55:49 +08:00 15807 次点击
    这是一个创建于 3426 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 一下三样东西, 就可以实现 各种平台的无缝迁移~~.

    • source 目录: Hexo 的文章目录, 重中之重,
    • themes 目录: Hexo 的主题目录, 比较重要,
    • _config.yml: hexo 的站点配置文件, 比较重要.

    使用方法

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

    docker pull iyannik0215/docker-hexo 

    使用 run 命令创建容器

    • 体验预览, 一行命令创建 hexo 初始版本
    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 [email protected] 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 

    真实效果:

    • 部署模式, 后台自动部署 github
    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, 容器会后台部署, 完毕后自动退出的.

    第 1 条附言    2016-05-27 11:10:43 +08:00
    之前在 Mac 下一直有个问题就是, 在启动 hexo-server 后无法对文章进行实时预览.

    查了好多资料才知道, 在 Mac 或者 Win 下数据卷挂载很鸡肋, 必须使用 NFS 文件系统之类的帮助才可以..

    但是 beta.docker.com 出现后, 完美的解决了我现在的困扰.. 2333333
    第 2 条附言    2016-05-31 01:05:18 +08:00

    昨天应V友需求又加入了基于 alpine 镜像的版本, 镜像与基于 ubuntu 的比较 整整少了 235M, →_→#.

    Ubuntu 版本 335M 左右. Docker Tag: latest, 3.2-ubuntu

    Alpine 版本 100M 左右. Docker Tag: 3.2-alpine

    48 条回复    2016-08-29 14:55:27 +08:00
    Maic
        1
    Maic  
       2016-05-26 09:03:17 +08:00
    不懂 docker ,只能给个 666
    timothyye
        2
    timothyye  
       2016-05-26 09:05:18 +08:00 via Android
    那个带 GUI 界面的是个啥工具?
    DearMark
        3
    DearMark  
       2016-05-26 09:08:18 +08:00   1
    换了电脑后想要继续写博客, 就必须去装 docker-hexo, 但是毕竟不是玩 docker 的人, 每次装都会出点错误什么的, 最牛逼的一次是直接 rm -rf /usr/local/bin 里的所有东西删没了, 于是就想到了 nodejs + git 去完成 hexo 的 server 预览 和 deploy 部署 github 的任务.

    (哈哈哈)
    dphdjy
        4
    dphdjy  
       2016-05-26 09:11:07 +08:00 via Android
    其实。。。可以找个支持自动构建的 docker 服务, push 后自动构建发布~连 docker 都省了~
    adeweb
        5
    adeweb  
       2016-05-26 09:11:51 +08:00   1
    @timothyye kitematic , docker 的一个图形化管理工具。
    niko
        6
    niko  
       2016-05-26 09:12:21 +08:00
    感觉还是挺折腾的。现在用 travis-ci ,可以只专注 写文章,无需关注部署问题了。
    iyannik0215
        7
    iyannik0215  
    OP
       2016-05-26 09:23:51 +08:00
    @dphdjy 好像见过有人在 hub.docker 上这么玩, 但是写文章好像需要进入 docker 里, 这点我就不爽了.. 人家靠 hub.docker pull 了 1000+次了....


    @niko 有教程么→_→#, 我也去看看..

    @Maic 想玩的时候可以来一发.

    @DearMark 发现写错好多东西→_→#,
    loading
        8
    loading  
       2016-05-26 09:36:24 +08:00 via Android
    上次没询问就清空了我的 repo ,这次呢?
    isb
        9
    isb  
       2016-05-26 09:36:58 +08:00
    楼主用的什么发行版?主题感觉好赞。。
    timothyye
        10
    timothyye  
       2016-05-26 09:38:09 +08:00 via Android
    @niko 用持续集成工具来生成静态 blog ?真是脑洞大开……
    mudkip
        11
    mudkip  
       2016-05-6 09:41:10 +08:00
    @dphdjy
    我最近写了一个自动 push 到 github 的 github webhook (我是用同一个仓库的两个分支作为 hexo 源文件和 github pages ),用 docker 跑在自己 vps 上。
    https://github.com/mudkipme/mudkipme.github.io/blob/hexo/server.js
    https://github.com/mudkipme/mudkipme.github.io/blob/hexo/Dockerfile
    iyannik0215
        12
    iyannik0215  
    OP
       2016-05-26 09:43:32 +08:00 via Android
    @loading 啊?完全懂你的什……,我清空什了……
    @isb mac ……
    @timothyye 是呀,方便程度的算可以……
    janrone
        13
    janrone  
       2016-05-26 09:48:01 +08:00
    zvving
        14
    zvving  
       2016-05-26 09:56:50 +08:00
    @timothyye

    @niko 说得对呀, 我们一直都是这么用的.

    参见这里: https://travis-ci.org/51offer/51offer.github.com https://github.com/51offer/51offer.github.com/blob/blog/.travis.yml

    webhook docker 都省了……
    loading
        15
    loading  
       2016-05-26 10:00:30 +08:00 via Android
    @iyannik0215 上次我用了一下一个类似的。

    默认会删除 usernane.GitHub.io
    iyannik0215
        16
    iyannik0215  
    OP
       2016-05-26 10:07:38 +08:00 via Android
    @loading 我的清除所有的 commit 提交,竟你原的.gitdeploy 那目不存在了,但是不除 repo
    loading
        17
    loading  
       2016-05-26 10:22:05 +08:00 via Android
    @iyannik0215 这是不是应该在说明里讲一下?
    loading
        18
    loading  
       2016-05-26 10:23:47 +08:00 via Android
    @iyannik0215 应该先判断,再 clone ,再…
    dphdjy
        19
    dphdjy  
       2016-05-26 10:28:51 +08:00 via Android   1
    @iyannik0215
    @timothyye
    @mudkip
    用 travis-ci 这类持续集成写其实很不错哒~
    但是因为环境需求高,不如自己写个 dockerfile ,然后一般 docker 都有持续集成和自动构建



    只要 push 文章,服务商会自己构建镜像,然后最后一条命令传到 GitHub 的 page 分支就好了~
    kenshinhu
        20
    kenshinhu  
       2016-05-26 10:34:41 +08:00
    docker 好像蛮好玩似的
    iyannik0215
        21
    iyannik0215  
    OP
       2016-05-26 10:54:43 +08:00
    @dphdjy 莫名没看懂...

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

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

    @zvving 感觉好牛逼,, 有没有详细教程→_→#, 一直想玩 travis 的说.
    4679kun
        22
    4679kun  
       2016-05-26 11:14:21 +08:00 via Android
    不如用 hugo 单文件
    iyannik0215
        23
    iyannik0215  
    OP
       2016-05-26 11:16:10 +08:00
    @4679kun 很想用, 但是没有好看的主题...
    zhenjiachen
        24
    zhenjiachen  
       2016-05-26 11:18:45 +08:00
    docker 在国内慢的一逼。我一般是在我的 vps 上构建 docker
    zrp1994
        25
    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
        26
    timothyye  
       2016-05-26 11:19:54 +08:00
    @dphdjy 6666666
    7jmS8834H50s975y
        27
    7jmS8834H50s975y  
       2016-05-26 11:29:15 +08:00 via Android
    为什么不用 travis-ci 自动部署?
    iyannik0215
        28
    iyannik0215  
    OP
       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
        29
    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
        30
    iyannik0215  
    OP
       2016-05-26 15:06:05 +08:00
    @niko 谢了~, 一会有时间就去看看.~
    4679kun
        31
    4679kun  
       2016-05-26 17:07:41 +08:00 via Android
    Smirnoff
        32
    Smirnoff  
       2016-05-26 17:36:01 +08:00
    不能下载 docker pull iyannik0215/docker-hexo
    docker 还需要翻墙吗?
    mianju
        33
    mianju  
       2016-05-26 19:17:34 +08:00
    Mac 上装 docker 感觉好用么?表示怕出安装麻烦,一直都是用云服务器装 docker 用的
    jamiesun
        34
    jamiesun  
       2016-05-26 19:20:35 +08:00
    还是 github page 好使吧,
    ghw
        35
    ghw  
       2016-05-26 19:55:15 +08:00
    大神好厉害
    iyannik0215
        36
    iyannik0215  
    OP
       2016-05-26 19:55:43 +08:00 via Android
    @Smirnoff 作程序狗怎能不翻…

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

    @jamiesun 看人…
    iyannik0215
        37
    iyannik0215  
    OP
       2016-05-26 21:25:07 +08:00
    @ghw 我是个渣渣...
    Smirnoff
        38
    Smirnoff  
       2016-05-26 23:21:40 +08:00
    @iyannik0215 镜像已经搞定,但是 docker pull iyannik0215/docker-hexo 的文件
    kitematic 运行的时候怎么找不到,使用 kitematic 需要在他那里下载镜像才可以吗
    iyannik0215
        39
    iyannik0215  
    OP
       2016-05-26 23:36:42 +08:00
    @Smirnoff 用他的 cli 执行 docker pull iyannik0215/docker-hexo 就可以了, 话说应该不会找不到吧, 你重启一下 kitematic 看看.
    z742364692
        40
    z742364692  
       2016-05-26 23:40:14 +08:00 via Android
    mark
    hellodigua
        41
    hellodigua  
       2016-05-27 01:10:47 +08:00
    好棒~mark
    iyannik0215
        42
    iyannik0215  
    OP
       2016-05-27 01:12:46 +08:00
    @z742364692 @hellodigua 哈哈, 果然还是有人认为还不错的..
    ywm8812
        43
    ywm8812  
       2016-05-27 12:11:22 +08:00
    hugo+1
    Smirnoff
        44
    Smirnoff  
       2016-05-27 16:41:58 +08:00
    @iyannik0215 你是 root 运行的吗?我的 kitematic 还是找不到镜像
    iyannik0215
        45
    iyannik0215  
    OP
       2016-05-27 18:13:15 +08:00
    @Smirnoff 安装的时候要权限, 我一般不用 root, 没有的话就重启一下 kit, 我有时候会这样.
    ghw
        46
    ghw  
       2016-05-28 23:57:40 +08:00
    @Smirnoff 没看到你的错误信息,不过 docker 貌似也是半墙的,爬墙试试?
    xhowhy
        47
    xhowhy  
       2016-07-11 20:00:06 +08:00
    赞 alpine-node
    a308057848
        48
    a308057848  
       2016-08-29 14:55:27 +08:00
    看到这么多 -v 不太爽,直接一个目录就可以了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3767 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 00:52 PVG 08:52 LAX 17:52 JFK 20:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86