從壹開(kāi)始前后端分離【再會(huì)】║最全的部署方案 & 最豐富的錯(cuò)誤分析

緣起

哈嘍大家好谜叹!今天是周一了交煞,這幾天趁著午休的時(shí)間又讀了一本書(shū)《偷影子的人》坊夫,可以看看??砖第。

今天也是入園的第九個(gè)月了,前后端分離系列到了今天正好是 43 篇环凿,也寫(xiě)了 20 萬(wàn)字了梧兼,內(nèi)心也是經(jīng)歷了各種曲折,是時(shí)候給《前后端分離》來(lái)一個(gè)句號(hào)了智听,為啥突然有了這個(gè)想法了呢羽杰???,周末兩天在學(xué)習(xí)的時(shí)候到推,發(fā)現(xiàn)其他有的博主已經(jīng)把自己的開(kāi)源項(xiàng)目關(guān)閉更新了考赛,剛開(kāi)始還有點(diǎn)兒不理解,后來(lái)想了想莉测,也確實(shí)無(wú)可厚非欲虚,吃完飯做了下思考:

1、我寫(xiě)的這個(gè)項(xiàng)目悔雹,當(dāng)時(shí)不是為了寫(xiě)框架,只是想給大家提供下學(xué)習(xí)的參考欣喧,對(duì)比錯(cuò)誤的腌零,我很害怕會(huì)出現(xiàn)把注意力過(guò)多的放在框架上的,而忽略了基礎(chǔ)知識(shí)學(xué)習(xí)的尷尬情況唆阿,這個(gè)在以后的新公司入職中益涧,會(huì)比較被動(dòng),比如我前天面試遇到的驯鳖,1: Vue運(yùn)行時(shí)版本和完整版有啥區(qū)別和聯(lián)系闲询,2:Vue 異步更新DOM的機(jī)制有什么好處久免?如何實(shí)現(xiàn)的?扭弧;

2阎姥、當(dāng)然,有一些基礎(chǔ)比較好的小伙伴鸽捻,不僅能看懂我的代碼呼巴,還能在我的項(xiàng)目基礎(chǔ)上,進(jìn)行封裝御蒲,我還是很歡迎使用的衣赶,用在生產(chǎn)環(huán)境,如果我還一直進(jìn)行大的迭代更新的話厚满,可能對(duì)大家有一定的影響府瞄;

3、前兩天群里有小伙伴問(wèn)了一些部署的相關(guān)問(wèn)題碘箍,我才發(fā)現(xiàn)遵馆,我竟忽略了這一部分,誠(chéng)然敲街,我也寫(xiě)了一些团搞,但是沒(méi)有統(tǒng)一起來(lái),那就用這篇詳細(xì)的部署文章來(lái)畫(huà)個(gè)句號(hào)吧多艇。

本篇文章會(huì)一直更新逻恐,內(nèi)容十分豐富,包含了NetCore+vue 的各種部署方案峻黍,以及遇到的主要錯(cuò)誤分析复隆,目的就是為了讓初學(xué)者可以有章可循。

一姆涩、部署

友1挽拂、WIN_獨(dú)立部署

感謝群里(白云)小伙伴,博主 @小淋科技 提出的方案骨饿,我竟然忽略了亏栈,該打該打,官檔都讀不仔細(xì)宏赘,果然三人行必有我?guī)煟?/p>

微軟官方文檔 ——《獨(dú)立部署 (SCD)》绒北,使用這個(gè)方法很簡(jiǎn)單,只需要部署的時(shí)候,選擇指定的平臺(tái),就可以不用安裝其他谅阿,比如運(yùn)行時(shí)根悼、托管呜达、SDK等新博,不過(guò)這樣的話吼渡,可能下文的命令行操作不適用蛤肌,不過(guò)還是很好很簡(jiǎn)單的方案业簿,歡迎嘗試瘤礁。

image

