Docker配置Hexo+Git+Nginx

文章目录

[隐藏]

  • 功能需求
  • 解决方案
  • 实现思路
  • 主机环境
  • 前期准备
  • 构建Dockerfile
  • 构建镜像与容器
  • 测试镜像
  • 配置ssh
  • 本地测试ssh并互换秘钥
  • 本地配置ssh配置文件
  • 本地配置hexo

功能需求

像我这种Tototototo Young的码字儿的总喜欢追求逼格,原来用博客园onenote可以直接导入,后来就想迁移到自己云主机上

为了保证服务器环境的干净(强迫症晚期),将整套环境封装进docker中

如果想要8003直接绑定到域名上,见另一篇Docker配置Nginx反向代理

解决方案
  • Hexo+Github的构建博客资料网上有很多,不赘述,不使用这种方法

  • Hexo+Git+Nginx+云主机上构建服务器资料也不少,如果想要配置过程的邮件私聊我

  • Hexo+Git+Nginx+云主机+Docker,今天使用这种方法构建,镜像还没有push到Docker源,有需要的私聊~

实现思路

Hexo是基于Nodejs的一个框架,将markdown文件解析生成html静态文件

通过Git将本地的html文件拉取到云主机上,存入nginx站点目录供解析

Docker容器需要开放两个端口,80用于nginx解析,22端口给git推送博客页面,宿主机监听8003和8004端口

镜像以Centos为基础镜像,拉取NodeJS,使用yum安装Nginx,Git,OpenSSH
但由于需要配置ssh的公钥私钥,则在实例化镜像后再进入容器配置ssh

主机环境
  • 宿主机环境
    centos Linux release 7.3.1611 (Core)
    docker version 17.06.1-ce, build 874a737
    node v8.4.0
    npm 5.3.0

  • 容器环境
    centos Linux release 7.4.1708 (Core)
    nginx version: nginx/1.12.1
    git version 1.8.3.1

  • 容器目录
    git库: /root/blogs.git
    nginx: /etc/nginx/conf.d/default.conf
    blog文件: /usr/share/nginx/html
    ssh私钥: /root/.ssh/authorized_keys

前期准备
  • 宿主机已有nodejs环境并可运行,根目录在/usr/local/node

  • 宿主机安装docker

  • 电脑端安装git

构建Dockerfile

拉取Centos镜像

$ sudo docker pull centos  

编辑Dockerfile文件

FROM centos:latest # 基于centos  COPY . /usr/local/node # 将node环境复制  RUN           yum install -y wget &&  # 安装wget          mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup &&  # 备份yum源          wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo &&  # 更换yum源为阿里源          yum clean all &&  # yum缓存          yum makecache &&           rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm &&  # 获取nginx的yum源          yum install -y nginx &&  # 安装nginx          yum install -y git &&  # 安装git          yum install -y vim &&  # 安装vim          git init --bare ~/blogs.git &&  # 创建git库          echo "git --work-tree=/usr/share/nginx/html --git-dir=/root/blogs.git checkout -f" >~/blogs.git/hooks/post-receive &&  # 创建git勾子用于拉取hexo推送的信息          chmod a+x ~/blogs.git/hooks/post-receive &&  # 给勾子执行权限          yum install -y openssh openssh-server openssh-clients &&  # 安装ssh服务          ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key &&  # 生成服务端钥匙          ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key &&           ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key  EXPOSE 22 # 暴露22端口用于ssh连接,git拉取页面  EXPOSE 80 # 暴露80端口用于nginx服务  CMD ["nginx","-g","daemon off;"] # nginx服务命令,必须使用daemon守护进程  

Docker容器后台运行,就必须有一个前台进程,如果CMD仅执行nginx,那么nginx执行完后台启动后,会立即自杀,docker容器状态会变为exited

docker容器必须有一个常驻的前台进程,所以使用daemon,使p构建镜像与容器”>构建镜像与容器

构建镜像

$ docker build -t hexoblogs . // 构建新镜像,注意不要少了最后的点  Successfully built 70eaeb40d97b  Successfully tagged hughdong/hexoblogs:latest  

实例化容器并映射到宿主机端口,后台运行容器

$ sudo docker run --name dhblogs -p 8003:80 -p 8004:22 -d hexoblogs:latest  

查看容器情况,当看到Status是UP且能看到Ports端口情况时为正常

$ sudo docker ps -a  CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                        NAMES  c58e2a73f117        hexoblogs:latest         "nginx -g 'daemon ..."   12 minutes ago      Up 12 minutes       0.0.0.0:8004->22/tcp, 0.0.0.0:8003->80/tcp   dhblogs  
测试镜像

浏览器输入http://...:8003/是否显示nginx测试页

配置ssh

获取本地ssh公钥,电脑端打开git bash

$ ssh-keygen  

一路回车下去,然后打开C:UsersUsername.sshid_rsa.pub,复制内容,username是自己的电脑账户名

从宿主机进入Docker容器

$ sudo docker exec -it dhblogs /bin/bash  

进入容器后执行以下步骤

# echo "*******************************" > ~/.ssh/authorized_keys // 复制的公钥,替换掉命令的******  # chmod 600 ~/.ssh/authorized_keys // 赋予权限  # chmod 700 ~/.ssh  # /usr/sbin/sshd // 启动ssh服务  
本地测试ssh并互换秘钥

本地git bash执行

$ ssh root@***.***.***.*** -p 8004 // 前面是宿主机ip后面是端口  

首次执行ssh时需要输入yes连接,之后hexo才能正常推送

如果报错ERROR

ERROR // 如果多次更换docker,同配置ssh连接时需要删除客户机的known_hosts      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      @    WARNING: REMOTE HOST IDENTIFICATION HASCHANGED!     @      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  

C:Usershughd.sshknown_hosts 删除该主机对应的旧信息即可

本地配置ssh配置文件

打开C:Usershughd.ssh,如果没有config文件则创建新的

Host是云主机ip地址,Port是容器映射到宿主机的端口8004

Host ***.***.***.***  Port ***  
本地配置hexo

nodejs和npm安装过程略

$ npm install -g hexo-cli  $ npm install hexo-deployer-git --save  $ npm install hexo-server  $ hexo init f:/6.Code/GitBlogs // 初始化hexo  $ npm install  

配置本地hexo的_config.yml

# Site  title: Hugh  subtitle: Mad web developers  description:  author: HughDong  language: zh-CN  timezone: Asia/Shanghai  # Deployment  deploy:    type: git    repo: root@***.***.***.***:/root/blogs.git    branch: master  

生成并推送博客,看到回显服务器端files文件更新则成功

$ hexo clean && hexo g -d  [master 29390bd] Site updated: 2017-10-13 11:03:15 9 files changed, 23 insertions(+), 23 deletions(-)  Branch master set up to track remote branch master from root@***.***.***.***:/root/blogs.git.  To ***.***.***.***:/root/blogs.git   aa45a3e..29390bd  HEAD -> master  INFO  Deploy done: git  

原文出处:webmad -> http://blog.webmad.net/2017/10/14/Docker%E9%85%8D%E7%BD%AEHexo+Git+Nginx/

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。