运行环境MySQL/Redis/ElasticSearch/JDK请自行安装配置
打开命令工具,进入项目根目录,执行以下打包命令:
mvn clean package -Dmaven.test.skip=true
- window系统使用powershell可能会报错,给maven.test.skip加上引号
- 确保application-prod.yml配置文件中的数据库、Redis等配置没有问题
打包后的jar文件所在地址:
{项目根目录}/chestnut-admin/target/chestnut-admin.jar
上传生成的打包文件到服务器,结束正在运行的服务端进程:
先检查是否存在正在运行的应用进程,如果存在,使用kill -5结束进行,如果无法结束,使用kill -9干掉进程
# 查看进程号
ps aux|grep java
# 结束进程
kill -5 进程号
# 检查是否依然存在
ps aux|grep java
# 强制结束进程,可能会丢失数据
kill -9 进程号
确认服务端进程不存在了,执行以下命令启动服务端
nohup java -jar chestnut-admin.jar --file.encoding=utf-8 --spring.profiles.active=prod
打开命令工具,进入项目根目录,执行以下打包命令:
# 进入前端工程目录
cd chestnut-ui
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 构建
npm run build:prod
构建结果目录:{项目根目录}/chestnut-ui/dist/
{项目根目录}/chestnut-ui/dist/上传到服务器
{项目根目录}/chestnut-ui/dist/上传至服务器/home/app/chestnut-ui目录为例配置nginx
# 创建备份目录
/home/bak/
# 进入应用目录
cd /home/app
# 备份chestnut-ui
mv /chestnut-ui ../bak/chestnut-ui-bak/
# dist目录改名
mv dist chestnut-ui
# 安装
yum install -y nginx
# 启动
nginx
cd /etc/nginx/conf.d/
vi admin.conf
修改admin.conf内容如下:
server {
listen 81;
server_name 192.168.1.5;
charset utf-8;
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_set_header Connection close;
location / {
root /home/app/chestnut-ui;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
client_max_body_size 200m;
proxy_pass http://localhost:8090/;
}
location /upload/ {
root /home/app/uploadPath;
expires 1d;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 测试配置是否正确
nginx -t
# 重启nginx
nginx -s reload
以上示例配置访问地址:http://192.168.1.5:81/
常见问题: - 验证码无法显示,服务器报错: Fontconfig head is null, check your fonts or fonts configuration 解决:缺少字体文件支持,执行命令:
yum install -y fontconfig
如果需要使用类似
http://192.168.1.5:81/的子路径访问后台,需要修改构建环境配置和nginx配置,如下所示:
1. 修改配置文件 ChestnutCMS/chestnut-ui/.env.production
# 生产环境配置
ENV = 'production'
# ChestnutCMS生产环境
VUE_APP_BASE_API = '/prod-api'
# 访问地址
VUE_APP_PATH = '/admin/'
2. 修改nginx配置文件
server {
listen 81;
server_name 192.168.1.5;
charset utf-8;
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_set_header Connection close;
location /admin/ {
alias /home/app/chestnut-ui;
try_files $uri $uri/ /admin/index.html;
index index.html index.htm;
}
location /prod-api/ {
client_max_body_size 200m;
# 注意结尾斜杠,请求URI会被替换:/prod-api/user → /user
# 不带结尾斜杠,请求URI会被保留:/prod-api/user → /prod-api/user
proxy_pass http://localhost:8090/;
}
location /upload/ {
root /home/app/uploadPath;
expires 1d;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1. nginx配置修改
cd /etc/nginx/conf.d/
vi site.conf
修改site.conf内容如下:
server {
listen 80;
server_name 192.168.1.5; # 网站域名,站点编辑页面发布通道域名配置
charset utf-8;
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_set_header Connection close;
location / {
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
root /home/app/wwwroot_release/site_pc;
index index.shtml index.html index.htm;
}
location ~ ^/(images|img|fonts|assets|js|css)/ {
root /home/app/wwwroot_release/site_pc;
expires 1d;
}
# 用户资源访问配置
location ~ ^/(resources)/ {
root /home/app/wwwroot_release/site;
expires 1d;
}
# API接口访问配置
location ~ ^/(api)/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
proxy_buffers 32 8k;
add_after_body "";
proxy_cookie_path / /;
proxy_pass http://localhost:8090;
}
# 站点/栏目/内容动态模板访问配置
location ^~ /cms/view/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
ssi on;
ssi_silent_errors on;
proxy_buffers 32 8k;
add_after_body "";
proxy_cookie_path / /;
proxy_pass http://localhost:8090;
}
# 搜索页动态模板访问配置
location = /_search {
# 如果需要隐藏sid和pp参数可使用rewrite配置
# rewrite /_search?(.*) /_search?sid={站点ID}&pp={发布通道编码}&$1 break;
ssi on;
ssi_silent_errors on;
proxy_buffers 32 8k;
add_after_body "";
proxy_cookie_path / /;
proxy_pass http://localhost:8090;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
执行命令 nginx -s reload 重启nginx,访问:http://server_name/
以上示例配置访问地址:http://192.168.1.5/
chestnut-cms-media 通过 Maven Profile 选择 JAVE 原生依赖。请按目标部署平台选择,与运行 Maven 的构建机系统无关。
| Profile | 目标平台 | 打包的原生依赖 |
|---|---|---|
media-linux64 | Linux x86_64 | jave-nativebin-linux64 |
media-win64 | Windows x86_64 | jave-nativebin-win64 |
media-osxm1 | macOS Apple Silicon(M 系列,aarch64 JDK) | jave-nativebin-osxm1 |
media-osx64 | macOS Intel(x86_64 JDK) | jave-nativebin-osx64 |
media-all(默认) | 上述所有平台 | 同时包含上述四个依赖 |
在项目根目录执行:
# Linux x86_64 部署包
mvn clean package -pl chestnut-admin -am -Pmedia-linux64 -Dmaven.test.skip=true
# Windows x86_64 部署包
mvn clean package -pl chestnut-admin -am -Pmedia-win64 -Dmaven.test.skip=true
# macOS Apple Silicon 本地构建
mvn clean package -pl chestnut-admin -am -Pmedia-osxm1 -Dmaven.test.skip=true
# macOS Intel 本地构建
mvn clean package -pl chestnut-admin -am -Pmedia-osx64 -Dmaven.test.skip=true
# 不指定 Profile 时,包含全部四个平台的原生依赖,兼容本地开发
mvn clean package -pl chestnut-admin -am -Dmaven.test.skip=true
每次只选择一个媒体 Profile。显式选择任一单平台 Profile 时,默认的 media-all 自动停用。jave-core 始终保留,原生依赖以 runtime 作用域传递到应用并由 Spring Boot 打包。
macOS 本地开发时,重新加载 IDE 的 Maven 项目即可使用默认的 media-all,无需额外选择 Profile。也可在 IDE 的 Maven Profiles 中仅勾选 media-osxm1 或 media-osx64,减少本地依赖。以运行应用的 JDK 架构为准:Apple Silicon 使用 aarch64 JDK 时选择 media-osxm1;使用 Rosetta 下的 x86_64 JDK 时选择 media-osx64。在 Mac 上构建 Linux 部署包时仍使用 -Pmedia-linux64,不会附带 macOS 原生依赖。
可用 jar tf chestnut-admin/target/chestnut-admin.jar 检查 BOOT-INF/lib/ 下的 jave- 依赖。Linux 单平台包应只包含 jave-core 和 jave-nativebin-linux64。Linux 和 Windows Profile 适用于 x86_64,Linux ARM64 等其他平台需要另外配置对应的原生依赖。