zoukankan      html  css  js  c++  java
  • NetCore部署到Linux服务器+Supervisor的步骤及过程中踩过的坑

    本文作备忘使用

    服务器配置:

    下面是所有操作的具体步骤:

    1.安装nginx   参考

    1.1 添加源:默认情况Centos7中没有Nginx源,最近Nginx官网提供了Centos的源地址。
    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    注:上面的命令执行后不确定是否需要update一下yum,我没有update也能安装成功

    1.2 安装Nginx:通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。
    sudo yum install -y nginx
    1.3 启动Nginx并设置开机自动运行
    sudo systemctl start nginx.service
    sudo systemctl enable nginx.service
    1.4 浏览查看效果
    在浏览器中输入您的服务器地址:http://x.x.x.x/

    2.安装supervisor   参考

     2.1 执行以下命令以安装supervisor

    yum install python-setuptools
    easy_install supervisor
    注:据说会发生无法安装的情况,不过我没有遇到,看来还是幸运的。还有很多方法,还没有尝试其他的方法。懒~~

     2.2 配置supervisor

      2.2.1 创建配置文件目录及文件

    #mkdir -p /etc/supervisor  
    #mkdir -p /etc/supervisor/conf.d
    #echo_supervisord_conf > /etc/supervisor/supervisord.conf
    #vim /etc/supervisor/supervisord.conf

      2.2.2 配置内容如下(参考)

    # 启用访问web控制界面,inet_http_server区段修改为
    [inet_http_server]         
    port=*:9001        
    
    # 修改log路径
    [supervisord]
    logfile=/var/log/supervisord.log
    
    # 修改 unix_http_server file 路径,避免被系统删除
    [unix_http_server]
    file=/var/lock/supervisor.sock
    
    # 和unix_http_server file保持一致
    [supervisorctl]
    serverurl=unix:///var/lock/supervisor.sock
    
    # include区段修改为
    [include]
    files = /etc/supervisor/conf.d/*.conf

      2.3 配置supervisor的开机服务

    #vim /etc/rc.d/init.d/supervisord

     2.3.1 文件内容如下:

    #!/bin/sh
    #
    # /etc/rc.d/init.d/supervisord
    #
    # Supervisor is a client/server system that
    # allows its users to monitor and control a
    # number of processes on UNIX-like operating
    # systems.
    #
    # chkconfig: - 64 36
    # description: Supervisor Server
    # processname: supervisord
    
    # Source init functions
    . /etc/init.d/functions
    
    RETVAL=0
    prog="supervisord"
    pidfile="/tmp/supervisord.pid"
    lockfile="/var/lock/supervisor.sock"
    
    start()
    {
            echo -n $"Starting $prog: "
            daemon --pidfile $pidfile supervisord -c /etc/supervisor/supervisord.conf
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && touch ${lockfile}
    }
    
    stop()
    {
            echo -n $"Shutting down $prog: "
            killproc -p ${pidfile} /usr/bin/supervisord
            RETVAL=$?
            echo
            if [ $RETVAL -eq 0 ] ; then
                    rm -f ${lockfile} ${pidfile}
            fi
    }
    
    case "$1" in
    
      start)
        start
      ;;
    
      stop)
        stop
      ;;
    
      status)
            status $prog
      ;;
    
      restart)
        stop
        start
      ;;
    
      *)
        echo "Usage: $0 {start|stop|restart|status}"
      ;;
    
    esac

    保存退出

    增加开机服务

    chmod +x /etc/rc.d/init.d/supervisord
    chkconfig --add supervisord
    chkconfig supervisord on

    启动服务并验证

    service supervisord start

    如果服务器启动了防火墙

    firewall-cmd --zone=public --add-port=9001/tcp --permanent
    firewall-cmd --reload

    3.安装netcore SDK    跳转

    添加dotnet产品Feed

    在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项。这只需要每台机器完成一次。

    打开终端并运行以下命令:

    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

    安装.NET SDK

    更新可用于安装的产品,然后安装.NET SDK。

    在终端中,运行以下命令:

    sudo yum update
    sudo yum install dotnet-sdk-2.2

    4.安装chrome+chromedriver(参考

     4.1 利用 yum 命令安装 google-chrome 超级简单(安装最新版):

    yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

     4.2 查看chrome版本

    google-chrome --version

     4.3 下载chromedirver

    *********目前搜集到的有两个下载地址*********
    ************看你喜欢,任君选择************
    官网提供 http://chromedriver.storage.googleapis.com/index.html
    淘宝镜像 http://npm.taobao.org/mirrors/chromedriver/

    注:1.需要下载与chrome版本对应的版本,每个版本里面有一个notes.txt文本,里面有支持的chrome版本。
      2.下载后上传到服务器/usr/bin目录

    5.配置supervisor进程

     在/etc/supervisor/conf.d目录下面新建一个你项目名的配置文件,如:MyDotNetName.conf

     内容如下:

    [program:MyDotNetName]
    command=/bin/bash -c "dotnet MyDotNetName.dll"
    directory=/usr/PublishOutput/
    stderr_logfile=/var/log/MyDotNetName.error.log
    stdout_logfile=/var/log/MyDotNetName.stdout.log
    environment=ASPNETCORE_ENVIRONMENT=Production
    user=root
    stopsignal=INT
    autostart=true
    autorestart=true
    startsecs=3

    :wq保存退出编辑当前配置文件

    注:我在操作完上面这步后,进程并没有及时启动,后来查找了一翻资料后,执行了附里面的第一二条命令后才正常启动,具体是先执行的哪条不太记得了。不过我想这个影响应该不大吧。

    附:supervisor的运维命令

    # 读取有更新(增加)的配置文件,不会启动新添加的程序
    supervisorctl reread
    # 重启配置文件修改过的程序
    supervisorctl update
    # 查看程序状态
    supervisorctl status
    
    # 关闭程序
    supervisorctl stop app-name
    
    # 启动程序
    supervisorctl start app-name
    
    # 重启
    supervisorctl restart app-name

     补充:每次替换新发布的项目文件内容后,发现都会报错。查看后应该是chromedriver没有执行权限,我的操作是执行如下所示的命令,对当前项目文件所在目录赋予执行权限

    chmod -R 777 /usr/youpath

     如果有哪位大能有更好的解决方案欢迎留言指教,谢谢!

    2019年3月19日 补充

      发现使用9001端口远程管理进行多次重启进程后就出现了各种报错,后来查看资料后的解决办法就是:结束掉chrome及chromedriver的所有进程

     批量结束某个应用的所有进程命令如下(例如结束掉所有chrome进程)

    ps -aux|grep chrome|awk '{print $2}'|xargs kill -9

      后来在supervisor子进程配置文件中添加配置(目前正在试着运行)

    #vim /etc/supervisor/supervisord.conf
    killasgroup = true stopasgroup = true
  • 相关阅读:
    Unity3d与Android交互
    A star 寻路
    网络协议
    数据驱动
    有限状态机(FSM)
    自己封装一个Log模块
    Unity5.x版本AssetBundle加载研究
    Unity5.x版本AssetBundle打包研究
    alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!
    使用代码生成器“代码工厂”快速生成B/S程序代码
  • 原文地址:https://www.cnblogs.com/Gethin/p/10544793.html
Copyright © 2011-2022 走看看