win7下使用docker安裝gerrit和openLDAP

最近準備轉向git來管理代碼,但是由於有較高的權限管理要求,而且希望增加代碼審查功能。考慮了兩種方案,一種是gitlab,另一種是gerrit。

getlab使用了虛擬機安裝,安裝過程還比較順利,但是啓動起來,訪問的時候一直報錯,後來發現是內存不夠,給虛擬機分配了2G內存,後來把內存改成4G,能夠正常運行了。但是對於我來說,這個消耗太大了,所以考慮使用更輕量級的gerrit,使用openLDAP來管理用戶。希望更少的資源佔用,所以考慮用docker來安裝。

參考https://hub.docker.com/r/gerritcodereview/gerrit

1.啓動docker終端。

使用docker pull gerritcodereview/gerrit獲取鏡像

還需要另外openLDAP來管理用戶權限,phpldapadmin來作爲openLDAP的客戶端

所以使用

docker pull osixia/openldap

docker pull osixia/phpldapadmin

來獲取這兩個鏡像

2.按照gerrit docker的說明,使用docker-compose來管理

新建一個docker-compose.yaml文件,內容如下

version: '3'

services:
  gerrit:
    image: gerritcodereview/gerrit
    ports:
      - "29418:29418"
      - "80:8080"
    depends_on:
      - ldap
    volumes:
      - /external/gerrit/etc:/var/gerrit/etc
      - /external/gerrit/git:/var/gerrit/git
      - /external/gerrit/db:/var/gerrit/db
      - /external/gerrit/index:/var/gerrit/index
      - /external/gerrit/cache:/var/gerrit/cache
    environment:
      - CANONICAL_WEB_URL=http://localhost
    # entrypoint: /entrypoint.sh init

  ldap:
    image: osixia/openldap
    ports:
      - "389:389"
      - "636:636"
    environment:
      - LDAP_ADMIN_PASSWORD=secret
    volumes:
      - /external/gerrit/ldap/var:/var/lib/ldap
      - /external/gerrit/ldap/etc:/etc/ldap/slapd.d

  ldap-admin:
    image: osixia/phpldapadmin
    ports:
      - "6443:443"
    environment:
      - PHPLDAPADMIN_LDAP_HOSTS=ldap

 使用/external/gerrit作爲外部存儲,但是由於使用的dockertoolbox,所以需要在virtualbox虛擬機中將win7的目錄與docker主機關聯,使用文件共享,把e:\exteral目錄映射爲/external,然後新建gerrit目錄。

第一次啓動前,將 # entrypoint: /entrypoint.sh init一行前面的#去掉,需要執行初始化操作。

然後執行

docker-compose up gerrit

 進行初始化。

然後再重新將entrypoint: /entrypoint.sh init一行前面加#註釋掉

再次使用

docker-compose up -d

 來作爲服務啓動。到目前一切順利。以上是按照正常步驟進行的。

這時坑來了。下面是調試的方法

3.打開virtualbox的虛擬機端口映射,把80,6443,389,636,29418都映射到內部,然後使用

https://localhost:6443

來訪問phpldapadmin,注意是https,

能夠打開,也能顯示login登錄框,使用用戶名cn=admin,dc=example,dc=org,密碼secret登錄,但是使用點擊登錄之後顯示無法連接,提示

Unable to connect to LDAP server ldap
Error: Can't contact LDAP server (-1) for user

 從提示上看是無法連接ldap服務器。那麼查看一下吧

使用docker container list查看當前的容器。

發現只有兩條,沒有ldap。

使用docker-compose down來刪掉已經啓動的容器

這次使用docker-compose up 來啓動,不帶-d,也就是不使用後臺啓動,這樣能顯示出更多的信息。在一串大量的屏幕信息中,向上找到ldap_1開頭的行,發現最後一行是killing all processes,確定沒有啓動成功。

再次使用docker-compose up ldap只啓動ldap,發現報了一些信息,最後是exit with code 1.說明退出了。

下面希望查到更詳細的信息,找到爲什麼沒啓動成功。

在docker-compose.yaml文件的ldap節增加一行

