使用Docker搭建Nginx环境挂载Hexo博客
介绍
原先我的博客是挂载在github pages上面的,但是因为github pages的服务器在国外,国内访问速度就会有点感人,于是就想把我的博客挂载在自己阿里云的服务器上面。
环境
- 一台有独立ip的服务器(centos 7)
- 在本地搭建好了hexo框架
实现
因为我的博客是hexo写的,众所周知这是一个快速生成静态博客的框架,既然是静态网页,web服务器方面当然是选择nginx了,为什么选择nginx不选择apache呢,因为nginx轻量级,同样起web服务,比apache 占用更少的内存及资源、抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能、高度模块化的设计,编写模块相对简单、社区活跃。等等的优点。
既然选择了nginx,那选择如何搭建了,普通安装或者编译nginx,多多少少会有各种残留,这对一个系统洁癖的人来说,却是非常痛苦的,所以我选择了使用docker安装nginx。
安装docker
1 | ➜ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
然后进入阿里云docker库首页https://dev.aliyun.com/
登入
然后进入管理中心
点击加速器,复制链接
1 | sudo mkdir -p /etc/docker |
安装docker-compose
下载shell脚本
1 | ➜ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
修改权限
1 | ➜ sudo chmod +x /usr/local/bin/docker-compose |
将当前用户加入root组
1 | sudo su |
测试
1 | ➜ docker-compose --version |
通过docker-compose管理生成容器
1 | ➜ cd /home/ |
注意删除上边的汉字注释及前部的空格,有些服务器默认不对中文支持
创建挂载目录
在/home/blog/下创建/www、/log、/conf三个目录
1 | ➜ mkdir {www,log,conf} |
添加以下内容
1 | server { |
获取nginx镜像
拉取镜像:
docker search nginx
pull第一个nginx官方的镜像
1 | docker pull nginx |
查看获取到的镜像
1 | ➜ docker image ls |
可以看到镜像已经pull下来了
上传静态文件
在本地hexo的博客目录下
运行hexo g
生成静态文件
他会在该目录下生成一个public的一个文件,里面是关于你博客的所有静态文件,然后这个文件scp到服务器的/home/blog/www/下
1 | ➜ scp /home/kevin/blog/public root@119.23.241.xxxx:/home/blog/www |
然后进入服务器端
1 | ➜ cd /home/blog |
然后在浏览器输入你服务器的ip
发现博客已经挂在成功了,
因为我的服务器是阿里云的,所以还有加一步,去阿里的控制台配置防火墙入口规则,添加80端口和443端口。
解决 error creating overlay mount to /var/lib/docker/overlay2
重新开启服务器运行docker-compose up -d
指令时可能出现下面的错误:
1 | /usr/bin/docker-current: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/65f3c109fb903539820f84856d2725af784f2f03f95b1f0214e34184e4d61ff7-init/merged: invalid argument. |
一个可行的方案如下(改变storage driver类型, 禁用selinux):
- 停止docker服务
1 | systemctl stop docker |
- 清理镜像
1 | rm -rf /var/lib/docker |
- 修改存储类型
1 | vi /etc/sysconfig/docker-storage |
把空的DOCKER_STORAGE_OPTIONS参数改为overlay:
1 | DOCKER_STORAGE_OPTIONS="--storage-driver overlay" |
- 禁用selinux
1 | vi /etc/sysconfig/docker |
去掉option的--selinux-enabled
- 重新启动docker
1 | systemctl start docker |
应该就能解决问题了
方案抄自 Ysssssssssssssss的博客 和 redis的讨论: error creating overlay mount to …/merged: invalid argument., 基本可以确定是启用selinux导致的。
解决-bash: docker-compose: command not found
利用pip(python)方式进行安装
虽然很简单,还是有URL确认,x权限设定等需要做,如果使用pip进行安装虽然看似绕远,实质上也是绕远,安装来一看吧。CentOS上需要先行安装yum的一个额外的包,这个包里面才有python-pip,缺省的没有。
1 | yum -y install epel-release |