熟悉docker的基本命令和运行逻辑后,尝试实战。目标:制作一个nodejs服务镜像,使用nginx反向代理在本地运行。本项目配置及工具组成:node后台:使用阿里的Egg.js脚手架db:mongodbnginxNoSqlBoosterforMongoDB,mongodb可视化工具postman,可发起网络请求进行测试的工具注:原生操作系统为macOS本文讲座将重点介绍docker部分,其余知识只介绍部分准备工作:dockerimages:nginx:latest,node:10.15.3,mongo:latestdocker-compose可以使用Egg.js脚手架初始化后台结束项目,命名为egg-center项目配置Egg。js安装egg-mongoose库以连接到mongodb。数据库配置,修改./config/config.default.jsconfig.mongoose={clients:{center:{url:'mongodb://你本地的内网ip:27017/example',options:{dbName:'center',//数据库名,user:'',//连接数据库的账号,默认为空pass:'',//连接数据库的账号,默认为空}}}}接下来写a后台用户管理系统在./app/controller下添加对应的controller,在./app/model下添加对应的表结构。然后写几个简单的接口,修改:./app/router.js,定义路由:'usestrict'/***@param{Egg.Application}app-eggapplication*/module.exports=app=>{const{router,controller}=approuter.get('/',controller.home.index)/*添加新用户*/router.post('/api/admin/user',controller.admin.user.create)/*用户列表*/router.get('/api/admin/user',controller.admin.user.index)...abbreviated}本地启动服务测试:npmrundev在本地使用postman调优接口,创建一些测试数据。修改package.json"start":"egg-scriptsstart--deamon--title=egg-server-egg-center"为:"start":"egg-scriptsstart--title=egg-server-egg-center",删除--deamon,我们是在docker中运行项目,所以node服务需要在docker前台运行。配置DockerfileEgg.js在根目录(./)下新增一个文件:Dockerfile//Egg.js镜像制作的配置文件docker-compose.yml//Egg.js和nginx容器的配置mongodb-compose.yml//mongodbcontainernginx.conf的配置//nginx配置文件本次部署我们不使用jenkins,采用比较简单的部署方式。解释一下为什么需要单独写mongodb的配置:1.大多数情况下,数据库没有关闭,由于版本迭代的影响,会重启业务服务器和nginx,所以把mongodb的配置单独拿出来2、业务服务将依赖mongodb启动。如果写在同一个docker-compose文件中,会出现异步问题,即mongodb还没有完全启动到就绪状态,node服务已经开始连接数据库报错。接下来查看文件内容。Dockerfile:FROMnode:10.15.3#使用node:10.15.3镜像RUNmkdir-p/egg-center#新建目录folderegg-centerWORKDIR/egg-center#设置/egg-center为默认工作目录COPYpackage.json/egg-center/package.jsonRUNyarn--production#先将package.json文件复制到容器中,并安装依赖COPY./egg-center#将代码复制到容器中。也可以直接连续复制部分代码EXPOSE7006#暴露7006端口docker-compose.yml:version:'3'services:nginx:image:nginx:latest#Usenginx:latestmirrorports:-8080:8080#Hostport:Containerportvolumes:-"/Users/liaoxinyu/JsProject/eggJsProject/server/egg-center/nginx.conf:/etc/nginx/conf.d/nginx.conf"#挂载nginx配置文件egg-center:build:语境:。#配置Dockerfile构建端口:-7006:7006#主机端口:容器端口,用于nginx转发command:["npm","start"]#启动服务配置mongodb容器,修改mongodb-compose.yml:version:'3'services:mongodb:image:mongo:latest#使用mongo:latest镜像ports:-27017:27017#Hostport:containerportvolumes:-"/Users/liaoxinyu/db/mongodb/data:/data/db/"#将数据库目录挂载到本地,如果不挂载,容器关闭后数据会丢失。修改nginx.conf:upstreamapi{server10.10.1.31:7006;}#后端服务容器端口:ipserver{listen8080;#监听8080端口,docker-composeserver_namelocalhost中做的映射;#本地配置直接使用localhost如果在线,改成域名或者公网iplocation/api{#/api前缀的请求,全部转发给Egg.js服务proxy_passhttp://api;proxy_set_header主机$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;}location/{#可以写入多个位置,转发到不同的服务或静态资源路由root/usr/share/nginx/html;indexindex.htmlindex.htm;try_files$uri/index.html;}error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}}启动项目:1.先启动数据库:docker-compose-fmongodb-compose.ymlup2.数据库完全启动后,启动Egg.js服务和nginx:docker-composeup验证:1.使用NoSqlBoosterforMongoDB连接数据库,配置很简单,配置ip:port,查看数据库内容2.使用postman请求http://localhost:8080/api/admin/user,这里发送的请求是直接发送到nginx代理的8080,然后由nginx转发到业务服务端口7006,线上服务器直接请求域名,不对外公开公网ip:业务服务器端口。附完:使用nginx-docker镜像部署服务器,配置https,附上java后端部署示例
