所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

Vue+.NET6前后端分离项目IIS部署超详细全过程 新手一看就会

Vue+.NET6前后端分离项目IIS部署超详细全过程 新手一看就会 一

文章目录CloseOpen

部署前的准备:别等踩坑再补环境

很多新手跳过这步直接打包,结果踩坑后再回头补环境,浪费时间。部署Vue+.NET6项目前,你得先确认三件事:装对.NET6运行时开对IIS组件检查ASP.NET Core模块——这些是基础中的基础,缺一个都跑不起来。

先讲.NET6运行时:你写项目用的是.NET6,部署的服务器上就得装对应的运行时(不是SDK,SDK是开发用的,运行时更小)。怎么检查?打开服务器的命令提示符,输入dotnet info,如果能看到“.NET Runtime 6.x”的版本,说明装对了;要是提示“dotnet不是内部或外部命令”,就得去微软官网下载.NET6 Runtime(https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0nofollow),双击安装一路下一步就行。

然后是IIS组件:Windows服务器默认可能没开IIS,你得去“控制面板-程序-启用或关闭Windows功能”里勾选——要选“Internet Information Services”下的Web管理工具(全选)和万维网服务(展开后选“应用程序开发功能”里的“ASP.NET Core模块”“ASP.NET 4.8”,还有“常见HTTP功能”里的“静态内容”)。别嫌麻烦,“ASP.NET Core模块”是IIS处理.NET6请求的关键,小周之前就是没选这个,结果后端部署后直接500错误,查了半小时日志才发现。

