一、背景

最近半年或最近三个月来,公司在计划大刀阔斧的规划重构新的产品。按目前的计划和宣传还是很令人期待的。前端预计应用现在很流行的前端框架,有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命令参考连接:

Linux部署DotNetCore记录的更多相关文章

  1. Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码

    Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...

  2. Linux终端回话记录和回放工具 - asciinema使用总结

    目前linux终端回放工具常见的就是asciinema和script了, 这两种工具都有那种类似于视频回放的效果.虽然这样做的代价是录制过程中需要占用一定的cpu资源以及录制后可能会因为视频文件太大而 ...

  3. HDFS部署测试记录(2019/05)

    目录 HDFS部署测试记录 0.HDFS基础知识 1.基本组成结构与文件访问过程 2.NameNode启动时如何维护元数据 3.HDFS文件上传流程 1.系统环境 1.安装大致记录: 2.磁盘分区 3 ...

  4. ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

    ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...

  5. MiniCRT 64位 linux 系统移植记录:64位gcc的几点注意

    32位未修改源码与修改版的代码下载: git clone git@github.com:youzhonghui/MiniCRT.git MiniCRT 64位 linux 系统移植记录 MiniCRT ...

  6. Linux部署ASP.NET 5 (vNext)

    原文:Linux部署ASP.NET 5 (vNext) ASP.NET 5 (vNext) Linux部署   引言 工欲善其事,必先利其器. 首先,我们先明确下以下基本概念 Linux相关 Ubun ...

  7. 通过Jexus 部署 dotnetcore

    通过Jexus 部署 dotnetcore版本MusicStore 示例程序 ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mo ...

  8. Linux 操作命令列表记录

    Linux 操作命令列表记录 SSH登录 登录 ## 范式 ssh [username]@[host] ## 例 ssh -p 1222 root@10.0.0.1 使用非默认端口(ssh默认端口22 ...

  9. Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包

    Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...

随机推荐

  1. PHP将Base64图片转换为本地图片并保存

    本文出至:新太潮流网络博客 /** * [将Base64图片转换为本地图片并保存] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB h ...

  2. python基础一数据类型之列表

    摘要: python基础一中写到列表,那么这篇主要讲列表. 1,定义列表 2,列表.元祖.字符串都属于序列,都可以用用索引和切片. 3,列表的方法 1,定义列表 list1 = ['a','b',1, ...

  3. java网页数据抓取实例

    在很多行业中,要对行业数据进行分类汇总,及时分析行业数据,对于公司未来的发展,有很好的参照和横向对比.所以,在实际工作,我们可能要遇到数据采集这个概念,数据采集的最终目的就是要获得数据,提取有用的数据 ...

  4. Node.js环境搭建和学习(windwos环境)

    Node.js环境搭建和学习 一.环境搭建 1.下载安装文件 下载地址http://nodejs-org.qiniudn.com/下载Node.js环境安装包,根据操作系统下载对应的安装包 下载地址 ...

  5. IBM ServerGuide引导盘全系列下载网址

    IBM ServerGuide引导盘全系列下载网址 官网链接 https://www.ibm.com/support/home/docdisplay?lndocid=SERV-GUIDE v9.30 ...

  6. Linux磁盘及分区之wwid和uuid

    背景描述,在Linux系统中,如果添加了新的SCSI磁盘或者映射SAN存储LUN操作,重启操作系统之后会出现磁盘标识符(sd*)错乱的情况. 例如之前添加的SAN存储LUN的磁盘标识符为/dev/sd ...

  7. Collection中的List,Set的toString()方法

    代码:     Collection c = new ArrayList();     c.add("hello");     c.add("world"); ...

  8. ConcurrentModificationException 集合并发修改异常 解决

    import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /** * 问题? * 有一个集合, ...

  9. RSA 非对称加密,私钥转码为pkcs8 错误总结

    RSA 非对称加密,私钥转码为pkcs8 错误总结 最近在和某上市公司对接金融方面的业务时,关于RSA对接过程中遇到了一个坑,特来分享下解决方案. 该上市公司简称为A公司,我们简称为B公司.A-B两家 ...

  10. windows系统显示隐藏文件以及显示文件扩展名

    1.XP系统 打开“我的电脑”,“工具”,“文件夹选项” 勾选如下图 2.win7系统 打开“计算机”,“组织”,“文件夹和搜索选项” 勾选如下图 3.win10系统 打开“此电脑”,“查看”,勾选如 ...