.net core3.0部署Linux伺服器 使用Docker容器和Nginx反代理教程

来源:https://www.cnblogs.com/xymfblogs/archive/2019/12/04/11982729.html
-Advertisement-
Play Games

本人剛接觸.net core 由於公司項目需要部署在Linux上 近些日子學習和網上大面積搜教程 我在這給大家歸攏歸攏借鑒的教程做了套方案(我寫的可以實現 但不一定是最好的 僅供參考) 我只用過core3.0 之前的版本沒接觸過 首先需要使用Nginx反代理的項目那一定是web框架的ASP.NET ...


本人剛接觸.net core 由於公司項目需要部署在Linux上 近些日子學習和網上大面積搜教程

我在這給大家歸攏歸攏借鑒的教程做了套方案(我寫的可以實現 但不一定是最好的 僅供參考)

我只用過core3.0 之前的版本沒接觸過

首先需要使用Nginx反代理的項目那一定是web框架的ASP.NET CORE

在項目中"Program.cs"文件中找到CreateHostBuilder方法

使用.UseUrls()方法指定單個網址

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseUrls("http://localhost:5000");
                    webBuilder.UseStartup<Startup>();
                });

項目中就需要配置這些

接下來是Linux 我在這裡使用的是Oracle VM VirtualBox虛擬機啟動的CentOS8

 

這步是可選的①

虛擬機也需要配置一下網路 不要使用NAT網路 要使用橋接網卡 也許是公司網路原因

說不定也不需要怎麼做 主要是為了外部機能訪問虛擬機的網路

在終端中切換root限權

接下來Xshell中操作 不瞭解的也可以使用終端 在這裡不細說

首先安裝EPEL源

[root@localhost ~]# sudo yum install epel-release

安裝Nginx

[root@localhost ~]# sudo yum install nginx

啟動Nginx

[root@localhost ~]# sudo systemctl start nginx

開機啟動Nginx

[root@localhost ~]# sudo systemctl enable nginx

關閉防火牆或開啟指定埠

關閉防火牆
[root@localhost ~]# sudo firewall-cmd --permanent --zone=public  --add-service=http
[root@localhost ~]# sudo firewall-cmd --permanent --zone=public  --add-service=https
開放指定埠
[root@localhost ~]# sudo firewall-cmd --zone=public --add-port=埠名/tcp --permanent

重啟防火牆

[root@localhost ~]# sudo firewall-cmd --reload

到這一步試試外網能否訪問 瀏覽器輸入虛擬機的ip 是否能訪問

 

打開Nginx 埠映射配置 也可以使用Xftp打開此路徑文件

[root@localhost ~]# sudo vi /etc/nginx/nginx.conf

 

在中server配置中的location /{}中加入

    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;

 

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
} error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers PROFILE=SYSTEM; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }

 

重啟Nginx伺服器

[root@localhost ~]# sudo nginx -s reload

關閉SELinux

在終端輸入sestatus,查看SELinux status是否為disabled 如果是這步跳過 不是請執行以下命令修改SELinux配置

[root@localhost ~]# vi /etc/selinux/config

SELINUX=disabled

重啟伺服器

Nginx配置到此結束,接下來是Docker容器

------------------分割線-----------------

先把yum包更新到最新

[root@localhost ~]# yum update

安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

設置yum源

