.Net Core部署到CentOS的图文教程

本文基于初次或再次尝试部署.Net Core应用到Linux服务器上,我尝试后自我总结的经验一个简单的Demo,尝试部署在Linux服务器上和跨服务器访问数据库。

一、环境介绍

  1、本地使用Visual Studio 2017开发,使用的.NetCore SDK版本为2.1.4;

  2、数据库使用的MSSQLServer,部署在阿里云服务器上,WindowServer;

  3、Demo部署在腾讯云服务器上,CentOS系统;

  4、CentOS中安装了.net CoreSDK 2.1.4(开发和部署的环境最好一致,我在这里掉过坑)

  5、代码管理通过Git来进行,在本地安装了Git,在CentOS中也安装了Git;

  6、利用jexus进行反向代理;

二、项目介绍

建立一个Asp.Net Core项目,这个建立过程就不贴图了,步骤简单。

此处还没有使用到Docker,建立项目时,没有勾选Docker支持

整个项目从搭建到运行的简略过程

1、建立实体

只加了一个User类,里面就是基本的用户名、密码、地址和创建日期。

public class User
 {
  public User()
  {
   this.CreateDate = DateTime.Now;
  }

  public int Id { get; set; }
  public string UserName { get; set; }
  public string Password { get; set; }
  public string Address { get; set; }
  public DateTime CreateDate { get; set; }
 }

2、接下来是建立DbContext

public class HDShopDbContext:DbContext
 {
  public HDShopDbContext(DbContextOptions<HDShopDbContext> options)
   :base(options)
  {

  }
  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
   //modelBuilder.Entity<User>().ToTable("xxxx");
  }

  public virtual DbSet<User> User { get; set; }
 }

3、配置服务

在项目中已经默认的将EFCore相关的Nuget包加入进来了

在StartUp.cs文件中进行服务配置,使用

services.AddDbContext<HDShopDbContext>(d => d.UseSqlServer(Configuration.GetConnectionString("Default")));

public class Startup
 {
  public Startup(IConfiguration configuration)
  {
   Configuration = configuration;
  }

  public IConfiguration Configuration { get; }

  // This method gets called by the runtime. Use this method to add services to the container.
  public void ConfigureServices(IServiceCollection services)
  {
   services.AddDbContext<HDShopDbContext>(d => d.UseSqlServer(Configuration.GetConnectionString("Default")));
   services.AddMvc();
  }

  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  {
   if (env.IsDevelopment())
   {
    app.UseBrowserLink();
    app.UseDeveloperExceptionPage();
   }
   else
   {
    app.UseExceptionHandler("/Home/Error");
   }

   app.UseStaticFiles();

   app.UseMvc(routes =>
   {
    routes.MapRoute(
     name: "default",
     template: "{controller=Home}/{action=Index}/{id?}");
   });
  }
 }

此处,解释下Configure和ConfigureService的区别:

  Configure配置的是中间件,整个服务运行过程中,是以中间件形式进行跳转,从第一个中间件到第二个中间件,完成最后一个中间件要求后返回到上一个中间件,而中间件数量的多少是我们可以去控制的,如果有什么功能需要加入,我们也可以以中间件的形式控制运行,Configure方法即时控制中间件的。

  ConfigureService配置的是整个运行中所用到的各种框架,注入等等,在Configure方法前先被调用。

  具体可看@行动派Xdpie

在appsetting.json中配置连接字符串,由于Linux中不能安装SQLServer除2017以外的其他版本我便将另一台WindowServer服务器数据库弄过来用了,SQLServer2017对于Linux服务器配置要求很高,我等小平民伤不起,哈哈。

记得连接字符串名字不要弄错了 ! ! !

4、为了方便让EFCore的CodeFirst在我们部署完,启动后就自动创建数据库,我们准备点种子数据

public class DbInitializer
 {
  public static void Initialize(HDShopDbContext context)
  {
   context.Database.EnsureCreated();
   if (context.User.Any())
   {
    return;
   }
   var users = new User[]
   {
    new User(){Address="测试",UserName ="1测试1",Password="123456"},
    new User(){Address="测试",UserName ="2测试2",Password="123456"},
    new User(){Address="测试",UserName ="3测试3",Password="123456"},
    new User(){Address="测试",UserName ="4测试4",Password="123456"},
    new User(){Address="测试",UserName ="5测试5",Password="123456"},
    new User(){Address="测试",UserName ="6测试6",Password="123456"},
   };
   foreach (var user in users)
   {
    context.Add(user);
   }
   context.SaveChanges();
  }
 }

