本文基于初次或再次尝试部署.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或是码云上做个记录。(我还是习惯用码云,毕竟汉字多 哈哈)
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版本,不然如果服务器上的环境和开发环境存在版本差异的话会出现一些坑,比如我遇到的一个坑