1、WIN_IIS 部署辖源,前后端不同站點(diǎn)

為了能有一個(gè)全新的環(huán)境蔚携,我還特地新買(mǎi)一臺(tái)服務(wù),要做好部署的準(zhǔn)備克饶,就必須要先進(jìn)行初始化操作酝蜒,也就是先準(zhǔn)備好我們用到的原材料:

在服務(wù)器開(kāi)啟 IIS 就不多說(shuō)了,相信每一個(gè) Dotnet 開(kāi)發(fā)者百分比必須要會(huì)的矾湃,其他的操作流程請(qǐng)看下邊的步驟亡脑,具體的看動(dòng)圖:

先給自己的兩個(gè)站點(diǎn)想好端口,比如我想的:core(1001端口)邀跃、Vue(1002端口)

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">// NetCore 部分

0霉咨、編譯項(xiàng)目,保證代碼沒(méi)問(wèn)題拍屑,并配置 CORS 跨域服務(wù)途戒;//下邊動(dòng)圖中沒(méi)有配置CORS,大家自己要注意

①僵驰、發(fā)布項(xiàng)目喷斋;

②、拷貝到服務(wù)器指定文件夾蒜茴;

③星爪、IIS 添加站點(diǎn);// 端口 1001
④粉私、修改應(yīng)用程序池為“無(wú)托管”顽腾;//這也是為啥要安裝 windows hosting 的原因
⑤、安裝 windows hosting(服務(wù)托管)诺核;//這是一個(gè)捆包抄肖,已經(jīng)包含 Runtime
⑥、檢查是否有指定的 Runtime(運(yùn)行時(shí))窖杀;

⑦漓摩、重啟項(xiàng)目,查看是否正常陈瘦;http://localhost:1001/ // Vue 部分
①、Build 項(xiàng)目;

②痊项、拷貝到服務(wù)器指定文件夾锅风;

③、IIS 添加站點(diǎn)鞍泉;// 端口 1002
④皱埠、運(yùn)行項(xiàng)目,查看是否正常咖驮;http://</pre>

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">localhost</pre>

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">:1002/</pre>

動(dòng)圖1:

image

修改好 hash 模式后边器,就成功了,注意要在 Core 項(xiàng)目中配置 CORS 跨域:

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;"> c.AddPolicy("LimitRequests", policy => { // 支持多個(gè)域名端口托修,注意端口號(hào)后不要帶/斜桿:比如localhost:8000/忘巧,是錯(cuò)的 // 注意,http://127.0.0.1:1818 和 http://localhost:1818 是不一樣的睦刃,盡量寫(xiě)兩個(gè)
policy
.WithOrigins("http://127.0.0.1:1002", "http://localhost:1002")
.AllowAnyHeader()
.AllowAnyMethod();
});</pre>

最終結(jié)果如下:

image

2砚嘴、WIN_IIS 部署,前后端一個(gè)站點(diǎn)

從上邊的過(guò)程中涩拙,可以看出來(lái)還是比較簡(jiǎn)單的际长,一氣呵成,行云流水兴泥,不過(guò)可能自己操作的時(shí)候會(huì)出現(xiàn)這樣那樣的問(wèn)題工育,畢竟我也是給很多小伙伴都部署過(guò),沒(méi)有上百搓彻,也有五十次了如绸,如果你有錯(cuò)誤,請(qǐng)看我文章下邊第二章的 常見(jiàn)錯(cuò)誤 好唯,找到你遇到的錯(cuò)誤竭沫。

上邊的操作中,我們是把兩個(gè)項(xiàng)目部署到了 IIS 中的不同站點(diǎn)骑篙,當(dāng)然蜕提,我們也可以部署到一個(gè)站點(diǎn),這樣的話靶端,就是一個(gè)域名了谎势,但是絲毫沒(méi)有影響我們分開(kāi)開(kāi)發(fā),我們前后端攻城獅還是和以前一樣的開(kāi)發(fā)杨名,只是將發(fā)布的文件上傳到指定服務(wù)器文件夾中就行了脏榆。

