Latke 配置剖析

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

本贴主要介绍了 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 回帖 • 787 关注
  • 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 回帖

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • Eddie 1

    我就不喜欢用框架,轻量封装的还好。

  • zonghua

    一直不明白那个路径到底要不要 / 结尾

    2 回复
  • 88250

    host 不用 / 结尾,contextPath 如果要配置也不用 / 结尾。

  • wugy 1 1 赞同

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

  • lijp

    当使用 Https 部署 Sym 的时候,此配置文件(latke.properties)中 serverPort=,保留空,即使是 80,也要保留空,否则 wss 报错。

    1 回复
  • 88250

    HTTPS 的话留空或者填 443 就好啦

    1 回复
  • lijp

    我错了,忘记 https 的端口是 443 了。。。我上一条评论能删除吗?

    1 回复
  • 88250

    现在删不了,以后会可以更新

    1 回复
  • lijp

    这几天脑袋短路了。。。我还郁闷了还几天 😢

  • cc8848

    mail.properties 这个文件在代码里面没有发现,是需要自己写个配置上去吗,ed5076da933b4db4be3680ebd0ccddee.png

    配置自己的邮箱该怎么写

    2 回复
  • 88250

    sym 的邮件配置在 symphony.props 里

  • feix 1

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

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

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

    • btw
      • 代码
        • 真的
            • 清爽

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

    👍
    ** 老大。。。你是 AI 还是真人 **

    这么晚了,没休息么

    P.S. 水杯在右面。。。那个视角刚刚好,看不到。 😅

    1 回复
  • 88250

    我是真の人工智能。正准备睡觉,晚安了 😴

    2 回复
  • feix

    晚安。 😴

    第一次勇于尝试 MD。。。感觉还不错。

  • xiesguo

    数据库里的表怎么实现建立的

    1 回复
  • 88250

    这里看起

    1 回复
  • xiesguo

    没有这方面的说明文档吗?就像你讲的 Latke 下的 servlet 原理和 ioc 的原理.这种详细一点

    1 回复
  • 88250

    那两篇文档是其他牛人写的。

    1 回复
  • xiesguo

    哦,那有没有,数据库表结构的说明文档呢.我找了好久,都没找到.源码有些看不懂 😂

    1 回复
  • 88250

    你在看哪个项目?

    1 回复
  • xiesguo

    对的,我们对你们这个项目重构,上线之后.就会向你们购买

    1 回复
  • 88250

    你说的是 Sym 这个项目么?

    1 回复
  • xiesguo

    对啊,有没有更详细的资料啊

    1 回复
  • 88250

    加我 QQ 聊吧 845765

  • hoper

    测试

  • hoper

    test

  • lkk 1 赞同

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

  • hiquanta

    nginx 反向代理公用 多个网站同一个服务器 公用一个端口 ,配置后 hiquanta.com 可以正常打开,但是不能登陆,但是用 http://hiquanta.com:8081/solo 可以正常打开登陆界面,而且可以登陆,老大可以点下看看什么情况?

    1 回复
  • 88250

    请仔细看本文。

  • Chigogo

    显式配置域名和端口会带来一些问题:

    如果我的博客有两个域名,两个域名指向服务器地址,该如何配置?
    serverHost=your.domain1
    serverHost=your.domain2

    如果设置了反向代理,如何通过 ip 访问?
    serverHost=1.2.3.4:8080

    1 回复
  • 88250

    两个域名的话在反代那里重定向,不建议使用两个域名或者 IP,影响 SEO

  • Chigogo

    frp 内网穿透:
    主机 A 无法使用 80 端口,服务器 B 可以使用 80 端口,这时候,使用 A 使用 frp 连接到服务器 B;

    过程如下:
    浏览器访问域名
      --> 域名解析到 B 的 80 端口
        -->B 反代到 A 的 8080 端口

    此时此刻,我无法直接用 A 的 ip 访问博客后台了。

    为什么要这么做呢?就是想这么做啦……

    1 回复
  • 88250

    总之你配置成最终访问的域名就行了。

  • Chigogo

    我就是想说,显示设定端口和域名不太好啦。。当然作者有自己的想法

  • chenlei65368

    挺好,配置比较细

  • Joan

    你好,请问报这个错误的原因是什么啊

    [ERROR]-[2018-04-19 10:38:50]-[org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer:116]: Not found template[author-articles.ftl]

    author-articles.ftl 这个文件是存在的

    1 回复
  • 88250

    怎么重现这个问题?

    1 回复
  • Joan

    在本地开发环境中配置服务器上的 ip 等信息时,maven install 抛出来的错误

    1 回复
  • 88250

    这个是个运行时错误吧,是 solo 项目的话到这里反馈 https://github.com/b3log/solo/issues/new

  • joypigg 1

    数据库 Client 端,需设置字符编码,utf8 格式,否则会出现起始页码 b3_solo_option 中 optionValue 插入 SQL 异常;
    mysql 查看字符集:show variables like 'char%';
    安装所需的 database 字符集进行设置为 utf8:ALTER DATABASE 你的 database DEFAULT CHARACTER SET utf8;

  • mogiihu

    latke.properties 里 找不到#### Server 部分 怎么回事

    1 回复
  • mogiihu

    我下载的源码,如果从 solo/src/main/resources/latke.properties 这个文件里修改然后打包。是不是就不需要修改生成的 target/classes/latke.properties

    1 回复
  • 88250

    你看下最终部署的包是不是改过不就知道了嘛。

    1 回复
  • mogiihu

    好的,谢谢~对我帮助很大

  • wanwaner

    我根据上面改了 server 部分,但是还是显示 latke 配置错误,我该怎么做,需要检查哪些地方

    1 回复
  • 88250 1

    F12 看下网络请求

    1 回复
  • wanwaner

    已解决,谢谢

    1 回复
请输入回帖内容 ...