• Linux部署DotNetCore记录


    一、背景

    最近半年或最近三个月来,公司在计划大刀阔斧的规划重构新的产品。按目前的计划和宣传还是很令人期待的。前端预计应用现在很流行的前端框架,有Vue、ElementUI等,后端宣传了很多微服务、持续集成、持续部署、单元测试,最终一致性等诸多理论概念的东西,总之是个我很感兴趣的事。最近半年来,我也看了不少微服务、分布式的书,但写成文档的却很少,时间一过,就淡忘了,相当于没有收获。趁着这个强烈学习的良机,我买了阿里云的一台Linux服务器,用于实践linux下.netcore的部署、运维等。部署过程中,遇到过各种各样的问题,但都已解决,
    如果花了几天时间解决的问题,不做个记录,那不是对自己的浪费么?所以,才有了这篇博客
    二、windows构建

    先来构建下windows下发布包,关于DotNetCore的创建方法我就不具体截图了,微软官方文档有更全的操作,可从网上查询KestrelHttp示例程序。对于 ASP.NET Core 2.1 版,Kestrel 默认传输不再基于 Libuv,而是基于托管的套接字。
    2.1建好项目KestrelDemo运行:
    dotnet publish -c release -o "发布目录"
    cd "发布目录"
    dotnet KestrelDemo.dll
    在window下查看运行效果,将发布包推到码云地址或github地址,便于linux下获取。
    三、跨平台部署

    我的阿里云linux发行版是CentOS7.4,.netcore版本2.0,接下来我们演示部署DotNet环境
    3.1 安装.netCore运行时
    注册Microsoft密钥
    更新yum库,获取最新
    sudo yum update
    sudo yum install aspnetcore-runtime-2.1
    查看是否安装成功
    dotnet --version
    3.2安装git
    因发布包是用git管理,所以需要centos上安装git。
    yum install git
    创建发布目录
    mkdir /cusD/wwwroot/KesPublish
    进入发布目录
    cd /cusD/wwwroot/KesPublish
    初始化git
    git init
    拉取git代码
    git pull 发布包地址
    3.3启动
    dotnet KestrelDemo.dll
    查看发布后效果。正常情况下,简单的部署就完成了。
    但是现在有个问题,当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。这时候就需要linux的守护进程了。下面我们继续讲述如何创建守护进程
    四、守护进程

    4.1 概念
    Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等...
    4.2创建服务文件
    sudo nano /etc/systemd/system/KestrelDemoSer.service
    4.3示例文件(要有足够权限)
    [Unit]
    Description=KestrelDemo running on CentOS
    [Service]
    WorkingDirectory=/cusD/wwwroot/KesPublish
    Type=simple
    User=root
    Group=root
    ExecStart=/usr/bin/dotnet /cusD/wwwroot/KesPublish/KestrelDemo.dll
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    SyslogIdentifier=dotnet-example
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    [Install]
    WantedBy=multi-user.target
    按CTRL+O保存,CTRL+X退出。
    Linux 具有区分大小写的文件系统。 将 ASPNETCORE_ENVIRONMENT 设置为“生产”会导致搜索配置文件 appsettings.Production.json,而不是 appsettings.production.json。
    4.4保存文件并启用服务
    systemctl enable KestrelDemoSer.service
    4.5启用服务,并确认运行
    systemctl start KestrelDemoSer.service
    systemctl status KestrelDemoSer.service
    4.6查看日志
    sudo journalctl -fu KestrelDemoSer.service
    reboot重启后,查询连接是否正常访问,初学者不熟悉权限问题,最好以root账号配置
    五、扩展关注

    Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。
    Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。
    5.1、查看是否安装
    systemctl --version
    5.2、查看安装目录
    whereis systemd
    whereis systemctl
    5.3、检测是否运行
    ps -eaf | grep [s]ystemd
    5.4、分析systemd启动进程
    systemd-analyze
    5.5、分析启动时各个进程花费时间
    systemd-analyze blame
    六、遇到问题及解决

    6.1、如何选择linux发行版
    这个我没有什么建议,但是在使用或部署的过程遇到了很多坑,如想安装服务器图形界面。我不断利用阿里云的更换系统盘功能试用了Debain,Ubuntu,CentOS等,最终就CentOS安装成功了,所以其他我就放弃了。等把Linux用熟了,我还是会用用其他的发行版的。
    6.2、DotNetCore版本问题
    如果不找到正确的途径,没有事情会是顺利的。我从网上找的教程,安装了.NetCore运行时,然后部署后运行
    dotnet 你的dll名称
    提示发布包是2.1版,系统是1.1版。这是个入门坑,找的教程太旧了,。后来尝试卸载也失败,就任性的又重新更换了系统盘。按照微软官方文档就三行命令解决,见3.1
    6.3、Git注意
    用mkdir创建好自己的发布目录后,要调用下
    git init
    如果不调用,会有报错提示
    6.4、守护进程
    这个类似windows的服务,node下有pm2支持,也有python写的的supervisor可以支持。
    我按教程安装了supervisor,但配置好后,依然不能启动,有可能是配置不对等原因。
    然后就开始查找微软官方文档看到了systemd,通过systemctl来配置启用服务,其实第一次用systemctl status 服务名称,提示状态失败的,后来又重新走了下步骤又好了。然后就是用户权限的问题,也注意下。
    6.5、连接工具
    手机上可以用阿里云字段的SSL工具,电脑端可以用XShell,都很方便。
    6.6、常用命令
    命令
    说明
    cd ~
    跳转到根目录
    cd ..
    跳转到当前目录
    ls
    当前目录下文件列表
    mkdir
    创建目录
    rm
    删除文件
    users
    显示当前登录用户
    nano
    字符终端文本编辑器,Ctrl+O保存,Ctrl+X退出
    install
    安装软件
    tree
    树状图列出目录的内容
    whereis
    查找二进制程序、代码等相关文件路径
    vi
    功能强大的文本编辑器,:wq保存退出。
    systemctl
    系统服务管理器指令
    sudo
    以其他身份来执行命令
    find
    用来在指定目录下查找文件
    6.7、编辑器
    上篇文章用的MarkDown编辑器,这次用秀米,放到博客园的编辑器后,效果惨不忍睹,最后又复制到有道云编辑下了,才看着正常了。
    七、参考连接

    重要提示:有官方资料的以官方最新为准!
    DotNetCore内置http服务器项目地址:
    dotnet命令行请参考:
    安装.netcore运行时参考连接:
    IIS配置DOtNetCore
    systemctl参考连接:
    linux命令参考连接:
  • 相关阅读:
    宋宝华:slab在内核内存管理和用户态Memcached的双重存在
    能感知功耗的Linux调度器(EAS)
    内存检测王者之剑—valgrind
    随心所动,厂商的CPU核管理策略介绍
    一文读懂 进程怎么绑定 CPU
    Fastbootd实现原理分析
    cachestat、cachetop、pcstat-linux系统缓存命中率分析工具
    WIFI的WPS和pin码(测试失败)
    视频下载(钉钉、B站等) 解决方案
    DevExpress 报表设计文件(.vsrepx)不显示或显示空白
  • 原文地址:https://www.cnblogs.com/fancunwei/p/9308953.html
Copyright © 2020-2023  润新知