5、编译运行,测试下本地运行是否成功。我这就不将我的测试结果展示出来了。

6、进入Linux服务器,下载好Git,通过配置好SSH公钥,在GitHub或是码云上做个记录。(我还是习惯用码云,毕竟汉字多 哈哈)

Linux服务器上配置Gti的教程

7、Linux服务器安装jexus,通过如下命令安装

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

安装成功后会提示:OK, Jexus has been installed in /usr/jexus.

  至此,作为反向代理的jexus安装完毕,以前需要安装jexus+mono,现在最新版本的jexus已经将mono合并进去了,形成了现在的jexus独立版.

8、安装.Net Core环境

  我的建议是先查看开发环境的.Net Core SDK版本,不然如果服务器上的环境和开发环境存在版本差异的话会出现一些坑,比如我遇到的一个坑

Error:
  An assembly specified in the application dependencies manifest ({projectName}.deps.json) was not found:
    package: 'Microsoft.AspNetCore.Antiforgery', version: '2.0.2'
    path: 'lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll'
  This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
    aspnetcore-store-2.0.5.xml

在我安装服务器的SDK的时候选择的是2.1.3版本,而我的开发环境是2.1.4版本,结果就出错了,弄了一阵子没搞好这个原因,同样就是这个原因,使得我从Git上pull下来的项目,虽然发布成功了,但是部署的话是不能够正常访问的,同时通过dotnet /xxx/xxx/xx.dll进行测试会一直出现这个错误。

最后通过干掉已有的版本,获得最新的版本,同样,我也在这里有个问题,貌似没得更新SDK版本的指令吧?我没有找到,抱歉,如有,请联系我,谢谢。

通过命令,干掉旧版的CLI,同时下载新版的SDK搞定,成功运行起来了。

rm -rf /usr/share/dotnet​ 删除旧版cli

下面是我的安装.Net Core的指令

1、配置dotnet产品Feed

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]
name=packages-microsoft-com-prod
baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

2、安装SDK,注意版本!!!

sudo yum update
sudo yum -y install libunwind libicu
sudo yum install dotnet-sdk-2.1.4

至此环境便已经搭建好了。

三、部署过程

通过Git将码云或是Github上的项目Pull下来,最好现在服务器上指定好Git路径

比如我的建立一个专门放置项目的文件夹,其中对每一个需要Clone到本地的项目建立一个文件夹,可以让我思路比较清晰。或许,你有更好的方式,也可以使用。

通过建立完毕运行指令

git clone 你项目的SSH地址

我们可以利用其他dotnet的指令进行一些操作了

具体需要什么指令可以通过dotnet --help进行获得

查看下文件夹中的内容

可以通过指令dotnet run 将项目进行启动

此处会发现,我们不能干什么事情了,

只能按Ctrl + C让服务停下来,我们可以将当前这个程序作为后台程序运行,具体的操作就是Ctrl +Z将服务暂停

然后通过指令bg将其设为后台进程,如果想要进入已有的后台进程通过指令 fg

如果我们是只在命令行里操作的话,又看不到页面,又不能通过外网访问,

又想要确保网站是否真的运行成功了,我们可以通过指令来查看网站的首页信息

curl localhost:65758

将返回网站的html信息

具体更多的linux下http指令请参照Linux curl命令详解

我们可以发布了,通过指令dotnet build将项目再次编译一下

然后通过dotnet publish -o /xxxx/xxxx 将项目发布到指定文件夹

接下来,可以开始配置jexus了.

/// 1、切换到Jexus配置文件目录
cd /usr/jexus/siteconf
/// 2、复制默认的配置文件为HDShop
cp default HDShop
vi HDShop

######################
# Web Site: HDShop
########################################
port=9527
root=/ /var/www/HDShop
hosts= * #OR your.com,*.your.com

AppHost={CmdLine=dotnet /var/www/HDShop/HDShop.dll;AppRoot=/var/www/HDShop/;Port=0}

至此,需要的所有准备工作已经做好,

通过jexus的命令来启动服务

/// 如果已启动 Jexus:
sh /usr/jexus/jws restart

/// 如果未启动 Jexus:
sh /usr/jexus/jws start

jexus的命令大全可以参照:Jexus-5.6.3使用详解

此时通过外网输入ip地址或域名(如果有的话)+端口(我写的不是默认80端口而是9527端口)