[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

可以查看所有倉庫中所有docker版本,並選擇特定版本安裝

[root@localhost ~]# yum list docker-ce --showduplicates | sort -r

安裝Docker,命令:yum install docker-ce-版本號

[root@localhost ~]# yum install docker-ce-18.03.1.ce

啟動Docker並加入開啟啟動

[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker

驗證Docker(有client和service兩部分表示docker安裝啟動都成功)

[root@localhost ~]# docker version 

設置Docker鏡像加速

修改/etc/docker/daemon.json文件來實現加速(如果文件夾沒有此文件,可以創建)

配置內容:

{
  "storage-driver": "devicemapper",
  "registry-mirrors": [ "https://6kx4zyno.mirror.aliyunce.com","http://f1361db2.m.daocloud.io"]
}

重啟Docker

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

docker info  查看docker連接的地址是否生效

下載並安裝.net core的鏡像 "latest"預設下載最新.net core鏡像

[root@localhost ~]# docker pull mcr.microsoft.com/dotnet/core/sdk:latest

 

等待安裝完成之後 查看安裝過的鏡像

[root@localhost ~]# docker images

這裡的IMAGE ID是隨機的

接下來是開啟一個docker容器

[root@localhost ~]# docker run -i -d -t -v /home/core:/myFirstApp --network=host -v /etc/localtime:/etc/localtime 鏡像名
-i 以交互模式運行容器,通常與 -t 同時使用;
-t 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
-d 後臺運行容器,並返回容器ID;
-v 指定一個本機的路徑(這裡選擇的是.net core程式的路徑)冒號後面的是容器中的路徑

--network=host 使用主機埠

-v /etc/localtime:/etc/localtime 因為容器中獲取的時間會比系統時間慢8個小時 所有指定使用主機時間

鏡像名也可以寫鏡像ID 註意空格

查看創建的容器

[root@localhost ~]# docker ps -a

進入容器

[root@localhost ~]# docker exec -it 容器ID /bin/bash

輸入ls查看目錄 會找到創建容器時所指向的文件夾名

在輸入ls就可以看到共用目錄中的程式文件

在程式文件中找到要運行的程式名.dll文件

root@localhost:/myFirstApp# dotnet 程式名.dll

這樣你的.net core程式就運行成功了 但是這樣不能繼續操作 使用[ctrl + P][ctrl + Q]退出而不終止容器運行

確保這上面顯示的5000埠和nginx配置的5000埠一樣

附上常用的docker命令

-----------------     docker ps 查看當前正在運行的容器
 
 -----------------    docker ps -a 查看所有容器的狀態
 
 -----------------    docker start/stop id/name 啟動/停止某個容器
 
 -----------------    docker attach id 進入某個容器(使用exit退出後容器也跟著停止運行)
 
 -----------------    docker exec -ti id 啟動一個偽終端以互動式的方式進入某個容器(使用exit退出後容器不停止運行)
 
 -----------------    docker images 查看本地鏡像
 -----------------    docker rm id/name 刪除某個容器
-----------------     docker rmi id/name 刪除某個鏡像


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

-Advertisement-
Play Games
更多相關文章
  • 目 錄 1. 概述... 2 2. 演示信息... 2 3. 簡單介紹... 3 4. 產品特點... 4 5. 價值體現... 5 1. 概述 經過一段時間的努力,iNeuDA產品組件已經開發和測試完成,現在正式上線。現在iNeuOS工業互聯網操作系統的技術體系和產品體系更佳完善,為中小企業提供更 ...
  • Net Core 2.x 跟 Net Core3.0 還是有很大的區別的,隨著.NET Core 3.1發佈,也就意味著老版本慢慢的要停止維護。 Net Core 3.0 其實就是過渡版本,用於我們練手。 ASP.NET Core 2.2 遷移到3.0:https://docs.microsoft. ...
  • 參考博客: https://blog.csdn.net/flyer_tang/article/details/80320974 https://blog.csdn.net/weixin_30773135/article/details/97923338 官網下載地址: http://redis.io ...
  • java虛擬機具有語言無關係,它只和“class文件“這種特定的二進位文件格式綁定。 不同語言的編譯器將對應的程式編譯成位元組碼文件(*.class),送給jvm執行。 2.1、魔數(是否可以被虛擬機執行)和class文件版本 2.2、常量池 2.3、訪問標誌(識別訪問信息) 2.4、類索引、父類索引 ...
  • 本文將介紹領域驅動設計(DDD)戰術模式中另一個常見且非常重要的概念 - 實體。相對戰術模式中其他的一些概念(例如 值對象、領域服務等)來說,實體應該比較容易讓人理解和運用。但是我們如何去發現所在領域中的實體呢?如何保證建立的實體是富含行為的?實體運用時又有那些註意的細節呢?本文將從不同的角度來帶大... ...
  • 本筆記摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/ThreadPool.html,記錄一下學習過程以備後續查用。 一、線程池基礎 首先,創建和銷毀線程是一個要耗費大量時間的過程,其次,太多的線程也會浪費記憶體資源,所以通過Thread類來創 ...
  • 在IIS上部署 .Net Core 3.0 項目的主要流程有: 一、安裝並啟用IIS: 安裝了VS的環境,已經預設裝上了IIS,可在控制面板的“程式和功能”中查看確認。 在“程式和功能”界面點擊“啟用或關閉Windows功能”,全選IIS下的全部選項,“確定”,等待啟用完成。 二、安裝AspNetC ...
  • WinFrm應用程式調用WebService服務 關於WebService的創建、發佈與部署等相關操作不再贅述,傳送門如下:C# VS2019 WebService創建與發佈,並部署到Windows Server 2012R 此篇記錄一下客戶端的調用,以便後續學習使用,不足之處請指出。 建立WinF ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...