10課部署自動(dòng)化8月30號(hào)論壇_第1頁(yè)
10課部署自動(dòng)化8月30號(hào)論壇_第2頁(yè)
10課部署自動(dòng)化8月30號(hào)論壇_第3頁(yè)
10課部署自動(dòng)化8月30號(hào)論壇_第4頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、部署_nginx_pm2_docker課程目標(biāo)Nginx靜態(tài) location 動(dòng)態(tài)數(shù)據(jù)請(qǐng)求proxy 負(fù)載均衡了解cluster原理掌握pm2部署NodeJS服務(wù)參考文檔使用pm2+nginx部署koa2(https) 課程內(nèi)容如何構(gòu)建一個(gè)高可用的node環(huán)境主要解決問(wèn)題故障恢復(fù)多核利用 796914多進(jìn)程共享端口/ app.jsconst Koa = require(koa);/ 創(chuàng)建一個(gè)Koa對(duì)象表示web app本身: const app = new Koa();/ 對(duì)于任何請(qǐng)求,app將調(diào)用該異步函數(shù)處理請(qǐng)求:app.use(async (ctx, next) = / 隨機(jī)產(chǎn)生錯(cuò)誤M

2、ath.random() 0.9 ? aaa() : 2await next();ctx.response.type = text/html; ctx.response.body = Hello, koa2!;);if (!module.parent) 開課吧web全棧架構(gòu)師開課吧web全棧架構(gòu)師app.listen(3000);console.log(app started at port 3000.); else module.exports = app/ test.jsvar http = require(http); setInterval(async () = try await h

3、ttp.get(); catch (error) , 1000)/ cluster.jsvar cluster = require(cluster);var os = require(os); / 獲取CPU 的數(shù)量var numCPUs = os.cpus().length; var process = require(process)console.log(numCPUs:, numCPUs) var workers = ;if (cluster.isMaster) / 主進(jìn)程分支cluster.on(death, function (worker) / 當(dāng)一個(gè)工作進(jìn)程結(jié)束時(shí),重啟工作進(jìn)程

4、 delete workersworker.pid; worker = cluster.fork();workersworker.pid = worker;);/ 初始開啟與CPU 數(shù)量相同的工作進(jìn)程for (var i = 0; i console.log(worker + cluster.worker.id + ,PID: + process.pid) next()app.listen(3000);/ 當(dāng)主進(jìn)程被終止時(shí),關(guān)閉所有工作進(jìn)程process.on(SIGTERM, function () for (var pid in workers) process.kill(pid);pro

5、cess.exit(0););require(./test)文件上傳服務(wù)器scp (最原始)scp docker-compose.yml root3:/root/source/ #文件scp -r mini-01 root3:/root/source/ #文件夾git (實(shí)際工作中) deploy插件 (debug)PM2的應(yīng)用內(nèi)建負(fù)載均衡(使用Node cluster 集群模塊、子進(jìn)程,可以參考樸靈的深入淺出node.js一書第九章) 線程守護(hù),keep alive0秒停機(jī)重載,維護(hù)升級(jí)的時(shí)候不需要停機(jī).現(xiàn)在 Linux (stable) & Ma

6、cOSx (stable) & Windows (stable).多平臺(tái)支持停止不穩(wěn)定的進(jìn)程(避免無(wú)限循環(huán))控制臺(tái)檢測(cè) https:/id.keymetrics.io/api/oauth/login#/register提供 HTTP API配置npm install -g pm2pm2 start app.js -watch -i 2/ watch 監(jiān)聽文件變化/ -i 啟動(dòng)多少個(gè)實(shí)例pm2 stop all pm2 listpm2 start app.js -i max # 根據(jù)機(jī)器CPU核數(shù),開啟對(duì)應(yīng)數(shù)目的進(jìn)程配置process.ymlapps:- script : app.js inst

7、ances: 2 watch : true env :NODE_ENV: productionKeymetrics在線監(jiān)控開課吧web全棧架構(gòu)師 pm2 link 8hxvp4bfrftvwxn uis7ndy58fvuf7l TARO-SAMPLEpm2設(shè)置為開機(jī)啟動(dòng) pm2 startupNginx 反向 + 前端打包Dist安裝yum install nginxapt updateapt install nginx添加靜態(tài)路由# /etc/nginx/sites-enable/taroserver listen 80;server_name ; location / root /root

8、/source/taro-node/dist; index index.html index.htm;# 驗(yàn)證Nginx配置nginx -t# 重新啟動(dòng)Nginx service nginx restartnginx -s reload# /etc/nginx/sites-enable # taroserver listen 80;server_name ;開課吧web全棧架構(gòu)師# 查看配置文件位置nginx -t# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok# nginx: configuration fi

9、le /etc/nginx/nginx.conf successful#重啟service nginx restartnginx -reloadDocker概念操作系統(tǒng)層面的虛擬化技術(shù)的進(jìn)程 于宿主和其它的 的進(jìn)程 - 容器GO語(yǔ)言開發(fā)特點(diǎn)高效的利用系統(tǒng)快速的啟動(dòng)時(shí)間一致的運(yùn)行環(huán)境持續(xù)交付和部署更輕松的遷移對(duì)比傳統(tǒng)虛擬機(jī)總結(jié)開課吧web全棧架構(gòu)師特性容器虛擬機(jī)啟動(dòng)秒級(jí)分鐘級(jí)硬盤使用一般為 MB一般為 GB性能接近原生弱于系統(tǒng)支持量單機(jī)支持上千個(gè)容器一般幾十個(gè)location / root /root/source/taro-node/dist; index index.html index.h

10、tm;location .(gif|jpg|png)$ root /root/source/taro-node/server/static;location /api proxy_pass;proxy_redirect off;proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;三個(gè) 概念鏡像容器倉(cāng)庫(kù)Docker基本使用構(gòu)建一個(gè)Nginx服務(wù)器1. 拉取 鏡像# 拉取 鏡像docker pu

11、ll nginx# 查看docker images nginx# 啟動(dòng)鏡像mkdir wwwecho hello docker! www/index.html# 啟動(dòng)# www目錄里面放一個(gè)index.htmldocker run -p 80:80 -v $PWD/www:/usr/share/nginx/html -d nginx# 查看進(jìn)程docker psdocker ps -a / 查看全部# 偽終端 ff6容器的uuid# -t 選項(xiàng)讓Docker分配一個(gè)偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上,# -i 則讓容器的標(biāo)準(zhǔn)輸入保持打開docker exec -it ff6

12、 /bin/bash# 停止docker stop ff6# 刪除鏡像docker rm ff6Dockerle定制鏡像#DockerfileFROM nginx:latestRUN echo Hello, Kaikeba! /usr/share/nginx/html/index.html開課吧web全棧架構(gòu)師# 定制鏡像docker build -t mynginx .# 運(yùn)行# -d 守護(hù)態(tài)運(yùn)行docker run -p 80:80 -d mynginx定制一個(gè)程序NodeJS鏡像npm init -y npm i koa -s/ package.jsonname: myappp,vers

13、ion: 1.0.0,main: app.js, scripts: test: echo Error: no test specified & exit 1,keywords: ,author: ,license: ISC, description: myappp, dependencies: koa: 2.7.0/ app.jsconst Koa = require(koa) const app = new Koa() app.use(ctx = Math.random() 0.8 ? abc() : ctx.body = Hello Docker)app.listen(3000, () =

14、 console.log(app started at)開課吧web全棧架構(gòu)師#Dockerfile#制定node鏡像的版本FROM node:10-alpine#移動(dòng)當(dāng)前目錄下面的文件到app目錄下ADD . /app/#進(jìn)入到app目錄下面,類似cd WORKDIR /app#安裝依賴RUN npm install#對(duì)外 的端口EXPOSE 3000#程序啟動(dòng)CMD node, app.js# 定制鏡像docker build -t mynode .# 運(yùn)行docker run -p 3000:3000 -d mynodePm2 - 利用多核# .dockerignore node_mod

15、ules/ process.yml apps:- script : app.js instances: 2 watch : true env :NODE_ENV: production# DockerfileFROM keymetrics/pm2:latest-alpine WORKDIR /usr/src/appADD . /usr/src/appRUN npm config set registry npm iEXPOSE 3000#pm2在docker中使用命令為pm2-dockerCMD pm2-runtime, start, process.yml& 開課吧web全棧架構(gòu)師# 定制鏡

16、像docker build -t mypm2 .# 運(yùn)行docker run -p 3000:3000 -d mypm2Docker-Compose#docker-compose.yml app-pm2:container_name: app-pm2 #構(gòu)建容器build: . # volumes:# - .:/usr/src/app ports:- 3000:3000/ 強(qiáng)制重新構(gòu)建并啟# -force-recreate 強(qiáng)制重建容器# -build 強(qiáng)制編譯docker-compose up -d -force-recreate -build#docker-compose.yml vers

17、ion: 3.1 services:nginx:image: nginx:kaikeba ports:- 80:80# 運(yùn)行docker-compose up# 運(yùn)行docker-compose up -d部署Mongo + MongoExpress開課吧web全棧架構(gòu)師#docker-compose.yml version: 3.1 services:mongo:image: mongo restart: always ports:- 27017:27017mongo-express:image: mongo-express restart: always ports:- 8081:8081

18、代碼中添加Mongoose調(diào)用/ mongoose.jsconst mongoose = require(mongoose);/ 1.連接mongoose.connect(mongodb:/mongo:27017/test, useNewUrlParser: true );const conn = mongoose.connection;conn.on(error, () = console.error(連接數(shù)據(jù)庫(kù)失敗);/ app.jsconst mongoose = require(mongoose); mongoose.connect(mongodb:/mongo:27017/test,

19、 useNewUrlParser: true); const Cat = mongoose.m (Cat, name: String );Cat.deleteMany()const kitty = new Cat( name: Zildjian ); kitty.save().then() = console.log(meow);app.use(async ctx = ctx.body = await Cat.find()WebHook實(shí)現(xiàn)CI持續(xù)集成啟動(dòng)NodeJS開課吧web全棧架構(gòu)師var http = require(http)var createHandler = require(

20、-webhook-handler)var handler = createHandler( path: /webhooks, secret: myHashSecret )/ 上面的 secret 保持和設(shè)置的一致function run_cmd(cmd, args, callback) var spawn = require(child_process).spawn; var child = spawn(cmd, args);var resp = ;child.stdout.on(data, function (buffer) resp += buffer.toString(); ); child.stdout.on(end, function () callback(resp) );http.createServer(function (req, res) handler(req, res, function (err) res.statusCode = 404 res.end(no such location).listen(3000)handler.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論