• Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署


    Image result for linux .net core

    运行环境

    照例,先亮底

    centos:7.2
    cpu:1核 2G内存 1M带宽

    辅助工具:xshell xftp

    搭建.net core运行环境

    .net core 的运行环境我单独写了一篇,请看我的这篇文章[linux(centos)搭建.net core 运行环境]

    准备你的.net core web 程序

    我这里新建一个空的.net core web程序用以演示,实际部署时是你的项目

    创建web项目(我自己使用vs2017 ,如使用vscode的需要自己安装windows的SDK和使用dotnet命令)

    1539874500349

    首先确保你的项目能在windows上运行

    1539874615825

    ok,接下来发布

    我发布到默认的 binRelease etcoreapp2.1publish 下面,你们可以自定义目录

    1539874647886

    发布完成后可看到如下文件结构

    1539874735884

    ok,web程序已经准备好。

    上传应用程序到linux

    我这里使用xftp工具上传,上传目录是 /home/website/WebApplication3

    1539875022573

    启动web站点

    去程序所在目录

    cd /home/website/WebApplication3
    

    启动站点

    dotnet WebApplication3.dll
    

    1539876880136

    显示上示信息代表启动成功。现在打开 http://你的服务器ip:5000

    看到运行正常的web页面(5000端口打不开请检查你的服务器防火墙,网络配置等);

    配置守护进程(Supervisor)

    从上面的运行结果来看,.net core 程序是以服务的方式前台运行(类似windows控制台),那么如果:

    1、服务器突然死机重启了;

    2、异常导致站点服务挂掉了;

    3、运行的shell被运维人员或什么人不知道,关掉了;

    等等原因,不管什么原因,服务异常关闭在生产环境都是不可接受的,那么我能不能有什么办法保证,我的服务时刻要处于运行状态,一旦挂掉,我立刻重启它呢?

    有,这就是Supervisor干的事;

    (其实还有其他的进程守护工具的,有机会我们再单独聊聊)

    1、安装Supervisor

    yum install python-setuptools
    easy_install supervisor
    

    2、配置Supervisor

    mkdir /etc/supervisor
    echo_supervisord_conf > /etc/supervisor/supervisord.conf
    

    将supervisord.conf文件的最底下的,改成这样

    1539917139050

    [include]
    files = conf.d/*.conf
    

    如果需要启用UI管理的话也是修改这个文件
    改这几句

    ;[inet_http_server]         ; inet (TCP) server disabled by default 
    ;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)  #监听
    ;username=user              ; (default is no username (open server)) #用户名
    ;password=123   #密码
    

    *ps:如果服务已启动,修改配置文件可用“supervisorctl reload”命令来使其生效*

    3、添加对WebApplication3.dll的守护

    创建一个 WebApplication3.conf文件,内容如下:

    ;后面的中文是注释,为避免乱码等问题导致supervisor启动失败,可以先删掉注释再放到服务器

    [program:WebApplication3]
    command=dotnet WebApplication3.dll ; 运行程序的命令
    directory=/home/wwwroot/WebApplication3/ ; 命令执行的目录
    autorestart=true ; 程序意外退出是否自动重启
    stderr_logfile=/var/log/WebApplication3.err.log ; 错误日志文件
    stdout_logfile=/var/log/WebApplication3.out.log ; 输出日志文件
    environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
    user=root ; 进程执行的用户身份
    stopsignal=INT
    

    将文件拷贝至:“/etc/supervisor/conf.d/WebApplication3.conf”下

    运行supervisord,查看是否生效

    supervisord -c /etc/supervisor/supervisord.conf
    ps -ef | grep WebApplication3
    

    可以看到,WebApplication3正在运行,那么对WebApplication3站点的进程守护配置完成,下面测试一下;

    1539917767557

    4、Supervisor配置开机启动

    不言而喻,这个很重要了,守护进程是需要开机启动的;

    cd /usr/lib/systemd/system/
    vim supervisord.service
    

    插入以下内容,保存:

    # dservice for systemd (CentOS 7.0+)
    # by ET-CS (https://github.com/ET-CS)
    [Unit]
    Description=Supervisor daemon
    
    [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 enable supervisord
    

    查看是否已激活:

    systemctl is-enabled supervisord
    

    5、测试Supervisor对.net core 站点的守护

    使用:reboot命令重启后即可,再次访问站点,你会惊喜的发现站点依旧在运行

    [参考]

    http://www.cnblogs.com/ants/p/5732337.html

    至此,.net core 程序普通部署方式完毕,若使用docker方式部署,请看我的 Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署(已发布)

  • 相关阅读:
    架构的本质
    gulp 在 angular 项目中的使用
    Ionic 安装部署
    REST API 基于ACCESS TOKEN 的权限解决方案
    ionic 运行过程中动态切换API服务器地址
    ionic 实现双击返回键退出应用功能
    TPS和QPS是什么,他们的区别是什么
    redis和mySql的数据同步的解析
    mySql的UDF是什么
    export导出.xls时,在火狐的情况下出现表名乱码的情况的解决方案
  • 原文地址:https://www.cnblogs.com/xiaxiaolu/p/9968351.html
Copyright © 2020-2023  润新知