nginx部署本地umi build项目

news2024/9/29 5:26:25

一、安装

brew install nginx

Brew 安装可以参考网上教程
https://juejin.cn/post/6986190222241464350

安装后启动nginx服务查看是否成功

brew services start nginx

启动报错

Error: undefined method `launchd_service_path‘ for xxx

解决:更新brew

brew update -v

https://blog.csdn.net/qq_33589510/article/details/128805046
重新启动后访问localhost:8080可以看到成功
在这里插入图片描述

二、将build之后的产物dist部署到nginx

1.umi build后得到dist文件夹
2.查看nginx中的nginx.conf文件
查看nginx配置信息

brew info nginx

这里找了网上大佬的图参考
在这里插入图片描述
图片来源网络https://juejin.cn/post/6986190222241464350
我的截图

在这里插入图片描述
可以看到每个人的文件位置是不一样的,后面以我的位置为参考

打开安装目录

open /opt/homebrew/etc/nginx

在这里插入图片描述
这个就是配置文件
在vscode中打开它,并找到server块,这里提供我的
在这里插入图片描述
root后面的是Nginx服务器的文档根目录。也就是你以后存放dist的路径
但是我的root后面只跟了一个html, 而且nginx文件夹下也没有叫html的文件夹

如果您的Nginx配置文件中的 root 指令没有值,而是显示为 root html;,则意味着Nginx将使用默认的文档根目录。在这种情况下,文档根目录通常是 /usr/share/nginx/html 或 /var/www/html。

在您的Nginx配置文件中,如果 root 指令没有绝对路径,则Nginx将使用一个相对路径来找到文档根目录。在这种情况下,相对路径是相对于Nginx配置文件的目录。

在您的示例中,root 指令的值为 html,这意味着Nginx将在Nginx配置文件所在目录下寻找名为 html 的目录,并将其作为文档根目录。

这意味着Nginx将在Nginx配置文件所在目录下寻找名为 html 的目录,并将其作为文档根目录。如果该目录不存在,您需要创建它并赋予权限
在这里插入图片描述

mkdir /opt/homebrew/etc/nginx/html
chmod 755 /opt/homebrew/etc/nginx/html

这两个命令是用于在命令行中创建目录并设置权限的。

  1. 第一个命令 mkdir /opt/homebrew/etc/nginx/html 用于在 /opt/homebrew/etc/nginx目录下创建一个名为 html的新目录。如果其中任何一个父级目录(/opt/homebrew/etc/nginx)不存在,该命令也会创建它们。

  2. 第二个命令 chmod 755 /opt/homebrew/etc/nginx/html 用于将 html 目录的权限设置为755。这意味着目录的所有者具有读取、写入和执行权限(7),而组和其他用户具有读取和执行权限(5)。chmod 命令用于更改Unix/Linux 系统中的文件和目录的权限。

请注意,/opt/homebrew/etc/nginx/html 路径和您指定的权限可能根据您特定的系统配置而有所不同。如果需要,请根据实际情况调整命令。

3.然后可以看到nginx文件夹下已经有了html文件夹
在这里插入图片描述
接着配置nginx.conf文件

location / {
    root /opt/homebrew/etc/nginx/html/dist;
    index index.html index.htm;
}

保存并检验配置

nginx -t

在这里插入图片描述
出现这两行则表示没问题
这时,将dist文件夹复制到html文件夹下,
重启nginx服务

nginx -s reload

并访问localhost:8080(或你之前修改的域名example.com)即可,

问题

1.应后端要求,js和css文件前面加前缀如: /static/umi.js或/static/umi.css

在umi的config.ts中加上publicPath:’/static/‘

(补:这里加了publicPath后打开本地会报错 mf-va_remoteEntry.js:318 Uncaught (inpromise) ChunkLoadError: Loading chunk mf-dep_src_umi_cache_mfsu_mf-va__CWD__node_modules__umijs_babel-preset-umi_node_modules__babel_runti-028e26 failed.,删除src/.umi文件夹后重新start即可)

结果访问报nginx无法加载js和css, 报错net::ERR_ABORTED 404 (Not Found)

  1. 检查文件路径: 确保请求的JS或CSS文件的路径是正确的,并且文件确实存在于该路径中。你可以使用命令行或文件浏览器来检查文件路径是否正确。
  2. 检查Nginx配置: 确保Nginx的配置文件中正确地映射了请求的文件路径。特别是,确保你使用了正确的root指令来指定你的Web根目录,并且你的location指令正确地映射了请求的文件路径。
  3. 检查文件权限: 确保文件权限允许Nginx服务器读取请求的文件。你可以使用chmod命令来更改文件权限,以确保Nginx可以访问它们。
  4. 检查防火墙设置: 如果你使用了防火墙,请确保防火墙不会阻止Nginx服务器访问请求的文件。

由于我的是加了东西后报错的,所以我认为是文件路径不对的问题
将dist下的umi.js和umi.css放到dist/static/下果然成功了
但是不可能每次在dist这里修改,所以我将nginx配置改成重定向,重定向也可以使用alias,但我这里是需要去掉上一级目录,所以直接用了rewrite

server {
	listen 8080;
	server_name localhost;

	#charset koi8-r;

	#access_log logs/host.access.log main;

	root /opt/homebrew/etc/nginx/html/dist;

	location /static/ {
		# 重定向/static/到/ 例如/static/umi.js 重定向到 /umi.js
		rewrite ^/static/(.*)$ /$1 break;
	}

	location / {
		index index.html index.htm;
	}

	#error_page 404 /404.html;

	# redirect server error pages to the static page /50x.html
	#
	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
		root html;
	}

	# proxy the PHP scripts to Apache listening on 127.0.0.1:80
	#
	#location ~ \.php$ {
	# proxy_pass http://127.0.0.1;
	#}

	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	#location ~ \.php$ {
		# root html;
		# fastcgi_pass 127.0.0.1:9000;
		# fastcgi_index index.php;
		# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
		# include fastcgi_params;
	#}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	#location ~ /\.ht {
	# deny all;
	#}
}

再次执行

nginx -t 
nginx -s reload

访问成功
在这里插入图片描述
问题二: 第一次访问成功,刷新后报404
在这里

location / {
    index index.html index.htm;
}

加上

try_files $uri $uri/ /index.html;

变成

location / {
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
}

重新启动nginx即可

常用的指令有

nginx -t 检查配置是否有错误,每次修改都应该先检查一下
nginx -s reload 重新加载配置
nginx -s reopen 重启
nginx -s stop 停止
nginx -s quit 优雅地退出,在退出前完成已经接受的连接请求
nginx -V 查看版本,以及配置文件地址
nginx -v 查看版本
nginx -c filename 指定配置文件
nginx -h 帮助

https://www.jianshu.com/p/8994bd8d3414

最后

(注意:此处为我根据自己的项目写的,具体情况可能和我的不同,酌情参考)
可以在项目package.json中写上脚本,将文件自动拷贝到nginx
在这里插入图片描述

"posttest:nginx": "set NODE_ENV=development && umi build",
"test:nginx": "scp -r ./dist /opt/homebrew/etc/nginx/html",
yarn run test:nginx


启动nginx或直接刷新页面即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/853089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于vue-admin-template的动态路由的问题解决

基于vue-admin-template的动态路由的问题解决 1.问题一:页面无法显示 控制台报如下错误: 首先经过一番网上搜索,有说是webpack的原因,调试后发现不是,然后再排查后台返回的组件地址。 由于我的前端拼接组件地址的代…

使用威胁情报源可为大家提供更好的DDoS防护

DDoS(分布式拒绝服务)攻击已成为各种企业(小到区域性小公司大到各种跨国公司)的主要威胁,DDoS 攻击可能会对企业造成重大损害和破坏,比如对目标公司的声誉产生不利影响并导致收入损失。这也是为什么现在许多…

c++map和set剖析

文章参考文献:cplusplus 博主:拖拉机厂第一代码手 gitee:拖拉机厂第一代码手 c专栏:C 目录 🧙🏼‍♂set剖析🧚🏼set简介🧚🏼set模板参数列表🧚🏼s…

大模型中常用的分词器Tokenizer学习总结记录与代码实现

最近大模型领域内如火如荼,很多企业、个人组织都陆续进入这个领域,笔者最近也是在接触大模型相关的技术领域,本文的主要目的就是想记录总结汇总大模型常用到的分词器算法,总结记录,学习备忘!由于博主本身知…

巨人互动|Google海外户Google Analytics的优缺点是什么?

Google Analytics是一个由谷歌开发的网站分析工具,旨在帮助网站和移动应用程序运营者收集和分析数据,以更好地了解用户行为和改进业务。虽然Google Analytics具有许多优势,但也存在一些缺点。在本文中,我们将探讨Google Analytics…

cuda安装

1.cuda 11.8网址 CUDA Toolkit 11.8 Downloads | NVIDIA Developer 2.安装 sh cuda_11.8.0_520.61.05_linux.run 直接accept 移动上下到driver上,再enter一下取消driver的更新 更新一下.bashrc,cp -r ~/.bashrc xxx export PATH/usr/local/cuda-11.…

慢慢来,这次一定能搞懂Promise

1.Promise到底是个什么东西? 让我们使用万能console打印一下它的内容。 根据控制控制台的输出可见Promise 是一个构造函数,本身身上有 all、reject、resolve 这几个方法,原型(prototype)上有 then、catch 等方法。 根…

JVM源码剖析之Java命令行参数全解

最近,有一位网友询问关于Java命令行参数方面的问题,因为在Java中参数有很多种,有不少的读者一直没弄明白,所以特意写下此篇文章。 此篇文章分2大块,第一块是不同参数的解释,第2块就是JVM源码论证&#xff…

理解 Python 的 for 循环

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 在本篇博客中,我们将讨论 Python 中 for 循环的原理。 我们将从一组基本例子和它的语法开始,还将讨论与 for 循环关联的 else 代码块的用处。 然后我们将介绍迭代对象、迭代器和迭代器协议&…

低代码平台——减少开发bug,解放程序员

目录 一、前言 二、低代码提供了哪些功能 三、低代码对程序员的好处 四、小结 一、前言 在计算机语言的世界里,一直存在着一个千奇百怪的生物——bug。bug产生的本质是因为写代码,于是一种真理就诞生了。真理如下:只要写代码,就会…

【多维定向滤波器组和表面波】表面变换:用于高效表示多维 s 的多分辨率变换(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

信创麒麟操作系统卸载docker,并分别用在线、yum、rpm三种方式安装信创的docker

备注:操作前建议对机器打快照备份,或者备份好数据,如未使用,第一次部署的情况可直接操作 一、卸载DataEase自带的docker # 停止服务 service dataease stop# 删除 docker 可执行文件 rm -f /usr/bin/containerd-shim-runc-v2 r…

快速解决IDEA中类的图标变成J,不是C的情况

有时候导入新的项目后,会出现如下情况,类的图标变成J,如图: 直接上解决方法: 找到项目的pom.xml,右键,在靠近最下方的位置找到Add as Maven Project,点击即可。 此时,一般类的图标就…

【springboot项目】在idea中启动报错合集

一、IDEA中报错 “Error running ‘Application‘: Command line is too long.“ 的解决办法 报错详情: Error running Application: Command line is too long.Shorten command line for Application or also for Spring Boot default configuration.报错原因&am…

校对软件助力公安公检:提高调查报告质量

校对软件可以为公安公检机关提供有力支持,帮助提高调查报告的质量。以下是校对软件在这方面的助力: 1.拼写和语法检查:校对软件可以自动检查调查报告中的拼写错误和语法问题。这可以避免由于疏忽或拼写错误而导致的报告不准确或难以理解的情况…

TENNECO EDI 项目——X12与XML之间的转换

近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 …

java Spring Boot yml多环境配置

我们项目 线上和线下 环境配置不是特别一样 例如 运行的URL 数据库地址 数据库的账号密码 这些经常是不一样的 如果每次上线钱改 也不是特别方便 甚至可能忘记 那么 进入我们代码中 所谓的多环境 就是在不同的环境下配置不同的值 终端还是在application配置文件中 多环境的话…

【网络编程】万字详解||一个简单TCP服务器(TCP、线程池、守护进程)源码+介绍

TCP服务器 锁:Lock.hpp代码介绍 守护进程:daemonize.hpp代码说明 日志文件:log.hpp代码说明 任务处理 Task.hpp代码说明 线程池 ThreadPool.hpp代码说明 客户端 TCPClient.cc代码说明 服务器 TCPServer.cc代码说明 头文件包 util.hpp代码 Mak…

【工程实践】使用Roformer-sim(SimBERTv2 )做数据增强

前言 此文仅记录以Roformer-sim为基础模型做数据增强的过程,Roformer-sim模型细节请移步:SimBERTv2来了!融合检索和生成的RoFormer-Sim模型 - 科学空间|Scientific Spaces https://github.com/ZhuiyiTechnology/roformer-sim 1.功能介绍 可以…

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)

1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…