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密钥

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

更新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服务器项目地址:

https://github.com/aspnet/KestrelHttpServer

dotnet命令行请参考:

https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet?tabs=netcore21

安装.netcore运行时参考连接:

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

IIS配置DOtNetCore

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x#monitoring-our-web-application

systemctl参考连接:

http://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/

https://linux.cn/article-5926-1.html

linux命令参考连接:

http://man.linuxde.net/

原文地址:https://www.cnblogs.com/fancunwei/p/9308953.html

时间: 2024-10-16 21:14:27

Linux部署DotNetCore记录的相关文章

Linux下部署docker记录(1)-Volume使用

之前部署了Linux下部署docker记录(0)-基础环境安装,接下来看看Docker Volume的使用. Docker volume使用1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享.数据卷可以在多个容器之间共享.2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过--volumes-froms参数来挂载该数

Node.js 切近实战(十二) 之Linux部署

之前的话我们的项目都是跑在windows上,今天我们要将我们的程序跑到linxu机器上.在看linux部署之前,我们先看一下node.js类似于asp.net mvc的过滤器或者叫拦截器.在app.js中我们加入如下代码 var beforeRequest = function (req, res, next) {     if (req.originalUrl == '/'          || req.originalUrl == '/login'          || req.orig

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

Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记录如下. 环境:Linux系统为centos 6  mono 版本 mono-3.2.1  jexus版本 jexus-5.6.4 一.安装环境 1.安装mono 首先安装系统环境: yum -y install gcc gcc-c++ bison pkgconfig glib2-devel get

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

32位未修改源码与修改版的代码下载: git clone git@github.com:youzhonghui/MiniCRT.git MiniCRT 64位 linux 系统移植记录 MiniCRT是<程序员的自我修养:链接,转载于库>的作者俞甲子写的小型的C运行时库.里面提供了printf,malloc,free,fopen等比较常用的函数实现. 之所以要捣鼓这个东西,是因为要自己写一个链接器,链接标准库的时候出了麻烦,一些符号在整个libc中都找不到定义,标准库又太大,研究源码,翻文档都

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

Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ©Copyright 蕃薯耀 2017年3月6日 http://www.cnblogs.com/fanshuyao/ 一.Linux快速部署W

Linux部署多个tomcat

Linux部署多个tomcat 1.环境:1.1. Centos 5.01.2.Tomcat 5.5.17 2.需要解决一下几个问题2.1.不同的tomcat启动和关闭监听不同的端口2.2.不同的tomcat的启动文件startup.sh中要指定各自的CATALINA_HOME和CATALINA_BASE这两个环境变量. 3.解决步骤: 3.1.修改/etc目录下的profile文件,添加一组Java环境变量,和两组CATALINA环境变量:修改后的profile文件示例如下: JAVA_HOM

通过Jexus 部署 dotnetcore

通过Jexus 部署 dotnetcore版本MusicStore 示例程序 ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示如何在CentOS上运行.NET Core版本的MusicStore,并通过Jexus对外发布. 上篇文章 <结合Jexus + Kestrel 部署 asp.net core 生产环境> 我们已经部署好了.NET Co

Azure linux 部署 VSFTP

之前发布了在Azure VM ---Windows Server下的FTP部署,对于公有云的使用,Linux的使用占有很大的比例,同样遇到了使用linux部署FTP的要求,同样刚开始接触Azure的用户,在部署时遇到与Windows Server类似的问题,在此增加一些关于Linux的应用部署. FTP的部署过程基本与Windows Server类似. 1 安装vsftp 通过apt-get install vsftpd安装linux系统自带的FTP软件 2 编辑config文件 由于这次配置,

Linux # 部署OpenStack Swift 开发环境

blog.csdn.net/lzueclipse/article/details/26405753#1536434-qzone-1-61807-cac534f6a16e831f54c45c717ec6acf9 部署OpenStack Swift 开发环境--SAIO - Swift All In One,遇到的问题和解决 - 坚持学习 lzueclipse 一个小白的分布式存储之路 [email protected] - 博客频道 - CSDN.NET blog.sina.com.cn/s/bl