手把手教你用 Docker 搭建 Hexo 博客

2018-05-25 23:20:51 +08:00
 codelover2016

手把手教你用 Docker 搭建 Hexo 博客

hexo

npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server

以上来自Hexo 官网

到这里,你的 hexo 博客已经初始化好了, blog/public 文件夹下面已经生成了对应的 HTML 文件.

扩展阅读:

docker 部署

不 BB 这么多,先上 Dockerfile

# node 环境镜像
FROM node:latest AS build-env
# 创建 hexo-blog 文件夹且设置成工作文件夹
RUN mkdir -p /usr/src/hexo-blog
WORKDIR /usr/src/hexo-blog
# 复制当前文件夹下面的所有文件到 hexo-blog 中
COPY . .
# 安装 hexo-cli
RUN npm --registry=https://registry.npm.taobao.org install hexo-cli -g && npm install
# 生成静态文件
RUN hexo clean && hexo g

# 配置 nginx
FROM nginx:latest
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /usr/share/nginx/html
# 把上一部生成的 HTML 文件复制到 Nginx 中
COPY --from=build-env /usr/src/hexo-blog/public /usr/share/nginx/html
EXPOSE 80

接着跑一下看看.

docker build -t 镜像名:latest .;
docker run -p 80:80 -d 镜像名:latest;

好了,完事....

Nginx https 证书配置

最后 Nginx 配置 https 证书的步骤.

首先,你要有个证书,哪来的我不管了.

PS:良心推荐https://freessl.org/直接生成免费证书

然后 nginx.conf 如下:


events {
    worker_connections 1024;
}

http {
    server {
            listen 443;
            server_name  codelover.link;
            root /usr/share/nginx/html;
            index index.html index.htm;
            ssl on;
            ssl_certificate /etc/nginx/full_chain.pem;
            ssl_certificate_key /etc/nginx/private.key;


            include       /etc/nginx/mime.types;
            default_type  application/octet-stream;
            gzip on;
            gzip_min_length 5k;
            gzip_buffers 4 16k;
            gzip_http_version 1.1;
            gzip_comp_level 3;
            gzip_types text/plain application/json application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
            gzip_vary on;
    }
    server {
        listen 80;
        server_name  codelover.link;
        root /usr/share/nginx/html;
        index index.html index.htm;
        include  /etc/nginx/mime.types;
        default_type  application/octet-stream;
    }

}

这时候用 docker 跑你的 hexo-blog 镜像的时候把对应的 pem 和 key 文件映射到对应路径记录.

如下:

# codelover-blog 为配置文件路径,codelover-blog/ssl 为证书路径
docker run -p 80:80 -p 443:443 \
--name codelover-blog \
-v ~/docker-data/codelover-blog/nginx.conf:/etc/nginx/nginx.conf \
-v ~/docker-data/codelover-blog/ssl/full_chain.pem:/etc/nginx/full_chain.pem \
-v ~/docker-data/codelover-blog/ssl/private.key:/etc/nginx/private.key \
--restart=always -d 你的 hexo-blog 博客镜像;

顺手也把非静态文件的 nginx 配置放一份,如下:

events {
    worker_connections 1024;
}

