Latke 配置剖析

本贴最后更新于 1824 天前,其中的信息可能已经天翻地覆

本贴主要介绍了 Latke 的关键配置及其设计用意,所以无论你是 Latke 的开发者还是基于 Latke 开发的产品的使用者,希望本贴能够帮助到你。

为了说明方便,我们会使用 Solo 博客系统作为主要的应用场景进行举例。

latke.properties

文件路径是 /latke.properties,该配置文件是必须的。通常情况其中的配置项比较少,最简化的情况是只需要配置 #### Server #### 部分的 serverScheme,其他项都有默认值,不需要显示设置。

该文件的配置项均可通过启动参数进行覆盖,所以如无必要请勿修改配置文件本身,具体参数名和配置项对应关系可通过 --help 进行查看。

Server 部分

部分 Solo 用户在初始化时会遇到“配置错误”或者上线后界面样式显示异常的问题,这是因为 latke.props 配置不当造成的。该配置文件中 #### Server #### 部分的配置如下:

#### Server ####
# Browser visit protocol
serverScheme=http
# Browser visit domain name
serverHost=localhost
# Browser visit port, 80 as usual, THIS IS NOT SERVER LISTEN PORT!
serverPort=8080

这 3 个配置项需要配置为用户通过浏览器访问时候的值。换句话说,如果你的服务在本机启动,那么默认的配置是可以让你在本机通过 http://localhost:8080 访问时一切正常的;但非本机访问时(比如通过 http://domain-or-ip:8080) 就不能正常加载静态资源了。

解决方案:将这三个配置项的值调整为最终访问时候对应的样子。

比如我的博客域名是 myblog.com,该域名已经正常解析到服务器 IP,此时只需要将 serverHost 的值设置为 myblog.com 就可以通过 http://myblog.com:8080 访问了。要进一步消除后面的端口有两种方式:

  1. 前置 HTTP 服务器做反向代理(比如通过 NGINX)
  2. 将 Solo 启动时监听端口调整为 80/443,或者留空

推荐第一种方式,因为 Java 进程主要处理的是动态请求。HTTPS 或者是静态资源请求应该交由更专业的 HTTP 处理引擎来做,这样能减少很多复杂的配置(比如配置 Java 的 SSL 证书),也能充分优化性能(比如静态资源由 NGINX 处理,配置缓存、限流等)。

一个正确的配置示例如下:

#### Server ####
# Browser visit protocol
serverScheme=http
# Browser visit domain name
serverHost=myblog.com
# Browser visit port, 80 as usual, THIS IS NOT SERVER LISTEN PORT!
serverPort=

请注意其中 serverPort 项并没有赋值,因为这样就能够使用 HTTP 的浏览器默认端口 80 了,HTTPS 也可以这样留空。

对于进程监听端口,默认使用的是 8080,只能通过启动参数 listen_port 进行配置。对于端口部分的配置,总结一下就是:

  • server_port 指定访问端口:一般是 80 或者 443,如果是这两个浏览器默认端口的话把这个参数的值设为空,即 --server_port=
  • listen_port 指定容器进程监听端口,默认是 8080,主要用于提供给 NGINX 进行反向代理,如果 8080 端口没有其他进程占用的话用默认的就行

Static Server 部分

该部分通常情况是没有显示配置的(比如 Solo 里面默认的配置文件就没有出现这部分),需要显示配置的情况是需要做动静分离的应用场景。

前面我们提到过可以通过 NGINX 作为前置服务器,将静态资源请求分离出来进行处理。其具体的分离规则可以按 path 或后缀。这个动静分离的层次是在具体服务器节点上的分离,是用户请求到达内部网络后的处理。

我们可以在用户浏览器请求时就进行动静分离,将静态资源请求分发到配置好的 CDN 服务上,这个 CDN 服务一般是一个域名地址。而 staticServerSchemestaticServerHoststaticServerPort 这三项就是用来配置该地址的,如果没有显示配置,则这三项会分别使用 serverSchemeserverHostserverPort 的值。

