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