http {
    upstream webservers {
        #weigth 参数表示权值,权值越高被分配到的几率越大
        #本机上的 Squid 开启 3128 端口
        server 10.31.160.197:8080 weight=5;
        server 192.168.0.1:9090  weight=3;
    }


    server {
            listen 443;
            server_name  woyaozufang.live;
            location / {
                proxy_pass   http://webservers;
            }
            ssl on;
            ssl_certificate /etc/nginx/full_chain.pem;
            ssl_certificate_key /etc/nginx/private.key;
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   html;
            }
            gzip on;
            gzip_min_length 5k;
            gzip_buffers 4 16k;
            gzip_http_version 1.1;
            gzip_comp_level 3;
            gzip_types text/plain application/json application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
            gzip_vary on;
    }


    server {
        listen 8080;
        server_name  woyaozufang.live;
        location / {
            proxy_pass   http://webservers;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        listen 80;
        server_name  woyaozufang.live;
        location / {
            proxy_pass   http://webservers;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

6352 次点击
所在节点    分享发现
39 条回复
naiba
2018-05-26 01:27:50 +08:00
把 v2 当博客用了😓去简书吧
Luckyray
2018-05-26 01:29:52 +08:00
我想问下多个机器上的 hexo 一般是怎么同步的?
nieyujiang
2018-05-26 05:36:07 +08:00
Hexo 还用 docker?装个 nginx 不就好了,本地同步上去
Mogugugugu
2018-05-26 08:41:46 +08:00
三楼正解。
Martox
2018-05-26 08:45:51 +08:00
强行用 docker。我一个静态网站博客凭什么要用上 docker。想开启 https 的话,就 10 分钟,还是全站 https。看下我的水文。[10 分钟开启全站 https]( https://juejin.im/entry/5b07c51d6fb9a07 ) aa63232e2
Martox
2018-05-26 08:47:07 +08:00
@Martox 手机插入的 markdown 链接,错了。https://juejin.im/entry/5b07c51d6fb9a07aa63232e2
Backlitz
2018-05-26 09:05:51 +08:00
用 hexo 一般都是为了省服务器钱吧,不托管还有什么意义……
loading
2018-05-26 09:19:57 +08:00
既然都写到这地步了,建议写一下 windows 装 Docker 算了,233.
Showfom
2018-05-26 12:09:07 +08:00
这个 docker 不是多此一举的感觉么。。。。apt install nginx 就可以解决的
liyuhang
2018-05-26 12:37:47 +08:00
V2EX 不是个人博客哦
codelover2016
2018-05-26 12:49:43 +08:00
@naiba 分享创造,您觉得不好的话请直接举报或者联系管理员删除....
codelover2016
2018-05-26 12:53:32 +08:00
@nieyujiang 真的看了我的 Dockerfile 了?我明明是直接用 Hexo 生成了静态文件,然后扔到了 nginx 的 docker 镜像里面,接着打包成了独立的博客镜像,在服务器上只需要自己直接把 docker 跑起来即可,甚至可以把 nginx 的配置都直接扔上去,到服务器上直接跑 docker 即可.一键部署什么都不需要还不美滋滋?
codelover2016
2018-05-26 12:55:42 +08:00
@nieyujiang 你觉得强行就强行咯,我觉得方便就方便.本地 push 到服务器么?嗯,我现在本地 push md 到 git 仓库,阿里云帮我打包镜像,jenkins 帮我自动发布.嗯,闲着蛋疼的...
codelover2016
2018-05-26 12:56:56 +08:00
@liyuhang 我发在分享发现栏目,还好吧....
codelover2016
2018-05-26 12:57:54 +08:00
@Showfom 就是不想在服务器上装啊,用 docker 都是这种原因,各种环境隔离....
Showfom
2018-05-26 12:59:07 +08:00
@codelover2016 你个静态博客有啥好隔离的。。。
codelover2016
2018-05-26 13:00:58 +08:00
@Showfom 服务器不知只有一个博客,还有别的东西嘛,大家都在 docker 里面跑,怎么玩都可以,大概是这个意思.
Love4Taylor
2018-05-26 13:10:19 +08:00
真的累.... 直接 git push 然后由 GitLab CI 处理 rsync 到服务器或者到 GitLab Pages 多方便啊...
codelover2016
2018-05-26 13:16:23 +08:00
@Love4Taylor Gitlab CI 能自动生成静态文件么(我没用过不知道啊,也没人分享给我)?没人发现其实我这里不需要本地有 hexo?我换个地方换台机器也只需要把 md 扔上去就可以了
Love4Taylor
2018-05-26 13:29:54 +08:00
@codelover2016 #19 当然可以, 你可以设置为只要有 push 就自动触发. 你 push 一个 md 就自动发布喽

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

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

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

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

© 2021 V2EX