• dotNet core 应用部署至 centos(超详解附截图)


    文章来源:公众号-智能化IT系统。

    需要安装的插件以及支撑架构

    1.dotnetSDK

    dotnet 相关命令是属于 .NET Core command-line (CLI) 的一部分,Microsoft 为我们提供了这个命令行工具以供我们在开发程序中使用,它主要用来进行对代码的编译、NuGet 包的管理、程序的运行、测试等等。

    2.jexus

    Jexus 是Linux平台上 的一款免费的ASP.NET WEB服务器。它是 Linux、Unix、FreeBSD等非Windows系统架设 ASP.NET WEB 服务器的核心程序,具备反向代理、入侵检测等重要功能。拥有IIS和其它Web服务器所不具备的高度的安全性

    3.supervisord

    supervisord 是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效。可以将非Daemon的应用转为Daemon程序。

    安装dotNetSDK

    执行命令

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

    sudo yum update 

    sudo yum install libunwind libicu 

    sudo yum install dotnet-sdk-2.1.200

    安装对应的dotnet运行时,这次开发用到的是 2.0.6,参考地址:

    https://www.microsoft.com/net/download/linux-package-manager/centos/runtime-2.0.6

    执行命令

    sudo yum install dotnet-runtime-2.0.6

    安装Jexus

    curl https://jexus.org/release/x64/install.sh|sh

    cd /usr/jexus/siteconf 

    cp default lottery  

    #lottery是配置名称,不同网站名称不同 

    vim lottery

    修改的内容参考:

    port=80 

    root=/ /dotnet/webAPP/admin1.lottery.com/ 

    hosts=*,admin2.lottery.com    #OR your.com,*.your.com 

    # addr=0.0.0.0 

    # CheckQuery=false 

    NoLog=true  

    AppHost={CmdLine=/dotnet/webAPP/admin1.lottery.com/Lottery.WEB.dll;AppRoot=/dotnet/webAPP/admin1.lottery.com;Port=5001}

    #这一行数据可以不管他,配置https时候用到

    # UseHttps=true

    # ssl.certificate=/x/xxx.crt  #or pem

    # ssl.certificatekey=/x/xxx.key

    # ssl.protocol=TLSv1.0    # TLSv1.1 or  TLSv1.2...

    # ssl.ciphers=

    重启读取配置文件

    sh /usr/jexus/jws restart

    重启读取配置文件之后,本地机器做好host文件映射即可通过域名方式访问该站点

    设置jexus开机自启动

    参考地址:http://www.bubuko.com/infodetail-1295747.html

    cd /etc/init.d 

    vim jws

    编辑如下:

    #!/bin/bash   

    #chkconfig: 2345 80 05

    #description:jws 

    #

    . /etc/rc.d/init.d/functions

    case "$1" in

    start)

      echo "Jexus Start.."

      /usr/jexus/jws start

      ;;

     stop)

      echo "Jexus Stop.."

      /usr/jexus/jws stop

      ;;

     restart)

      echo "Jexus Restart"

      /usr/jexus/jws restart

      ;;

     status)

      /usr/jexus/jws status

      ;;*)

      exit 1

      ;;

     esac

     exit $RETVAL

    添加权限

    chmod 766 jws

    添加服务

    chkconfig --add jws

    安装Supervisord

    参考地址:https://www.cnblogs.com/hobinly/p/7382038.html

    yum install python-setuptools 

    easy_install supervisor

    配置supervisor

    在etc下创建目录,并赋权限

    mkdir -m 700 -p /etc/supervisor

    在目录“ /etc/supervisor”下创建配置文件

    echo_supervisord_conf > /etc/supervisor/supervisord.conf

    修改配置文件

    vim /etc/supervisor/supervisord.conf

    在文件末尾添加,注意首尾需无空格,需顶格

    [include] 

    files=/etc/supervisor/conf.d/*.conf

    在目录“/etc/supervisor”下创建dotnet core 进程配置文件存放目录“conf.d”

    mkdir -m 700 /etc/supervisor/conf.d

    创建进程配置文件

    vim /etc/supervisor/conf.d/lottery.conf

    编辑内容:

    [program:Lottery.WEB] 

    command=/bin/bash -c "dotnet Lottery.WEB.dll"

    directory=/dotnet/webAPP/admin1.lottery.com/

    stderr_logfile=/var/log/Lottery.error.log

    stdout_logfile=/var/log/Lottery.stdout.log

    environment=ASPNETCORE_ENVIRONMENT=Production 

    user=root 

    stopsignal=INT 

    autostart=true

    autorestart=true

    startsecs=1

    具体参数说明如下:

    [program:Lottery.WEB] ;显示名称

    command=/bin/bash -c "dotnet MyDotNetName.dll"  ;运行命令,启动dotnet进程

    directory=/usr/PublishOutput/   ;MyDotNetName目录

    stderr_logfile=/var/log/Lottery.error.log  ;错误日志文件

    stdout_logfile=/var/log/Lottery.stdout.log  ;日志文件

    environment=ASPNETCORE_ENVIRONMENT=Production  ;进程环境变量

    user=root   ;进程执行用户

    autostart=true  ;自动启动 autorestart=true   ;是否自动重启

    startsecs=1     ;自动重启间隔时间

    备注:command=/bin/bash -c "dotnet Lottery.WEB.dll"

    可以改成 command=dotnet /dotnet/webAPP/admin1.lottery.com/dotnet Lottery.WEB.dll

    创建supervisor 自启动服务

    vim /etc/systemd/system/supervisor.service

    编辑内容:

    [Unit] 

    Description=supervisor 

    [Service] 

    Type=forking 

    ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf 

    ExecStop=/usr/bin/supervisorctl shutdown 

    ExecReload=/usr/bin/supervisorctl reload 

    KillMode=process 

    Restart=on-failure

    RestartSec=42s

    [Install] 

    WantedBy=multi-user.target

    使配置生效

    systemctl daemon-reload

    设置服务开机启动,即设置enable

    systemctl enable supervisor.service

    启动服务

    systemctl start supervisor.service

    验证dotnet进程是否启动,使用命令“ps -ef | grep dotnet”查看dotnet 是否运行

    ps -ef | grep dotnet

    root      1549  2529  0 17:17 pts/0    00:00:00 grep --color=auto dotnet

    root     27795 27764  0 17:07 ?        00:00:02 dotnet Lottery.WEB.dll

    supervisor远程管理

    使用命令“vim /etc/supervisor/supervisord.conf”修改配置文件,如下设置

    [inet_http_server]

    port=192.168.1.71:9001      ;ip 加端口 

    username=admin               ;登陆账号,可以不设 

    password=123456              ;登陆账户,可以不设

    重启服务,就可以访问了,注意防火墙是否对端口9001开放。

    也可以设置成

    [inet_http_server]

    port=*:9001

    username=admin               ;登陆账号,可以不设

    password=123456              ;登陆账户,可以不设

    问题汇总

    图片验证码报错

    解决:

    yum install libgdiplus-devel

    注意:

    yum install libgdiplus 后,在centos7 下,程序并不能运行成功还是报错,查看libgdiplus安装情况

    rpm -qa |grep libgdiplus

    rpm  -ql libgdiplus-2.10-9.el7.x86_64

    在/usr/lib64下缺少libgdiplus.so文件

    Centos7 需要通过安装libgdiplus-devel来解决

    yum install autoconf automake libtool

    yum install freetype-devel fontconfig libXft-devel

    yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel

    yum install glib2-devel cairo-devel

    git clone https://github.com/mono/libgdiplus

    cd libgdiplus

    ./autogen.sh

    make

    make install

    cd /usr/lib64/

    ln -s /usr/local/lib/libgdiplus.so gdiplus.dll

    错误一:

    type init 错误。提示找不到libgdiplus组件

    Make solution 1:

    ln -s /usr/local/lib/libgdiplus.so /usr/lib64/libgdiplus.so

    ln -s /usr/local/lib/libgdiplus.so /usr/libgdiplus.so

    验证码乱码问题:

    如果验证码乱码,请确认生成验证码的字体库是否存在服务器中

    注意事项、扩展延伸

    关于更新应用

    Dotnet程序在运行当中,如果需要更新 dotnetCore应用,将新打包的应用直接覆盖到部署的路径下,在从supervisord 9001端口中重启指定的应用,或者在服务器上执行命令

    supervisorctl -c /etc/supervisor/supervisord.conf restart Lottery.WEB

    关于dotnetCore WEB应用设置不同的端口

    修改Program.cs文件

    public static IWebHost BuildWebHost(string[] args) =>

    WebHost.CreateDefaultBuilder(args)

    .UseContentRoot(Directory.GetCurrentDirectory())

    .UseKestrel()

    .UseStartup<Startup>()

              .UseUrls("http://*:5001")

    .Build();

    }

    关于部署 https的WEB应用

    在部署https WEB应用的时候,我已经拿到了 一个后缀为pem文件还有一个后缀为key的文件

    第一步:需要这两个文件生成后缀为pfx的文件,并设置生成 pfx文件的密码

    centos系统下执行命令

    openssl pkcs12 -export -out iiscert.pfx -inkey private.key -in public.pem

    然后会让你输入密码(密码不要忘记了)

    第二步:修改jexus站点配置信息

    vim /etc/supervisor/conf.d/lottery.conf

    编辑如下:

    UseHttps=true

    ssl.certificate=/dotnet/httpsKey/public.pem  #crt or pem

    ssl.certificatekey=/dotnet/httpsKey/private.key

    ssl.protocol=TLSv1.2    # TLSv1.1 or  TLSv1.2...

    #ssl.ciphers=

    wp! 保存

    修改程序 Program.cs文件

    public static IWebHost BuildWebHost(string[] args) =>

    WebHost.CreateDefaultBuilder(args)

    .UseContentRoot(Directory.GetCurrentDirectory())

    .UseKestrel(options => options.Listen(IPAddress.Any, 5003, listenOptions =>

    {

    listenOptions.UseHttps(new X509Certificate2("/dotnet/httpsKey/iiscert.pfx", "123456"));

    }))

    .UseStartup<Startup>()

    .Build();

    重新部署到服务器,并重启supervisor对应的进程

    关于部署非WEB应用

    如果需要部署到非WEB应用程序,则不需要执行 jexus的步骤,直接在 supervisor上新增一个进程配置文件(/etc/supervisor/conf.d/  这个目录下一个*,conf文件代表一个进程配置)


    公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。

  • 相关阅读:
    html5+css3酷炫音频播放器代码
    js/html/css做一个简单的图片自动(auto)轮播效果//带注释
    gVIM+zencoding快速开发HTML/CSS/JS(适用WEB前端)
    使用libcurl,根据url下载对应html页面
    CSS+HTML+JQuery简单菜单
    【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)
    【CodeForces727E/CF727E】Games on a CD (字符串哈希)
    【洛谷3224/BZOJ2733】[HNOI2012]永无乡 (Splay启发式合并)
    【BZOJ2565】最长双回文串 (Manacher算法)
    【洛谷2926/BZOJ1607】[USACO08DEC]Patting Heads拍头(筛法)
  • 原文地址:https://www.cnblogs.com/xtary/p/9528125.html
Copyright © 2020-2023  润新知