image

操作步驟和上邊的其實(shí)是幾乎一樣的,只不過(guò)我們不需要配置 CORS 跨域了台谍,因?yàn)槭峭粋€(gè)站點(diǎn)须喂,且是只需要一個(gè)端口號(hào),我們定為 1003端口

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">// NetCore 部分,和上邊的幾乎一樣坞生,只不過(guò)不用進(jìn)行 CORS 跨域設(shè)置
①仔役、發(fā)布項(xiàng)目;

②是己、拷貝到服務(wù)器指定文件夾又兵;

③、IIS 添加站點(diǎn)卒废;// 端口 1003
④沛厨、修改應(yīng)用程序池為“無(wú)托管”;//這也是為啥要安裝 windows hosting 的原因
⑤摔认、安裝 windows hosting(服務(wù)托管)逆皮;//這是一個(gè)捆包,已經(jīng)包含 Runtime
⑥级野、檢查是否有指定的 Runtime(運(yùn)行時(shí))页屠;

⑦、重啟項(xiàng)目蓖柔,查看是否正常辰企;http://localhost:1003/ // Vue 部分
①、修改根路徑况鸣,并且 Build 項(xiàng)目牢贸;// 還要修改接口api的路徑,剩下的自己處理吧镐捧,不要項(xiàng)目后期用這個(gè)方法潜索,路徑修改麻煩

②、拷貝到服務(wù)器指定文件夾懂酱;//可以和 core 項(xiàng)目放到一起
③竹习、修改 Core 的 IIS 站點(diǎn),在它的站點(diǎn)內(nèi)列牺,嵌套一個(gè)vue站點(diǎn)整陌;// 取名為 Vue
④、運(yùn)行項(xiàng)目瞎领,查看是否正常泌辫;http://localhost:1003/vue/</pre>

動(dòng)圖2:

image

3、WIN_Git_Nginx_Kestrel 部署

上邊的 IIS 部署咱們說(shuō)完了九默,大家發(fā)現(xiàn)震放,存在一些問(wèn)題:

1、過(guò)分的依賴(lài) IIS驼修,并沒(méi)有完完全全的達(dá)到跨平臺(tái)的目的殿遂;

2诈铛、操作步驟偏多,還需要拷貝文件墨礁,并且一個(gè)都不能少癌瘾;

3、因?yàn)?IIS 會(huì)存在占資源的問(wèn)題饵溅,每次如果我們更新 Blog.Core.dll 文件,都需要關(guān)閉站點(diǎn)妇萄,然后更新蜕企,再啟動(dòng);

那接下來(lái)咱們就說(shuō)說(shuō)如何使用 Nginx+Kestrel 來(lái)簡(jiǎn)單的解決這些問(wèn)題冠句,步驟如下:

這里需要安裝 Ngxin (http://nginx.org/en/download.html)轻掩、Git(https://git-scm.com/downloads)、SDK(http://go.microsoft.com/fwlink/?LinkID=287120)懦底,過(guò)程省略唇牧,大家自行安裝,這里我們把端口定為聚唐,NetCore(1004端口)丐重、Vue(1005端口)

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">// NetCore 部分 ①、執(zhí)行 Blog.Core.Build.bat 文件杆查;// 主要是 git pull 扮惦,dotnet build 和 dotnet run

②、Nginx 代理服務(wù)亲桦,將 8081 端口崖蜜,代理到 1004;//具體的代碼在下邊
③客峭、查看是否正常豫领;// http://localhost:1004/ // Vue 部分
①、執(zhí)行 BS 命令舔琅;// cnpm run BS等恐,這里是我自己的命令,主要是git pull 和 build
②搏明、Nginx 代理 Vue 服務(wù)鼠锈,并配置跨域,代理到1005星著;//具體的代碼在下邊
③购笆、查看是否正常;// http://localhost:1005/</pre>

大家可以看看虚循,或者直接感受一下同欠,這種部署方案样傍,和 IIS 的方案,哪一個(gè)更好一些铺遂?三步走衫哥,也是很簡(jiǎn)單,而也很直觀的襟锐。

// 紅色是 NetCore 的 Nginx 相關(guān)配置撤逢;

// 綠色的是 Vue 的 Nginx 的相關(guān)配置;

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">#user nobody;
worker_processes 1; events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream; sendfile on;

#keepalive_timeout 0;
keepalive_timeout 600;
proxy_read_timeout 600; 
proxy_send_timeout 600; 

# dotnet core

upstream dotnetblogserver1 {
server 127.0.0.1:8081;
}
server {
listen 1004;
server_name localhost;
location /{
proxy_pass http://dotnetblogserver1;
index index.html index.htm;
}
location = /50x.html {
root html;
}
} # vue
server {
listen 1005;
server_name localhost;
location / {
root nuxt\Blog.Admin\dist;
index index.html index.htm;
}
location /api {
rewrite ^.+apb/?(.*)/1 break;
include uwsgi_params;
proxy_pass http://localhost:1004; #// 這是 netcore 端口
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} } }</pre>

從上邊的部署中粮坞,我們可以看到蚊荣,過(guò)程中我們幾乎都沒(méi)有進(jìn)行什么配置,或者說(shuō)都是一次性的配置莫杈,比如 Git 安裝互例,比如 Nginx 的學(xué)習(xí),只要我們配置了一次筝闹,以后多個(gè)項(xiàng)目就可以很快的操作了媳叨,比 IIS 每一個(gè)都要 Publish 并且各種配置來(lái)的快些。

不僅如此关顷,我們也換掉了 IIS 糊秆,使用了 netcore 自帶的 Kestrel 應(yīng)用服務(wù)器,并且不會(huì)出現(xiàn)任何不同步的問(wèn)題议双,只要你本地調(diào)試好代碼扩然,并 push 到 git 上!

動(dòng)圖3:

image

4聋伦、WIN 部署到 Windows 服務(wù)

微軟有提供 如何在windows服務(wù)托管asp.net core ,不過(guò)步驟比較麻煩夫偶,還需要改源碼,網(wǎng)上找到一種方法 使用NSSM把.Net Core部署至windows服務(wù)

簡(jiǎn)單說(shuō)一下步驟

1. 下載nssm:http://www.nssm.cc/download

2. 運(yùn)行cmd觉增,定位到nssm.exe文件路徑兵拢,運(yùn)行nssm install

3. 在彈出的窗口配置:

Path:dotnet所在的目錄,一般默認(rèn)是在C:\Program Files\dotnet\dotnet.exe逾礁;

Startup directory:程序所在的目錄说铃,就是最后程序dll所在的目錄;

Arguments:程序dll的名稱(chēng)嘹履,一般是項(xiàng)目名加上.dll腻扇;

Service name:在此寫(xiě)上服務(wù)的名稱(chēng)即可。

最后點(diǎn)擊install service 完成windows服務(wù)安裝砾嫉。

在windows服務(wù)找到對(duì)應(yīng)服務(wù)名幼苛,啟動(dòng),然后根據(jù)launchSettings.json配置的端口訪問(wèn)焕刮,即可調(diào)取接口舶沿。

image

5墙杯、Linux_Ubuntu_Nginx 部署

1、安裝.NET Core

首先需要安裝.NET Core Runtime: https://www.microsoft.com/net/download

image

點(diǎn)擊之后括荡,根據(jù)您的Linux發(fā)行版不同高镐,選擇相應(yīng)的操作步驟:

image
image

最后執(zhí)行dotnet --info驗(yàn)證安裝是否成功:

image

2、安裝Nginx

另外還需要安裝Nginx畸冲,查看官網(wǎng)文檔:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x#install-nginx

安裝好后嫉髓,訪問(wèn)這個(gè)頁(yè)面:http://yourIPAddress/index.nginx-debian.html,如果看到如下效果說(shuō)明安裝成功:

image

3邑闲、在服務(wù)器構(gòu)建源碼并發(fā)布

然后就是發(fā)布程序了岩喷,發(fā)布有兩種辦法:

  • 在開(kāi)發(fā)機(jī)上執(zhí)行 dotnet publish 然后把發(fā)布的文件遠(yuǎn)程到服務(wù)器上
  • 直接在服務(wù)器上使用源碼構(gòu)建并發(fā)布,我一般是這樣做的监憎。

如果直接在服務(wù)器上構(gòu)建發(fā)布,所以需要安裝.NET Core SDK:https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial

image

然后就可以使用發(fā)布命令了:dotnet publish --configuration Release婶溯。

發(fā)布好的文件在 bin/Release/netcoreapp./publish **下面鲸阔。

再把publish下的所有文件復(fù)制到我的目標(biāo)文件夾即可:

image

在我的目標(biāo)目錄下,有這些文件:

image

如果執(zhí)行 dotnet test.dll迄委,這個(gè)程序就會(huì)在localhost:5000運(yùn)行:

image

4褐筛、配置Nginx

然后我們?cè)倩貋?lái)配置Nginx,進(jìn)入 /etc/nginx/sites-available 叙身,里面有一個(gè)Default文件渔扎,把它改個(gè)名,然后我們?cè)俳⒁粋€(gè)新的Default文件:

image

保存后執(zhí)行 sudo nginx -t 檢驗(yàn)這個(gè)配置文件信轿。

然后再執(zhí)行 nginx -s reload 來(lái)重啟nginx晃痴。

隨后需要再把發(fā)布后的程序運(yùn)行一下:dotnet test.dll:

image

在我使用網(wǎng)址訪問(wèn)80端口的時(shí)候,會(huì)自動(dòng)跳轉(zhuǎn)到 https//localhost:5001端口财忽,導(dǎo)致連接失斕群恕:

可以在開(kāi)發(fā)的時(shí)候,就直接去掉項(xiàng)目中使用 https 地址就行即彪,在 launchSettions.json 文件中:

image

或者禁用 https 中間件:

image

打開(kāi)瀏覽器訪問(wèn)試試:http://yourdomian.com/swagger/index.html

6紧唱、Linux_Docker 部署

1、docker安裝

依次執(zhí)行下列命令

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast

sudo yum -y install docker-ce</pre>

檢查docker是否安裝成功:

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">docker version</pre>

若成功顯示如下:

image

2隶校、docker部署

2.1漏益、上傳文件到 linux 服務(wù)器

在 linux 下創(chuàng)建文件夾 BlogCoreAPI

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">mkdir BlogCoreAPI //創(chuàng)建文件夾</pre>

用 ftp 把發(fā)布的文件全部上傳到 BlogCoreAPI

2.2、添加 Dockerfile 文件

進(jìn)入目錄 BlogCoreAPI

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">cd BlogCoreAPI</pre>

創(chuàng)建文件 Dockerfile

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">vim Dockerfile</pre>

內(nèi)容如下深胳,說(shuō)明:鏡像里創(chuàng)建 blogcore 文件夾绰疤,復(fù)制 linux 上的文件到鏡像目錄,對(duì)外暴露 8101 端口舞终,運(yùn)行程序

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">FROM microsoft/aspnetcore:2.2 RUN cd /usr/local/src

RUN mkdir blogcore

WORKDIR /usr/local/src/blogcore

COPY . ./ EXPOSE 8101 CMD ["dotnet", "Blog.Core.dll"]</pre>

保存

