halo2.0-使用nginx和jdk部署(包含console前端)

前言

halo2.0已经发布,目前很少看到有部署2.0版本的,且大部分都是通过官网进行docker
部署,今天来试一下不使用docker,仅用java -jar 和nginx启动halo2.0的前端与后端服务。

1、准备open-jdk17、Node.js 18、Gradle7.4

1.1 下载 open-jdk17.
1.2 下载Node.js 18.
1.3 下载Gradle7.4.

在这里插入图片描述
Node.js最好下载zip版本,.msi安装版本好像会覆盖自己电脑原有安装的node.js,如果你之前的node.js也是使用的.msi安装的话

gradle的安装与配置可以参考这个博客:

https://blog.csdn.net/qq_24678763/article/details/127648884

2、配置环境变量

Node.js 18需要配置到环境变量中,jdk与gradle在idea里面添加即可,详细配置相信大家都会,这里就不展开说了

如果gradle进行BUILD失败了,可以看下idea配置是否正确
在这里插入图片描述
此处的配置对应环境变量中的gradle_user_home路径
在这里插入图片描述
如果还不行,可以尝试在gradle.properties里加入 org.gradle.java.home=D:\software\Java\jdk-17.0.5(你的jdk目录)
在这里插入图片描述

3、启动halo及打包

3.1 启动

在idea里配置好jdk17和Gradle7.4后,项目会进行编译,然后就可以照着官网进行启动项目

3.1.1 将 Active Profiles 改为 dev,win,如图所示:

在这里插入图片描述

3.1.2 dev与win配置文件
# application-dev.yaml
server:
  port: 8090

spring:
  output:
    ansi:
      enabled: always
  thymeleaf:
    cache: false

halo:
  console:
    proxy:
      endpoint: http://localhost:3000/
      enabled: true
  security:
    initializer:
      super-admin-username: admin
      super-admin-password: admin
  plugin:
    runtime-mode: development # development, deployment
    classes-directories:
      - "build/classes"
      - "build/resources"
    lib-directories:
      - "libs"
  # 将地址改为对应目录,方便查找
  work-dir: /data/service/halo/halo2-dev
  #work-dir: ${user.home}/halo2-dev
logging:
  level:
    run.halo.app: DEBUG
    org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler: DEBUG
springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    enabled: true
  show-actuator: true

management:
  endpoints:
    web:
      exposure:
        include: "*"

# application-win.yaml
spring:
  r2dbc:
    url: r2dbc:h2:file:///~/halo2-dev/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
halo:
  #work-dir: ${user.home}/halo2-dev
  work-dir: /data/service/halo/halo2-dev

需要关注的配置,一个是work-dir: ${user.home}/halo2-dev,这个最好改为自己熟悉的地址,后续在服务器上运行也方便查找
另一个是

halo:
  console:
    proxy:
      endpoint: http://localhost:3000/
      enabled: true

这个配置需要明确的是,它针对的是开发环境使用的,部署到服务器不需要此配置
下面列一下当时提交这段代码的注释:
在这里插入图片描述
大概意思是:此功能应仅适用于开发环境,而不是生产环境。

OK,了解完这些后,我们就可以将halo服务启动起来,并且访问http://localhost:8090/能看到默认的主题即可

3.2 打包

在服务器上部署,我们使用application.yaml的配置文件,打包前,先修改对应的地址

server:
  port: 8090
  compression:
    enabled: true
  error:
    whitelabel:
        enabled: false
spring:
  output:
    ansi:
      enabled: detect
  r2dbc:
    #url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
    #username: admin
    #password: 123456
    url: r2dbc:h2:file:///~/halo2-dev/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE

  sql:
    init:
      mode: always
      platform: h2
  codec:
    max-in-memory-size: 10MB
  messages:
    basename: config.i18n.messages

halo:
  #external-url: "http://${server.address:localhost}:${server.port}"
  # 如果是域名修改为http://yuming.com即可
  external-url: "http://111.22.333.44:8090"
  #work-dir: ${user.home}/.halo2
  work-dir: /data/service/halo/.halo2
  plugin:
    plugins-root: ${halo.work-dir}/plugins
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

springdoc:
  api-docs:
    enabled: false

logging:
  file:
    name: ${halo.work-dir}/logs/halo.log
  logback:
    rollingpolicy:
      max-file-size: 10MB
      total-size-cap: 1GB
      max-history: 0

1、修改r2dbc下的数据库为自己对应数据库,我这边为图方便,还是使用的内置的h2数据库
2、修改work-dir为自己服务器上的目录,并且确保在服务器上执行命令的用户有创建文件的权限
3、修改external-url为自己服务器的ip+端口,至于为什么不使用原来的配置,在上面增加server.address=ip,是因为这样配置后,启动项目时会报错8090端口被占用,此处的错误原理没有细究,如果有知道的同学可以评论学习下

