Docker 部署
目前部署方式
本地build,上传服务器,npm install,PM2启动与管理项目
目前的问题
1.Meteor打包成Nodejs应用进行部署的时候,npm install总是会出问题;
2.应用程序不稳定,莫名的挂了,目前判断可能是Nodejs版本的问题;
解决方案
1.通过sinopia创建本地的npm库
2.通过docker隔离每个应用
步骤
环境: CentOS 7
1.配置NodeJS环境 (可不需要)
# 安装nodejs4.0
curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -
yum -y install nodejs
yum install gcc-c++ make
# 安装n -nodejs版本管理工具
npm install n -g
n 0.10.43 # meteor1.3 官方nodejs版本
安装
#安装MongDB 3.2
vim /etc/yum.repos.d/mongodb-org-3.2.repo
### /etc/yum.repos.d/mongodb-org-3.2.repo
[mongodb-org-3.2]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
###
sudo yum install -y mongodb-org
配置
# 配置MongoDB
# 启动mongodb server
service mongod start
# 跟随系统reboot启动
sudo chkconfig mongod on
# mongodb client 登录
mongo
# 创建管理员账号
use admin
db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
# 配置mongoDB登录认证
vim /etc/mongod.conf
### /etc/mongod.conf
security:
authorization: enabled
###
service mongod restart # 重启
# 验证
mongo
use admin
db.auth("myUserAdmin", "abc123")
db.system.users.find({})
# 创建数据库
mongo
use admin
db.auth("myUserAdmin", "abc123")
use testdb
db.createUser({ user: "test", pwd: "test123", roles: [ { role: "readWrite", db: "testdb" } ] })
3.安装Docker
通过linux发行版的包管理工具安装 注: CentOS 要求7.0以上
通过命令行安装
curl -fsSL https://get.docker.com/ | sh
# 重启服务器(务必)
sudo reboot
4.配置sinopia
这里使用sinopia的docker版本
docker pull keyvanfatehi/sinopia:latest
docker run --name sinopia -d -p 4873:4873 keyvanfatehi/sinopia:latest
npm set registry http://0.0.0.0:4873/
5.配置meteord
在base/
中
# Dockerfile
ARG DEBIAN_FRONTEND=noninteractive
# scripts/run_app.sh
if [ sinopia ]; then
npm set registry http://sinopia:4873/
fi
创建新的镜像
sudo docker build -t 'username/imagename' ./
导入与导出镜像
# 导出
sudo docker save -o dockername.tar username/imagename
# 导入
sudo docker load --input dockername.tar
运行
docker run -d \
-e ROOT_URL=http://localhost \
-e MONGO_URL=mongodb://test:test123@yourhost:27017/testdb \
-p 8080:80 \
--link sinopia:sinopia \
-v /path/to/bundle:/bundle \
--name contaiername \
username/imagename
注意点
mongoDB对外访问问题
默认在mongod.conf
中将可访问的ip限制在本地127.0.0.1
,在不docker化mongoDB的情况下,想让container
访问到可参考这里build镜像时报错:debconf: unable to initialize frontend: Dialog
docker升级到最新,在Dockerfile
中设置ARG DEBIAN_FRONTEND=noninteractive
, 不要使用ENV
设置不要使用CentOS 6.5
官方将不再支持