Skip to content

Windows 部署

Windows Server / 专业版 单机裸机 单体部署(一屏通读,右侧「本页目录」定位)。VM + Linux 微服务请改用 微服务部署。完成后看 上线文档

00 部署方案

目标访问

  • PC:http://<CLIENT_IP>/web/
  • H5:http://<CLIENT_IP>/app/
  • API:Nginx 反代,不直接暴露 48080

资源建议

项目最低推荐
CPU4 核8 核
内存8 GB16 GB
磁盘100 GB200 GB+ SSD
系统Win10/11 专业版或 Server 2019+Server 2022

推荐在开发机构建产物,只拷贝到客户机。



目录规划

powershell
New-Item -ItemType Directory -Force C:\ruoyi-office\app\backend
New-Item -ItemType Directory -Force C:\ruoyi-office\app\web
New-Item -ItemType Directory -Force C:\ruoyi-office\app\app
New-Item -ItemType Directory -Force C:\ruoyi-office\conf,C:\ruoyi-office\logs,C:\ruoyi-office\upload,C:\ruoyi-office\backup,C:\ruoyi-office\sql,C:\ruoyi-office\soft
目录用途
app\backendJAR
app\web / app\appPC / H5 静态
conf外部 application-prod.yaml
upload本地文件存储
sql初始化与增量 SQL

安装包清单

软件用途下载
JDK 17/21运行后端https://adoptium.net/temurin/releases/
MySQL 8.0数据库https://dev.mysql.com/downloads/installer/
Memurai 或 Redis for Windows缓存Memurai / tporadowski/redis
Nginx Windows Stable入口https://nginx.org/en/download.html
NSSM注册 Windows 服务https://nssm.cc/download
DBeaver(可选)导库https://dbeaver.io/download/

JDK

安装 MSI,勾选 JAVA_HOME 与 PATH。验证:

powershell
java -version

MySQL

  1. Installer 选 Server;端口 3306;强密码加密;服务名 MySQL80 开机自启。
  2. my.ini[mysqld] 增加 bind-address=127.0.0.1,然后 Restart-Service MySQL80
  3. 不要对防火墙开放 3306

Redis / Memurai

  • 绑定 127.0.0.1,设置 requirepass,不开放 6379
  • Memurai:Get-Service *memurai*
  • Redis for Windows:按官方文档 --service-installredis-cli -a <密码> ping 期望 PONG

Nginx

解压到 C:\nginx,确认存在 nginx.execonf\nginx.conf

powershell
cd C:\nginx
.\nginx.exe -t
.\nginx.exe

浏览器访问 http://127.0.0.1 见欢迎页后 .\nginx.exe -s stop


建库

sql
CREATE DATABASE IF NOT EXISTS `ruoyi-office`
  DEFAULT CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

导入

ruoyi-office-db/dump/latest 的 schema / static_data(或交付的等价文件)放到 C:\ruoyi-office\sql\

powershell
cmd /c '"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p ruoyi-office < "C:\ruoyi-office\sql\schema.sql"'
cmd /c '"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p ruoyi-office < "C:\ruoyi-office\sql\static_data.sql"'

验证:

powershell
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p -e "USE ``ruoyi-office``; SHOW TABLES;"

预期:可见 system_userssystem_roleinfra_file_config 等。

DBeaver 连接时 Host=127.0.0.1,驱动属性 allowPublicKeyRetrieval=true


构建机产物

bash
mvn clean package "-Dmaven.test.skip=true" "-Dskip.repackage=true" -pl yudao-server -am -Pboot

cd ruoyi-office-vben && pnpm install
pnpm -r --filter "./packages/**" --filter "./internal/**" build
cd apps/web-antd && pnpm build

cd ruoyi-office-uniapp && pnpm install && pnpm build:h5

拷贝到客户机:

text
C:\ruoyi-office\app\backend\yudao-server.jar
C:\ruoyi-office\app\web\          ← dist 内文件(直接含 index.html)
C:\ruoyi-office\app\app\          ← H5 构建产物内文件

客户构建务必 VITE_GLOB_DEMO_ENABLE=false(见上线文档)。

外部配置

新建 C:\ruoyi-office\conf\application-prod.yaml(密码换成现场值):

yaml
server:
  port: 48080
spring:
  datasource:
    dynamic:
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/ruoyi-office?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
          username: root
          password: <DB_PASSWORD>
  data:
    redis:
      host: 127.0.0.1
      port: 6379
      password: <REDIS_PASSWORD>
logging:
  file:
    name: C:/ruoyi-office/logs/yudao-server.log
management:
  endpoints:
    web:
      exposure:
        include: health,info
yudao:
  demo: false

手动冒烟

powershell
cd C:\ruoyi-office\app\backend
java -Xms1024m -Xmx4096m -jar yudao-server.jar --spring.profiles.active=prod --spring.config.additional-location=file:C:/ruoyi-office/conf/

另开窗口:

powershell
Invoke-WebRequest http://127.0.0.1:48080/actuator/health

预期:UP。通过后 Ctrl+C 停止,再用 NSSM 托管。

NSSM 注册后端

