目錄

Gitlab 使用外部 PostgreSQL 方法

Gitlab 使用外部 PostgreSQL 方法

前言

一樣是因為最近的案子需求,所以就來研究一下 Gitlab 如果要使用外部的 PostgreSQL 如何設定,而新舊版本其實差不多,只是有部分指令已經不同

關於 Gitlab 與 PostgreSQL 關係

  • 官方文件有說明,如果是使用 Omnibus GitLab 則會內建 PostgreSQL,且 Gitlab 僅有支援PostgreSQL
  • 當然目前的Docker也有包含 PostgreSQL 的版本
  • 但如果是要使用外部的 PostgreSQL,則需要自行安裝 PostgreSQL,且版本需符合 Gitlab 所需的版本
    • Gitlab 16.0 以後的版本,需要 PostgreSQL 13.0 以上
    • Gitlab 15.0 以後的版本,預設使用 PostgreSQL 13.0
    • Gitlab 13.7 以後的版本,建議 PostgreSQL 12.0 以上
    • Gitlab 13.0 以前的版本,需要 PostgreSQL 11.0 以上
    • Gitlab 12.8 以前的版本,需要 PostgreSQL 9.6 以上PostgreSQL 11.7以下

安裝與設定

安裝 PostgreSQL

我這裡是使用Docker來安裝 PostgreSQL ,步驟如下:

  1. 使用 docker compose 安裝

    • 我在本地端建立一個資料夾 postgresql 來放置 docker-compose.yml 檔案

      1
      2
      
      mkdir postgresql
      cd postgresql
      
    • 我設定了一個路徑 export POSTGRESQL_HOME=/root/postgresql

    • 建立 docker-compose.yml 檔案 sudo vi docker-compose.yml

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      
      version: "3.7"
      
      services:
      postgres:
          image: postgres:13.11
          container_name: postgres_13
          restart: always
          volumes:
          - '$POSTGRESQL_HOME/data:/var/lib/postgresql/data'
          ports:
          - '5432:5432'
          environment:
          POSTGRES_DB: gitlabhq_production # Gitlab 預設的資料庫名稱
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: 1234
      
    • 確定你所在目錄是在docker-compose.yml 檔案的目錄後執行 docker-compose up -d

  2. 使用 Docker Engine 安裝

    1
    2
    3
    4
    5
    6
    7
    8
    
     sudo docker run -d --name postgres_13 \ 
         --restart always \
         -p 5432:5432 \
         -v $POSTGRESQL_HOME/data:/var/lib/postgresql/data \
         -e POSTGRES_DB=eflab \
         -e POSTGRES_USER=postgres \
         -e POSTGRES_PASSWORD=1234 \
         postgres:13.11
    
  3. 測試看看能不能連上,沒有相關工具的可以使用pgadmin4查看

    1
    2
    3
    4
    5
    
    # 沒有其他工具執行下列Docker可以使用 pgadmin4,這裡設定的port號是20080,故瀏覽器輸入 http://localhost:20080
    docker run -p 20080:80 \
        -e 'PGADMIN_DEFAULT_EMAIL=user@example.com' \
        -e 'PGADMIN_DEFAULT_PASSWORD=admin' \
        -d dpage/pgadmin4:latest
    

    這是我用DBeaver連線的畫面 https://github.com/loulazynote/loulazynote.github.io/assets/33840759/6677b460-9289-41e5-95f6-742c2270cc10 https://github.com/loulazynote/loulazynote.github.io/assets/33840759/54b1a02c-261a-48e9-b326-508462db61dc

更改Gitlab設定

  1. 進入到gitlab的容器內

    1
    
    docker exec -it gitlab bash
    
  2. 編輯 gitlab.rb 檔案

    1
    
    vi /etc/gitlab/gitlab.rb
    
  3. 在VIM模式下搜尋 postgresql,並將下列設定開啟

    1
    
     /postgresql
    
    1
    2
    3
    4
    5
    6
    7
    8
    
     # Disable the bundled Omnibus provided PostgreSQL
     postgresql['enable'] = false # 這裡要設定為false,不然會使用內建的PostgreSQL
    
     # PostgreSQL connection details
     gitlab_rails['db_adapter'] = 'postgresql'
     gitlab_rails['db_encoding'] = 'unicode'
     gitlab_rails['db_host'] = 'your IP/hostname of database server'
     gitlab_rails['db_password'] = '1234'
    

    https://github.com/loulazynote/loulazynote.github.io/assets/33840759/89a71690-9ef6-4686-b890-079f7b27def8 https://github.com/loulazynote/loulazynote.github.io/assets/33840759/364a8c61-dd12-4141-9c2c-e624e8e55fda

  4. 執行sudo gitlab-ctl reconfigure(執行後可能要等2分鐘左右)

    完成後會看到下列畫面

    https://github.com/loulazynote/loulazynote.github.io/assets/33840759/c81cfa34-8c0d-44ed-8862-4e8ba843a978 https://github.com/loulazynote/loulazynote.github.io/assets/33840759/a244179a-a1c4-44ff-bbd7-c9fdef72865a

參考資料