Meteor应用的Docker部署

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版本

2.安装配置MongoDB环境 (可不需要)

安装

#安装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" } ] })

mongodb role说明

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
    官方将不再支持

推荐阅读更多精彩内容

  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,435评论 2 49
  • 上一篇大概介绍了JWT的用法,实现了一个简单的登录注册以及邮箱验证。而这一篇呢就负责把我们的项目部署到自己的服务器...
    sidiWang阅读 9,451评论 2 48
  • 好难熬,坚持
    hanna123456阅读 74评论 0 0
  • 今天还是把昨天读过的部分又重新读了一遍。因为搞不懂作者的解题思路,心里是猫爪心一样的痒。 耐着性子反复琢磨书中的举...
    Hisi阅读 41评论 0 0
  • 《故事思维》的作者安妮特,被称为全世界最会讲故事的人,她说创造故事以及讲故事的能力,是未来最重要的技能之一。 深以...
    秋秋絮语阅读 360评论 4 6
  • ----原创连载 对于洛艺我们有绝口不谈的默契。我知道他们会在周五晚上去操场跑步,我知道他们会在下雨天的晚上去公园...
    芅水阅读 179评论 0 1
  • 我:哥,你终于回来啦哥:嗯,回家了 这是我跟大堂哥今天早上的对话,不知道有意还是无意,他回答的时候把“家”说的很重...
    喵文文阅读 313评论 2 2