• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

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

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:35:11
    文檔

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

    .Net Core部署到CentOS的圖文教程:本文基于初次或再次嘗試部署.Net Core應(yīng)用到Linux服務(wù)器上,我嘗試后自我總結(jié)的經(jīng)驗(yàn)一個(gè)簡單的Demo,嘗試部署在Linux服務(wù)器上和跨服務(wù)器訪問數(shù)據(jù)庫。 一、環(huán)境介紹 1、本地使用Visual Studio 2017開發(fā),使用的.NetCore SDK版本為2.1.4;
    推薦度:
    導(dǎo)讀.Net Core部署到CentOS的圖文教程:本文基于初次或再次嘗試部署.Net Core應(yīng)用到Linux服務(wù)器上,我嘗試后自我總結(jié)的經(jīng)驗(yàn)一個(gè)簡單的Demo,嘗試部署在Linux服務(wù)器上和跨服務(wù)器訪問數(shù)據(jù)庫。 一、環(huán)境介紹 1、本地使用Visual Studio 2017開發(fā),使用的.NetCore SDK版本為2.1.4;

    本文基于初次或再次嘗試部署.Net Core應(yīng)用到Linux服務(wù)器上,我嘗試后自我總結(jié)的經(jīng)驗(yàn)一個(gè)簡單的Demo,嘗試部署在Linux服務(wù)器上和跨服務(wù)器訪問數(shù)據(jù)庫。

    一、環(huán)境介紹

      1、本地使用Visual Studio 2017開發(fā),使用的.NetCore SDK版本為2.1.4;

      2、數(shù)據(jù)庫使用的MSSQLServer,部署在阿里云服務(wù)器上,WindowServer;

      3、Demo部署在騰訊云服務(wù)器上,CentOS系統(tǒng);

      4、CentOS中安裝了.net CoreSDK 2.1.4(開發(fā)和部署的環(huán)境最好一致,我在這里掉過坑)

      5、代碼管理通過Git來進(jìn)行,在本地安裝了Git,在CentOS中也安裝了Git;

      6、利用jexus進(jìn)行反向代理;

    二、項(xiàng)目介紹

    建立一個(gè)Asp.Net Core項(xiàng)目,這個(gè)建立過程就不貼圖了,步驟簡單。

    此處還沒有使用到Docker,建立項(xiàng)目時(shí),沒有勾選Docker支持

    整個(gè)項(xiàng)目從搭建到運(yùn)行的簡略過程

    1、建立實(shí)體

    只加了一個(gè)User類,里面就是基本的用戶名、密碼、地址和創(chuàng)建日期。

    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、配置服務(wù)

    在項(xiàng)目中已經(jīng)默認(rèn)的將EFCore相關(guān)的Nuget包加入進(jìn)來了

    在StartUp.cs文件中進(jìn)行服務(wù)配置,使用

    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的區(qū)別:

      Configure配置的是中間件,整個(gè)服務(wù)運(yùn)行過程中,是以中間件形式進(jìn)行跳轉(zhuǎn),從第一個(gè)中間件到第二個(gè)中間件,完成最后一個(gè)中間件要求后返回到上一個(gè)中間件,而中間件數(shù)量的多少是我們可以去控制的,如果有什么功能需要加入,我們也可以以中間件的形式控制運(yùn)行,Configure方法即時(shí)控制中間件的。

      ConfigureService配置的是整個(gè)運(yùn)行中所用到的各種框架,注入等等,在Configure方法前先被調(diào)用。

      具體可看@行動(dòng)派Xdpie

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

    記得連接字符串名字不要弄錯(cuò)了 ! ! !

    4、為了方便讓EFCore的CodeFirst在我們部署完,啟動(dòng)后就自動(dòng)創(chuàng)建數(shù)據(jù)庫,我們準(zhǔn)備點(diǎn)種子數(shù)據(jù)

    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、編譯運(yùn)行,測試下本地運(yùn)行是否成功。我這就不將我的測試結(jié)果展示出來了。

    6、進(jìn)入Linux服務(wù)器,下載好Git,通過配置好SSH公鑰,在GitHub或是碼云上做個(gè)記錄。(我還是習(xí)慣用碼云,畢竟?jié)h字多 哈哈)

    Linux服務(wù)器上配置Gti的教程

    7、Linux服務(wù)器安裝jexus,通過如下命令安裝

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

    安裝成功后會(huì)提示:OK, Jexus has been installed in /usr/jexus.

      至此,作為反向代理的jexus安裝完畢,以前需要安裝jexus+mono,現(xiàn)在最新版本的jexus已經(jīng)將mono合并進(jìn)去了,形成了現(xiàn)在的jexus獨(dú)立版.

    8、安裝.Net Core環(huán)境

      我的建議是先查看開發(fā)環(huán)境的.Net Core SDK版本,不然如果服務(wù)器上的環(huán)境和開發(fā)環(huán)境存在版本差異的話會(huì)出現(xiàn)一些坑,比如我遇到的一個(gè)坑

    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

    在我安裝服務(wù)器的SDK的時(shí)候選擇的是2.1.3版本,而我的開發(fā)環(huán)境是2.1.4版本,結(jié)果就出錯(cuò)了,弄了一陣子沒搞好這個(gè)原因,同樣就是這個(gè)原因,使得我從Git上pull下來的項(xiàng)目,雖然發(fā)布成功了,但是部署的話是不能夠正常訪問的,同時(shí)通過dotnet /xxx/xxx/xx.dll進(jìn)行測試會(huì)一直出現(xiàn)這個(gè)錯(cuò)誤。

    最后通過干掉已有的版本,獲得最新的版本,同樣,我也在這里有個(gè)問題,貌似沒得更新SDK版本的指令吧?我沒有找到,抱歉,如有,請(qǐng)聯(lián)系我,謝謝。

    通過命令,干掉舊版的CLI,同時(shí)下載新版的SDK搞定,成功運(yùn)行起來了。

    rm -rf /usr/share/dotnet​ 刪除舊版cli

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

    1、配置dotnet產(chǎn)品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

    至此環(huán)境便已經(jīng)搭建好了。

    三、部署過程

    通過Git將碼云或是Github上的項(xiàng)目Pull下來,最好現(xiàn)在服務(wù)器上指定好Git路徑

    比如我的建立一個(gè)專門放置項(xiàng)目的文件夾,其中對(duì)每一個(gè)需要Clone到本地的項(xiàng)目建立一個(gè)文件夾,可以讓我思路比較清晰。或許,你有更好的方式,也可以使用。

    通過建立完畢運(yùn)行指令

    git clone 你項(xiàng)目的SSH地址

    我們可以利用其他dotnet的指令進(jìn)行一些操作了

    具體需要什么指令可以通過dotnet --help進(jìn)行獲得

    查看下文件夾中的內(nèi)容

    可以通過指令dotnet run 將項(xiàng)目進(jìn)行啟動(dòng)

    此處會(huì)發(fā)現(xiàn),我們不能干什么事情了,

    只能按Ctrl + C讓服務(wù)停下來,我們可以將當(dāng)前這個(gè)程序作為后臺(tái)程序運(yùn)行,具體的操作就是Ctrl +Z將服務(wù)暫停

    然后通過指令bg將其設(shè)為后臺(tái)進(jìn)程,如果想要進(jìn)入已有的后臺(tái)進(jìn)程通過指令 fg

    如果我們是只在命令行里操作的話,又看不到頁面,又不能通過外網(wǎng)訪問,

    又想要確保網(wǎng)站是否真的運(yùn)行成功了,我們可以通過指令來查看網(wǎng)站的首頁信息

    curl localhost:65758

    將返回網(wǎng)站的html信息

    具體更多的linux下http指令請(qǐng)參照Linux curl命令詳解

    我們可以發(fā)布了,通過指令dotnet build將項(xiàng)目再次編譯一下

    然后通過dotnet publish -o /xxxx/xxxx 將項(xiàng)目發(fā)布到指定文件夾

    接下來,可以開始配置jexus了.

    /// 1、切換到Jexus配置文件目錄
    cd /usr/jexus/siteconf
    /// 2、復(fù)制默認(rèn)的配置文件為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}
    
    

    至此,需要的所有準(zhǔn)備工作已經(jīng)做好,

    通過jexus的命令來啟動(dòng)服務(wù)

    /// 如果已啟動(dòng) Jexus:
    sh /usr/jexus/jws restart
    
    /// 如果未啟動(dòng) Jexus:
    sh /usr/jexus/jws start
    
    

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

    此時(shí)通過外網(wǎng)輸入ip地址或域名(如果有的話)+端口(我寫的不是默認(rèn)80端口而是9527端口)

    網(wǎng)站正常啟動(dòng),成功讀到阿里云上那臺(tái)數(shù)據(jù)庫服務(wù)器的數(shù)據(jù),同時(shí)也進(jìn)行增刪改成功了。

    至此,嘗試結(jié)束,其中還有許多的其他部分沒有說明進(jìn)來,

    比如說Docker,我是使用了Docker的,但在寫的部分中并沒涉及Docker,因?yàn)槲易约喊l(fā)現(xiàn)一些邏輯繞不過去,具體問題見下一章。

    還有也嘗試了想要用圖形界面操控Linux服務(wù)器并且遠(yuǎn)程操控,專門下了GNOME和TigerVNC,發(fā)現(xiàn)很卡,卡到心累,便不再使用,直接在命令行中進(jìn)行所有工作。

    同時(shí),對(duì)于Window下的項(xiàng)目怎么移動(dòng)到Linux上,其實(shí)還有很多種方式,比如FTP等等,這個(gè)可以從度娘獲知。我比較喜歡Git這種方式。

    四、后續(xù)問題

    此次沒有配合Docker容器一起使用,下一次將會(huì)帶來Docker容器

    1、引入Docker容器,實(shí)現(xiàn)服務(wù)部署于容器中,通過外網(wǎng)訪問可以訪問到Docker容器中的網(wǎng)站。

    2、項(xiàng)目還沒有加入Dockerfile文件,此次都是通過手工去部署的,下一次將使用Dockerfile進(jìn)行服務(wù)部署。

    3、域名綁定還沒有嘗試。

    但是還有一些問題沒有解決

    1、jexus配合Docker使用使用,但是遇到點(diǎn)問題還需解決。

      比如:目前來講,我將網(wǎng)站直接發(fā)布好了,那么我就不需要指令dotnet run 讓其自運(yùn)行自偵聽了,那么全是依靠的jexus的代理。

      這么一來,Docker容器中運(yùn)行服務(wù)那是什么意思呢?我暫時(shí)還不能理解。同時(shí)如果說Docker容器中運(yùn)行網(wǎng)站,那么是由網(wǎng)站本身自偵聽還是由容器中的jexus進(jìn)行代理呢?

    2、端口映射問題,主機(jī)端口和Docker容器中端口映射問題。

    3、Docker容器間訪問設(shè)置

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    .Net Core部署到CentOS的圖文教程:本文基于初次或再次嘗試部署.Net Core應(yīng)用到Linux服務(wù)器上,我嘗試后自我總結(jié)的經(jīng)驗(yàn)一個(gè)簡單的Demo,嘗試部署在Linux服務(wù)器上和跨服務(wù)器訪問數(shù)據(jù)庫。 一、環(huán)境介紹 1、本地使用Visual Studio 2017開發(fā),使用的.NetCore SDK版本為2.1.4;
    推薦度:
    標(biāo)簽: 教程 發(fā)布的 net
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品亚洲欧美无人区乱码 | 久久久久国产精品麻豆AR影院 | 国产AV午夜精品一区二区三区| 国产亚洲精品免费视频播放| 国产精品久久久天天影视| 亚洲码国产精品高潮在线 | 夜色www国产精品资源站| 久久精品国产99久久无毒不卡| 日韩精品电影一区亚洲| 高清日韩精品一区二区三区| 大伊香蕉精品一区视频在线| 亚洲精品美女久久777777| 欧美精品整片300页| 国产专区日韩精品欧美色| 中文字幕精品一区影音先锋| 国产精品久久网| 国产精品9999久久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲国产精品碰碰| 欧美激情精品久久久久久久| 精品一区二区三区色花堂| 国内精品久久久久久久久电影网| 隔壁老王国产在线精品| 国产精品高清在线观看| 成人国产精品秘 果冻传媒在线| 久久亚洲精品视频| 久久777国产线看观看精品| 国产成人精品免费视频网页大全| 国产精品视频色拍拍| 国产精品国产三级国产普通话| 久久国产欧美日韩精品| 久久精品国产精品亚洲毛片| 精品国产一区二区三区无码 | 亚洲无码精品浪潮| 在线观看亚洲精品福利片| 亚洲国产人成精品| 亚洲欧美日韩久久精品| 亚洲国产一成人久久精品| 欧美肥屁VIDEOSSEX精品| 久久精品九九亚洲精品| 成人午夜精品网站在线观看|