2.3峦睡、構(gòu)建鏡像

鏡像名字叫 blogcore-image翎苫,禁用緩存,否則迭代時(shí)會(huì)出問(wèn)題

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">docker build --no-cache -t cchr-image . //注意這個(gè)點(diǎn) . 表示當(dāng)前目錄</pre>

2.4榨了、運(yùn)行容器

用鏡像 blogcore-image 創(chuàng)建容器煎谍,指定容器名稱(chēng)是 blogcore-container,指定時(shí)區(qū)(默認(rèn)是美國(guó)時(shí)間龙屉,相差8小時(shí))

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">docker run --name=blogcore-container -dp 8101:8101--restart=always -e LC_ALL="en_US.UTF-8" -e TZ="Asia/Beijing" blogcore-image //修改默認(rèn)時(shí)區(qū)到亞洲/北京呐粘,并且將容器里的 8101 端口映射到 linux 主機(jī)的 8101 端口,最后每次運(yùn)行失敗后自動(dòng)重啟</pre>

如果你想要查看剛剛創(chuàng)建的容器的時(shí)區(qū)是否成功转捕,可以執(zhí)行命令:

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">docker exec blogcore-container date //查詢(xún)當(dāng)前容器時(shí)區(qū)</pre>

打開(kāi)瀏覽器訪問(wèn)試試:http://yourdomian.com/swagger/index.html

2.5作岖、發(fā)布更新

上面說(shuō)的是第一次發(fā)布,后期迭代五芝,需要把容器刪除痘儡,再構(gòu)建鏡像,運(yùn)行容器枢步。

2.5.1 刪除容器

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">docker container rm -f cchr-container</pre>

2.5.2 構(gòu)建鏡像&運(yùn)行容器

就和上邊的一樣了:

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">docker build --no-cache -t cchr-image .
docker run --name=blogcore-container -dp 8101:8101--restart=always -e LC_ALL="en_US.UTF-8" -e TZ="Asia/Beijing" blogcore-image </pre>

我還不知道有沒(méi)有更快的方法沉删,歡迎提建議。

7醉途、PM2 做進(jìn)程管理

我看到了很多教程矾瑰,但是這里我嘗試的時(shí)候依然不行,這里先留一個(gè)坑隘擎,提供有償幫忙殴穴,如果有哪位會(huì)的話,可以聯(lián)系我货葬,或者下邊留言 ??采幌。

二、NetCore 錯(cuò)誤

下邊的都是我平時(shí)遇到的常見(jiàn)的錯(cuò)誤震桶,如果大家還有其他錯(cuò)誤植榕,可以留言下來(lái),我補(bǔ)充到文章中尼夺,讓更多的小伙伴都看到尊残,避免麻煩。

1淤堵、錯(cuò)誤碼 —— 500.00

image

解析:發(fā)布后啟動(dòng)失敗寝衫,進(jìn)程內(nèi),網(wǎng)友提供拐邪,暫時(shí)我還沒(méi)遇到

方案:

方法1:

應(yīng)用池高級(jí)配置 - 啟動(dòng)32位應(yīng)用程序 - 設(shè)置為T(mén)rue

方法2:

web.config

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" startupTimeLimit="3600" requestTimeout="23:00:00" hostingModel="InProcess">

刪除 hostingModel="InProcess"

2慰毅、錯(cuò)誤碼 —— 500.19

image
image

解析:未安裝 windows 服務(wù)器托管,打不開(kāi)當(dāng)前項(xiàng)目的 模塊 選項(xiàng)

方案

安裝和項(xiàng)目匹配的 服務(wù)器托管( windows hosting )扎阶,這個(gè)是捆綁的可執(zhí)行文件汹胃,除了托管婶芭,也把x86 和 x64的運(yùn)行時(shí)都一起安裝好了。

地址:https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.4-windows-hosting-bundle-installer

image
image

3着饥、錯(cuò)誤碼 —— 500.21

