.net7.0与Vue3.0前后端分离项目linux云服务器部署全过程实践

1、前端部署

前端采用nginx静态代理服务器,重点记录一下nginx配置与前端打包环境配置、以及跨域问题上的前端相应解决方法。

1.1 前端开发环境配置

vite相关开发环境配置,这里主要针对开发环境调试代码时的环境配置,本地调试使用

        这里的主机ip地址为本地ip地址,前端端口号为5001,proxy下面为为后端开发环境接口地址,后端端口号为5003。

server: {
      port: 5001,
      host: '127.0.0.1',
      open: true,
      proxy: {
        '/api': {
          target: 'http://127.0.0.1:5003',
          changeOrigin: true,
          rewrite: (p) => p.replace(/^\/api/, '')
        }
      },
    },

      一般情况下,在vue框架的setting.js文件中会配置后端的url接口,开发环境设置为本地ip地址127.0.0.1即可,部署环境中需按照后端实际部署的服务器主机ip进行设置,如下图。

1.2 前端生产环境配置

       前端生产环境搭建,这里采用nginx Web服务器进行资源代理。部署过程中使用云服务器远程连接客户端为Xshell7,远程文件传输客户端为Xftp7。

       首先将前端vue框架的setting.js文件中后端的url接口修改为需要部署到的linux云服务器的主机ip地址和端口。(修改前述生产环境中的url接口配置)

      控制台输入命令 npm run build 打包前端生成dist文件,将dist文件远程传输至云服务器nginx的静态项目资源目录下(默认为nginx的安装路径),这里默认选择html作为前端项目路径,如下图。

        接下来配置nginx代理前端项目,使用xftp7远程记事本打开nginx的配置文件nginx.conf,配置如下,将ip地址与端口号修改为云服务器的相应环境,root路径为前端项目路径。

server {
         listen       5001;
        server_name  133.44.155.6;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
      location / {
        root /usr/local/nginx/html/dist;
        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;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
   }
location /prod-api/ {
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://133.44.155.6:5003/;
		}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

配置完成后,保存,在xshell7远程客户端中输入如下命令刷新配置,重启nginx服务。

 systemctl daemon-reload
 systemctl restart nginx




       若linux环境中systemctl失效,但是已经安装了systemd服务,则需要检查linux中环境变量,具体操作如下,https://cn.linux-console.net/?p=13854,本人采用将export  PATH=$PATH:/usr/bin/systemctl 环境变量手动添加至linux服务器/etc目录下的profile配置文件。其他命令失效情况也可以采用此方法配置环境变量。

此时,在浏览器中输入前端地址,应该已经可以访问前端资源。

2、后端部署

2.1 webapi后端配置与发布

     后端在配置上主要是注意url接口地址,以及可能会出现跨域问题,最后会单独一章节统一记录跨域问题解决。

url接口地址默认为本机ip加端口号即可,本项目配置信息均在appsettings.json中。

发布选项详情

2.2 linux后端环境配置

2.2.1dotnet安装

1,执行命令 dnf info dotnet,查看软件包里.NET 的版本,若无相应版本则需手动下载安装

2,手动去找.NET 8 运行时安装包地址。打开https://dotnet.microsoft.com/download/dotnet/7.0,找到.NET 7.0 SDK (v7.0.410)下,Linux 下,Binaries 下的 X64,直接会新窗口下载,不让他下载,直接获取下载地址,我获取到的是: https://download.visualstudio.microsoft.com/download/pr/86497c4f-3dc8-4ee7-9f6a-9e0464059427/293d074c28bbfd9410f4db8e021fa290/dotnet-sdk-7.0.410-linux-x64.tar.gz

3,运行命令 curl -Lo dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/86497c4f-3dc8-4ee7-9f6a-9e0464059427/293d074c28bbfd9410f4db8e021fa290/dotnet-sdk-7.0.410-linux-x64.tar.gz

4,运行命令 mkdir dotnet

5,运行命令 tar -C dotnet -xf dotnet.tar.gz

6,运行命令 export DOTNET_ROOT=~/dotnet #您安装 dotnet 的路径

7,运行命令 export PATH=\$PATH:~/dotnet #您安装 dotnet 的路径

8,运行命令 dotnet --info,看看是不是成功安装了 7.0.410,如下图

2.2.2 webapi接口部署

       将发布完成的webapi后端文件传输至dotnet文件目录下,使用linux系统的systemd服务进行后端服务配置。进入system路径新建dotnet后端服务,本机system路径为/etc/systemd/system,进入后新建service文件,可用 vim /etc/systemd/system/dotnettest.service 命令在控制台创建,也可直接使用xftp7创建,详细配置如下图。

[Unit]
Description=dotnettest    #服务描述


[Service]
WorkingDirectory=/root/dotnet/dotnettest     #后端程序所在路径
ExecStart=/root/dotnet/dotnet dotnettest.dll --urls=http://*:5003  
#空格前为.netcore运行时路径,空格后为后端程序,*表示程序监听的url,服务器任意接口都可访问
User=root  #用户名
Group=root #用户组
Environment=ASPNETCORE_ENVIRONMENT=Production  #dotnet环境变量
Restart=always    #程序崩溃或异常时自动重启

[Install]
WantedBy=multi-user.target  

#指定服务在 multi-user.target目标下启动,表示多用户、非图形界面的系统

       后端service服务文件创建完成后,输入以下命令开启服务,其中systemctl status dotnettest.service命令检查服务运行状态,若运行失败需从中查看报错原因,运行成功后设置开机自启动。打开浏览器访问后端地址,访问成功即后端部署完成。

 systemctl daemon-reload              #重载systemd服务配置文件
 systemctl start dotnettest.service   #开启dotnettest.service服务
 systemctl status dotnettest.service  #查看dotnettest.service服务状态
 systemctl enable dotnettest.service  #设置dotnettest.service服务开机自启动





 3、跨域问题解决

        当后端在跨域配置上已经设置了允许任意ip,允许任意请求方法,还会出现跨域报错时,大概率是前后端请求头不一致引起,需要检查前后端的请求头拦截相关配置。

3.1 前后端跨域请求配置

        后端在跨域配置上需要针对浏览器提示的跨域报错进行修改,比如假设我的前端get方法不设置任何请求头方法,前端只对复杂的post请求设置请求头为下图Content-Type。

        此时浏览器对于post请求会默认通过options请求预检,预检通过后才会进行post请求,于是我们需要在后端加上对options的判断,当浏览器通过前端发送options请求到后端时,后端返回的请求头需与前端定义的post请求头一致,后端具体配置如下。

public async Task Invoke(HttpContext httpContext)
        {
            if(!httpContext.Response.Headers.ContainsKey("Access-Control-Allow-Origin") )
            {
                httpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                
               
            }
            if (httpContext.Request.Method == "OPTIONS")
            {
                httpContext.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
                httpContext.Response.ContentType = "application/json;charset=UTF-8";
                return;
            }

            await _next(httpContext);
        }

 3.2 post方法访问异常

       在部署过程中,可能会遇到post方法访问异常的情况,3.1章节已经针对post方法定义了前后端的访问规约,若此时浏览器访问get方法正常,但是访问post方法还是提示content-type的报错,这时需要检查前端向后端发送post方法的参数时,是否进行了json序列化,否则后端不能正确按照约定的请求头的json格式进行正确响应,于是需要对post方法的请求参数做出统一json序列化处理,详细如下图。

 config.headers['Content-Type'] = 'application/json;charset=UTF-8'
 config.data = JSON.stringify(config.data);

至此接口访问应该能够正常,系统能够正常运行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值