從零部署.NetCoreAPI到Linux

来源:https://www.cnblogs.com/haowuji/archive/2022/04/29/16207653.html
-Advertisement-
Play Games

從零部署.NetCore到Linux 購買Ubuntu伺服器 購買伺服器 創建root用戶,設置密碼 # 創建root用戶 sudo passwd root # 輸入兩次密碼 啟動ssh 系統預設是關閉的,需要打開下。 安裝Nginx 如何在 Ubuntu 20.04 上安裝 Nginx sudo命 ...


從零部署.NetCore到Linux

購買Ubuntu伺服器

  1. 購買伺服器

  2. 創建root用戶,設置密碼

    # 創建root用戶
    sudo passwd root
    # 輸入兩次密碼
    
  3. 啟動ssh

    系統預設是關閉的,需要打開下。

安裝Nginx

如何在 Ubuntu 20.04 上安裝 Nginx

sudo命令解釋

​ sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄 和管理時間,同樣也提高了安全性。sudo不是對shell的一個代替,它是面向每個命令的。

apt命令詳解

​ apt的全稱是Advanced Packaging Tool是Linux系統下的一款安裝包管理工具。

Nginx在預設的Ubuntu源倉庫中可用。想要安裝它,運行下麵的命令:

sudo apt update
sudo apt install nginx

一旦安裝完成,Nginx會自動啟動。你可以運行下麵的命令來驗證它:

sudo systemctl status nginx

安裝docker

Ubuntu Docker 安裝

安裝命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

創建docker鏡像並運行容器

  1. 編寫.NET Core Api 代碼

  2. 編寫Dockerfile文件

    #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
    
    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
    WORKDIR /src
    COPY ["twgdh.test.csproj", "."]
    RUN dotnet restore "./twgdh.test.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "twgdh.test.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "twgdh.test.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "twgdh.test.dll"]
    
  3. 將代碼和Dockerfile文件Copy到伺服器。

    利用ssh傳輸文件

    Copy後伺服器目錄結構如下:

    root@VM-16-9-ubuntu:/home/root/twgdh.test/twgdh.test# tree
    .
    ├── appsettings.Development.json
    ├── appsettings.json
    ├── Controllers
    │   └── WeatherForecastController.cs
    ├── Dockerfile
    ├── Program.cs
    ├── Properties
    │   └── launchSettings.json
    ├── twgdh.test.csproj
    ├── twgdh.test.csproj.user
    ├── twgdh.test.sln
    └── WeatherForecast.cs
    
  4. 構建鏡像

    docker build -t twgdh.test .  # 註意最後有個點,表示當前目錄
    
  5. 運行容器

    docker run -d --name twgdh.test1.0 -p 8080:80 twgdh.test
    
  6. 測試容器是否正常運行

    root@VM-16-9-ubuntu:~# curl -i "http://127.0.0.1:8080/WeatherForecast"
    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    Date: Fri, 29 Apr 2022 08:04:36 GMT
    Server: Kestrel
    Transfer-Encoding: chunked
    
    [{"date":"2022-04-30T08:04:37.1916863+00:00","temperatureC":44,"temperatureF":111,"summary":"Balmy"},{"date":"2022-05-01T08:04:37.1926873+00:00","temperatureC":-1,"temperatureF":31,"summary":"Warm"},{"date":"2022-05-02T08:04:37.1926914+00:00","temperatureC":1,"temperatureF":33,"summary":"Sweltering"},{"date":"2022-05-03T08:04:37.1926916+00:00","temperatureC":5,"temperatureF":40,"summary":"Cool"},{"date":"2022-05-04T08:04:37.1926918+00:00","temperatureC":45,"temperatureF":112,"summary":"Bracing"}]
    

將功能變數名稱指向伺服器

​ 修改功能變數名稱的解析信息。

配置Nginx請求轉發

  1. 修改/etc/nginx/nginx.conf文件

    ....
    events {
        ...
    }
    
    http {
        ....
        server {
            listen 		80;				# 監聽80埠
            server_name	test.twgdh.com;	# 監聽的功能變數名稱
    
            location / {
                proxy_pass	http://127.0.0.1:8080;	# 轉發到的地址
            }	
        }
        .....
    }
    
  2. 重新載入nginx配置文件

    nginx -s reload

測試使用功能變數名稱訪問容器中的網站

root@VM-16-9-ubuntu:~# curl -i "http://test.twgdh.com/WeatherForecast"
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Fri, 29 Apr 2022 08:52:02 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive

[{"date":"2022-04-30T08:52:02.8364462+00:00","temperatureC":-12,"temperatureF":11,"summary":"Mild"},{"date":"2022-05-01T08:52:02.8364555+00:00","temperatureC":45,"temperatureF":112,"summary":"Hot"},{"date":"2022-05-02T08:52:02.836456+00:00","temperatureC":31,"temperatureF":87,"summary":"Cool"},{"date":"2022-05-03T08:52:02.8364562+00:00","temperatureC":29,"temperatureF":84,"summary":"Sweltering"},{"date":"2022-05-04T08:52:02.8364564+00:00","temperatureC":9,"temperatureF":48,"summary":"Mild"}]

將站點配置為Https

nginx/1.18.0進行SSL證書配置

在Nginx(或Tengine)伺服器上安裝證書

  1. 下載nginx證書

  2. 上傳證書文件到伺服器

    C:\Users\Oliver-PC>scp -r C:\Users\Oliver-PC\Desktop\Temp\Nginx證書\5715401_test.twgdh.com_nginx [email protected]:/etc/nginx/certificate
    [email protected]'s password:
    5715401_test.twgdh.com.key                                                            100% 1675    34.7KB/s   00:00
    5715401_test.twgdh.com.pem                                                            100% 3801    55.9KB/s   00:00
    
  3. 修改nginx.conf 配置

    .....
    events {
    	.......
    }
    
    http {
    
    	.........
    	server {
    		listen 		80;
    		server_name	test.twgdh.com;
    
    		location / {
    			proxy_pass	http://127.0.0.1:8080;
    		}	
    	}
    
    	##
    	# SSL Settings
    	##
    	server {
    		listen 		443 ssl;
    		server_name	test.twgdh.com;
    
    		ssl_certificate   /etc/nginx/certificate/5715401_test.twgdh.com_nginx/5715401_test.twgdh.com.pem;
    		ssl_certificate_key  /etc/nginx/certificate/5715401_test.twgdh.com_nginx/5715401_test.twgdh.com.key;
    		ssl_session_timeout 5m;
    		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;        
    		ssl_prefer_server_ciphers on;
    		location / {
    			proxy_pass	http://127.0.0.1:8080;
    		}	
    	}
    	.................
    }
    
  4. 重新載入nginx配置文件

    nginx -s reload

  5. 測試訪問

--至此大功告成--


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近在學習java,遇到了一個經典列印題目,空心金字塔,初學者記錄,根據網上教程,有一句話感覺很好,就是先把麻煩的問題轉換成很多的簡單問題,最後一一解決就可以了,然後先死後活,先把程式寫死,後面在改成活的。 如下圖是空心金字塔最終的實現效果,先要求用戶輸入層數然後輸出 一.普通矩形 首先我們先 ...
  • 近日,New Relic發佈了最新的2022 Java生態系統報告,這份報告可以幫助我們深入的瞭解Java體系的最新使用情況,下麵就一起來看看2022年,Java發展的怎麼樣了,還是Java 8 YYDS嗎? Java 11成為新的標準 在2020年的時候,Java 11已經推出了1年多,但當時Ja ...
  • 框架,本質上是一些實用經驗集合。即是前輩們在實際開發過程中積攢下來的實戰經驗,累積成一套實用工具,避免你在開發過程中重覆去造輪子,特別是幫你把日常中能遇到的場景或問題都給屏蔽掉,框架的意義在於屏蔽掉開發的基礎複雜度、屏蔽掉此類共性的東西,同時建立嚴格的編碼規範,讓框架使用者開箱即用,並且只需要關註差... ...
  • 前言 又到了每日分享Python小技巧的時候了,今天給大家分享的是Python中兩種常見的數據類型合併方法。好奇知道是啥嗎?就不告 訴你,想知道就往下看呀。話不多說,直接上… 1 合併字典 在某些場景下,我們需要對兩個(多個)字典進行合併。例如需要將如下兩個字典進行合併: 1 dict1 = {"a ...
  • # Spring概述 1、Spring是輕量級開源JavaEE框架 2、Spring可以解決企業應用開發的複雜性 3、組成核心IOC、Aop IOC:控制反轉,把創建對象過程交給Spring進行管理 Aop:面向切麵,不修改源代碼進行功能增強 4、Spring特點 方便解耦,簡化開發 Aop編程支持 ...
  • 有朋友好奇為什麼將 閉包 歸於語法糖,這裡簡單聲明下,C# 中的所有閉包最終都會歸結於 類 和 方法,為什麼這麼說,因為 C# 的基因就已經決定了,如果大家瞭解 CLR 的話應該知道, C#中的類最終都會用 MethodTable 來承載,方法都會用 MethodDesc 來承載, 所以不管你怎麼玩 ...
  • linux網路編程示例 簡單TCP、UDP編程示例。 TCP TCP客戶端與伺服器通信模型 伺服器代碼 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include ...
  • Linux下實現I/O復用的系統調用方式主要:select、poll、epoll。 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...