image

解析:沒(méi)有安裝指定的模塊犀农,如果你想問(wèn)這個(gè)模塊是在項(xiàng)目哪里寫(xiě)的,可以查看發(fā)布后的 web.config 文件

image

方案

1宰掉、如果你沒(méi)有安裝上邊的 windows-hosting 呵哨,直接安裝就可以解決這個(gè)問(wèn)題;

2轨奄、如果已經(jīng)安裝了服務(wù)器托管孟害,發(fā)現(xiàn)還沒(méi)有這個(gè) V2 模塊,就是你項(xiàng)目的問(wèn)題了挪拟,這個(gè)時(shí)候你可以從本地再發(fā)布 publish 一次挨务,然后拷貝到服務(wù)器即可。

 但是玉组,如果還沒(méi)有的話谎柄,證明你本地開(kāi)發(fā)的項(xiàng)目異常了,不過(guò)這個(gè)情況基本可以排除球切,只要是 SDK 2.2 開(kāi)發(fā)的,本地

最終要確保 AspNetCoreModuleV2 模塊被安裝绒障。

image

4吨凑、錯(cuò)誤碼 —— 500.30

image

解析:進(jìn)程內(nèi)失敗,這個(gè)我沒(méi)有遇到户辱,有群里小伙伴說(shuō)的鸵钝。

方案:

image

5、錯(cuò)誤碼 —— 502.5

image

解析:沒(méi)有安裝指定的運(yùn)行時(shí)庐镐,進(jìn)程外啟動(dòng)失敗恩商。

方案

安裝指定版本的 Runtime 運(yùn)行時(shí)。

一般情況下必逆,只要安裝了服務(wù)器托管的話怠堪,會(huì)自動(dòng)安裝對(duì)應(yīng)版本的運(yùn)行時(shí),但是有時(shí)候安裝好了名眉,還是會(huì)遇到這個(gè)錯(cuò)誤粟矿,是因?yàn)槲覀兒笃陧?xiàng)目迭代升級(jí)了:

舉個(gè)栗子,本來(lái)我們的項(xiàng)目是 Netcore 2.1 版本损拢,后來(lái)更新到了 2.2 陌粹,但是服務(wù)器的運(yùn)行時(shí)還是舊的 Runtime 2.1 運(yùn)行時(shí),我們把代碼部署到服務(wù)器福压,發(fā)現(xiàn)沒(méi)有指定運(yùn)行時(shí)掏秩,就會(huì)出現(xiàn)這個(gè)問(wèn)題或舞。

下載地址:https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral

image

6、錯(cuò)誤碼 —— 503

image

解析:IIS 項(xiàng)目應(yīng)用程序池未開(kāi)啟

方案:開(kāi)啟程序池即可蒙幻,

但是經(jīng)過(guò)測(cè)試發(fā)現(xiàn)映凳,不使用 “無(wú)托管代碼” 也可以,這是為什么杆煞,很好奇魏宽?

image

7、An error occurred while starting the application

image

解析:項(xiàng)目已經(jīng)可以啟動(dòng)决乎,證明環(huán)境已經(jīng)正常队询,只不過(guò)在項(xiàng)目啟動(dòng)的時(shí)候,出現(xiàn)了錯(cuò)誤构诚,也就是說(shuō)是項(xiàng)目代碼的問(wèn)題蚌斩。

方案:查看日志,看項(xiàng)目文件是否齊全范嘱。

如果你不知道如何打開(kāi)日志送膳,請(qǐng)看另一篇文章的這一節(jié):https://www.cnblogs.com/laozhang-is-phi/p/9565227.html#autoid-5-5-0

下邊這個(gè)錯(cuò)誤,就是因?yàn)榉蛛x的原因丑蛤,導(dǎo)致 Service.dll 和 Repository.dll 沒(méi)有拷貝到發(fā)布文件夾下叠聋,從而導(dǎo)致項(xiàng)目沒(méi)有啟動(dòng)起來(lái)。

