擼.NET Core的正確姿勢

DukeCheng發表於2018-06-01

特點

案例基於剛釋出的.NET Core 2.1

只需一臺Linux伺服器搞定一切,

全程無需自己配置dotnet環境,

需要熟悉git

docker基礎知識可有可無, 過了下面幾個步驟,你就已經入門Docker了

涉及到的軟體: git, docker, nginx (非必需)

新手耗時

.net core未入門: 不適合

git 未入門: + 30分鐘

docker未入門: +2 小時

linux未入門: +2 小時

nginx未入門: +1小時

對於一個.net core已入門的新手, 最多6個小時可以完成這個實驗, 對於上述知識都有儲備的人,20分鐘基本就可以完成(時間取決於你的網速).

前置準備

一臺Linux伺服器, 能連線外網(需要線上安裝git, docker, 以及下載dotnet docker相關映象), 下面的命令以debian 8為例, ubuntu與debian 命令相同, centos需要吧apt-get 替換為yum

1. 部署git

這樣一臺git伺服器就好了, 如果有遠端的github或者oscgit可以用,那可以省略這一步

apt-get install git

useradd git

passwd git 設定git賬戶的密碼


2. 準備程式碼上傳

su git

mkdir samplecode

cd samplecode

git init

建立git庫

提交程式碼到 git@ip:samplecode.git

Dockerfile:

Dockerfile檔案放到.csproj檔案的目錄, 用來生成Docker映象

FROM microsoft/dotnet:2.1-aspnetcore-runtime
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-Miao.WebApi/obj/Docker/publish} .
COPY ${source:-buildreport} .
ENTRYPOINT ["dotnet", "Miao.WebApi.dll"]


3. 部署docker

https://docs.docker.com/install/linux/docker-ce/debian/

apt-get install docker-ce
https://github.com/aspnet/aspnet-docker/tree/master/2.1
docker pull microsoft/dotnet:2.1-sdk 用來編譯dotnetcore程式
docker pull microsoft/dotnet:2.1-aspnetcore-runtime 用來執行dotnetcore程式

4. 下載程式碼並編譯打包

mkdir /src
cd /src
git clone git@ip:samplecode.git
cd samplecode

docker run -t -v ~/.dotnet:/root/.dotnet -v ~/.nuget:/root/.nuget  -v ./:/src --workdir /srcmicrosoft/dotnet:2.1-sdk bash -c "dotnet restore ./sameplecode.sln && dotnet publish ./SamepleCode.csproj -c Release -o ./obj/Docker/publish"
docker build –t sampleweb:1.0 –file .\Dockerfile .\

5. 執行.net core 程式

docker run –d –it sampleweb:1.0 –p:8080:80
curl –I http://ip:8080
確認可以開啟, 證明部署成功

6. 通過Nginx做反向代理(非必需)

官方建議kestrel(.net core 內建web伺服器外層再加一層反代), 加了反代之後IP也能正確獲取到
apt-get install nginx
nginx 配置檔案

upstream sampleweb {
     least_conn;
     server 127.0.0.1:8080max_fails=3 fail_timeout=30s;
     }
    
server {
     listen 80;
     server_name sampleweb.xxx.com;

    location / {
         proxy_pass http://sampleweb /;
         proxy_read_timeout  90;

        proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $http_connection;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_cache_bypass $http_upgrade;
      }
}





相關文章