Opengrok 官方文档
https://github.com/oracle/opengrok/wiki/How-to-setup-OpenGrok
Opengrok 的官方文档是全英文的,本文将按照官方文档的教程进行最基础的部署。
环境准备
安装 Java
opengrok 要求 Java 版本为 17 到 21 之间,使用如下命令安装 Java 17。
$ sudo apt update
$ sudo apt install openjdk-17-jdk
检查 Java 版本。
$ java -version
openjdk version "17.0.15" 2025-04-15
OpenJDK Runtime Environment (build 17.0.15+6-Ubuntu-0ubuntu124.04)
OpenJDK 64-Bit Server VM (build 17.0.15+6-Ubuntu-0ubuntu124.04, mixed mode, sharing)
下载 Opengrok 二进制文件
从 Opengrok 的 GitHub Releases 页面下载最新的二进制文件。
https://github.com/oracle/opengrok/releases
将下载的文件解压备用。
下载 Ctags
Opengrok 需要 Ctags 来解析代码,创建索引。
这里 Opengrok 官方给出 3 点提示:
- 不建议使用太新的版本,可能会导致一些兼容性问题。
- 如果是 Linux 系统,不建议从 snap 安装。
- 如果是 Windows 系统,建议使用 Chocolatey 安装。
我这里是 Ubuntu 系统,从 ctags nightly build 仓库下载 ctags。
下载之后解压备用。
下载 Tomcat
Opengrok 需要 Tomcat 来运行 Web 界面。
官方要求使用 Tomcat 10.x 版本,可以从 Apache Tomcat 的官网上下载。
https://tomcat.apache.org/download-10.cgi
下载 .tar.gz 文件,解压备用。
部署 Opengrok
- 首先创建 opengrok 目录树,opengrok 的所有文件都放在这个目录下。
$ sudo mkdir -p /opt/opengrok/{data,src,dist,etc,log}
-
将解压后的 opengrok 放在
/opt/opengrok/dist
目录下。 -
复制 opengrok 的配置文件到
/opt/opengrok/etc
目录下。
$ sudo cp /opt/opengrok/dist/doc/logging.preperties /opt/opengrok/etc/
在 /opt/opengrok/etc/logging.properties
文件中,需要修改日志文件的路径。
修改后的内容如下:
# default file output is in user's home directory.
#java.util.logging.FileHandler.pattern = %hjava%u.log
####### 修改这一行 #######
java.util.logging.FileHandler.pattern = /opt/opengrok/log/opengrok%g.%u.log
#########################
java.util.logging.FileHandler.limit = 52428800
java.util.logging.FileHandler.count = 3
java.util.logging.FileHandler.level = ALL
#java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
java.util.logging.FileHandler.formatter = org.opengrok.indexer.logger.formatter.SimpleFileLogFormatter
# Limit the message that are printed on the console to WARNING and above (default "quiet" mode).
# if verbose is set, then log INFO and above
java.util.logging.ConsoleHandler.level = WARNING
java.util.logging.ConsoleHandler.formatter = org.opengrok.indexer.logger.formatter.SimpleConsoleFormatter
- 添加源码文件
将需要索引的源码文件放在 /opt/opengrok/src
目录下。
可以采用 Git 克隆的方式,也可以直接将源码文件复制到该目录下。
- 安装 Web 应用
Opengrok 这里对 web 应用做了一个简单的介绍,它说 web 应用是一个 WAR 文件,部署一个 web 应用需要将 WAR 文件放在 Tomcat 的 webapps
目录下。
Tomcat 会自动解压 WAR 文件,并将其部署为一个 web 应用。
opengrok 已经打包好了一个 WAR 文件,放在了 /opt/opengrok/dist/lib/source.war
, 我们只需要将这个 WAR 文件复制到 Tomcat 的 webapps
目录下即可。
$ sudo cp /opt/opengrok/dist/lib/source.war /opt/tomcat/webapps/
执行 Tomcat 的启动脚本,启动 Tomcat。
$ /opt/tomcat/bin/startup.sh
看到终端输出 Tomcat started.
,说明 Tomcat 启动成功。
此时访问 http://localhost:8080/source
,应该可以看到 Opengrok 的 Web 界面,但此时会看到一个错误的界面,目前为止这是一个期待的行为,因为我们还没有索引源码生成配置文件。
当 web 应用解压了 WAR 文件之后,它会搜索 WEB-INF/web.xml
文件来获取配置。
在这个 xml 文件中有一个 CONFIGURATION
参数,它指向了一个配置文件,web 应用会读取这个配置文件。
这里将配置文件指向 /opt/opengrok/etc/configuration.xml
。
configuration.xml
文件是 Opengrok 的配置文件,它会由索引器来创建。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>OpenGrok</display-name>
<description>A wicked fast source browser</description>
<context-param>
<description>Full path to the configuration file where OpenGrok can read its configuration</description>
<param-name>CONFIGURATION</param-name>
<param-value>/opt/opengrok/etc/configuration.xml</param-value>
</context-param>
- 创建索引
opengrok 的索引器的工作过程主要包含下面 3 个过程。
- 创建索引
- 生成配置文件
- 通知 web 应用新的索引已经创建
Opengrok 通过下面的命令来创建索引。
其中 /usr/local/bin/ctags
是 ctags 的路径,需要根据自己的实际情况进行替换。
java \
-Djava.util.logging.config.file=/opt/opengrok/etc/logging.properties \
-jar /opt/opengrok/dist/lib/opengrok.jar \
-c /usr/local/bin/ctags \
-s /opt/opengrok/src -d /opt/opengrok/data -H -P -S -G \
-W /opt/opengrok/etc/configuration.xml -U http://localhost:8080/source
索引创建完成后,再次打开 http://localhost:8080/source
,应该可以看到 Opengrok 的 Web 界面了。