<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:35:11
        文檔

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

        .Net Core部署到CentOS的圖文教程:本文基于初次或再次嘗試部署.Net Core應用到Linux服務器上,我嘗試后自我總結的經驗一個簡單的Demo,嘗試部署在Linux服務器上和跨服務器訪問數據庫。 一、環境介紹 1、本地使用Visual Studio 2017開發,使用的.NetCore SDK版本為2.1.4;
        推薦度:
        導讀.Net Core部署到CentOS的圖文教程:本文基于初次或再次嘗試部署.Net Core應用到Linux服務器上,我嘗試后自我總結的經驗一個簡單的Demo,嘗試部署在Linux服務器上和跨服務器訪問數據庫。 一、環境介紹 1、本地使用Visual Studio 2017開發,使用的.NetCore SDK版本為2.1.4;

        本文基于初次或再次嘗試部署.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容器間訪問設置

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        .Net Core部署到CentOS的圖文教程:本文基于初次或再次嘗試部署.Net Core應用到Linux服務器上,我嘗試后自我總結的經驗一個簡單的Demo,嘗試部署在Linux服務器上和跨服務器訪問數據庫。 一、環境介紹 1、本地使用Visual Studio 2017開發,使用的.NetCore SDK版本為2.1.4;
        推薦度:
        標簽: 教程 發布的 net
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产日韩一区高清在线| 国产男女猛烈无遮挡免费网站| 美国免费高清一级毛片| 亚洲日本中文字幕天天更新| 亚洲乱亚洲乱妇24p| 毛片免费在线视频| 亚洲日韩中文在线精品第一| 亚洲成A人片777777| 国内精品久久久久影院亚洲| 手机永久免费的AV在线电影网| 99视频在线免费看| 毛片免费视频观看| 亚洲无码日韩精品第一页| 免费人成动漫在线播放r18| 日本片免费观看一区二区| 免费在线观看a级毛片| 亚洲日韩图片专区第1页| 91麻豆国产免费观看| 国产成人高清亚洲| 国内永久免费crm系统z在线| 最新69国产成人精品免费视频动漫| 99热在线精品免费全部my| 久久久亚洲精品视频| 男女男精品网站免费观看| 亚洲人成网站18禁止一区| 亚洲综合无码无在线观看| 免费无遮挡无码永久视频| 亚洲mv国产精品mv日本mv| a级毛片免费高清视频| 久久综合AV免费观看| 蜜臀亚洲AV无码精品国产午夜.| 91高清免费国产自产| 亚洲日韩精品国产3区| 国产精品亚洲mnbav网站| 99在线观看视频免费| 亚洲av无码专区在线观看亚| 日韩免费a级毛片无码a∨ | 永久黄网站色视频免费观看| 一级特级aaaa毛片免费观看| 免费人成年轻人电影| 久久国产免费一区|