部署的图形教程 核心到核心网
本文在第一次或第二次尝试部署的基础上。Net Core到Linux服务器,我尝试在Linux服务器上部署,跨服务器访问数据库。
一、环境介绍
1.使用Visual Studio 2017和的版本在本地开发。使用的NetCore SDK是2 . 1 . 4;
2.数据库使用的MSSQLServer部署在阿里巴巴云服务器和WindowServer上;
3.演示部署在腾讯云服务器、CentOS系统上;
4.那个。net CoreSDK 2.1.4安装在CentOS中(开发和部署环境最好是一致的,我在这里掉了一个洞)
5.代码管理是通过Git实现的。Git安装在本地,Git安装在CentOS中。
6.使用jexus进行反向代理;
二、项目介绍
创建一个Asp.Net核心项目,这个过程不会被映射,步骤很简单。
这里没有使用Docker,并且在创建项目时没有检查Docker支持
整个项目从建设到运营的简要过程
1.建立实体
仅添加一个User类,其中包含基本用户名、密码、地址和创建日期。
公共类用户{ public User() { this。CreateDate=DateTime。现在;} public int Id { get设置;}公共字符串UserName { get设置;}公共字符串Password { get设置;}公共字符串Address { get设置;}公共DateTime CreateDate { get设置;} }2.下一步是建立数据库上下文
公共类HDShopDbContext:DbContext {公共HDShopDbContext(dbcontextoptions shdshopdbcontext选项):base(选项){ }受保护的覆盖void on model creating(model builder model builder){//model builder。EntityUser()。ToTable(' xxxx ');}公共虚拟DbSetUser用户{ get设置;} }3.配置服务
默认情况下,项目中已经添加了与EFCore相关的Nuget包
StartUp.cs文件中的服务配置,使用
服务。adddbcontexthdshopbcontext(d=d . usesql server(配置。GetConnectionString(' Default '));
公共类Startup { public Startup(icon Configuration)配置){ Configuration=configuration}公共图标配置{ get} //运行时调用此方法。使用此方法向容器添加服务。public void ConfigureServices(IServiceCollection services){ services。adddbcontexthdshopbcontext(d=d . usesql server(配置。GetConnectionString(' Default '));服务。AddMvc();} //此方法由运行时调用。使用此方法配置HTTP请求管道。public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env) { if (env。IsDevelopment()) { app。UseBrowserLink();app。usedeveloper exception page();} else { app。UseExceptionHandler('/Home/Error ');} app。UseStaticFiles();app。UseMvc(routes={ routes。MapRoute(name: 'default ',template : ' { controller=Home }/{ action=Index }/{ id?}');});}}在这里,解释一下配置和配置服务的区别:
Configure是用中间件配置的。在整个服务运行过程中,从第一个中间件跳转到第二个中间件,在完成最后一个中间件需求后,返回到上一个中间件。我们可以控制中间件的数量。如果有需要增加的功能,我们也可以通过中间件的形式来控制运行。配置方法可以立即控制中间件。
配置服务配置各种框架、注入等。在整个操作中使用,并且在configure方法之前调用。
详情见@ action Xdpie
在appsetting.json中配置连接字符串由于除2017之外的其他版本的SQLServer无法安装在Linux中,所以我将使用另一个WindowServer数据库。SQLServer2017对Linux服务器配置要求很高,我等不起小人物了,哈哈。
记住连接字符串名称,不要弄错了!
4.为了方便EFCore的CodeFirst在我们部署并启动数据库后自动创建数据库,我们准备了一些种子数据
公共类DbInitializer {公共静态void Initialize(HDShopDbContext){ context。database . EnsureCreated();if(上下文。user . Any()){ return;} varusers=New User[]{ newuser () {address=' test ',username=' 1test1 ',password=' 123456'},newuser () {address=' test ',username=' 2test2 ',password=' 123456'},New User(){Address=' test ',username=' 3test 3 ',password=' 123456'},newuser () {address=' test ',username=' 4test 4 ',password=' 123456'},New User(){ Address='foreach(用户中的var用户){ context。添加(用户);}上下文。saveChanges();} }5.编译运行,测试本地操作是否成功。我不会展示我的测试结果。
6.进入Linux服务器,下载Git,通过配置SSH公钥在GitHub或代码云上做记录。(我还是习惯用代码云,毕竟汉字多了哈哈)
在Linux服务器上配置Gti教程
7.按照以下命令在Linux服务器上安装jexus
成功安装curl https://jexus.org/release/x64/install.sh|sh,后,系统会提示您:好的,jesus已经安装在/usr/jesus中。
至此,jexus作为反向代理已经安装完毕。之前有必要安装jexus mono。现在,最新版本的jexus已经合并了mono,形成了jexus的独立版本。
8.安装。网络核心环境
我的建议是检查的版本。先说开发环境的Net Core SDK,否则如果服务器上的环境和开发环境有版本差异就会出现一些坑,比如我遇到的一个坑
错误:在应用程序依赖项清单({projectName}.deps.json)中指定的程序集找不到:包: 'Microsoft。版本: '2.0.2 '路径: 'lib/netstandard2.0/微软。当使用以下目标清单文件: AspNetCore-store-2 . 0 . 5 . XML发布应用程序时,此程序集应该在本地运行时存储中
我安装服务器的SDK的时候选择了2.1.3版本,但是我的开发环境是2.1.4版本,结果出了问题。我有段时间没做好。这也是同样的原因,使得我从Git拉出来的项目发布成功,但是如果部署了就无法正常访问。同时总会通过dotnet/XXX/XXX/xx.dll进行测试。
最后,通过杀死现有版本来获得最新版本。同样,我这里也有一个问题。似乎没有更新SDK版本的指令。找不到了,抱歉,如果有,请联系我,谢谢。
通过命令,去掉旧的CLI,下载新的SDK,运行成功。
Rm -rf /usr/share/dotnet删除旧的cli下面是我的安装说明。净核心
1.配置dotnet产品提要
sudo rpm-import https://packages.microsoft.com/keys/microsoft.ascsudo sh-c ' echo-e '[packages-Microsoft-com-prod]name=packages-Microsoft-com-prod base URL=https://packages.microsoft.com/yumrepos/Microsoft-rhel 7.3-prodenabled=1 gpg check=1 gpg key=https://packages . Microsoft.com/keys/Microsoft . ASC '/etc/yum . repo . d/dotnetdev . repo ' 2、安装SDK,注意版本!
sudo yum update sudo yum-y install libund libi cus Udo yum install dotnet-SDK-2 . 1 . 4环境已经设置好了。
第三,部署流程
通过Git拉代码云或者Github上的项目,最好现在就指定服务器上的Git路径
比如我要为特殊项目设置一个文件夹,其中每个需要在本地克隆的项目都设置一个文件夹,这样可以让我的思路更加清晰。也许你有更好的方法,你可以用它。
通过建立运行指令,
Git克隆你项目的SSH地址,我们可以用其他dotnet指令做一些操作
需要什么说明可以通过dotnet - help获得
检查下面文件夹的内容
您可以通过指示dotnet运行来启动项目
在这里我们会发现我们什么都做不了。
我们只能按Ctrl C停止服务。我们可以运行当前程序作为后台程序。具体操作是按Ctrl+z暂停服务。
然后通过指令bg设置为后台进程,如果想通过指令fg进入已有后台进程
如果我们只在命令行上操作,我们看不到页面,也无法通过外部网络访问。
如果我们想确保网站成功运行,我们可以通过说明来查看网站的主页信息
Curlllocalhost :65758将返回网站的html信息
对于linux下更具体的http命令,请参考Linux curl命令进行详细解释
我们可以发布它,并通过指示dotnet build再次编译项目
然后通过dotnet publish -o /xxxx/xxxx将项目发布到指定的文件夹
接下来,您可以开始配置jexus。
///1.切换到Jexus配置文件cd /usr/jexus/siteconf///2的目录。将默认配置文件复制为hdshopcp默认hdshoppi hdshop # # # # # # # # # # # # # # # website : HDP shop。# # # # # # # # # # # # # # # # # # # # # # port=9527 root=//var/www/HDShop hosts=* # OR your.com、* your.comapphost={ CmdLine=dotnet/var/www/HDShop/HDShop . dll;AppRoot=/var/www/HDshop/;端口=0}此时,所有必要的准备工作都已完成。
通过jexus的命令启动服务
///如果jexus: sh/usr/jexus/jwsrestart启动///如果je xus:sh/usr/je xus/jwstart je xus未启动,请参考:Jexus-5.6.3了解详细说明。
此时,通过外部网络输入ip地址或域名(如果有)端口(我写的是端口9527,而不是默认端口80)
网站正常启动,成功读取了阿里巴巴云上数据库服务器的数据,也添加、删除、修改成功。
至此,尝试结束,很多其他部分没有解释。
比如我用的是Docker,但是我写的时候没有提到Docker,因为我发现有些逻辑是绕不过去的。具体问题见下一章。
此外,我试图使用图形界面来控制Linux服务器并远程控制它。我特意下载了GNOME和TigerVNC,发现很卡,就停止使用,直接在命令行做所有的工作。
同时,将Window下的项目移动到Linux的方式有很多,比如FTP,从杜娘那里就可以知道。我更喜欢Git。
四.后续问题
这次它不与Docker容器一起使用,Docker容器将在下次带来
1.引入Docker容器,可以在容器中部署服务,通过外部网络访问可以访问Docker容器中的网站。
2.Dockerfile尚未添加到项目中,这次是手动部署的。Dockerfile下次将用于服务部署。
3.addon域还没试过。
但是仍然有一些问题没有解决
1.jexus与Docker结合使用,但仍有一些问题需要解决。
比如目前我直接发布网站,不需要指令dotnet run自己运行和监听,所以依赖jexus的代理。
那么,在Docker容器中运行服务意味着什么呢?我还不能理解。同时,如果网站在Docker容器中运行,会是网站自身自监听还是jexus在容器中代理?
2.Docker容器中的端口映射问题、主机端口和端口映射问题。
3.Docker容器之间的访问设置
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:部署的图形教程 核心到核心网是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。