iyannik0215
V2EX  ›  Hexo

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

  •  
  •   iyannik0215 · May 26, 2016 · 16288 views
    This topic created in 3665 days ago, the information mentioned may be changed or developed.

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

    Supplement 1  ·  May 27, 2016
    之前在 Mac 下一直有个问题就是, 在启动 hexo-server 后无法对文章进行实时预览.

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

    但是 beta.docker.com 出现后, 完美的解决了我现在的困扰.. 2333333
    Supplement 2  ·  May 31, 2016

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

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

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

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

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


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

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

    @DearMark 发现写错好多东西→_→#,
    loading
        8
    loading  
       May 26, 2016 via Android
    上次没询问就清空了我的 repo ,这次呢?
    isb
        9
    isb  
       May 26, 2016
    楼主用的什么发行版?主题感觉好赞。。
    timothyye
        10
    timothyye  
       May 26, 2016 via Android
    @niko 用持续集成工具来生成静态 blog ?真是脑洞大开……
    mudkip
        11
    mudkip  
       May 26, 2016
    @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
       May 26, 2016 via Android
    @loading 啊?完全沒聽懂你說的什麼……,我清空什麼了……
    @isb mac ……
    @timothyye 是呀,方便程度的話還算可以……
    janrone
        13
    janrone  
       May 26, 2016
    zvving
        14
    zvving  
       May 26, 2016
    @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  
       May 26, 2016 via Android
    @iyannik0215 上次我用了一下一个类似的。

    默认会删除 usernane.GitHub.io
    iyannik0215
        16
    iyannik0215  
    OP
       May 26, 2016 via Android
    @loading 我寫的這個應該會清除所有的 commit 提交,畢竟你原來的.gitdeploy 那個目錄不存在了,但是不會刪除 repo
    loading
        17
    loading  
       May 26, 2016 via Android
    @iyannik0215 这是不是应该在说明里讲一下?
    loading
        18
    loading  
       May 26, 2016 via Android
    @iyannik0215 应该先判断,再 clone ,再…
    dphdjy
        19
    dphdjy  
       May 26, 2016 via Android   ❤️ 1
    @iyannik0215
    @timothyye
    @mudkip
    用 travis-ci 这类持续集成写其实很不错哒~
    但是因为环境需求高,不如自己写个 dockerfile ,然后一般 docker 都有持续集成和自动构建



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

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

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

    @zvving 感觉好牛逼,, 有没有详细教程→_→#, 一直想玩 travis 的说.
    4679kun
        22
    4679kun  
       May 26, 2016 via Android
    不如用 hugo 单文件
    iyannik0215
        23
    iyannik0215  
    OP
       May 26, 2016
    @4679kun 很想用, 但是没有好看的主题...
    zhenjiachen
        24
    zhenjiachen  
       May 26, 2016
    docker 在国内慢的一逼。我一般是在我的 vps 上构建 docker
    zrp1994
        25
    zrp1994  
       May 26, 2016
    虽然使用 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  
       May 26, 2016
    @dphdjy 6666666
    7jmS8834H50s975y
        27
    7jmS8834H50s975y  
       May 26, 2016 via Android
    为什么不用 travis-ci 自动部署?
    iyannik0215
        28
    iyannik0215  
    OP
       May 26, 2016
    @zhenjiachen 我是直接交给了 hub docker.

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

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

    感谢~~

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

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

    @jamiesun 看個人…
    iyannik0215
        37
    iyannik0215  
    OP
       May 26, 2016
    @ghw 我是个渣渣...
    Smirnoff
        38
    Smirnoff  
       May 26, 2016
    @iyannik0215 镜像已经搞定,但是 docker pull iyannik0215/docker-hexo 的文件
    kitematic 运行的时候怎么找不到,使用 kitematic 需要在他那里下载镜像才可以吗
    iyannik0215
        39
    iyannik0215  
    OP
       May 26, 2016
    @Smirnoff 用他的 cli 执行 docker pull iyannik0215/docker-hexo 就可以了, 话说应该不会找不到吧, 你重启一下 kitematic 看看.
    z742364692
        40
    z742364692  
       May 26, 2016 via Android
    mark
    hellodigua
        41
    hellodigua  
       May 27, 2016
    好棒~mark
    iyannik0215
        42
    iyannik0215  
    OP
       May 27, 2016
    @z742364692 @hellodigua 哈哈, 果然还是有人认为还不错的..
    ywm8812
        43
    ywm8812  
       May 27, 2016
    hugo+1
    Smirnoff
        44
    Smirnoff  
       May 27, 2016
    @iyannik0215 你是 root 运行的吗?我的 kitematic 还是找不到镜像
    iyannik0215
        45
    iyannik0215  
    OP
       May 27, 2016
    @Smirnoff 安装的时候要权限, 我一般不用 root, 没有的话就重启一下 kit, 我有时候会这样.
    ghw
        46
    ghw  
       May 28, 2016
    @Smirnoff 没看到你的错误信息,不过 docker 貌似也是半墙的,爬墙试试?
    xhowhy
        47
    xhowhy  
       Jul 11, 2016
    赞 alpine-node
    a308057848
        48
    a308057848  
       Aug 29, 2016
    看到这么多 -v 不太爽,直接一个目录就可以了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1388 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 23:57 · PVG 07:57 · LAX 16:57 · JFK 19:57
    ♥ Do have faith in what you're doing.