久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      聊聊如何通過docker-compose將node服務(wù)部署到多套環(huán)境中

      如何通過docker-compose將node服務(wù)部署到多套環(huán)境?下面本篇文章就來給大家介紹一下Docker-compose多環(huán)境部署Node服務(wù)的方法,希望對(duì)大家有所幫助!

      聊聊如何通過docker-compose將node服務(wù)部署到多套環(huán)境中

      一般情況下,我們項(xiàng)目在開發(fā)完成之后,需要部署到多套環(huán)境,比如測(cè)試、沙箱、集成等等,那么如何通過docker-compose將node服務(wù)部署到多套環(huán)境呢?下面文章具體說下,有什么不對(duì)的地方歡迎大家評(píng)論。

      本文中的項(xiàng)目用到的技術(shù)是Gitlab+Ansible+Docker自動(dòng)化部署node服務(wù)(nest框架寫的),步驟如下:

      • 編寫docker-compose、docker-compose.prod.yml配置文件

      • 修改package.json

      • 遠(yuǎn)程服務(wù)器上創(chuàng)建兩個(gè)目錄,拉取node服務(wù)倉庫,切換到不同分支,分別表示測(cè)試、線上node服務(wù)

      • .gitlab-ci.yml文件編寫

      • ansible.yml文件編寫

      • 遠(yuǎn)程服務(wù)器node服務(wù)(測(cè)試/線上)目錄下執(zhí)行如下命令,執(zhí)行之后,通過docker ps -a查看容器是否正常啟動(dòng),如果是up狀態(tài)掛起,證明容器啟動(dòng)成功了。docker logs -f 容器id查看容器日志

      # 測(cè)試目錄 /opt/xxx/server-test/server docker-compose up -d  # 線上目錄 /opt/xxx/server-prod/server # -f表示指定具體文件,默認(rèn)執(zhí)行的是docker-compose.yml文件 docker-compose -f docker-compose.prod.yml up -d

      具體步驟

      • 編寫docker-compose、docker-compose.prod.yml配置文件

      # docker-compose.yml version: '3.0' services: # 服務(wù)列表   # 測(cè)試數(shù)據(jù)庫   mysql:     image: mysql     container_name: mysql_test     restart: always     environment:       - MYSQL_ROOT_PASSWORD=test_sql       - NODE_ENV=development     ports:       - 13306:3306     volumes:       - 服務(wù)器上對(duì)應(yīng)目錄:/var/lib/mysql          # 測(cè)試node服務(wù)   server:  # node服務(wù)     container_name: server-test # 容器名稱     image: node:14.15.0     ports:  # 暴露的端口       - "7007:5088"     environment:        - NODE_ENV=development     volumes:       - .:/data     working_dir: /data     depends_on: # web服務(wù)依靠mysql要先等mysql啟動(dòng)       - mysql     restart: on-failure:5 # 自動(dòng)重啟,失敗的話重啟5次后停止     command: yarn start # 覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令
      # docker-compose.prod.yml version: '3.0' services: # 服務(wù)列表   # 線上數(shù)據(jù)庫   prod-mysql:     image: mysql     container_name: mysql_prod     restart: always     environment:       - MYSQL_ROOT_PASSWORD=prod_sql       - NODE_ENV=production     ports:       - 13307:3306     volumes:       - 服務(wù)器上對(duì)應(yīng)目錄:/var/lib/mysql    # 線上node服務(wù)   prod-server:     container_name: server-prod     image: node:14.15.0     ports:       - "7077:5089"     environment:        - NODE_ENV=production     volumes:       - .:/data     working_dir: /data     depends_on:       - prod-mysql     restart: on-failure:5     command: yarn start:prod
      • package.json中做如下修改

      # cross-env指定NODE_ENV為開發(fā)或線上環(huán)境 ... "scripts": {     ...     "build": "nest build",     "start": "yarn && cross-env  NODE_ENV=development nest start",     "start:prod": "yarn && yarn build && cross-env  NODE_ENV=production node dist/src/main",     ...   }, ...
      • 遠(yuǎn)程服務(wù)器上創(chuàng)建兩個(gè)目錄,分別存放測(cè)試、線上node服務(wù)

      # 測(cè)試(dev分支),git clone node服務(wù)地址,切換到dev分支 /opt/xxx/server-test/server  # 線上(master分支),git clone node服務(wù)地址,切換到master分支 /opt/xxx/server-prod/server
      • .gitlab-ci.yml文件編寫

      # CI變量說明說明 - BRANCH、DEV_BRANCH是CI變量,分別對(duì)應(yīng)master、dev分支 - DOCKER_CONTAINER、DEV_DOCKER_CONTAINER分別對(duì)應(yīng)線上、測(cè)試啟動(dòng)的docker容器 - ROOT_PATH、DEV_ROOT_PATH分別對(duì)應(yīng)遠(yuǎn)程服務(wù)器上線上、測(cè)試node服務(wù)存放路徑 - CI_PROJECT_NAME表示gitlab上倉庫名稱  stages:   - dev_deploy   - master_deploy  master_deploy:   stage: master_deploy   image: ansible鏡像地址   script:     - echo "${HOST}" ansible_ssh_user="${USER}" ansible_ssh_pass="${PASS}" ansible_ssh_host="${HOST}" > hosts     - echo ansible-playbook ansible.yaml -e hosts=${HOST} -i ./hosts     - ansible-playbook ansible.yaml -e "HOST=${HOST}  DEST_PATH=${ROOT_PATH}/${CI_PROJECT_NAME} DOCKER_CONTAINER_NAME=${DOCKER_CONTAINER} CUR_BRANCH=${BRANCH}" -i ./hosts     - rm -f hosts   only:     - master   tags:     - k8s  dev_deploy:   stage: dev_deploy   image: ansible鏡像地址   script:     - echo "${HOST}" ansible_ssh_user="${USER}" ansible_ssh_pass="${PASS}" ansible_ssh_host="${HOST}" > hosts     - echo ansible-playbook ansible.yaml -e hosts=${HOST} -i ./hosts     - ansible-playbook ansible.yaml -e "HOST=${HOST}  DEST_PATH=${DEV_ROOT_PATH}/${CI_PROJECT_NAME} DOCKER_CONTAINER_NAME=${DEV_DOCKER_CONTAINER} CUR_BRANCH=${DEV_BRANCH}" -i ./hosts     - rm -f hosts   only:     - dev   tags:     - k8s
      • ansible.yml文件編寫

      # cd到node服務(wù)server目錄,切換分支,拉取最新代碼,docker容器重啟 - name: deploy   hosts: "{{ HOST }}"   become_user: root   become: yes   tasks: # 任務(wù)     - name: git checkout branch       command: git checkout "{{CUR_BRANCH}}"       args:         chdir: "{{ DEST_PATH }}"     - name: git pull       command: git pull       args:         chdir: "{{ DEST_PATH }}"     - name: docker restart container       command: docker restart "{{ DOCKER_CONTAINER_NAME }}"       args:         chdir: "{{ DEST_PATH }}"
      • 遠(yuǎn)程服務(wù)器node服務(wù)(測(cè)試/線上)目錄下執(zhí)行如下命令

      # 測(cè)試目錄 /opt/xxx/server-test/server docker-compose up -d  # 線上目錄 /opt/xxx/server-prod/server docker-compose -f docker-compose.prod.yml up -d

      啟動(dòng)成功之后通過docker ps -a查看容器啟動(dòng)情況,具體如下圖所示:

      聊聊如何通過docker-compose將node服務(wù)部署到多套環(huán)境中

      說明

      • 測(cè)試環(huán)境:本地dev分支代碼提交或其他分支合并到dev分支時(shí),會(huì)通過itlab CI、Ansible自動(dòng)化部署node服務(wù)到遠(yuǎn)程服務(wù)器,在對(duì)應(yīng)服務(wù)器遠(yuǎn)程目錄下切換分支、拉取最新代碼、重啟對(duì)應(yīng)的測(cè)試docker容器

      • 線上環(huán)境:本地master分支代碼提交或其他分支合并到master分支時(shí),會(huì)通過itlab CI、Ansible自動(dòng)化部署node服務(wù)到遠(yuǎn)程服務(wù)器,在對(duì)應(yīng)服務(wù)器遠(yuǎn)程目錄下切換分支、拉取最新代碼、重啟對(duì)應(yīng)的線上docker容器

      遇到的問題

      問題一:測(cè)試/線上遠(yuǎn)程node服務(wù)目錄下沒有node_modules目錄和dist目錄,即沒有下圖這兩個(gè)文件同時(shí)遠(yuǎn)程服務(wù)器器上查看docker容器日志報(bào)如下錯(cuò)誤(這個(gè)問題排查了好久才解決

      聊聊如何通過docker-compose將node服務(wù)部署到多套環(huán)境中

      聊聊如何通過docker-compose將node服務(wù)部署到多套環(huán)境中

      排查: 發(fā)現(xiàn)和正常啟動(dòng)的node服務(wù)容器對(duì)比來看,沒有這兩個(gè)目錄(dist和node_modules),排查是不是docker-compose.yml中command執(zhí)行命令有問題,即docker-compose.yml的command中yarn && yarn start是不是有問題,于是嘗試把yarn操作放在package.json中,結(jié)果好啦。

      解決:

      # 修改前 # docker-compose.yml version: '3.0' services:   ...   server:     ...     command: yarn && yarn start      # package.json "scripts": {     ...     "build": "nest build",     "start": "cross-env  NODE_ENV=development nest start",     "start:prod": "cross-env  NODE_ENV=production yarn build && node dist/src/main",     ...   },      # 修改后 # docker-compose.yml version: '3.0' services:   ...   server:     ...     command: yarn start      # package.json 方案一: "scripts": {     ...     "build": "nest build",     "start": "yarn && cross-env  NODE_ENV=development nest start",     "start:prod": "yarn && yarn build && cross-env  NODE_ENV=production node dist/src/main",     ...   },    方案二: "scripts": {     ...     "build": "nest build",     "start": "cross-env NODE_ENV=development nest start",     "prestart": "yarn",     "start:prod": "yarn build && cross-env  NODE_ENV=production node dist/src/main",     "prestart:prod": "yarn",     ... },

      注意

      • cross-env的位置,放在可執(zhí)行命令之前,在本項(xiàng)目中,放在最前面服務(wù)器上報(bào)cross-env not found, 放在最后面環(huán)境變量不生效,NODE_ENV顯示undefined

      • script中可執(zhí)行命令注意執(zhí)行順序,比如yarn && yarn build && cross-env NODE_ENV=production node dist/src/main

      • script中pre

      問題2: 前端線上域名映射不生效,nginx配置文件映射線上域名之后,發(fā)現(xiàn)訪問線上域名時(shí),發(fā)現(xiàn)頁面沒有生效

      排查:將nginx測(cè)試配置文件和線上配置文件對(duì)比,發(fā)現(xiàn)文件內(nèi)容除了域名和api代理,其余都是一樣,那到底是什么原因呢?最后發(fā)現(xiàn)竟然是線上nginx配置文件后綴名不對(duì),寫的是xxx.confg,此處心里一萬個(gè)想打死自己

      解決: 修改線上nginx配置文件為正確的后綴,即xxx.conf后綴

      問題三:Gitlab CI執(zhí)行異常,具體報(bào)錯(cuò)信息大概是報(bào)/server目錄找不到

      排查:在CI里面打印輸出CI變量以及拼接出來的目錄變量,查看是哪一步有問題,經(jīng)排查發(fā)現(xiàn)都是正常的,唯一不同的一點(diǎn)是CI變量后面設(shè)置了環(huán)境變量

      解決:嘗試把環(huán)境變量改為All default,結(jié)果好了,記住,不要隨意配置CI后面的環(huán)境變量,如果修改的話,對(duì)應(yīng)的Gitlab里面也是對(duì)應(yīng)需要映射的,環(huán)境變量位置如下圖所示:

      聊聊如何通過docker-compose將node服務(wù)部署到多套環(huán)境中

      master_deploy:   ...   script:     ...     - echo ${ROOT_PATH}     - echo ${CI_PROJECT_NAME}     - echo ${ROOT_PATH}/${CI_PROJECT_NAME}     - echo ${DOCKER_CONTAINER}     - echo ${BRANCH}     ...  ...

      本文到這就結(jié)束了,后面還會(huì)有一篇文件,講全棧項(xiàng)目從開發(fā)到自動(dòng)化部署整個(gè)過程(用到的技術(shù)棧是Vue + Nest + Typeorm + Mysql+ Gitlab CI + Ansible + Docker)。

      推薦學(xué)習(xí):《docker視頻教程》、《nodejs 教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)