博客 / 詳情

返回

GitLab安裝與配置

由於圖片和格式解析問題,為了更好閲讀體驗可前往 閲讀原文

對於gitlab的安裝本人都是在arm架構Centos7.9虛擬機上進行的,請悉知本人安裝環境,或者與本人的環境保持一致,以便產生不必要的疑惑

這裏使用docker安裝Gitlab,機器上需要先安裝docker,如果你還不知道docker,可以先看看我的往期docker文章;如果你直接在Linux機器上安裝,可以參考Linux Install;如果你已經用上了k8s,可以參考Helm chart;

📷攻粽號,查看更多優質文章

# arm架構鏡像(如果你也是arm架構,可以使用此鏡像)
docker pull yrzr/gitlab-ce-arm64v8

# 最新版amd架構(非arm架構)
docker pull gitlab/gitlab-ee

配置並啓動

# 下載好後使用docker engine 運行gitlab
sudo docker run -d \
  --hostname gitlab.ihengshuai.com \
  --publish 443:443 --publish 80:80 --publish 8422:22 \
  --name gitlab \
    --restart always \
  -v /srv/gitlab/config:/etc/gitlab \
  -v /srv/gitlab/logs:/var/log/gitlab \
  -v /srv/gitlab/data:/var/opt/gitlab \
  --shm-size 512m \
  yrzr/gitlab-ce-arm64v8
  
# IP
sudo docker run -d \
  --hostname 192.168.10.10 \
  --publish 443:443 --publish 80:80 --publish 8422:22 \
  --name gitlab \
    --restart always \
  -v /srv/gitlab/config:/etc/gitlab \
  -v /srv/gitlab/logs:/var/log/gitlab \
  -v /srv/gitlab/data:/var/opt/gitlab \
  --shm-size 512m \
  yrzr/gitlab-ce-arm64v8

命令式

  1. 首先創建掛載卷

    mkdir -p /srv/gitlab
    cd /srv/gitlab && mkdir config data logs
  2. 運行gitlab容器

    sudo docker run -d \
      --hostname 192.168.10.10 \
      -p 443:443 --publish 80:80 --publish 8422:22 \
      --name gitlab \
        --restart always \
      -v /srv/gitlab/config:/etc/gitlab \
      -v /srv/gitlab/logs:/var/log/gitlab \
      -v /srv/gitlab/data:/var/opt/gitlab \
      --shm-size 512m \
      yrzr/gitlab-ce-arm64v8

相關參數説明:

  • hostname:指定gitlab的ip地址,用於瀏覽器的訪問(域名訪問看後面),這裏指定虛擬的ip192.168.10.10
  • -p:暴露gitlab的httphttpsssh端口,這裏http使用主機的80端口,需要注意主機是否佔用80端口;https使用主機443端口,同樣注意端口占用;由於虛擬機佔用了ssh端口22,這裏使用8422端口作為gitlab的ssh端口
  • -v:掛載gitlab的相關配置到主機,方便修改配置

當執行上面命令後,根據自己機器的配置等待一段時間,便會啓動成功,你可以查看啓動日誌:

docker logs -f gitlab

通常出現以下情況啓動成功:

image-20230316181606466

瀏覽器進行訪問:

image-20230319160426583

默認賬户是root,密碼可以從下文得知

配置文件安裝

此方式使用docker-compose配置文件安裝,你可以根據自己的需求來選擇安裝方式,相關配置參數此處不做解釋。

version: '3.6'
services:
  web:
    image: 'yrzr/gitlab-ce-arm64v8'
    restart: always
    hostname: '192.168.10.10'
    ports:
      - '80:80'
      - '443:443'
      - '8422:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
    shm_size: '256m'

然後運行此配置文件

docker compose -d up .

後續內容同上

密碼

在gitlab搭建好後,需要查看root賬户的初始密碼,當一些密碼忘記後,也可以重置密碼

  1. 查看root初始

    # 查看root初始密碼
    sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

​ 其實gitlab的初始密碼就存儲在/etc/gitlab/initial_root_password這個文件裏,由於我們掛載了卷,你也可以在宿主機上查看。

  1. 重置密碼,這裏以root賬户為例,修改數據庫重置(實際情況對於root賬户沒忘的話,可以用root賬户重置其它賬户的密碼)

    # https://docs.gitlab.cn/jh/security/reset_user_password.html
    # 進入gitlab容器中
    docker exec -it gitlab bash
    
    # 使用gitlab-rails
    gitlab-rails console -e production
    
    # id為1的是root
    user = User.where(id: 1).first
    user.password = 'xxxxx'
    user.password_confirmation = 'xxxx'
    user.save
    
    # 保存退出後,如果登不上,則需要重載配置

域名與證書

gitlab除了可以使用ip地址外,也可以自定義域名,也可以使用https,並認證自簽證書,整個過程主要分為以下步驟:

  • 添加域名:可以使用本機DNS映射域名
  • 使用https:可選,如果你需要https
  • 配置證書:可選,如果你啓用了https,需要提供證書,你可以使用自簽證書並信任
  • 重載配置

以上相關配置都是在gitlab.rb配置文件中修改的,你可以在宿主機的 /srv/gitlab/config/gitlab.rb文件中進行修改,或進入容器中修改/etc/gitlab/config/gitlab.rb,二者是等價的。

