JAR部署

后台服务后端部署

运行环境MySQL/Redis/ElasticSearch/JDK请自行安装配置

1. 打包

打开命令工具,进入项目根目录,执行以下打包命令:

mvn clean package -Dmaven.test.skip=true
  • window系统使用powershell可能会报错,给maven.test.skip加上引号
  • 确保application-prod.yml配置文件中的数据库、Redis等配置没有问题

打包后的jar文件所在地址:

{项目根目录}/chestnut-admin/target/chestnut-admin.jar

2. 上传部署

上传生成的打包文件到服务器,结束正在运行的服务端进程:

先检查是否存在正在运行的应用进程,如果存在,使用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

后台服务前端部署

1. 打包

打开命令工具,进入项目根目录,执行以下打包命令:

# 进入前端工程目录
cd chestnut-ui
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 构建
npm run build:prod

构建结果目录:{项目根目录}/chestnut-ui/dist/

2. 上传部署

  • 将{项目根目录}/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
  • 安装nginx
# 安装
yum install -y nginx

# 启动
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
# 测试配置是否正确
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-linux64Linux x86_64jave-nativebin-linux64
media-win64Windows x86_64jave-nativebin-win64
media-osxm1macOS Apple Silicon(M 系列,aarch64 JDK)jave-nativebin-osxm1
media-osx64macOS 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 等其他平台需要另外配置对应的原生依赖。

内容导航