最后检查ASP.NET Core模块:打开IIS管理器,点击左侧服务器名称,再点右侧“模块”,如果能看到“AspNetCoreModuleV2”,说明没问题;要是没有,就得装.NET Core Hosting Bundle(https://dotnet.microsoft.com/zh-cn/download/dotnet-hosting/6.0nofollow)——这个包会自动装ASP.NET Core模块和运行时,新手直接装这个更省心。

前端Vue项目:打包时避开90%的路径坑

Vue项目的打包坑,90%都出在publicPath配置上——我帮过三个朋友解决过这个问题,包括我自己第一次打包时也踩过。你打开Vue项目的vue.config.js文件(没有就自己建一个),找到publicPath这个配置项,默认是"/",一定要改成"./"——别问为什么,先改了再说,后面我给你讲原理。

为什么要改?举个例子:你用默认的"/"打包,生成的dist文件夹里,js文件的路径是/js/app.js,意思是从网站的根目录(比如http://localhost)加载这个文件。但如果你的项目部署在IIS的子站点(比如http://localhost/myproject),根目录是localhost,而你的dist文件夹在myproject下的frontend目录里,这时候浏览器会去localhost找js文件,肯定找不到啊!改成"./"后,路径会变成./js/app.js,代表“当前文件夹下的js文件”,不管部署到哪个目录,都能正确找到静态资源。

改完配置,运行npm run build打包,生成的dist文件夹里有index.html、js、css、img这几个文件。接下来把dist里的所有内容复制到服务器上的IIS站点目录——比如你打算把项目放在D:MyProject下,就建个frontend文件夹,把dist内容粘贴进去(路径:D:MyProjectfrontend)。别直接把dist文件夹扔进去,要复制里面的文件,不然index.html会找不到依赖。

后端.NET6项目:发布时带全依赖,别漏文件

.NET6项目的发布坑,大多是“漏文件”——比如发布时没带全依赖,或者配置错了目标框架。我用Visual Studio为例讲步骤,用 Rider的朋友逻辑一样:

打开你的.NET6项目,右键点击项目名称,选“发布”。第一步选“文件夹发布”(别选IIS,直接发布到本地文件夹更稳妥),然后点“下一步”。接下来的配置要注意三点:

  • 配置文件选“Release”(发布版本比Debug版本运行更快,没有调试信息);
  • 目标框架选“.NET6.0”(和你项目的框架一致);
  • 部署模式选“框架依赖”(只要服务器装了.NET6运行时,这个模式的文件更小;要是你不确定服务器有没有运行时,选“自包含”——虽然文件大,但不用依赖服务器环境)。
  • 选完点“发布”,等个几十秒,发布后的文件会存在binReleasenet6.0publish文件夹里。把这个publish文件夹里的所有内容复制到服务器的D:MyProjectbackend目录下(和frontend并列)。别漏文件!比如web.config(.NET6项目发布后会自动生成,用来配置IIS的ASP.NET Core模块)、YourProject.dll(项目的主程序集),这些都是必须的——小周之前漏复制web.config,结果后端部署后直接404。

    IIS配置:从建站到解决跨域,一步都别乱

    前面的准备都做完,终于到IIS配置了——这步没那么复杂,跟着我拆成四步走:

  • 新建IIS站点
  • 打开IIS管理器(服务器管理器-工具-IIS管理器),右键左侧“网站”,选“添加网站”:

  • 网站名称:随便填(比如“MyProject”);
  • 物理路径:选你项目的根目录(比如D:MyProject);
  • 绑定:端口填个没被占用的(比如8080,别用80,容易和其他项目冲突);
  • 主机名:如果是本地测试,留空就行;
  • 应用程序池:会自动创建一个和网站同名的应用程序池,后面要改配置。
  • 点“确定”,站点就建好了。

  • 改应用程序池配置
  • 右键刚创建的应用程序池(比如“MyProject”),选“高级设置”:

  • 启用32位应用程序:设为“False”(.NET6是64位的,32位会报错);
  • 托管管道模式:选“集成”(现在基本不用经典模式);
  • .NET CLR版本:选“无托管代码”(重点!.NET6是跨平台的,不需要IIS托管,选这个才对)。
  • 小周之前没改“.NET CLR版本”,结果后端部署后直接500错误,查日志提示“无法加载托管代码”,改完就好了。

  • 配置静态文件和后端接口
  • 你的项目根目录是D:MyProject,里面有frontend(前端)和backend(后端)两个文件夹,得让IIS能访问到:

  • 前端:右键站点下的“frontend”文件夹,选“转换为应用程序”,应用程序池选刚才的“MyProject”;
  • 后端:同样把“backend”文件夹转换为应用程序,应用程序池也选“MyProject”。
  • 这样配置后,前端访问路径是http://localhost:8080/frontend,后端接口路径是http://localhost:8080/backend/api/xxx

  • 解决跨域问题
  • 前端调用后端接口时,浏览器会提示“跨域请求被阻止”——这是浏览器的安全策略,得让后端允许前端的域名访问。有两种方法:

    方法一:后端配置CORS(推荐)

    打开.NET6项目的Startup.cs文件,在ConfigureServices方法里加:

    services.AddCors(options =>
    

    {

    options.AddPolicy("AllowVue", policy =>

    {

    policy.WithOrigins("http://localhost:8080/frontend") // 前端的地址

    .AllowAnyMethod()

    .AllowAnyHeader();

    });

    });

    然后在Configure方法里加:

    app.UseCors("AllowVue");

    重新发布后端项目,覆盖服务器上的backend文件夹。

    方法二:IIS配置跨域头部(应急用)

    如果不想改后端代码,打开后端应用程序的web.config文件,在system.webServer节点里加:

    
    

    这种方法简单,但生产环境不 用——因为Access-Control-Allow-Origin设为具体域名更安全,别用*(允许所有域名访问,有安全风险)。

    最后:测一遍,确认没问题

    全部配置完,打开浏览器访问http://localhost:8080/frontend,如果能看到Vue的页面,说明前端没问题;再调用一个后端接口(比如http://localhost:8080/backend/api/user),如果能返回数据,说明后端也没问题。

    要是遇到问题,先看这张新手常踩坑表,90%的问题都能解决:

    常见问题 错误原因 解决方法
    前端页面空白,F12显示资源404 Vue打包时publicPath设为“/”,部署到子站点路径错误 修改vue.config.js的publicPath为“./”,重新打包
    后端部署后显示500内部错误 未安装ASP.NET Core模块,IIS无法处理.NET6请求 下载安装.NET Core Hosting Bundle(包含ASP.NET Core模块)
    前端调用后端接口提示跨域403 后端未配置CORS,或IIS未添加跨域头部 后端Startup.cs中添加AddCors和UseCors;或IIS Web.config中添加Access-Control-Allow-Origin头部
    IIS访问后端接口提示404 后端应用程序池的.NET CLR版本没设为“无托管代码” 修改应用程序池的.NET CLR版本为“无托管代码”

    我当初帮小周部署完,他盯着成功加载的页面说:“原来这么简单?我之前怎么没想到拆步骤?”其实不是难,是没人把“为什么要做”讲清楚——比如改publicPath不是“规定”,是因为路径逻辑;设“无托管代码”不是“玄学”,是因为.NET6的运行机制。你按上面的步骤试一遍,要是遇到问题,评论区留个言,我帮你看看——毕竟踩过的坑多了,解决起来也快~


    怎么确认服务器上装对了.NET6运行时?

    打开服务器的命令提示符,输入dotnet info,如果能看到“.NET Runtime 6.x”的版本,说明装对了;要是提示“dotnet不是内部或外部命令”,就得去微软官网下载.NET6 Runtime(https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0nofollow),双击安装一路下一步就行——记住要装运行时,不是开发用的SDK,运行时更小更适合服务器环境。

    Vue项目打包后页面空白,F12显示资源404怎么办?

    大概率是打包时publicPath配置错了。你打开Vue项目的vue.config.js文件(没有就自己建一个),把默认的publicPath: “/”改成publicPath: “./”,然后重新运行npm run build打包。因为“/”是根目录路径,要是项目部署在IIS的子站点(比如http://localhost/myproject),浏览器会去根目录找js、css资源,自然找不到;改成“./”就是当前文件夹下的资源,不管部署到哪个目录都能正确加载。

    后端.NET6项目部署到IIS后显示500内部错误,可能是啥原因?

    先检查两个关键项:一是服务器有没有装ASP.NET Core模块——打开IIS管理器,点击左侧服务器名称,再点右侧“模块”,看不到“AspNetCoreModuleV2”的话,就得去下载.NET Core Hosting Bundle(https://dotnet.microsoft.com/zh-cn/download/dotnet-hosting/6.0nofollow),这个包会自动装ASP.NET Core模块和运行时;二是应用程序池配置——右键应用程序池选“高级设置”,把“.NET CLR版本”改成“无托管代码”,.NET6是跨平台的,不需要IIS托管代码,之前帮小周解决时就是这个配置没改,导致一直500错误。

    前端调用后端接口提示跨域403,怎么解决?

    推荐用后端配置CORS的方法:打开.NET6项目的Startup.cs文件,在ConfigureServices方法里加Cors政策——比如允许前端地址(http://localhost:8080/frontend)的GET、POST请求,然后在Configure方法里加UseCors启用这个政策;要是不想改代码,也能临时在后端的web.config文件里加跨域头部,比如在system.webServer节点下加customHeaders,设置Access-Control-Allow-Origin为前端地址,但生产环境 用第一种,更安全也更灵活。

    IIS里的应用程序池要改哪些配置才能跑.NET6项目?

    右键应用程序池选“高级设置”,改三个地方就行:一是“启用32位应用程序”设为False,.NET6是64位的,开32位会冲突;二是“托管管道模式”选“集成”,经典模式是老版本IIS用的,现在基本不用;三是“.NET CLR版本”设为“无托管代码”,这是.NET6项目的核心配置,因为.NET6自己有运行时,不需要IIS的CLR托管,没改的话后端会报404或者500错误。

    原文链接:https://www.mayiym.com/50008.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码