修改完配置文件后即可进行打包操作

打包点击右侧的Gradle,使用build目录下的bootJar即可
在这里插入图片描述
打完包后,相应的jar在目录build/libs下
在这里插入图片描述

4、启动console及打包

4.1 启动

启动console时,首先保证console所在目录的node版本是v18(配置环境变量即可)
在这里插入图片描述
console启动起来的端口,在vite.config.ts文件下配置,修改此处即可改变console的端口

注意:如果是开发环境,vite.config.ts下的端口配置必须和halo的application-dev.yaml下的endpoint相同

在这里插入图片描述
后续的操作在READMIN.md中都有

开发环境运行
# pnpm@7.0.0+
npm install -g pnpm
pnpm install 
pnpm build:packages
pnpm dev
生产构建
pnpm build

使用pnmp dev启动后,访问http://localhost:8090/console即可看到后台页面

4.2 打包

在打包之前,需要修改.env.production文件

VITE_API_URL=http://111.22.333.44:8090
VITE_BASE_URL=/

需要注意VITE_API_URL必须是部署服务器的ip+端口

打包

pnpm build

打包完成,看到dist文件夹即可

5、部署

这边我准备了两种部署方式,一种是前后端单独部署,一种是前后端整合部署,下面我会单独说下这两种部署模式

注:以下涉及到的8090、3000等端口,都必须开通

5.1、vue+spring boot单独部署

5.1.1、上传文件

基于之前的打包,我们会获取前端的dist文件夹和halo后端的jar包,将这两个文件上传到自己的服务器上
通过前面地址,下载jdk17的zip解压版,将其传到服务器上

[admin@test-webapp-svr20 halo]$ pwd
/data/service/halo
[admin@test-webapp-svr20 halo]$ ll
total 91828
drwxr-xr-x 3 admin grpadmin     4096 Jan  5 16:01 dist
-rw-r--r-- 1 admin grpadmin 93995468 Jan  6 09:42 halo-2.1.0-SNAPSHOT.jar
drwxr-xr-x 7 admin grpadmin     4096 Jan  5 14:53 halo2-dev
drwxr-xr-x 3 admin grpadmin     4096 Jan  3 18:21 jdk17
-rw------- 1 admin grpadmin     9850 Jan  4 12:28 nohup.out
-rwxr-xr-x 1 admin grpadmin      515 Jan  5 14:50 start.sh

5.1.2、编写启动脚本start.sh
#!/bin/bash
PROJECT_NAME="halo-2.1.0-SNAPSHOT.jar"
echo "查询进程id-->${PROJECT_NAME}"
PID=`ps -ef | grep ${PROJECT_NAME} | awk '{print $2}'`
echo "得到进程ID:${PID}"
echo "结束进程"
for id in ${PID}
do
        kill -9 ${id}  
        echo "killed ${id}"  
done
echo "结束进程完成"

echo "启动服务"
BUILD_ID=dontKillMe nohup /data/service/halo/jdk17/jdk-17.0.5/bin/java  -Xms4096m -Xmx4096m -Dfile.encoding=UTF-8 -jar    ${PROJECT_NAME} > /dev/null 2>&1 &
echo "服务完成"

上面是一个简单的启动脚本,大家主要关注下最终的启动命令即可
因为我们要使用application.yaml配置启动,所以没有配置-Dspring.profiles.active,如果想指定单独的配置文件增加这个配置即可
例如使用dev和win启动:

/data/service/halo/jdk17/jdk-17.0.5/bin/java -Xms4096m -Xmx4096m -Dfile.encoding=UTF-8 -jar -Dspring.profiles.active=dev,win ${PROJECT_NAME} > /dev/null 2>&1 &

5.1.3、启动halo后端
# 在/data/service/halo下执行
[admin@test-webapp-svr20 halo]$ ./start.sh
# 启动起来后,进入/data/service/halo/.halo2目录 此配置对应applicat.yml的配置地址
[admin@test-webapp-svr20 halo]$ cd halo2-dev/.halo2
[admin@test-webapp-svr20 .halo2]$ ll
total 20
drwxr-xr-x 3 admin grpadmin 4096 Jan  5 16:07 attachments
drwxr-xr-x 2 admin grpadmin 4096 Jan  5 14:53 db
drwxr-xr-x 3 admin grpadmin 4096 Jan  5 14:53 indices
drwxr-xr-x 2 admin grpadmin 4096 Jan  6 02:24 logs
drwxr-xr-x 4 admin grpadmin 4096 Jan  5 16:08 themes