powershell
C:\nssm\win64\nssm.exe install YuQingBackend
字段
Path...\jdk-...\bin\java.exe
Startup directoryC:\ruoyi-office\app\backend
Arguments-Xms512m -Xmx2048m -jar yudao-server.jar --spring.profiles.active=prod --spring.config.additional-location=file:C:/ruoyi-office/conf/
Output / ErrorC:\ruoyi-office\logs\backend-service.*.log
powershell
Start-Service YuQingBackend
Get-Service YuQingBackend

配置

备份后编辑 C:\nginx\conf\nginx.confserver_name 改为 <CLIENT_IP>

nginx
worker_processes  1;
events { worker_connections  1024; }
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    client_max_body_size 200m;
    server {
        listen       80;
        server_name  <CLIENT_IP>;
        charset      utf-8;

        location = /web { return 301 /web/; }
        location /web/ {
            alias C:/ruoyi-office/app/web/;
            index index.html;
            try_files $uri $uri/ /web/index.html;
        }

        location = /app { return 301 /app/; }
        location ^~ /app/ {
            root C:/ruoyi-office/app;
            index index.html;
            try_files $uri $uri/ /app/index.html;
        }

        location /admin-api/ {
            proxy_pass http://127.0.0.1:48080/admin-api/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

        location = / { return 302 /web/; }
    }
}
powershell
cd C:\nginx
.\nginx.exe -t
.\nginx.exe

用 NSSM 注册 YuQingNginx(Path=C:\nginx\nginx.exe,Startup=C:\nginx),Start-Service YuQingNginx

本地文件存储

  1. 确认 C:\ruoyi-office\upload 可写
  2. 登录后:基础设施 → 文件管理 → 文件配置
  3. 存储器=本地;basePath=C:\ruoyi-office\uploaddomain=http://<CLIENT_IP>;设为主配置
  4. 上传小文件验证目录落盘且可预览

防火墙

powershell
New-NetFirewallRule -DisplayName "YuQing HTTP 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "Block YuQing Backend 48080" -Direction Inbound -Protocol TCP -LocalPort 48080 -Action Block
New-NetFirewallRule -DisplayName "Block MySQL 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Block
New-NetFirewallRule -DisplayName "Block Redis 6379" -Direction Inbound -Protocol TCP -LocalPort 6379 -Action Block

启停顺序

  1. MySQL → 2. Redis/Memurai → 3. YuQingBackend → 4. YuQingNginx

可选:XXL-Job

需要定时任务(考勤生成、订单过期等)时再装。原则与 Linux 单体相同:

  1. MySQL 建独立库:导入 xxl_job_schema.sql + xxl_job_init_oa.sql(或 init_all
  2. 本机 Docker Desktop 仅当客户允许时跑 xxl-job-admin;许多 Windows 现场无 Docker,可改用解压版 XXL-Job 或把 Admin 部署在旁路 Linux
  3. 后端 xxl.job.enabled=trueaddresses 指向 Admin
  4. 9090 不对局域网其它机器以外暴露;改 Admin 默认密码

详步骤仍以 Docker 部署 XXL-Job 为准(命令在 Windows 上把路径/Docker 语法按现场调整)。

验收

  • [ ] http://127.0.0.1/web//app/ 可开
  • [ ] 局域网 http://<CLIENT_IP>/web/ 可登录
  • [ ] health UP;上传落入 upload
  • [ ] 刷新 SPA 子路由不 404
  • [ ] 执行 上线文档(演示开关、改密、品牌)

常见问题

现象处理
/web/ /app/ 404Test-Path ...\index.htmlalias/root 路径与末尾 /nginx -t
页面开、接口 502Get-Service YuQingBackend;health;查 MySQL/Redis 密码;netstat -ano | findstr :48080
数据库连接失败MySQL80 是否运行;库名;application-prod.yaml 密码;bind-address
Redis 连接失败服务名;requirepass 与配置一致;仅 127.0.0.1
上传失败本地主配置、basePath、目录权限、client_max_body_size
上传成功无法预览domain 必须是客户可访问的 http://<CLIENT_IP>,不要写 127.0.0.1:48080
局域网访问不了防火墙 80;IP;Nginx 是否运行

日常更新

后端:备份 JAR → Stop-Service YuQingBackend → 替换 JAR → Start-Service
前端/H5:备份 zip → 清空目录 → 拷新 dist → nginx -s reload
库:先 mysqldump 再导增量,必要时重启后端。

备份

powershell
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe" -uroot -p"<DB_PASSWORD>" --single-transaction --routines --triggers ruoyi-office > C:\ruoyi-office\backup\ruoyi-office-$(Get-Date -Format yyyyMMddHHmmss).sql
Compress-Archive C:\ruoyi-office\upload\* C:\ruoyi-office\backup\upload-$(Get-Date -Format yyyyMMddHHmmss).zip

建议任务计划每日执行,并拷到异地盘。

交付记录表

项目内容
PC / H5 地址http://____/web/ · /app/
服务器 IP
MySQL / Redis 密码(密封交接,不进 Git)
管理员账号密码上线立即改密
服务名YuQingBackend / YuQingNginx
上传目录C:\ruoyi-office\upload
部署日期 / 人员
联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版