貢獻一個最新版的OpenGrok Docker容器

一直在本地用 {OpenGrok by OpenGrok 離線看代碼,前些天有同事在我的機器上用了一下被震撼了,也想裝一個。我心想從頭架起來要配置成完美版還是挺煩的,一堆環境變數設置還要自己編譯universal ctags,要支持多個repository也不方便。於是打算找個Docker版直接用,可是在Docker Store上轉了一圈都沒找到好的,大多版本太舊,而且用的還是exuberant-ctags。唯一一個更新到1.1rc14的(還是用的exuberant-ctags),配了一堆的SSH和自動索引任務,不適合單機用。唯有自己動手豐衣足食了,成品放在Docker Store上共享。

安裝Docker後,用以下命令啟動一個OpenGrok伺服器

docker run -it -d --name <CONTAINER NAME> -p <EXTERNAL PORT>:8080 -v <LINUX JDK HOME>:/usr/lib/jvm -v <OPENGROK DATA FOLDER>:/var/opengrok:delegated -w /app krazakee/opengrok

其中

  • <CONTAINER NAME>為任意容器名稱(隨意改,如果要啟動多個伺服器查看不同代碼庫可以用名稱來管理)
  • <EXTERNAL PORT>為訪問伺服器的埠號
  • <LINUX JDK HOME>為外部的JDK目錄,請注意必須是Linux版。Windows或Mac用戶可以去Oracle官網下一個Linux的壓縮版本,隨便解壓在什麼地方,在這裡指定位置即可。
  • <OPENGROK DATA FOLER>是OpenGrok的工作目錄。第一次啟動伺服器前創建一個空目錄,並把一個或多個代碼項目checkout或複製到到該目錄下的src子目錄中即可。

容器啟動後 (可以用 docker ps 命令查看),使用以下命令創建索引

docker exec <CONTAINER NAME> bash -c "/opengrok/bin/OpenGrok index"

其中<CONTAINER NAME> 為啟動時指定的容器名稱。請注意首次創建索引時間可能非常漫長(我把公司的全部Java代碼堆在一個目錄里創建索引用了一天半)。

以後代碼更新了重新執行這個命令重建索引,索引是增量式的,再次執行索引少量修改速度就很快了。

建好索引後就可以在瀏覽器里用

http://localhost:<EXTERNAL PORT>/source

來訪問搜索頁面或

http://localhost:<EXTERNAL PORT>/source/xref/

來訪問項目列表。

要停止容器使用docker stop <CONTAINER NAME>即可,停掉的容器可以用docker start <CONTAINER NAME>重新開啟。但如果重啟了docker應用或重啟了機器,則需要用前面的docker run指令重新啟動。

以下是我這個版本的一些參數:

  • 目前最新的opengrok 1.1rc21版,另提供1.0版的tag供選用。
  • Tomcat 9.0.2 (beta)
  • JDK版本自選,親測8和9均可
  • 使用universal ctags
  • 使用Git 2.15 (避免opengrok 1.1版下一個讀取歷史記錄時拋出日期格式錯誤異常的問題)

在Chrome下配合以下插件使用風味更佳:

https://chrome.google.com/webstore/detail/super-simple-highlighter/hhlhjgianpocpoppaiihmlpgcoehlhio?

chrome.google.com

https://chrome.google.com/webstore/detail/ourstickys-sticky-notes-o/oficbemndigeiiennldcdfcklocpkggd?

chrome.google.com

https://chrome.google.com/webstore/detail/click-to-remove-element/jcgpghgjhhahcefnfpbncdmhhddedhnk?

chrome.google.com

https://chrome.google.com/webstore/detail/temporary-bookmarks/bpndllhnkhaepbdeeklhlbpinaacbjfj?

chrome.google.com

https://chrome.google.com/webstore/detail/automatic-keywords-highli/gcpknobcboilhnacklgmaamlcnblneoi?

chrome.google.com


推薦閱讀:

談對程序的理解
VSCode 最佳實踐
一個古代人要留下基因到今天,有多大概率?

TAG:編程 | 代碼閱讀 | 開發工具 |