前言
最近新购入了一台在香港的服务器,并且利用godaddy购入了域名,所以决定搭建一个Blog.
目前,主流的搭建博客的方式主要有:
-
Hexo
-
Wordpress
不过本次我不打算采取上述的方式来搭建Blog。孙正华老哥之前写的iBlog是我非常喜欢的Blog风格样式(http://skysun.name),界面优雅美观,阅读流畅,带目录,支持响应式。所以我本次决定采用iBlog作为Blog的基础,后面再完善。
iBlog需要 nodejs , redis , mongoDB的环境,对于我这种重度的Docker依赖者,自然需要利用Docker搭建一个这样的环境。
iBlog的Docker环境搭建
在这里,我们需要利用docker-compose来帮助我们完成多个container的链接,所以需要写一份 docker-compose.yml 作为构建的基础。
搭建NodeJS环境
直接使用官方的node镜像,并制定版本到8.9.0。
由于在Quick Start中指出,项目的前端依赖由bower提供,所以我们需要对官方的镜像上再安装一个全局的bower,为此,我们写一份 Dockerfile
FROM node:8.9.0
RUN npm install bower -g
接着,我们需要在docker-compose里面写入server部分的代码:
web:
build: ./node_env # 指向Dockerfile存放的位置
ports:
- 80:3000 # 端口映射
volumes:
- ./:/home/src # 文件夹映射
command: sh /home/src/bin/enterpoint.sh # 入口命令
下面是enterpoint.sh的代码,主要做的是安装依赖和启动server
cd /home/src
echo "begin to npm install"
npm install
echo "begin to bower install"
bower install --allow-root # 在docker环境下需要在允许root执行bower
node /home/src/bin/www
搭建数据库环境
数据库主要是mongoDB 和 redis 两个数据库,我们在docker-compose中写入他们两个的配置:
redis:
image: redis:3.2.0
mongoDB:
image: tutum/mongodb:3.2
environment:
AUTH: 'no' # 由于Docker container之间会形成内网环境,所以在不暴露的端口情况,可以不设置验证。
数据持久化
为了避免更新container之后数据库的数据丢失,我们需要将container里面的数据绑定在本地的磁盘上,这就需要用到 docker-compose 语法中的volumes选项。
一般情况下,我们会自主选择一个文件夹进行绑定,就例如我在nodejs环境搭建的 yml 片段中写的那样。
- 本地的文件夹 : container中的文件夹
不过由于数据库的操作会涉及到权限问题,所以我们直接将创建文件夹的事情交给Docker来完成,只需要在 yml 文件中声明:
volumes:
db-volume:
然后选用即可。
完整的docker-compose.yml文件
version: '2' # volumes是docker-compose version 2 才支持的关键字,所以此处要声明使用version2
services:
web:
build: ./node_env
ports:
- 80:3000
volumes:
- ./:/home/src
command: sh /home/src/bin/enterpoint.sh
links:
- redis
- mongoDB
redis:
image: redis:3.2.0
mongoDB:
image: tutum/mongodb:3.2
volumes:
- db_volume:/data/db
environment:
AUTH: 'no'
volumes:
db_volume:
启动
配置到docker-compose.yml之后,只需要在iBlog的文件夹下输入命令:
sudo docker-compose up -d
即可启动整个服务,iBlog就正常跑起来了。
其他
项目完整地址:https://github.com/cctv1005s/iBlog2
iBlog2项目地址:https://github.com/eshengsky/iBlog2