配置域名

# vim /srv/gitlab/config/gitlab.rb

# 使用域名 https://gitlab.ihengshuai.com (這裏使用了https),域名自行修改
external_url 'https://gitlab.ihengshuai.com'

在你的主機上添加HOST記錄,進行映射

# vim /etc/hosts

192.168.10.10 gitlab.ihengshuai.com

開啓https

# vim /srv/gitlab/config/gitlab.rb

nginx['client_max_body_size'] = '250m'
# 強制HTTPS
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80

ssl證書配置

當你開啓了https需要配置ssl證書(如果沒有可以跳過),你可以使用相關雲廠商(阿里雲、騰訊雲...)提供的免費證書,也可以自簽證書。

  1. 生成證書,下面以OpenSSL自簽證書為例:

    # 使用OpenSSL簽發證書
    # 1. 生成服務器私鑰 (domain.com.key)  domain.com 隨便起的名字
    openssl genrsa -out domain.key 4096
    
    # 2.生成證書籤名請求(CSR) domain.com.csr
    # 生成 CSR 的過程中,會提示輸入一些信息,其中一個提示是 Common Name (e.g. YOUR name),
    # 這個非常重要,這一項應填入 FQDN(Fully Qualified Domain Name)完全合格域名/全稱域名,
    # 如果您使用 SSL 加密保護網絡服務器和客户端之間的數據流,
    # 舉例被保護的網站是 https://test.chinacloudsites.cn,
    # 那麼此處 Common Name 應輸入 test.chinacloudsites.cn
    openssl req -new -key domain.key -out domain.csr
    
    # 3.使用上一步的證書籤名請求籤發證書
    openssl x509 -req -days 365 -in domain.csr -signkey domain.key -out domain.crt

    將以上的domain替換成你想都要的域名如:gitlab.example.com

    這裏我寫成了一個腳本:

    # auto-cetificate.sh
    #!/bin/bash
    echo "請使用sudo運行以獲取系統權限!"
    echo "請輸入域名:"
    
    read userdomain
    
    # 啥都不輸退出
    if [ ! "$userdomain" ]; then
        exit
    fi
    
    openssl genrsa -out $userdomain.key 4096
    
    openssl req -new -key $userdomain.key -out $userdomain.csr
    
    openssl x509 -req -days 365 -in $userdomain.csr -signkey $userdomain.key -out $userdomain.crt
    
    echo
    echo "Generate success!"
    echo
    
    # 將本地域名寫入host
    echo 需要將域名寫入host嗎[yes/no]?
    read confirm_read_host
    if [ "$confirm_read_host" != "yes" ]; then
        exit
    fi
    
    echo 需要保持和證書域名相同不[yes/no]?
    read confirm_write_host
    if [ "$confirm_write_host" == "no" ]; then
        echo 請填寫待寫入host的域名
        read custom_host_domain
        cp /etc/hosts /etc/hosts.old
        echo "127.0.0.1 $custom_host_domain" >>/etc/hosts
        exit
    fi
    
    cp /etc/hosts /etc/hosts.old
    echo "127.0.0.1 $userdomain" >>/etc/hosts
    echo "Write success!"
    sleep 1

    當創建完以上文件後,需要將其加權限,然後執行腳本即可:

    chmod +x ./auto-cetificate.sh
    
    # 執行
    ./auto-cetificate.sh

    執行後根據提示一步一步填寫相關內容

  2. 配置證書

    # vim /srv/gitlab/config/gitlab.rb
    
    # https證書
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/domain.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/domain.key"
    # 用默認
    nginx['ssl_ciphers'] = xxx
    
    # 需要關閉這個
    letsencrypt['enable'] = false

    這裏的domain改為你自己生成的域名,以上需要使用.key和.crt兩個文件,你可以把相關文件移至/srv/gitlab/ssl,這裏容器中gitlab的位置為/etc/gitlab/ssl

當以上工作都做好了,需要重啓加載配置並重新啓動便會配置成功(這裏可以看下一小節)

最後使用https和域名訪問,由於自簽證書不安全,你需要忽略安全提示即可

image-20230319165605394

image-20230319165636779

至此https配置成功了

配置重載

重載配置有兩種:在外部直接docker restart和進入容器中使用gitlab-ctl進行重新啓動

  1. 外部重啓

    docker restart gitlab
  2. 進入容器中

    # 進入容器
    docker exec -it gitlab bash
    
    # 1.使用gitlab-ctl重啓加載配置
    gitlab-ctl reconfigure
    #日誌...
            (up to date)
    Recipe: gitlab::gitlab-rails
      * execute[clear the gitlab-rails cache] action run
        - execute /opt/gitlab/bin/gitlab-rake cache:clear
    Recipe: nginx::enable
      * runit_service[nginx] action restart (up to date)
    Recipe: monitoring::grafana
      * runit_service[grafana] action restart (up to date)
    
    Running handlers:
    Running handlers complete
    Chef Infra Client finished, 9/735 resources updated in 20 seconds
    gitlab Reconfigured!
    
    # 2.重新啓動
    gitlab-ctl restart

這裏推薦使用第二種方式

Centos安裝

這裏我的虛擬機為Centos7.9 arm架構系列

後續更新...

由於圖片和格式解析問題,為了更好閲讀體驗可前往 閲讀原文
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.