Nuxt3 利用脚本把本地项目自动部署到服务器Docker中

nuxt3 利用脚本把本地项目自动部署到服务器docker中

  1. 说明

    • 在nuxt3项目的阶段开发完毕后,需要把build后的网站发布到服务器的docker中

      • 如果采用手工发布比较麻烦

      • 采用git结合持续化部署需要搭建一套持续化部署平台,比较复杂

      • 这里采用shell脚本的方式把本地开发好的项目自动部署到服务中并重启容器

  2. 环境准备

    • 服务器支持采用密钥方式登录

      • 服务器支持非管理员用户直接使用sudo执行命令,无需输入密码

  3. 部署脚本

    • sh/config

      shopt -s expand_aliases  # 启用别名
      
      echo '发布到hw.rstone.com.cn'
      SERVER='test@hw.rstone.com.cn'
      
      #ssh
      
      alias SSHEXEC='ssh -i /Users/test/.ssh/id_rsa.hw  test@hw.rstone.com.cn'
      alias SSHEXECSUDO='ssh -i /Users/test/.ssh/id_rsa.hw  test@hw.rstone.com.cn sudo'
      alias SSHSCP='scp -i /Users/test/.ssh/id_rsa.hw '
      • sh/deploy.sh

      #!/bin/bash
      
      #脚本在执行时遇到错误立即退出
      set -e
      #开启命令打印用于调试
      #set -x   
      
      #获取本执行文件的路径
      currentpath=$(cd "$(dirname "$0")" && pwd)
      
      #加载配置文件
      source ${currentpath}/config
      
      echo "将发布.out/目录下面的内容到服务器的docker镜像rstone-web-nuxt3:"
      read -p "是否发布[y/n]:" yn
      if [ "${yn}" != "y" ]; then
          #退出发布
          echo "退出发布"
          exit 1
      fi
      
      echo "开始发布..."
      TMPPATH=${currentpath}/tmp
      
      #发布
      echo "删除发布临时文件:${TMPPATH}/output.zip"
      rm -rf ${TMPPATH}/output.zip
      echo "压缩./out目录下面的内容..."
      if [ ! -d $TMPPATH ]; then
          mkdir -p ${TMPPATH}
      fi
      zip -r  $TMPPATH/output.zip ./.output
      
      echo "上传${TMPPATH}/output.zip 到服务器..."
      SERTMPPATH="/tmp/rstone-web-nuxt3"
      echo "删除服务器上临时目录:${SERTMPPATH}"
      SSHEXEC "yes | sudo rm -rf ${SERTMPPATH}"
      echo ”创建服务器上临时目录:${SERTMPPATH}”
      SSHEXEC mkdir -p ${SERTMPPATH}
      echo "上传文件到服务器:${SERTMPPATH}"
      eval SSHSCP " -r ${TMPPATH}/output.zip  ${SERVER}:${SERTMPPATH}"
      echo "解压文件到服务器:${SERTMPPATH}"
      eval SSHEXEC " unzip ${SERTMPPATH}/output.zip -d ${SERTMPPATH}"
      
      echo "停止服务器上的docker容器:rstone-web-nuxt3"
      eval SSHEXEC "sudo docker stop rstone-web-nuxt3"
      echo "拷贝文件到服务器:/docker-data/rstone-web-nuxt3/app"
      eval SSHEXEC "sudo rm -rf /docker-data/rstone-web-nuxt3/app/* "
      eval SSHEXEC "sudo cp -r ${SERTMPPATH}/.output/* /docker-data/rstone-web-nuxt3/app/"
      echo "启动服务器上的docker容器:rstone-web-nuxt3"
      eval SSHEXEC "sudo docker start rstone-web-nuxt3"
      echo "删除服务器上临时目录:${SERTMPPATH}"
      SSHEXEC "yes | sudo rm -rf ${SERTMPPATH}"
      echo "发布完成"
      • 执行

        • 生成项目: npm run build

        • 执行部署脚本: ./sh/deploy.sh

