
很多做android开发的小伙伴都知道,快速检索代码的利器opengrok,检索代码非常方便,本人之前多次搭建opengrok,只不过最近迫于代码安全性考虑,终于搞定opengrok+tomcat的ldap认证搭建,所以一并总结记录下。
opengrok的安装有两种方式,一种是docker安装,这个简单和快速,但不能做认证和授权,包括大型项目也不建议(其实实测AOSP代码也是没问题的,取决于你的服务器性能),可参考:https://github.com/oracle/opengrok/tree/master/docker#readmehttps://github.com/oracle/opengrok/tree/master/docker#readme
而另外一种安装方式就是本例即将介绍的,ubuntu+opengrok+tomcat集成搭建,本质上opengrok不支持账号认证,支持授权,因此本例是通过tomcat账号认证,opengrok进行账号的授权配置。
准备工作1,opengrok安装包:Releases · oracle/opengrok · GitHub 我们下周最新的opengrok 1.7.18
2,本例中ubuntu版本 Ubuntu 20.04.2 LTS
3,根据官方描述,此版本的opengrok要求JDK 11以上,如果没有直接在官网下载deb包手动安装
Java Downloads | Oracle
因为oracle 的JDK9以上ubuntu已经不支持 类似安装了
sudo dpkg -i ~/tools/jdk-11.0.11_linux-x64_bin.deb
4,安装universal-ctags ,具体安装参照,替代ubuntu默认的Exuberant ctagsUniversal Ctags · GitHubUniversal Ctags has 13 repositories available. Follow their code on GitHub.https://github.com/universal-ctags
5,需要安装Git 2.6以上的工具
Tomcat安装sudo apt-get install git
一般来说,ubuntu20.4 使用 sudo apt-get install tomcat,但是发现安装后是tomcat 9.0,但opengrok官网要求tomcat 10.0以上,因此只能手工原始安装tomcat了,参照:在Ubuntu 20.04系统上安装和配置Apache Tomcat 10的方法_Linux云服务器_云网牛站
一,下载tomcat 10.1.0-M5从官网下载最新的apache-tomcat
Apache Tomcat® - Apache Tomcat 10 Software Downloads
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.0-M5/bin/apache-tomcat-10.1.0-M5.tar.gz
下载后解压缩apache-tomcat-10.1.0-MD5.tar.gz文件:
tar xvf apache-tomcat-10.1.0-MD5.tar.gz
将提取的文件移动到/usr:
sudo mv apache-tomcat-10.1.0-M5 /usr/share/apache-tomcat
创建apache tomcat用户:
sudo useradd -M -d /usr/share/apache-tomcat tomcat
sudo chown -R tomcat /usr/share/apache-tomcat
二,配置Apache Tomcat 10允许从受信任的网络/IP访问Apache Tomcat UI。
1、编辑文件:
sudo vim /usr/share/apache-tomcat/webapps/manager/meta-INF/context.xml
sudo vim /usr/share/apache-tomcat/webapps/host-manager/meta-INF/context.xml
修改允许行以添加要从中访问UI界面的IP:
allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1|192.168.1.20" />
或者,注释掉IP地址限制以允许来自任何地方的连接:
2、安全访问管理员/仪表板
我们需要保护对tomcat UI管理区域的访问,编辑文件:
sudo vim /usr/share/apache-tomcat/conf/tomcat-users.xml
在之前添加以下内容:
3、配置系统服务
为Tomcat 10创建Systemd单元文件:
sudo vim /etc/systemd/system/tomcat.service
然后将以下内容粘贴到文件中:
[Unit] Description=Tomcat After=syslog.target network.target documentation=https://tomcat.apache.org/tomcat-9.0-doc/index.html RequiresMountsFor=/var/log/tomcat10 /var/log/tomcat10 [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_OPTS=-Djava.awt.headless=true" Environment="CATALINA_TMPDIR=/tmp" Environment=JDK_JAVA_OPTIONS="--add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/jdk.internal.misc=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED" Environment="JAVA_HOME=/usr/lib/jvm/default-java" Environment="JAVA_HOME=/usr/lib/jvm/jdk-11.0.11/" Environment="CATALINA_HOME=/usr/share/apache-tomcat" #Environment=CATALINA_base=/usr/share/apache-tomcat Environment='CATALINA_base=/var/lib/tomcat10' Environment='CATALINA_PID=/var/lib/tomcat10/tomcat.pid' ExecStart=/usr/share/apache-tomcat/bin/catalina.sh start ExecStop=/usr/share/apache-tomcat/bin/catalina.sh stop # Logging SyslogIdentifier=tomcat10 # Security User=tomcat Group=tomcat PrivateTmp=true NonewPrivileges=yes AmbientCapabilities=CAP_NET_BIND_SERVICE CacheDirectory=tomcat10 CacheDirectoryMode=750 ProtectSystem=strict #ReadWritePaths=/etc/tomcat10/Catalina/ ReadWritePaths=/var/lib/tomcat10/webapps/ ReadWritePaths=/var/log/tomcat10/ ReadWritePaths=/var/log/tomcat10/webapps/lib ReadWritePaths=/home/jenkins/opengrok/ ReadWritePaths=/usr/share/apache-tomcat/conf/ ReadWritePaths=/home/jenkins/opengrok/index/suggester/ [Install] WantedBy=multi-user.target
重新加载systemd守护程序:
sudo systemctl daemon-reload
运行以下命令以启动tomcat服务:
sudo systemctl restart tomcat
启用tomcat以在系统引导时启动:
sudo systemctl enable tomcat
如果启动成功,则应该在系统上看到Java进程正在使用的8080端口:
sudo ss -tunelp | grep 8080
[sudo] password for jenkins:
tcp LISTEN 0 100 *:8080 *:* users:(("java",pid=808616,fd=40)) uid:998 ino:45799734 sk:54 v6only:0 <->
尝试使用服务器IP地址或其主机名访问Web浏览器上的8080端口:
opengrok安装一,安装准备
1,创建~/opengrok/ 保存安装安装包,配置已经索引文件和源码问题
mkdir /opengrok/{src,data,dist,etc,log}
下载安装包,然后解压到~/opengrok/dist/
Releases · oracle/opengrok · GitHubhttps://github.com/oracle/opengrok/releases
wget /https://github.com/oracle/opengrok/releases/download/1.7.18/opengrok-1.7.18.tar.gz tar -C /opengrok/dist --strip-components=1 -xzf opengrok-X.Y.Z.tar.gz
2, 工程配置(可选)
默认日志配置从dist里面拷贝
cp ~/opengrok/dist/doc/logging.properties ~/opengrok/etc
日志的配置文件如下:
handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler java.util.logging.FileHandler.pattern = ~/opengrok/log/opengrok%g.%u.log java.util.logging.FileHandler.append = false java.util.logging.FileHandler.limit = 0 java.util.logging.FileHandler.count = 30 java.util.logging.FileHandler.level = ALL java.util.logging.FileHandler.formatter = org.opengrok.indexer.logger.formatter.SimpleFileLogFormatter java.util.logging.ConsoleHandler.level = WARNING java.util.logging.ConsoleHandler.formatter = org.opengrok.indexer.logger.formatter.SimpleFileLogFormatter org.opengrok.level = FINE
索引同步的时候添加-Djava.util.logging.config.file 就可以使能日志保存,参照opengrok index
opengrok 项目部署
现在该将opengrok作为tomcat的一个web应用部署了,有两种方式:
1,手动拷贝到/var/lib/tomcat10/webapps/目录下,tomcat会自动部署
sudo cp ~/opengrok/dist/lib/source.war /var/lib/tomcat10/webapps/
浏览网页http://localhost:8080/source,会提示configuration找不到,这个需要镜像索引才能生成,默认目录会在/var/opengrok/etc/configuration.xml
如需手动修改configuration.xml路径,可修改/var/lib/tomcat10/webapps/source/WEB-INF/web.xml文件中的CONFIGURATION字段,具体如下:
OpenGrok A wicked fast source browser ... Full path to the configuration file where OpenGrok can read its configuration CONFIGURATION /opengrok/etc/configuration.xml
2,脚本部署
实际的效果和手动拷贝一样,-c 可以指定CONFIGURATION
opengrok-deploy -c ~/opengrok/etc/configuration.xml
~/opengrok/dist/lib/source.war /var/lib/tomcat10/webapps
opengrok项目索引
1,创建所以所需的目录index,和src
~/opengrok/index 和~/opengrok/index/suggester/ ,请确保opengrok 对以上目录有访问权限,否则索引不成功,或者出现搜索没有候选项
mkdir -p ~/opengrok/src/ ~/opengrok/index/suggester
chmod 777 ~/opengrok/index/suggester
下载两个测试用的实例项目
cd ~/opengrok/src # use one of the training modules at GitHub as an example small app. git clone https://github.com/githubtraining/hellogitworld.git # use OpenGrok as an example large app git clone https://github.com/OpenGrok/OpenGrok
2,执行索引命令
opengrok_base="/home/jenkins/opengrok/"
java
-Djava.util.logging.config.file=${opengrok_base}/etc/logging.properties
-jar ${opengrok_base}/dist/lib/opengrok.jar
-c ${ctags_root}
-R ${opengrok_base}/etc/readonly-configuration.xml
-s ${opengrok_base}/src
-d ${opengrok_base}/index -H -P -S -G --progress -v
-U "http://localhost:8080/source"
-W ${opengrok_base}/etc/configuration.xml
索引完成后,浏览器 访问 http://localhost:8080/source
3,定时索引
使用crontab命令实现定时同步
* 0 * * * /home/jenkins/opengrok/opengrok_index.sh > /home/jenkins/opengrok/log/opengrok_index.loLDAP认证配置
我的认证策略比较简单,特定组的账号只能登陆访问,如刚开始讲的,Tomcat实现账号认证,opengrok实现授权。
1,Tomcat 配置server.xml,ldap认证需要使用JNDIRealm打开/var/lib/tomcat10/conf/server.xml,删除UserDatabase
删除 用一下命令插入: 然后浏览网页localhost:8080/source/出现以下提示 如果不提示,需要排查web.xml的配置,我们发现用脚本插入会出现一些乱码,建议用手工插入 添加readonly configuration file ~/opengrok/etc/readonly-configuration.xml ldap-plugin-config-corp.xml 以上配置都是通过索引的时候配置的,因此可参照执行索引命令 的索引命令,添加添加。 重启tomcat,浏览localhost:8080/source,即可进行ldap账号认证。 问题定位: tomcat的日志在/var/lib/tomcat10/log/ opengrok 日志 ~/opengrok/log opengrok-deploy --insert insert.xml ~/opengrok/dist/lib/source.war
/var/lib/tomcat10/source/webapps/source.war