前提条件
需要配置好docker与docker-compose环境
1.代码准备
mkdir
-p
/data/opengrok/
{etc,src,data}
cd
/data/opengrok/src/
# 克隆一个测试项目
git clone https:
//git
.kernel.org
/pub/scm/linux/kernel/git/stable/linux-stable
.git
2.创建docker-compose.yml文件(其中最后的cpus与mem_limit请根据实际情况进行高整)
version:
"3"
services:
opengrok:
container_name:
opengrok
image:
opengrok/docker
:
latest
ports
:
-
"8090:8080/tcp"
environment:
#SYNC_PERIOD_MINUTES: '1440'
JAVA_OPTS:
"-Xms4g -Xmx64g -Duser.timezone=Asia/Shanghai"
TZ:
"Asia/Shanghai"
volumes:
-
'/data/opengrok/src/:/opengrok/src'
# source code
-
'/data/opengrok/etc/:/opengrok/etc/'
# folder contains configuration.xml
-
'/data/opengrok/data/:/opengrok/data/'
# index and other things for source code
cpus:
'64.0'
mem_limit:
96G
2. 下载并运行docker image
sudo
docker compose up -d
3. 检查端口在防火墙中是否被禁用
root@PVT-SR588:~
# sudo lsof -i:8090
COMMAND PID USER FD TYPE DEVICE SIZE
/OFF
NODE NAME
docker-
pr
346229 root 7u IPv4 889519 0t0 TCP *:8090 (LISTEN)
docker-
pr
346236 root 7u IPv6 889520 0t0 TCP *:8090 (LISTEN)
root@PVT-SR588:~
#
# 上面是正常的情况,如果被禁用了,可以改为允许访问
sudo
ufw allow 8090
/tcp
4. 至此,已经可以在其他主机上通过浏览器访问 http://host-ip-addr:8090/ 了,如果出现访问异常,可以查看docker启动log
5. 进入容器中配置更新代码的权限,并尝试进行git pull,看能否成功
docker
exec
-it opengrok
bash
cd
/opengrok/src/MT8678_yocto/custom
git pull
6. 在容器中安装相关工具包
6.1. repo安装参考:repo安装配置 6.2. 生成公钥并添加到对应的gerrit帐号中 6.3. 设置全局配置 git config --global --add safe.directory * 确保可以正确同步代码 6.4. 修改时区(使用tzselect,并在docker-compose.yml中定义)
7. 更新索引
# 指定MT8676项目更新
JAVA_OPTS=
"-Xms4g -Xmx64g"
/venv/bin/python3
/venv/bin/opengrok-reindex-project
--printoutput --api_timeout 8 --jar
/opengrok/lib/opengrok
.jar -U http:
//localhost
:8080/ -P MT8676 -- --connectTimeout 8 -r dirbased -G -m 256 --leadingWildCards on -T 4 -c
/usr/local/bin/ctags
-U http:
//localhost
:8080/ -H MT8676
# 定时更新全部索引
# 检查容器中cron是否启动
service
cron
status
# 重新启动cron服务(时区修改后要重启cron)
service
cron
start
# 增加定时任务(在终端输入crontab -e进行)
0 1 * * *
/opengrok/update_index
.sh
/opengrok/update_index.sh内容如下:
#!/bin/bash
# 设置环境变量
export
PATH=
/usr/local/sbin
:
/usr/local/bin
:
/sbin
:
/bin
:
/usr/sbin
:
/usr/bin
:
/opt/java/openjdk/bin
export
JAVA_OPTS=
"-Xms4g -Xmx64g"
# 脚本内容
code_dir=
"/opengrok/src"
for
i
in
$(
ls
$code_dir );
do
/venv/bin/python3
/venv/bin/opengrok-reindex-project
\
--printoutput \
--api_timeout 8 \
--jar
/opengrok/lib/opengrok
.jar \
-U http:
//localhost
:8080/ \
-P $i \
-- --connectTimeout 8 \
-r dirbased \
-G \
-m 256 \
--leadingWildCards on \
-T 16 \
-c
/usr/local/bin/ctags
\
-U http:
//localhost
:8080/ \
-H $i
done
报错:
repo sync后的项目在切换并跟踪一个远程分支(要多执行几次,有些会没切换成功) 如在MT8678_yocto/custom目录下执行git pull时报 git config --global --add safe.directory /opengrok/src/MT8678_yocto/custom,则说明权限设置不符合 Git 的默认安全规则,可执行 git config --global --add safe.directory "*" 来进行全局配置 MT8678_yocto/meta/meta_kde和MT8678_yocto/meta/meta_kde也要切换并跟踪一个远程分支 如新增项目后要先重启容器注册项目再更新索引
参考文档:
opengrok/docker - Docker 镜像 | Docker Hub --- opengrok/docker - Docker Image | Docker Hub
在ubuntu 22.04 上通过 Docker部署OpenGrok-CSDN博客