V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iyannik0215
V2EX  ›  Hexo

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

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

    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-26 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   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:50 · PVG 03:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.