其他配置项

下面这些配置项也是在某些场景才会用到,一般来说也不用单独配置的。

说明 默认值 备注
runtimeMode 运行模式,可选值 DEVELOPMENTPRODUCTION PRODUCTION 线上环境一定要使用 PRODUCTION
staticResourceVersion 静态资源版本号,主要用于刷缓存 默认取服务启动的时间毫秒
contextPath 上下文路径 如无必要请勿配置
staticPath 静态资源服务的上下文路径 contextPath 显示配置的话一般都是留空

其中“上下文路径”是 Java Servlet 中的概念,指的是请求 URL 上第一层目录路径,比如对于 http://mydomain.com/solo/start 而言 /solo 是上下文路径,这个如果没有必要请不要配置增加复杂度。

配置后如果还遇到问题,请打开浏览器 F12 查看网络请求进行调试。

local.properties

文件路径是 /local.properties,该文件是必须的,主要用于配置数据库。比如在 Solo 中默认的配置如下:

#### MySQL runtime ####
runtimeDatabase=MYSQL
jdbc.username=root
jdbc.password=123456
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.URL=jdbc:mysql://localhost:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC

#### H2 runtime ####
#runtimeDatabase=H2
#jdbc.username=root
#jdbc.password=
#jdbc.driver=org.h2.Driver
#jdbc.URL=jdbc:h2:~/solo_h2/db;MODE=MYSQL

# The minConnCnt MUST larger or equal to 3
jdbc.minConnCnt=5
jdbc.maxConnCnt=10

# The specific table name prefix
jdbc.tablePrefix=b3_solo

其中 #### H2 runtime ######## MySQL runtime #### 只能启用一种,该部分配置了使用哪一种数据库实现。其他的配置项比较好识别,一般来说使用默认值就好。

H2

如果启用了 H2 数据库,则 jdbc.URL 中可以配置数据持久化的文件路径,比如 jdbc:h2:~/solo_h2/db 使用的路径就是 操作系统用户 home (即 ~ )下的 solo_h2/db 目录,在 Java 中对于的系统变量是 ${user.home},如果你不大熟悉 Unix-like 的表示法,也可以将该路径配置成完整的绝对路径,比如 jdbc:h2:D:/solo_h2/db

static-resources.xml

文件路径是 /static-resources.xml,该配置文件是必须的,用于配置静态资源路径。路径的匹配模式是 Ant-style 匹配,简单说来就是:

  • * 匹配多个字符
  • ? 匹配单个字符
  • ** 匹配多层目录

如果你需要添加自己的静态资源(比如 HTML、MP3 等)就需要修改一下该文件。

环境变量

测试环境、生产环境如果需要加载不同的配置文件,可通过设置操作系统环境变量来指定配置文件的绝对路径。

  • LATKE_PROPS:latke.properties 文件的绝对路径
  • LATKE_LOCAL_PROPS:local.properties 文件的绝对路径

优先通过环境变量加载,如果没有定义该环境变量则从类路径下加载。

  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 788 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • Web
    116 引用 • 433 回帖 • 8 关注
  • 框架
    47 引用 • 348 回帖 • 1 关注
