1.前端的第一种部署方法IIS(不推荐):
IIS虽然是可视化界面但是比nginx要麻烦很多,主要的是坑是在URL重写配置。
首先一定要提前把URL Rewrite和Application Request Routing这两个给装进U盘里,缺一不可。
我简单的介绍一下这两个的作用:URL重写用来配置跨服务器的请求转发,ARR用来实现跨服务器的请求转发。
官方下载地址分别为:URL Rewrite : The Official Microsoft IIS SiteApplication Request Routing : The Official Microsoft IIS Site
打开网页移到最下面,根据自己的需求跟需要部署的Windows架构来选择下载。
- x86:指 32 位架构的操作系统或 CPU。
- x64:指 64 位架构的操作系统或 CPU。
Windows安装IIS直接看这位博主发的就行:Windows IIS服务器安装(超详细)_iis安装-优快云博客。
都安装好后打开IIS
1.IIS 管理里找到一个图标 "Application Request Routing Cache",点击进去进行配置
2.进去后,点击 Server Proxy Settings
3.在设置页面,勾选 Enable proxy
4.应用保存刚才设置
5.在dist目录下创建一个web.config(URL重写的配置文件)把以下根据你的需求修改好后按Ctrl+S保存即可
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Proxy to Backend" enabled="true" stopProcessing="true">#这个api/和/watershed/下面的是根据前端设置的APP_API_BASE和API_BASE来决定的
#前端的代码:VITE_APP_API_BASE=‘/watershed/api/’;base:‘/watershed/’
#http://localhost:8080/api/{R:1} 根据你的需求要不要改
#模版为http://运行后端主机的IP:后端端口/后端的基地址即前缀/{R:1}
#其他的不用改
#记得把带井号的这几句话给删了,不然会报错,不规范的格式
<match url="^api/(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<action type="Rewrite" url="http://localhost:8080/api/{R:1}" logRewrittenUrl="true" />
</rule>
<rule name="Rewrite to index.html" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/watershed/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
6.在 网站 下的 Default Web Site 右键 添加应用程序
7.别名随便写,物理路径写dist目录的绝对路径,比如D:\project\watershed\app\dist
8.点击确定
2.前端的第二种部署方法Nginx(推荐):
Nginx官方下载地址:
选择 Stable version(稳定版本) 下的第三个:nginx/Windows-1.26.3 (可能版本不一样 下载最新的版本就行)
下载好后解压到目录里就行,之后只需要修改nginx.conf就行
1.为了可维护性、灵活性,我是把Nginx配置拆分到conf.d目录(在nginx根目录新建一个就行)
2.conf目录里的nginx.conf配置文件如下:
# 全局配置部分
worker_processes auto; # 自动分配工作进程数量(根据 CPU 核心数)
error_log logs/error.log warn; # 错误日志路径和日志级别
pid logs/nginx.pid; # PID 文件路径# 事件处理块
events {
worker_connections 1024; # 每个工作进程的最大连接数
}# HTTP 配置块
http {
include mime.types; # 包含默认的 MIME 类型
default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; # 访问日志路径和日志格式sendfile on; # 开启高效文件传输
keepalive_timeout 65; # 连接保持超时时间# gzip 压缩配置(全局)
gzip on;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
gzip_proxied any;
gzip_vary on;
gzip_min_length 1024;# 引入子配置文件
include D:/webserve/nginx-1.26.3/conf.d/*.conf; # 加载 conf.d 目录下的所有 .conf 文件
}
3.conf.d目录里的watershed.conf(名字根据你的项目自己取)配置文件如下:
# 定义一个 HTTP 服务
server {
listen 80; # 监听 80 端口 如果你不想写server_name也可以直接在80后面写default_server 一样的效果
server_name _; # 服务的域名或 IP 下划线表示“匹配任意未被其他 server 块匹配的域名”,也可理解为“默认或兜底”域名配置。
# 没有任何前缀时nginx默认定向到Nginx页面 即index index.html
# 当前缀只有/时定向到Nginx页面 nginx.config的默认根目录是nginx根目录里的html目录 所以不需要加root或alias
location / {
index index.html;
}
# 301表示永久重定向到/ld-watershed/
location /ld-watershed {
return 301 /ld-watershed/;
}# 注意要用alias alias是替换访问目录而root是添加访问目录
location /ld-watershed/ {
alias D:/project/watershed/app/dist/;
index index.html;
try_files $uri $uri/ /ld-watershed/index.html;
}# API 代理配置,将 /watershed/api/ (即前端写的APP_API_BASE)开头的请求转发到后端服务
location /ld-watershed/api/ {
proxy_pass http://localhost:8080/liandu/; # 后端服务地址 跟上文的web.config的模版差不多 少了 {R:1} 而已
proxy_set_header Host $host; # 设置 Host 请求头
proxy_set_header X-Real-IP $remote_addr; # 客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发链中的 IP
}
}
4.配置好后在nginx根目录运行CMD,直接运行nginx就行
记得把带#的话给删了 否则直接复制粘贴可能会报格式错误
start nginx #运行nginxnginx -s reload #nginx配置文件重载
nginx -s stop #停止运行nginx
3.后端Jar包部署方式WinSW(推荐):
后端部署Jar有三种方式:cmd命令运行、bat脚本运行、WinSW运行。
前两个都有弊端:cmd关了窗口就会停止运行、bat主机如果卡死重启则不会重启。
WinSW只是个工具,就是把jar包运行程序变成一个服务,这样即可以后台运行也会随着主机重启而自动重启。
WinSW官方下载地址:
Release WinSW v2.12.0 · winsw/winsw · GitHub
根据Windows的架构对应版本进行下载,配置文件也可以从这里面下然后进行修改,也可以自己建一个.xml类型文件,然后在放WinSW目录里建一个jar目录跟logs目录。如图
配置文件内容如下:
<service>
<!-- ID of the service. It should be unique across the Windows system-->
<id>随便写</id>
<!-- 服务名称-->
<name>随便写</name>
<!-- 服务说明 -->
<description>随便写</description>
<!-- 指定程序依赖的 jre -->
<executable>D:\sdk\jdk8\bin\java.exe</executable>
<!-- jar 运行命令 -->
<arguments> -jar %BASE%\jar\jar包的名字.jar </arguments>
<!-- 输出日志目录 -->
<logpath>%BASE%\logs</logpath>
<!-- %BASE% 为部署主目录 -->
</service>
在该主目录打开CMD,运行WinSW工具。指令如下:
winsw.exe install #安装服务
winws.exe start #启动服务
winsw.exe stop #停止服务winsw.exe uninstall #卸载服务
# 如果更换jar包只需要 先停止再启动服务就行 不需要重新安装服务
4.如何看是否部署成功:
前端看网页是否能加载出来
后端直接curl查看接口
5.同一网段下的主机访问不了的解决方法:
这种情况大多数是网络层或传输层没有放行所致,设置放行80端口即可:
1.网络层:
- 如果有路由器或三层交换机等网络设备启用了防火墙功能,需要在对应设备上进行端口转发或放行规则的配置。
- 如果在云服务器(例如阿里云、AWS 等)上,需要打开其安全组规则,允许外部访问 TCP 80 端口。
2. 传输层:
- 服务器操作系统本身也可能开启了防火墙(如 Windows Firewall)。要在系统防火墙中开放相应的 TCP 80 端口入站规则。