网站正常启动,成功读到阿里云上那台数据库服务器的数据,同时也进行增删改成功了。

至此,尝试结束,其中还有许多的其他部分没有说明进来,

比如说Docker,我是使用了Docker的,但在写的部分中并没涉及Docker,因为我自己发现一些逻辑绕不过去,具体问题见下一章。

还有也尝试了想要用图形界面操控Linux服务器并且远程操控,专门下了GNOME和TigerVNC,发现很卡,卡到心累,便不再使用,直接在命令行中进行所有工作。

同时,对于Window下的项目怎么移动到Linux上,其实还有很多种方式,比如FTP等等,这个可以从度娘获知。我比较喜欢Git这种方式。

四、后续问题

此次没有配合Docker容器一起使用,下一次将会带来Docker容器

1、引入Docker容器,实现服务部署于容器中,通过外网访问可以访问到Docker容器中的网站。

2、项目还没有加入Dockerfile文件,此次都是通过手工去部署的,下一次将使用Dockerfile进行服务部署。

3、域名绑定还没有尝试。

但是还有一些问题没有解决

1、jexus配合Docker使用使用,但是遇到点问题还需解决。

  比如:目前来讲,我将网站直接发布好了,那么我就不需要指令dotnet run 让其自运行自侦听了,那么全是依靠的jexus的代理。

  这么一来,Docker容器中运行服务那是什么意思呢?我暂时还不能理解。同时如果说Docker容器中运行网站,那么是由网站本身自侦听还是由容器中的jexus进行代理呢?

2、端口映射问题,主机端口和Docker容器中端口映射问题。

3、Docker容器间访问设置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • CentOS上搭建Nginx+Mono运行asp.net环境的配置方法
  • 详解将ASP.NET Core应用程序部署至生产环境中(CentOS7)
  • 在CentOS6.5上使用Jexus安装部署ASP.NET MVC4和WebApi
  • CentOS 5.1下跑Mono和Asp.net的实现方法分享
  • CentOS 5.1下跑Mono和Asp.net的实现方法
(0)

