Home Docker 使用Docker和docker-compose容器化部署Hexo博客 By FreelyTomorrow Feb 25, 2023 3 min read 使用Docker和docker-compose容器化部署Hexo博客 使用Dockerfile和docker-compose容器化部署Hexo博客 最近闲来无事,鼓捣了一下Hexo博客;Wordpress虽好,但好看的主题没几个,而且Wordpress的文章以SQL的形式存储在数据库里,想要迁移也挺困难;船小好掉头,趁着文章还不太多的时候把博客迁移到Hexo来。 Hexo最大的优点就是文章和页面都是.md格式的文件,即使不做博客了也可以拿来当笔记正常用 通过Dockerfile构建Hexo镜像 FROM node:latest MAINTAINER CHUNYIWANG WORKDIR /hexo RUN npm install hexo-cli -g \ && hexo init . \ && npm install hexo-word-counter \ && hexo clean \ && hexo generate VOLUME ["/hexo"] EXPOSE 4000 CMD ["server"] ENTRYPOINT ["hexo"] 这里安装了hexo-word-counter模块是因为目前使用的主题有需求,这个模块并非必须。 建议在做Dockerfile时先看好自己准备用的主题有哪些模块要求,通过dockerfile来直接安装好;否则要安装模块还需要exec到容器内执行npm命令,比较麻烦。 另外安装模块必须在初始化hexo后执行,一开始不知道这个点反复搞了半天。 创建docker-compose文件 version: "3" services: hexo: image: chunyiwang/hexo:latest volumes: - blogfiles:/hexo restart: always networks: mynet2: ipv4_address: 172.20.0.10 volumes: blogfiles: networks: mynet2: ipam: config: - subnet: 172.20.0.0/24 通过docker-compose管理容器 创建容器 docker-compose -f docker-compose.yml up -d 重启容器 docker-compose -f docker-compose.yml restart 停止容器 docker-compose -f docker-compose.yml stop 配置Nginx请求转发 目前博客只是运行在了容器内的内网IP上,无法提供外部访问;虽然nodejs本身可以充当web服务器提供网络服务,但是如果要配置ssl安全链接就比较麻烦了,因此,我们直接把nginx跑在80和443端口上,将接收到的请求转发给Hexo的4000端口上。 除此之外,使用Nginx做代理的另一个优点是允许我们在一台主机上运行多个Web服务,如果使用端口映射的话一台主机只有一个80和443端口,因此一旦被某个容器占用,这台主机就没办法再提供面向公众的Web服务了。 Nginx配置如下: server { listen 80; listen [::]:80; listen 443 ssl; server_name blog.freelytomorrow.com freelytomorrow.com; ssl_certificate /etc/nginx/certification/chain.crt; ssl_certificate_key /etc/nginx/certification/SSL.key; location / { proxy_pass http://172.120.10.1:4000; include proxy_params.conf; } if ($server_port = 80) { rewrite ^(/.*)$ https://$host$1 permanent; } } 由此一来,当用户访问博客时,nginx会作为反向代理服务器将请求转发给4000端口的nodejs。 Read Next By FreelyTomorrow Aug 16, 2024 使用Terraform在Ubuntu中部署KVM虚拟机 使用Terraform部署KVM虚拟机的详细流程 运维技术 Terraform KVM By FreelyTomorrow Jun 11, 2024 MySQL/Redis相关面试题 数据库运维(MySQL和Redis)的面试题总结 运维技术 MySQL Redis By FreelyTomorrow May 9, 2024 事件源模式和传统数据库方法在数据管理上的优劣分析 对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践 云原生 By FreelyTomorrow Apr 24, 2024 关于Metrics_server在自托管环境下无法使用的问题 修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。 Kubernetes
By FreelyTomorrow Aug 16, 2024 使用Terraform在Ubuntu中部署KVM虚拟机 使用Terraform部署KVM虚拟机的详细流程 运维技术 Terraform KVM
By FreelyTomorrow May 9, 2024 事件源模式和传统数据库方法在数据管理上的优劣分析 对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践 云原生
By FreelyTomorrow Apr 24, 2024 关于Metrics_server在自托管环境下无法使用的问题 修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。 Kubernetes
最近闲来无事,鼓捣了一下Hexo博客;Wordpress虽好,但好看的主题没几个,而且Wordpress的文章以SQL的形式存储在数据库里,想要迁移也挺困难;船小好掉头,趁着文章还不太多的时候把博客迁移到Hexo来。
Hexo最大的优点就是文章和页面都是.md格式的文件,即使不做博客了也可以拿来当笔记正常用
通过Dockerfile构建Hexo镜像
这里安装了hexo-word-counter模块是因为目前使用的主题有需求,这个模块并非必须。
建议在做Dockerfile时先看好自己准备用的主题有哪些模块要求,通过dockerfile来直接安装好;否则要安装模块还需要exec到容器内执行npm命令,比较麻烦。
另外安装模块必须在初始化hexo后执行,一开始不知道这个点反复搞了半天。
创建docker-compose文件
通过docker-compose管理容器
创建容器
重启容器
停止容器
配置Nginx请求转发
目前博客只是运行在了容器内的内网IP上,无法提供外部访问;虽然nodejs本身可以充当web服务器提供网络服务,但是如果要配置ssl安全链接就比较麻烦了,因此,我们直接把nginx跑在80和443端口上,将接收到的请求转发给Hexo的4000端口上。
除此之外,使用Nginx做代理的另一个优点是允许我们在一台主机上运行多个Web服务,如果使用端口映射的话一台主机只有一个80和443端口,因此一旦被某个容器占用,这台主机就没办法再提供面向公众的Web服务了。
Nginx配置如下:
由此一来,当用户访问博客时,nginx会作为反向代理服务器将请求转发给4000端口的nodejs。
Read Next
使用Terraform在Ubuntu中部署KVM虚拟机
使用Terraform部署KVM虚拟机的详细流程
MySQL/Redis相关面试题
数据库运维(MySQL和Redis)的面试题总结
事件源模式和传统数据库方法在数据管理上的优劣分析
对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践
关于Metrics_server在自托管环境下无法使用的问题
修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。