zoukankan      html  css  js  c++  java
  • centos7环境下nodejs环境的部署过程

    1.yum安装nodejs环境
    curl -sL https://rpm.nodesource.com/setup_12.x | bash -

    yum install -y nodejs

    2.安装pm2插件
    npm install pm2 -g

    3.发布脚本
    $ cat /usr/local/worksh/jenkins_rsync/hw_yt_rsync_www.chinasoft.com.templates.sh
    #!/bin/bash

    ##############公司jenkins拉取git代码同步到 publish 上,然后触发 publish 上的该脚本同步到web服务器####################

    # 非apache用户运行脚本,则退出
    if [ `whoami` != "apache" ];then
    echo " only apache user can run me"
    exit 1
    fi

    ## 定义排除的目录,线上一般排除logs文件夹
    passwd="/data/www/.rsync/rsyncd.pass.www.chinasoft.com"

    exclude_list="--exclude=logs/ --exclude=.git --exclude=.gitignore --exclude=.gitattributes --exclude=*.log --exclude=.svn --exclude=.env --exclude=node_modules"

    # 发布单台机器 (vg-chinasoft-web02)
    aws_ip_list_web01="1.1.1.2"

    # 发布单台机器 (vg-chinasoft-web03)
    #aws_ip_list_web02="1.1.1.3"


    function func_rsync_status()
    {
            if [[ $? == 0 || $? == 23 ]];then
                    rsync_edit=1
            else
                    rsync_edit=0
                    echo "`date` 同步到目标失败! " | tee ${pubMsgFile}
                    exit 1
            fi
    }

    # 代码发布目录,一般为/data/www/vhosts/${project_dir}
    project_dir="www.chinasoft.com/httpdocs/templates"

    # 判断代码发布目录变量是否为空
    if [ ! $project_dir ]; then
       echo "$project_dir IS NULL"
       exit 1
    fi


    # 同步aws第1台web机器
    function rsync_aws_web1()
    {

    for ip in ${aws_ip_list_web01}
    do
            echo "#################### Run rsync ${ip}  start ################################"
            rsync -zavP $exclude_list --password-file=$passwd /data/www/vhosts/${project_dir}/ apache@${ip}::apache/data/www/vhosts/${project_dir}/
            func_rsync_status
        ssh -p 5202 apache@"$ip" "/bin/bash /usr/local/worksh/node_chinasoft_temp_manager.sh restart"
            echo "################### Run rsync ${ip} end #######################"
    done
    }


    # 同步aws的第2台web机器
    function rsync_aws_web2()
    {

    for ip in ${aws_ip_list_web02}
    do
            echo "#################### Run rsync ${ip}  start ################################"
            rsync -zavP $exclude_list --password-file=$passwd /data/www/vhosts/${project_dir}/ apache@${ip}::apache/data/www/vhosts/${project_dir}/
            func_rsync_status
        ssh -p 5202 apache@"$ip" "/bin/bash /usr/local/worksh/node_chinasoft_temp_manager.sh restart"
            echo "################### Run rsync ${ip} end #######################"
    done
    }


    # 同步所有机房
    function rsync_aws_all()
    {
            rsync_aws_web1
    }


    #####################  MAIN  ###############################
    usage () {
            echo ""
            echo "  Please Input server infomation!"
            echo ""
            echo "  USAGE: `basename $0` [all|yt-account_web01|yt-account_web02]"
            echo ""
    }
            
    if [ $# != 1 ]
    then
            usage >&2
            exit 1
    fi
    OPT=$1
    case $OPT in
    all)
            echo "start rsync ${project_dir}  servers"
            rsync_aws_all
            echo "rsync ${project_dir} to Done"
            ;;

    yt-account_web01)
            echo "start rsync ${project_dir}  to ${aws_ip_list_web01} servers"
            rsync_aws_web1
            ;;

    *)
            echo "Usage:`basename $0` [all|yt-account_web01|yt-account_web02]"
            ;;
    esac

    # 进程管理脚本
    # $ cat /usr/local/worksh/node_chinasoft_temp_manager.sh
    #!/bin/bash
    #
    source /etc/profile

    # 根据参数,执行进程的启动 停止 重启等

    # 非apache用户运行脚本,则退出
    if [ `whoami` != "apache" ];then
    echo " only apache can run me"
    exit 1
    fi

    export NODE_ENV=production


    node_process='chinasoft_templates'

    ##############node_chinasoft_templastes###############
    #1.启动 node_chinasoft_templastes
    start_node_chinasoft_templastes() {
        #pid=`ps -ef |grep $node_process |grep -v grep |awk '{print $2}'`
        pid=`pm2 status|grep chinasoft_templates|grep enabled|wc -l`
        if [[ ${pid} -lt 1 ]];then
            echo "starting node_chinasoft_templastes process is $node_process;pid is $pid "
            if [ $? -ne 0 ]; then
                echo
                exit 1
            fi
            cd /data/www/vhosts/www.chinasoft.com/httpdocs/templates && npm install request && npm install && npm install --dependencies
            cd /data/www/vhosts/www.chinasoft.com/httpdocs/templates && pm2 start npm --watch --name chinasoft_templates -- run start
            if [ $? == '0' ];then
                echo "start node_chinasoft_templastes $node_process ok"
            else
                echo "start node_chinasoft_templastes $node_process failed"
            fi
        else
            echo "node_chinasoft_templastes $node_process is still running!"
            exit
        fi
    }

    #2.停止 node_chinasoft_templastes
    stop_node_chinasoft_templastes() {
        echo -n $"Stopping node_chinasoft_templastes $node_process: "
        #pid=`ps -ef |grep $node_process |grep -v grep |awk '{print $2}'`
        #if [ ! "$pid" ];then
        pid=`pm2 status|grep chinasoft_templates|grep enabled|wc -l`
        if [[ ${pid} -lt 1 ]];then
            echo "node_chinasoft_templastes $node_process is not running"
        else
            cd /data/www/vhosts/www.chinasoft.com/httpdocs/templates && pm2 stop chinasoft_templates
            echo "stop node_chinasoft_templastes $node_process ok killed $pid"
        fi
    }

    #3.重启 restart_node_chinasoft_templastes
    restart_node_chinasoft_templastes() {
        stop_node_chinasoft_templastes
        start_node_chinasoft_templastes
    }

    #4.查看 node_chinasoft_templastes 状态
    status_node_chinasoft_templastes(){
        #pid=`ps -ef |grep $node_process |grep -v grep |awk '{print $2}'`
        #if [ ! "$pid" ];then
        pid=`pm2 status|grep chinasoft_templates|grep enabled|wc -l`
        if [[ ${pid} -lt 1 ]];then
            echo "node_chinasoft_templastes $node_process is not running"
        else
            echo "node_chinasoft_templastes $node_process is running"
        fi
    }

    #####################  MAIN  ###############################
    usage () {
            echo ""
            echo "  Please Input server infomation!"
            echo ""
            echo "  USAGE: `basename $0` [start|stop|restart|status]"
            echo ""
    }
        

    if [ $# != 1 ]
    then
            usage >&2
            exit 1
    fi
    OPT=$1
    case $OPT in
     
    start)
            echo "start `basename $0`"
            start_node_chinasoft_templastes
        ;;
    stop)
            stop_node_chinasoft_templastes
        ;;
    restart)
            restart_node_chinasoft_templastes
        ;;
    status)
            status_node_chinasoft_templastes
        ;;
    *)
        echo "Usage:`basename $0`  [start|stop|restart|status]"
        exit 1
    esac

    # 进程状态
    [apache@vg-chinasoft-web02:~/vhosts/www.chinasoft.com/httpdocs/templates]$ pm2 status
    ┌─────┬───────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
    │ id  │ name                  │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
    ├─────┼───────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
    │ 0   │ chinasoft_templates    │ default     │ N/A     │ fork    │ 10655    │ 1s     │ 5    │ online    │ 0%       │ 51.0mb   │ apache   │ enabled  │
    └─────┴───────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘


    服务启动了,但是端口没有监听上,即如下程序没有启动

    # ps -ef|grep node
    apache   29956 29943  0 Oct08 ?        00:00:49 node /data/www/vhosts/www.chinasoft.com/httpdocs/templates/node_modules/.bin/nuxt start


    su apache
    cd /data/www/vhosts/www.chinasoft.com/httpdocs/templates && npm install request && npm install && npm install --dependencies
    # 测试,出现如下界面代表ok,如果不行,就删除 /data/www/vhosts/www.chinasoft.com/httpdocs/templates/node_modules ,重新执行安装依赖的操作  cd /data/www/vhosts/www.chinasoft.com/httpdocs/templates && npm install request && npm install && npm install --dependencies

    [apache@vg-chinasoft-web02:~/vhosts/www.chinasoft.com/httpdocs/templates]$ node /data/www/vhosts/www.chinasoft.com/httpdocs/templates/node_modules/.bin/nuxt start

     WARN  mode option is deprecated. You can safely remove it from nuxt.config                                                                                                                                                                        03:39:49


     WARN  No .env file found in /data/www/vhosts/www.chinasoft.com/httpdocs/templates.                                                                                                                                                     nuxt:dotenv 03:39:49


    ℹ NuxtJS collects completely anonymous data about usage.                                                                                                                                                                                           03:39:49
      This will help us improving Nuxt developer experience over the time.
      Read more on https://git.io/nuxt-telemetry

    ? Are you interested in participation? Yes


       ╭────────────────────────────────────────────────────╮
       │                                                    │
       │   Nuxt.js @ v2.14.5                                │
       │                                                    │
       │   ▸ Environment: production                        │
       │   ▸ Rendering:   server-side                       │
       │   ▸ Target:      server                            │
       │                                                    │
       │   Memory usage: 28 MB (RSS: 99.5 MB)               │
       │                                                    │
       │   Listening: http://172.0.0.3:2233/templates/   │
       │                                                    │
       ╰────────────────────────────────────────────────────╯


    cd /data/www/vhosts/www.chinasoft.com/httpdocs/templates && pm2 start npm --watch --name chinasoft_templates -- run start


    # 直到出现一下进程
    [apache@vg-chinasoft-web02:~/vhosts/www.chinasoft.com/httpdocs/templates]$ ps -ef|grep node
    apache   13255 13242 32 03:40 ?        00:00:00 node /data/www/vhosts/www.chinasoft.com/httpdocs/templates/node_modules/.bin/nuxt start

  • 相关阅读:
    程序员职业路线图
    程序员职业路线图
    高级程序员和低级程序员的区别
    高级程序员和低级程序员的区别
    高级程序员和低级程序员的区别
    使用fastai完成图像分类
    hibernate JPA
    mongodb增删改查
    【树莓派从入门到入土】1.什么是树莓派?
    输入一个url之后到底发生了什么
  • 原文地址:https://www.cnblogs.com/reblue520/p/13819763.html
Copyright © 2011-2022 走看看