〇、前言

本文通过将 arco 框架的前端项目,部署至 CentOS 7,并访问同服务器的 WebAPI 接口,来简单演示一下,如何将前端项目发布至 Linux 系统。

关于 ASP.NET WebAPI 发布至 Linux 的步骤,可以参考博主过往文章: https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos

一、简单创建一个前端项目,基于 Arco Design Vue

1.1 环境准备和项目创建

首先是要提前安装好 nodejs,注意版本会有影响,本文推荐直接安装 18.20.0 版本,下文 1.2 中问题汇总再详解。

下载地址可使用阿里云镜像地址: https://mirrors.aliyun.com/nodejs-release/

然后安装 arco cli :

npm i -g arco-cli

上述环境准备好后,就可以进行项目的初始化了。如下:

// 初始化示例项目
E:\OneSelf\ArcoDesignVueWorkSpace>npm init web.test.arco ___ ____ _
/ | ______________ / __ \___ _____(_)___ _____
/ /| | / ___/ ___/ __ \/ / / / _ \/ ___/ / __ `/ __ \
/ ___ |/ / / /__/ /_/ / /_/ / __(__ ) / /_/ / / / /
/_/ |_/_/ \___/\____/_____/\___/____/_/\__, /_/ /_/
/____/ v1.27.5 ? 路径已经存在,确认要覆盖它吗? E:\OneSelf\ArcoDesignVueWorkSpace\web.test.arco Yes
? 请选择你希望使用的技术栈 Vue
? 请选择所要创建项目的类型 Arco Pro 项目
? 请选择 Arco Pro 模板 完整版(包含所有页面) 正在初始化项目于 E:\OneSelf\ArcoDesignVueWorkSpace\web.test.arco
√ 获取项目模板成功
√ 模板内容拷贝完成
√ 模板内容适配完成
√ 项目依赖安装完成
******************************************************************************
Read README.md for help information. Execute following command to start
$ cd web.test.arco
$ pnpm run dev
******************************************************************************

最后,直接运行项目:

E:\OneSelf\ArcoDesignVueWorkSpace\web.test.arco>npm run dev

> arco-design-pro-vue@1.0.0 dev
> vite --config ./config/vite.config.dev.ts VITE v3.2.10 ready in 2940 ms ➜ Local: http://localhost:5173/
➜ Network: use --host to expose

通过地址 http://localhost:5173/ 进行访问,直接登录后即可查看示例页面:

最后,可以通过命令 npm run build 将示例项目打包,备用。

1.2 遇到的问题

1.2.1 初始化失败【Error: spawnSync npm.cmd EINVAL】

// 报错详情:
errno: -4071, code: 'EINVAL', syscall: 'spawnSync npm.cmd', path: 'npm.cmd',
arco design 初始化项目时报错:× 模板内容拷贝失败 Error: spawnSync npm.cmd EINVAL

原因是 child_process.spawn 有漏洞 (CVE-2024-27980)-(HIGH),调用要加 { shell: true }。2024.4.10 node 修复了这个漏洞,代码执行就报错了。cli 下载 arco-design-pro-vue 执行到 .arco-cli\init.js 就出现 spawn 报错。

解决办法:使用 18.20.2,20.12.2,21.17.3 之前的版本就可以了。我用 18.20.0 版本就可以了。各版本阿里云下载地址:https://mirrors.aliyun.com/nodejs-release/

参考:https://github.com/arco-design/arco-cli/issues/92

1.2.2 镜像地址证书过期

// 错误提示:
request to https://registry.npm.taobao.org/axios failed,reason: certificate has expired

更新镜像地址即可。

// 先备份 npm 配置,可以防止在更换过程中出现意外导致配置丢失
npm config get > npm_config.txt
npm config set registry https://registry.npmmirror.com
npm install --save-dev @arco-design/web-vue
npm i -g arco-cli

1.2.3 项目依赖安失败

// 报错详情:
× 项目依赖安失败,你可以稍后尝试手动安装项目依赖
Error: Command 「yarn 」 executed failed:
warning ..\package.json: No license field
warning gifsicle > bin-build > tempfile > uuid@3.4.0: Please upgrade to version 7 or higher.
。。。

解决方案:

  • 打开命令行,切换到项目目录,例如:cd your_project_directory。
  • 运行以下命令来清除之前的依赖缓存:yarn cache clean。
  • 更新项目的依赖包:yarn upgrade。
  • 重新安装项目依赖:yarn install。

二、Nginx 安装和配置

安装步骤详见博主过往文章(Nginx的安装和测试:https://www.cnblogs.com/hnzhengfy/p/Nginx.html#_label3),本文不在赘述。

配置文件位置:/usr/local/nginx/conf 中的 nginx.conf。

执行程序位置:/usr/local/nginx/sbin 中的 nginx。

2.1 Nginx 文件配置

先将打包好的前端测试文件,上传到 Linux 中,本文示例是复制到 /home/web.arco 文件夹。

配置大概思路:

  • 在前端项目中,其实是分两种请求的,一种是页面加载,另一种是访问后端接口进行数据操作。
  • 如何区分这两种操作?那就只能通过请求路径了,给接口请求的路径统一加个标记,比如 /apiarco。
  • 然后,这个路径中的标记在后端接口中又是没有的,那就需要在 Nginx 中做下替换,即 URL 重写。
  • 经过重写后的请求,就会直接到达候选 api 服务,当然后端也有必要配置允许跨域访问。

如下 Nginx 配置文件中的 server 模块:

    server {
listen 8001;
listen [::]:8001;
server_name _;
root /home/web.arco; # 设置服务器的根目录为 /home/web.arco location / {
root /home/web.arco;
index index.html index.htm; # 尝试按照顺序查找 index.html 或 index.htm 文件
try_files $uri $uri/ /index.html; # 如果找不到这些文件,它将返回 /index.html
}
# /apiarco 路径中包含此标识,进行特殊处理
location /apiarco {
proxy_pass http://localhost:5000/; # 将请求代理到本地的 5000 端口,就是 api 接口地址
rewrite ^/apiarco/(.*)$ /$1 break; # URL 重写为去掉 /apiarco 前缀
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

当同时部署多个前端服务时,可以再配置一个 server 节点,例如:

    server {
listen 8002;
listen [::]:8002;
server_name _;
root /home/web.arco.new; location / {
root /home/web.arco.new;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /apiarconew {
proxy_pass http://localhost:5000/;
rewrite ^/apiarconew/(.*)$ /$1 break;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口的更多相关文章

  1. 【转】前后端分离的项目如何部署发布到Linux

    前后端分离的项目如何部署发布到Linux 前期准备 1.服务器的基本配置信息2.本机远程连接服务器的工具(xshell.xftp或者mobaXterm等等,看你自己喜欢) 第一步:部署环境 1.安装j ...

  2. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  3. 01_Nginx安装,nginx下部署项目,nginx.conf配置文件修改,相关文件配置

     1.下载Nginx,进入Nginx下载地址:http://nginx.org/ 点击nginx-1.8.0,进入:http://nginx.org/en/download.html,下载文件: ...

  4. nginx 系列 1 linux下安装以及配置IIS分发

    一. 安装 操作系统:centos 7 ,nginx版本1.12.2,windows server 2008 iis 1.1 确认nginx所依赖的工具 Zlib:  nginx提供gzip模块,需要 ...

  5. .netcoreapp 发布到 linux 的问题,vs靠不住

    .netcore 2.0 发布后,小版本更新速度惊人 截止目前:2.1.200 最新一个新项目,vs发布到linux@debian9一直报错,反复发布n次依然失败.把本地2.1.100更新到最新2.1 ...

  6. 前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)

    开门见山,本文分享前后端分离,容器化前端项目时动态插入后端API基地址,这是一个很赞的实践,解决了前端项目容器化过程中受制后端调用的尴尬. 尴尬从何而来 常见的web前后端分离:前后端分开部署,前端项 ...

  7. 在Vue&Element前端项目中,对于字典列表的显示处理

    在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...

  8. 【.Net Core】 使用 Nginx 发布 .Net Core 3.1 项目至LInux(Centos7)。

    前置博客(博客中使用的项目来自于此): [Docker] .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 .配置swagger (三) 环境:.N ...

  9. Dockerfile + Nginx.conf文件记录(用于前端项目部署)

    Dockerfile + Nginx.conf文件记录(用于前端项目部署) 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理),默认服 ...

  10. Github配合Jenkins,实现vue等前端项目的自动构建与发布

    本篇文章前端项目以vue为例(其实前端工程化项目的操作方法都相同),部署在Linux系统上(centos). 之前做前端项目的部署,一直都是手动运行打包命令,打包完.再使用FTP.Xshell等这类的 ...

随机推荐

  1. Django 自定义创建密码重置确认页面

    要实现上述功能,你需要修改模板文件以添加"忘记密码"链接,并创建新的视图函数来处理密码丢失修改页面.验证和密码修改.下面是你可以进行的步骤: 1. 修改模板文件 在登录页面的表单下 ...

  2. oeasy教您玩转 linux 010212 管道 pipe

    上一部分我们都讲了什么? 牛说cowsay 牛可以有各种表情 可以自定义眼睛 可以变成各种别的小动物 可以说也可以想cowthink 我们也想让牛说出字符画的感觉 回顾字符画 下载figlet和toi ...

  3. 二分查找 | C++

    以此题为例:P2249 [深基13.例1]查找 二分查找 对于一个单调不降的序列 \(S\),传统查找的复杂度是 \(O(|S|)\),即 \(O(n)\). 有时候序列 \(S\) 中的元素特别多, ...

  4. java8interface的新特性:default,static,funcation

    default:默认方法 在类接口中可以直接定义的方法,实现接口的类可以直接使用 使用案例: public interface MyInterface { default void display() ...

  5. docker centos8 java8 mysql8 部署springboot项目

    docker centos8 java8 mysql8 部署springboot项目 一,用idea将springboot项目打成jar包 二,将打的jar包用xshell的rz上传到docker的c ...

  6. 第九讲: MySQL为什么有时候会选错索引?

    第九讲: MySQL为什么有时候会选错索引? ​ 前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的. ​ 但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引.也 ...

  7. 【Java-GUI】11 Swing06 JTable

    静态数据表格的样子: package cn.dzz; import javax.swing.*; import java.awt.*; public class JTable { JFrame jFr ...

  8. 实现一个终端文本编辑器来学习golang语言:第二章Raw模式下的输入输出

    从第二章开始,在每个小节的最后都会有一些代码实操作业,你可以选择自己完成(比较推荐),再对照我的实现方式,当然也可以直接看我的代码实现.不过,之后的各个功能实现,我都会基于我先前的代码实现版本,在它的 ...

  9. 如何解决单IP爬取网站的单IP受限问题

    由于最近博导承接了一项国家科技项目,需要对大量的网站进行爬取,但是现在的很多网站都使用了反爬手段,比如限制一个session的不同网页的访问时间间隔,甚至更有甚者直接对IP地址也做了限制.对于限制se ...

  10. vue 识别\n \t 等字符(转载)

    使用.text(str)时,str中有"\n",但是页面显示却没有换行,需要在所在的 div添加属性 style="white-space: pre-line" ...