command: [--loglevel,debug]

設置日誌級別爲調試。

再次使用docker-compose up ldap啓動ldap,打出了更多的信息,最後一行是

backend_startup_one (type=mdb, suffix="dc=example,dc=org"): bi_db_open failed! (22)

這個問題沒有找到原因。

後來把yaml文件中ldap節中volumes節註釋掉,再次啓動,啓動成功了。

在另一個終端,使用docker exec -it xxx bash來打開交互,查看/var/lib/ldap 和/etc/ldap/slapd.d文件夾下的內容

發現確實跟外部存儲裏的內容不同,外部存儲中沒有data.mdb文件。

考慮將這些文件拷貝到外部存儲

使用docker cp xxx:/var/lib/ldap /external/gerrit和 docker cp xxx:/etc/ldap/slapd.d /external/gerrit 將這兩個文件夾拷貝出來放到正確的位置。

使用ctrl+c結束docker啓動的終端

再次嘗試使用外部存儲啓動,仍然報錯。

可能這個鏡像在處理dockertoolbox作爲docker主機時使用外部存儲還有問題。

暫時先這樣運行。

4.使用固定ip供外部訪問

上面是使用localhost本地訪問,如果使用固定ip來訪問的話,把yaml文件中的localhost緩存ip,重新再執行第2步就可以了,查看/etc/gerrit.config文件,就可以看到canonicalWebUrl已經被修改了。

5.添加用戶

使用

https://localhost:6443

來訪問phpldapadmin,使用用戶名cn=admin,dc=example,dc=org,密碼secret登錄,之後可以新建用戶,點擊Create new entry here

選擇Courier Mail: Account,安裝https://hub.docker.com/r/gerritcodereview/gerrit

建立gerritadmin用戶.然後按照同樣的步驟建立user1,user2,auditor1用戶,分別對應普通用戶和審覈用戶。

6.openid的問題

完成上一步後打開localhost,這是gerrit的主頁。點擊login,如果出現了openid登錄,那可能是第2步生成的配置文件/etc/gerrit.config文件有問題,查看文件中auth節type是否爲ldap,如果是openid,則會使用openid登錄。

解決方法是,拷貝一份例子中的配置到gerrit.config 文件,然後再重新執行第2步,重新配置。

7.使用gerritadmin登錄,在browse下選擇repositories,可以看到倉庫,當前有兩個,然後點擊creatnew生成新的倉庫repo1,owner選擇gerritadmin,生成一個pubrepo,owner留空。我們希望生成了一個私有倉庫和一個公共倉庫。

但是由於gerrit默認會給所有用戶賦read權限,所以在repo1的access中增加read權限,group選anoymous user,前面選擇deny。

其他用戶需要重新登錄才能看到倉庫權限的變化。

 

8.sshkey的使用

使用user1登錄,既可以看到repo1了。下面配置sshkey免密碼提交了。

我安裝了tortoisegit來操作git,同時還是需要gitbash的。但是由於安裝tortoisegit的時候選擇了putty來管理ssh,打開tortoisgit目錄下的puttygen,點擊generate生成key,保存private key,將上面生成的一串ssh-rsa開頭的字符串複製。

然後打開頁面setting,sshkeys,newsshkey,粘貼到裏面。點擊save change。

然後打開pageant,addkey,加載剛纔保存的private key文件

新建一個目錄,然後右鍵git bash,使用ssh將repo1 clone下來,可以參考頁面上Clone with commit-msg hook提示的命令,既可以clone下來了。

9.提交審覈

user1用戶設計爲提交代碼後不會直接入庫,需要審覈。

user1用戶在本地commit後,push的時候,remote 分支選擇refs/for/master來提交。這樣提交之後就會是待審覈狀態

10.審覈

設計auditor爲審覈用戶,在repo1的access中增加label code-review和submit權限。

最好新建組,將權限賦值給組,然後用戶屬於某個組來管理權限

auditor用戶登錄後就可以看到changes,可以進行審覈,提交了。

11直接提交

如果需要某個用戶直接提交,不經過審覈,那就賦給push權限,然後push時直接push到master分支即可。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章