栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Ubuntu下的源码浏览器Opengrok搭建 并集成LDAP认证登陆

Java 更新时间:发布时间: 百科书网 趣学号
-前言

很多做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以上的工具

sudo apt-get install git

 Tomcat安装

一般来说,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.lo
LDAP认证配置

我的认证策略比较简单,特定组的账号只能登陆访问,如刚开始讲的,Tomcat实现账号认证,opengrok实现授权。

1,Tomcat 配置server.xml,ldap认证需要使用JNDIRealm 

打开/var/lib/tomcat10/conf/server.xml,删除UserDatabase 

 

删除里面的UserDatabaseRealm,并添加 API endpoints are checked separately by the web app /api/* In general everything needs to be authenticated /* /api/v1/search /api/v1/suggest/* * NONE * BASIC

 用一下命令插入:

 opengrok-deploy --insert insert.xml ~/opengrok/dist/lib/source.war 
        /var/lib/tomcat10/source/webapps/source.war 

然后浏览网页localhost:8080/source/出现以下提示

 如果不提示,需要排查web.xml的配置,我们发现用脚本插入会出现一些乱码,建议用手工插入

3 使用LDAP插件添加配置

添加readonly configuration file

~/opengrok/etc/readonly-configuration.xml



 

  
        
        
            
                configuration
                /opengrok/auth/config/ldap-plugin-config-corp.xml
            
        

        

    

   

 

ldap-plugin-config-corp.xml



        
                
                        900000
                
                
                        dc=foo,dc=com
                
                
                 
                  
                   
                    
                     http://localhost:8080/source/api/v1/messages
                    
                                                                     
                     { "tags": [ "main" ], "cssClass": "class", "text": "corporate LDAP failed", "duration": "PT10M" }
                    
                   
                  
                 
                
                
                 10
                
                
                 3000
                
                
                 3000
                
                
                 1000
                
                
                        
                                
                                        
                                                ldap://ldap.foo.com
                                        
                                        
                                                3000
                                        
                                
                        
                
        

以上配置都是通过索引的时候配置的,因此可参照执行索引命令 的索引命令,添加添加。

重启tomcat,浏览localhost:8080/source,即可进行ldap账号认证。

问题定位:

tomcat的日志在/var/lib/tomcat10/log/

opengrok 日志 ~/opengrok/log

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/273930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号