相关推荐

  • CentOS 5.1下跑Mono和Asp.net的实现方法

    下载编译环境: yum install gcc bison pkgconfig glib2-devel gettext make httpd-devel gcc-c++ libstdc++-devel 下载并解压源代码: wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.6.3.tar.bz2 wget http://ftp.novell.com/pub/mono/sources/mod_mono/mod_mono-2.6.3.tar

  • 在CentOS6.5上使用Jexus安装部署ASP.NET MVC4和WebApi

    Jexus 即 Jexus Web Server,简称JWS,是Linux平台上的一款ASP.NET WEB服务器,是 Linux.Unix.FreeBSD 等非Windows系统架设 ASP.NET WEB 服务器的核心程序,是企业级ASP.NET跨平台部署的一种可选方案.与其它WEB服务器相比,Jexus不但具有跨平台ASP.NET服务器这样的标志性特征,同时还拥有内核级的安全监控.入侵检测.URL重写.无文件路由等一系列重要功能和专有特性. 一.使用Jexus5.8.1独立版 网址http

  • CentOS上搭建Nginx+Mono运行asp.net环境的配置方法

    安装步骤: 一.获取开源相关程序: 1.利用CentOS Linux系统自带的yum命令安装.升级所需的程序库: sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bz

  • 详解将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    将ASP.NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署

  • CentOS 5.1下跑Mono和Asp.net的实现方法分享

    下载编译环境:yum install gcc bison pkgconfig glib2-devel gettext make httpd-devel gcc-c++ libstdc++-devel 下载并解压源代码:wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.6.3.tar.bz2wget http://ftp.novell.com/pub/mono/sources/mod_mono/mod_mono-2.6.3.tar.bz

  • .Net Core部署到CentOS的图文教程

    本文基于初次或再次尝试部署.Net Core应用到Linux服务器上,我尝试后自我总结的经验一个简单的Demo,尝试部署在Linux服务器上和跨服务器访问数据库. 一.环境介绍 1.本地使用Visual Studio 2017开发,使用的.NetCore SDK版本为2.1.4: 2.数据库使用的MSSQLServer,部署在阿里云服务器上,WindowServer: 3.Demo部署在腾讯云服务器上,CentOS系统; 4.CentOS中安装了.net CoreSDK 2.1.4(开发和部署的

  • VirtualBox虚拟机安装CentOS 7图文教程

    刚好要重装虚拟机上的CentOS系统,就顺便记录下来给新手朋友们做做参考,在windows平台上通过安装虚拟机学习linux基本上是linux入门的必经之路,作为一名Java web开发者应当掌握一定的linux技能,因为linux在服务器方面有着更强的稳定性和安全性,而运维方面往往也是开发者容易忽视的一部分,总是将java程序部署在windows server上跑多少也显得有点low,所以本篇blog就记录一下在VirtualBox虚拟机中安装Linux CentOS 7. 新建虚拟机 因为比

  • 基于openstack安装部署私有云详细图文教程

    本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内容非常详细. 一.云计算 基本概念 云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源.云是网络.互联网的一种比喻说法.过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象.因此,云计算甚至

  • Windows Server 2008 R2上部署Exchange Server 2010图文教程

    这两个产品可谓是09年下半年微软推出的重头产品,均为64位架构,而且其功能和性能远远超出了其早期版本,在此不再对这方面的内容做过多的描述. Windows Server 2008 R2和Exchange Server 2010的结合是"完美"的.对于Exchange Server 2010的前一版本Exchange Server 2007来讲,只能运行在Windows Server 2008操作平台上,因此,想要在Windows Server 2008 R2部署Exchange 看来只

  • VMware14 上安装CentOS 7 图文教程

    CentOS简介 CentOS 是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本.每个版本的 CentOS都会获得十年的支持(通过安全更新方式).新版本的 CentOS 大约每两年发行一次,而每个版本的 CentOS 会定期(大概每六个月)更新一次,以便支持新的硬件.这样,建立一个安全.低维护.稳定.高预测性.高重复性的 Linux 环境. CentOS是Community Enterprise Operating System的缩写. CentOS 7 的

  • Ubuntu系统中部署Vagrant和VirtualBox的图文教程

    一.前言 1.Vagrant是一个搭建完整的虚拟开发环境的工具 2.实验环境 在Win10中利用VMWare Workstation创建一台Ubuntu虚拟机,版本为64位Ubuntu Desktop 16.04,4核,4G内存:然后在Ubuntu中安装Vagrant和VirtualBox,所用到的Vagrant和VirtualBox版本都是截至2018/04/08时候的最新版. 之所以使用VMWare Workstation来创建Ubuntu的虚拟机而不是VirtualBox,跟下面即将说到的

  • VMware下CentOS静默安装oracle12.2详细图文教程

    环境准备: VMware+CentOS,jdk 一.校验系统磁盘大小 1.命令 df -h 保证可用磁盘大小15GB(包括oracle安装时需要空间7.5GB + oracle安装zip包接近3G+安装包解压文件3G) 如果磁盘不满足,安装会失败,需要扩容! 二.安装准备 1.创建运行oracle数据库的系统用户和用户组 groupadd oinstall groupadd dba useradd -g oinstall -g dba -m oracle passwd oracle #不用管提示

  • Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)

    由于最近学习tensorflow的需要,tensorflow是在Linux环境下,使用的是Python.为了方便程序的调试,尝试在Windows下的Pycharm远程连接到虚拟机中Centos下的Python环境.(这里我采用的是ssh的远程连接) 1.准备工作: 固定centos的IP,这里我的固定IP为 192.168.254.128 . centos中安装ssh.(这里我采用的是ssh的远程连接) centos中Python环境已安装. 2.打开Pycharm,File->Settings

  • VirtualBox软件下载安装及Linux环境安装部署图文教程详解

    一.VirtualBox软件下载及安装 首先进入VirtualBox官方网站进行软件下载, https://www.virtualbox.org/,目前VirtualBox最新的版本为6.1,详细如下图: 点击"Downloads"按钮,即跳转自"VirtualBox 6.1.4 platform packages"下载页面 选择"Windows hosts",即进行VirtualBox软件下载 双击"VirtualBox-6.1.4-

  • 2022最新青龙面板部署完整版图文教程

    目录 前言 教程开始 1.1 系统选择: centos7.6 1.2 SSH远程服务器管理工具:FinalShell 1.2 ssh连接成功 1.3 安装 1.4登录青龙面板 前言 0.0 安装对象推荐 centos7.6 0.1 服务器租用推荐腾讯云.阿里云 传送门:腾讯云 阿里云 教程开始 1.1 系统选择: centos7.6 下面以腾讯云服务器为例,先选地区.然后选择官方镜像.系统镜像.Centos7.6版本 密码请自行设置,记录下来. 请确保教程中你使用的所有端口已经在服务器供应商的管

随机推荐