前提条件
需要配置好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博客