启动后,在网站上访问http:111.22.333.44:8090,看到初始主题即可

5.1.4、使用nginx配置console

首先将console打包的dist目录放到/data/service/halo目录下

[admin@test-webapp-svr20 halo]$ pwd
/data/service/halo
[admin@test-webapp-svr20 halo]$ ll
total 91828
drwxr-xr-x 3 admin grpadmin     4096 Jan  5 16:01 dist
-rw-r--r-- 1 admin grpadmin 93995468 Jan  6 09:42 halo-2.1.0-SNAPSHOT.jar
drwxr-xr-x 7 admin grpadmin     4096 Jan  5 14:53 halo2-dev
drwxr-xr-x 3 admin grpadmin     4096 Jan  3 18:21 jdk17
-rw------- 1 admin grpadmin     9850 Jan  4 12:28 nohup.out
-rwxr-xr-x 1 admin grpadmin      515 Jan  5 14:50 start.sh

其次打开服务器nginx的配置文件nginx.conf(简单配置)

    server {
        #与console下vite.config.ts的端口一致
        listen       3000;
        server_name  localhost;
        root         /data/service/halo/dist/;

       location / {
		 root  /data/service/halo/dist/;
         try_files $uri $uri/ /index.html;
         index index.html index.htm;
       }
    }

到nginx的sbin目录下重启nginx

./nginx -s reload

重启后,在网站上访问http:111.22.333.44:3000,看到后端登录页面部署就成功了
注意:如果使用域名的形式,在nginx配置文件增加相应配置即可,但是在halo的application.yml配置文件中:external-url要为域名地址

5.2、vue+spring boot整合部署

使用vue+spring boot整合部署时,与之前的流程没有太大差别
主要是需要先进行console打包,将打包的dist文件夹,放到halo的resources-static目录下
在这里插入图片描述
后续流程与上面一致
先对halo进行打包,然后将打包的jar上传到服务器上进行运行即可

启动后,先访问http:111.22.333.44:8090/进入主题页面
访问http:111.22.333.44:8090/index.html 进入后台页面


2023-1-11 补充========================

5.3、官网部署

今日发现官网其实提供了如何部署console的方式,只是之前没有看到,后续的同学可以使用官方的方式部署,与5.2版本的方式其实大致一致

在这里插入图片描述
后续流程与上面一致
先对halo进行打包,然后将打包的jar上传到服务器上进行运行即可

启动后,先访问http:111.22.333.44:8090/进入主题页面
访问http:111.22.333.44:8090/console 进入后台页面

6、总结

使用jdk+nginx运行只是一种尝试方式,如果大家能用docker部署成功那是最好的~

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Docker是目前比较流行的容器化技术,其优点在于方便管理和部署应用程序。而Halo博客系统是一款基于Java开发的博客系统,其部署过程比较复杂,需要安装JDK、MySQL等依赖。本文将介绍如何使用Docker部署Halo博客系统。 1. 安装Docker 首先需要在服务器上安装Docker,可以参考官方文档进行安装。 2. 创建Docker镜像 将Halo博客系统打包成Docker镜像,可以通过Dockerfile或者docker-compose.yml文件进行创建。在这里我们以Dockerfile为例。 先创建一个空目录,将Halo博客系统的jar包和配置文件拷贝到该目录下: ``` mkdir -p /opt/halo cp -r halo.jar /opt/halo/ cp -r application.properties /opt/halo/ ``` 然后创建Dockerfile: ``` FROM openjdk:8-jre-alpine MAINTAINER yourname <[email protected]> ADD halo.jar /opt/halo/halo.jar ADD application.properties /opt/halo/application.properties WORKDIR /opt/halo CMD ["java", "-jar", "halo.jar", "--spring.config.location=application.properties"] EXPOSE 8888 ``` 其中FROM指定了基础镜像,ADD将jar包和配置文件拷贝到镜像中,WORKDIR指定工作目录,CMD指定应用启动命令,EXPOSE指定容器监听的端口。 使用docker build命令创建镜像: ``` docker build -t halo . ``` 其中halo为镜像名称,可以根据需要自行修改。 3. 启动容器 使用docker run命令启动容器: ``` docker run -d -p 8080:8888 --name halo-demo halo ``` 其中-d表示启动守护进程,-p将容器的8888端口映射到主机的8080端口,--name指定容器名称,halo为镜像名称。 启动成功后,在浏览器中输入http://localhost:8080访问Halo博客系统即可。 以上就是使用Docker部署Halo博客系统的步骤,相信通过这个实战,大家可以更好地了解云原生中Docker的使用部署

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值