58 引用
Solo 博客搭建之路 Solo 架构理念和约定 caddy+jdk 部署 solo 请问 docker exec -it 执行报错怎么搞 请问 docker exec -it 执行报错怎么搞 Latke 配置错误怎么解决(Docker) 为什么我的 solo 不会自动同步到 github 上了? docker 安装 solo 博客后报 Latke 配置错误 openwrt 中搭建 solo 无法通过外网访问【已解决】 在阿里云全站加速添加域名加速后访问异常 新手请教一下,安装完 solo 切换了几次皮肤后就出问题了 B3blog 本地测试显示 staticServePath 配置错误 云服务器搭建完成 输入网址 网页出现这样是怎么回事? solo 独立模式改了配置不管用 阿里云服务器 docker 部署 solo,不能获取到皮肤? Solo 请问如何分离静态资源呀? solo 504 连接超时,怎么破? Solo 博客安装问题 Solo 博客安装问题 Solo 用户指南 求教 Solo https 加载静态资源的问题 【已解决】Latke 配置错误(Docker) Solo 设置 HTTPS 访问静态文件被拦截 关于 Solo 访问的跳转问题 服务器小白的 Solo3.5.0 从零开始部署以及遇到的坑 V3.2 升级到 V3.3 页面出现排版错乱的情况 solo 博客部署问题 symphony 部署踩坑扎记 solo 搭建完后 404 Solo 用户指南 怎样删除链接中的 ${blogTitle} 字段 solo 博客搭建教程流程版本 关于solo-1.3.0容器模式部署的问题 staticServePath 配置错误 今天创建博客 搭建个人 blog 平台 Java 开源博客 Solo 1.8.0 发布 - 改进文件上传 Solo 使用体验 Solo 用户指南 Sym 安装指南 Sym 商业版优势 Solo 用户指南 有没有 Sym 的配置文件说明啊,就是各种文本显示的地方,properties 文件编码转换后就看不懂了 Sym 安装指南 Jetty 部署 sym 如何去掉二级目录? 【已解决】求助,solo 后台管理有两个请求返回 403 部署 solo 代码,用 nginx 反向代理部署多 tomcat 时,/upload 上传文件接口执行不到方法体 solo 2.9 部署问题 部署 Sym 社区的问题 读《Google 工作整理术》有感 Sym 配置项说明 solo 地址问题。。。 Java 社区平台 - Sym 1.7.0 发布 Java Web 开源框架 Latke 2.4.1 发布,ORM 生成改进 [博客] 在阿里云上部署 solo 博客 Java Web 框架 Latke v2.4.39,重写控制器层
1 操作
88250 在 2019-11-25 22:32:42 更新了该帖

相关帖子

优质回帖
  • wugy 1 1 赞同

    喜欢这种自己封装的框架,而不是动则就是 spring、mybatis 的,可以更深入理解底层框架原理,而又不致于过于臃肿,赞!

  • lkk 1 赞同

    已经按照如上修改了,还是显示错误 http://ddres.xin/solo

  • XaydBayeck 1

    我也是仍然报错 找不到资源,地址也是对的,然后 docker pull b3log/solo 再删除重启容器解决,希望能帮到人吧

124 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wugy 1 1 赞同

    喜欢这种自己封装的框架,而不是动则就是 spring、mybatis 的,可以更深入理解底层框架原理,而又不致于过于臃肿,赞!

  • 其他回帖
  • feix 1

    找到回复了。。。这么大个按钮,为什么放在右下角?

    ** 为我的愚笨默哀三分钟 **

    latke 配置写的挺好,但是对于想要躲开或单机部署多份的来看,加上参数 -lp 很有必要
    还有很多参数 。有需要的童鞋看下源码比较好。

    • btw
      • 代码
        • 真的
            • 清爽

    • 希望可以在过程中产生有价值的 PR,给社区和大家贡献一份绵薄之力
    1 回复
  • Eddie

    docker run --detach --name solo --network=host
    --env RUNTIME_DB="MYSQL"
    --env JDBC_USERNAME="root"
    --env JDBC_PASSWORD="*****"
    --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver"
    --env JDBC_URL="jdbc:
    --rm
    b3log/solo:v3.3.0 --listen_port=80 --server_scheme=https --server_host=blog.i-ng.net

    1 回复
  • geekandy

    您好,static-resources.xml 里面配置的:

        <include path="/images/**.jpg"/>
    
    

    为何以下两个,不同结果呢,思考几天不得其解,感谢指点。

    TIM 图片 20200827215217.jpg

    上面图片一直报 404,下面这个却正常显示:

    TIM 图片 20200827215210.png

    1 回复
  • 查看全部回帖