# nuxt3 利用脚本把本地项目自动部署到服务器docker中

1. 说明
  - 在nuxt3项目的阶段开发完毕后,需要把build后的网站发布到服务器的docker中
    - 如果采用手工发布比较麻烦
    - 采用git结合持续化部署需要搭建一套持续化部署平台,比较复杂
    - 这里采用shell脚本的方式把本地开发好的项目自动部署到服务中并重启容器
2. 环境准备
  - 服务器支持采用密钥方式登录
    - 服务器支持非管理员用户直接使用sudo执行命令,无需输入密码
3. 部署脚本
  - sh/config
    ```bash
    shopt -s expand_aliases  # 启用别名

    echo '发布到hw.rstone.com.cn'
    SERVER='test@hw.rstone.com.cn'

    #ssh

    alias SSHEXEC='ssh -i /Users/test/.ssh/id_rsa.hw  test@hw.rstone.com.cn'
    alias SSHEXECSUDO='ssh -i /Users/test/.ssh/id_rsa.hw  test@hw.rstone.com.cn sudo'
    alias SSHSCP='scp -i /Users/test/.ssh/id_rsa.hw '
    ```
    - sh/deploy.sh
    ```bash
    #!/bin/bash

    #脚本在执行时遇到错误立即退出
    set -e
    #开启命令打印用于调试
    #set -x   

    #获取本执行文件的路径
    currentpath=$(cd "$(dirname "$0")" && pwd)

    #加载配置文件
    source ${currentpath}/config

    echo "将发布.out/目录下面的内容到服务器的docker镜像rstone-web-nuxt3:"
    read -p "是否发布[y/n]:" yn
    if [ "${yn}" != "y" ]; then
        #退出发布
        echo "退出发布"
        exit 1
    fi

    echo "开始发布..."
    TMPPATH=${currentpath}/tmp

    #发布
    echo "删除发布临时文件:${TMPPATH}/output.zip"
    rm -rf ${TMPPATH}/output.zip
    echo "压缩./out目录下面的内容..."
    if [ ! -d $TMPPATH ]; then
        mkdir -p ${TMPPATH}
    fi
    zip -r  $TMPPATH/output.zip ./.output

    echo "上传${TMPPATH}/output.zip 到服务器..."
    SERTMPPATH="/tmp/rstone-web-nuxt3"
    echo "删除服务器上临时目录:${SERTMPPATH}"
    SSHEXEC "yes | sudo rm -rf ${SERTMPPATH}"
    echo ”创建服务器上临时目录:${SERTMPPATH}”
    SSHEXEC mkdir -p ${SERTMPPATH}
    echo "上传文件到服务器:${SERTMPPATH}"
    eval SSHSCP " -r ${TMPPATH}/output.zip  ${SERVER}:${SERTMPPATH}"
    echo "解压文件到服务器:${SERTMPPATH}"
    eval SSHEXEC " unzip ${SERTMPPATH}/output.zip -d ${SERTMPPATH}"

    echo "停止服务器上的docker容器:rstone-web-nuxt3"
    eval SSHEXEC "sudo docker stop rstone-web-nuxt3"
    echo "拷贝文件到服务器:/docker-data/rstone-web-nuxt3/app"
    eval SSHEXEC "sudo rm -rf /docker-data/rstone-web-nuxt3/app/* "
    eval SSHEXEC "sudo cp -r ${SERTMPPATH}/.output/* /docker-data/rstone-web-nuxt3/app/"
    echo "启动服务器上的docker容器:rstone-web-nuxt3"
    eval SSHEXEC "sudo docker start rstone-web-nuxt3"
    echo "删除服务器上临时目录:${SERTMPPATH}"
    SSHEXEC "yes | sudo rm -rf ${SERTMPPATH}"
    echo "发布完成"
    ```
    - 执行
      - 生成项目: npm run build
      - 执行部署脚本: ./sh/deploy.sh