image

8受裹、總結(jié)

經(jīng)過(guò)上邊多個(gè)錯(cuò)誤分析碌补,如果我們第一次再服務(wù)器中部署,只需要安裝 服務(wù)器托管 Windows-hosting 即可:

https://dotnet.microsoft.com/download/dotnet-core/2.2

image

三棉饶、Vue 錯(cuò)誤

1厦章、跨域失敗

這都是很簡(jiǎn)單的錯(cuò)誤,根據(jù)上邊的動(dòng)圖照藻,咱們也能看出來(lái)袜啃,關(guān)于跨域有以下幾個(gè)方法:

1、IIS 部署幸缕,一定要在后端 NetCore 項(xiàng)目群发,進(jìn)行 CORS 跨域;

2发乔、除非你是在 IIS 中的同一個(gè)站點(diǎn)配置前后端兩個(gè)項(xiàng)目也物;

3、如果是 nginx+kestrel 的話列疗,記得在 nginx 中配置跨域代理滑蚯;

4、其他方案,略告材;

2坤次、頁(yè)面刷新 404

為了這個(gè)錯(cuò)誤,我上邊的第一個(gè)動(dòng)圖斥赋,還特地的故意做了這個(gè)錯(cuò)誤缰猴,就是 history 和 hash 的情況,當(dāng)然也是有兩個(gè)方案:

1疤剑、如果你是 IIS 部署滑绒,就得使用 hash 模式,不能用 history 模式隘膘;

2疑故、不過(guò)如果用 nginx 的話,可以利用 404 頁(yè)面的機(jī)制弯菊,將 index.html 頁(yè)面 copy 一份纵势,重命名成 404.html 即可;

四管钳、結(jié)語(yǔ)

這篇文章會(huì)一直補(bǔ)充钦铁,盡量成為前后端分離的一個(gè)優(yōu)質(zhì)文章吧,希望大家能盡自己的力量才漆,補(bǔ)充下牛曹。

前后端分離到這里就差不多了,江湖很大醇滥,各位有緣再會(huì)黎比!

image

五、Github & Gitee

https://github.com/anjoy8/Blog.Core

https://gitee.com/laozhangIsPhi/Blog.Core


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腺办,一起剝皮案震驚了整個(gè)濱河市焰手,隨后出現(xiàn)的幾起案子糟描,更是在濱河造成了極大的恐慌怀喉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件船响,死亡現(xiàn)場(chǎng)離奇詭異躬拢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)见间,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)聊闯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人米诉,你說(shuō)我怎么就攤上這事菱蔬。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拴泌,是天一觀的道長(zhǎng)魏身。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚪腐,這世上最難降的妖魔是什么箭昵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮回季,結(jié)果婚禮上家制,老公的妹妹穿的比我還像新娘。我一直安慰自己泡一,他們只是感情好颤殴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瘾杭,像睡著了一般诅病。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粥烁,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天贤笆,我揣著相機(jī)與錄音,去河邊找鬼讨阻。 笑死芥永,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钝吮。 我是一名探鬼主播埋涧,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奇瘦!你這毒婦竟也來(lái)了棘催?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耳标,失蹤者是張志新(化名)和其女友劉穎醇坝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體次坡,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呼猪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砸琅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宋距。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖症脂,靈堂內(nèi)的尸體忽然破棺而出谚赎,到底是詐尸還是另有隱情淫僻,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布壶唤,位于F島的核電站嘁傀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏视粮。R本人自食惡果不足惜细办,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕾殴。 院中可真熱鬧笑撞,春花似錦、人聲如沸钓觉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荡灾。三九已至瓤狐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間批幌,已是汗流浹背础锐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荧缘,地道東北人皆警。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像截粗,于是被迫代替她去往敵國(guó)和親信姓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容