亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:32:56
字體:
來源:轉載
供稿:網友

本文基于初次或再次嘗試部署.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支持

.Net,Core,CentOS

整個項目從搭建到運行的簡略過程

.Net,Core,CentOS

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

.Net,Core,CentOS

在appsetting.json中配置連接字符串,由于Linux中不能安裝SQLServer除2017以外的其他版本我便將另一臺WindowServer服務器數據庫弄過來用了,SQLServer2017對于Linux服務器配置要求很高,我等小平民傷不起,哈哈。

.Net,Core,CentOS

記得連接字符串名字不要弄錯了 ! ! !

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.ascsudo sh -c 'echo -e "[packages-microsoft-com-prod]name=packages-microsoft-com-prod baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prodenabled=1gpgcheck=1gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

2、安裝SDK,注意版本?。。?/p>

sudo yum updatesudo yum -y install libunwind libicusudo yum install dotnet-sdk-2.1.4

至此環境便已經搭建好了。

三、部署過程

通過Git將碼云或是Github上的項目Pull下來,最好現在服務器上指定好Git路徑

比如我的建立一個專門放置項目的文件夾,其中對每一個需要Clone到本地的項目建立一個文件夾,可以讓我思路比較清晰?;蛟S,你有更好的方式,也可以使用。

.Net,Core,CentOS

通過建立完畢運行指令

git clone 你項目的SSH地址

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

具體需要什么指令可以通過dotnet --help進行獲得

查看下文件夾中的內容

.Net,Core,CentOS

可以通過指令dotnet run 將項目進行啟動

.Net,Core,CentOS

此處會發現,我們不能干什么事情了,

只能按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、復制默認的配置文件為HDShopcp default HDShopvi HDShop####################### Web Site: HDShop########################################port=9527root=/ /var/www/HDShophosts= * #OR your.com,*.your.comAppHost={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端口)

.Net,Core,CentOS

網站正常啟動,成功讀到阿里云上那臺數據庫服務器的數據,同時也進行增刪改成功了。

至此,嘗試結束,其中還有許多的其他部分沒有說明進來,

比如說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容器間訪問設置

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本午夜人人精品| 国产精品精品久久久久久| 91精品国产高清久久久久久91| 日韩成人黄色av| 欧美大片网站在线观看| 欧美激情免费视频| 亚洲最大av网| 91精品视频观看| 日韩av在线电影网| 亚洲精品国产精品自产a区红杏吧| 欧美黄色三级网站| 欧美电影院免费观看| 亚洲理论片在线观看| 777精品视频| 日韩有码视频在线| 日韩欧美在线网址| 免费av在线一区| 日本高清不卡在线| 日本一区二区在线免费播放| 亚洲在线免费观看| 日韩免费观看网站| 精品美女久久久久久免费| 国产一区av在线| 欧美又大粗又爽又黄大片视频| 亚洲欧美日韩一区二区三区在线| 午夜精品蜜臀一区二区三区免费| 国产精品视频男人的天堂| 国产精品欧美激情在线播放| 福利视频一区二区| 欧美激情一区二区三区久久久| 国产欧美日韩综合精品| 日韩av免费在线观看| 日韩电影中文字幕| 青青草原成人在线视频| 欧美精品一区二区免费| zzijzzij亚洲日本成熟少妇| 欧美性猛交xxxxx水多| 爽爽爽爽爽爽爽成人免费观看| 日韩黄在线观看| 91理论片午午论夜理片久久| 性金发美女69hd大尺寸| 国产欧美一区二区三区久久| 中文字幕日本精品| 91最新在线免费观看| 欧美一级黑人aaaaaaa做受| 欧美日韩在线视频首页| 91精品国产综合久久久久久久久| 在线播放国产一区二区三区| 久久99视频免费| 国产精品中文久久久久久久| 正在播放欧美一区| 国产亚洲激情视频在线| 伊人久久综合97精品| 亚洲福利在线播放| 国产成人自拍视频在线观看| 亚洲成人网av| 国产欧美一区二区三区久久| 91sa在线看| 日韩欧美中文免费| 国产精品成人免费视频| 亚洲人成电影在线| 激情懂色av一区av二区av| 久久成人人人人精品欧| 成人免费淫片aa视频免费| 日韩在线免费av| 久久久久久久久电影| 国产日韩欧美中文| 日本久久久久久久久久久| 国产99视频在线观看| 欧美高清视频在线| 亚洲美女av在线播放| 国产精品日日摸夜夜添夜夜av| 中文字幕精品在线视频| 麻豆国产va免费精品高清在线| 亚洲午夜av电影| 国产精品一区二区女厕厕| www.日韩视频| 亚洲成人精品久久久| 欧美亚洲日本网站| 国产亚洲精品美女久久久久| 欧美成人精品不卡视频在线观看| 欧美日韩国产一区二区| 色婷婷综合成人| 久久久国产精品亚洲一区| 久久久久久久久久久网站| 国产日本欧美一区二区三区在线| 69久久夜色精品国产69| 亚洲免费伊人电影在线观看av| 日本精品久久电影| 久久久精品中文字幕| 国产精品揄拍500视频| 亚洲毛片在线免费观看| 91精品视频在线免费观看| 国产精品美女久久久久av超清| 精品亚洲一区二区三区四区五区| 成人性生交大片免费观看嘿嘿视频| 国产精品27p| 中文字幕av日韩| 国产精品成人国产乱一区| 色偷偷91综合久久噜噜| 日韩免费观看av| 中文字幕亚洲字幕| 国产精品久久久久av| 成人久久精品视频| 欧美日韩在线视频观看| 亚洲国模精品私拍| 成人激情黄色网| 久久人人爽人人爽爽久久| 日本高清不卡在线| 亚洲美女福利视频网站| 欧美性猛交xxxx黑人猛交| 日本高清不卡的在线| 精品福利在线观看| 色哟哟入口国产精品| 亚洲www永久成人夜色| 国产91网红主播在线观看| 日韩精品视频在线免费观看| 亚洲欧美日韩一区二区在线| 欧美亚洲在线播放| 高清欧美性猛交xxxx| 92国产精品视频| 日韩在线观看免费全集电视剧网站| 2019中文字幕在线免费观看| 亚洲激情国产精品| 久久精品国产久精国产一老狼| 热re99久久精品国产66热| 91九色蝌蚪国产| 91网站免费看| 国产精品福利观看| 精品国产户外野外| 国产视频在线观看一区二区| 欧美亚洲免费电影| 久久久久久高潮国产精品视| 久久人人爽亚洲精品天堂| 国外成人在线直播| 91国产视频在线播放| 日韩一区二区三区国产| 97激碰免费视频| 国产精品美女主播| 一本色道久久综合狠狠躁篇怎么玩| 亚州国产精品久久久| 福利微拍一区二区| 国产做受69高潮| 国产热re99久久6国产精品| 美日韩丰满少妇在线观看| 久久久久久亚洲| 97人人模人人爽人人喊中文字| 亚洲成人精品久久久| 亚洲深夜福利视频| 日韩美女av在线免费观看| 亚洲夜晚福利在线观看| 这里只有视频精品| 亚洲第一网站免费视频| 久久精品夜夜夜夜夜久久| 日韩精品在线视频观看| 国产一区二区三区在线观看网站| 亚洲伊人久久大香线蕉av| 久久香蕉精品香蕉| 中文字幕在线看视频国产欧美| 免费97视频在线精品国自产拍| 亚洲午夜精品久久久久久久久久久久| 日韩av网站导航| 欧美电影免费看| 91国偷自产一区二区三区的观看方式|