docker安裝gitlab

docker安裝gitlab

GitLab 分爲 社區版(Community Edition,縮寫爲 CE)和 企業版(Enterprise Edition,縮寫爲 EE)。社區版是免費的,而企業版包含一些收費服務,通常來講我的開發者用社區版就足夠了。nginx

下載鏡像

首先須要先下載 GitLab CE 的鏡像,使用下面的命令進行下載,由於文件較大,因此可能須要一點時間,耐心等待便可。
# 不加 tag 則默認爲最新版本 latest
$ docker pull gitlab/gitlab-ce

建立目錄

一般會將 GitLab 的配置 (etc) 、 日誌 (log) 、數據 (data) 放到容器以外, 便於往後升級, 所以請先準備這三個目錄。
mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/logs 
mkdir -p /srv/gitlab/data

啓動運行

$ docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:80 --publish 8222:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --privileged=true \
  gitlab/gitlab-ce:latest

說明:git

  • --hostname gitlab.example.com: 設置主機名或域名
  • --publish 8443:443:將http:443映射到外部端口8443
  • --publish 8880:80:將web:80映射到外部端口8880
  • --publish 8222:22:將ssh:22映射到外部端口8222
  • --name gitlab: 運行容器名
  • --restart always: 自動重啓
  • --volume /srv/gitlab/config:/etc/gitlab: 掛載目錄
  • --volume /srv/gitlab/logs:/var/log/gitlab: 掛載目錄
  • --volume /srv/gitlab/data:/var/opt/gitlab: 掛載目錄
  • --privileged=true 使得容器內的root擁有真正的root權限。不然,container內的root只是外部的一個普通用戶權限

運行成功以後,能夠使用下面的命令查看容器運行狀態:web

$ docker ps

能夠看到 GitLab 已經在運行了,有一個屬性 STATUS 爲 health: starting,說明 gitlab 的服務正在啓動中,尚未啓動完畢。等這個狀態變成 healthy 時則說明已經部署完成,能夠訪問了。docker

訪問

gitlab啓動成功後,瀏覽器訪問http://ip:8880, 便可訪問。爲了使用域名訪問,須要配置nginx:瀏覽器

upstream gitlab{
    server 127.0.0.1:8880;
}

server {
    listen 80;
    server_name  gitlab.example.com;
    access_log     /var/log/nginx/gitlab.example.com-access.log;
    error_log     /var/log/nginx/gitlab.example.com-error.log;
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://gitlab;
    }
}

nginx重啓配置生效後,瀏覽器訪問http://gitlab.example.com 便可正常訪問。bash

首次訪問須要爲root用戶設置密碼,設置完成後須要登陸,默認用戶名爲:root, 密碼爲剛剛設置的密碼。服務器

配置郵件服務器

想要讓 GitLab 給你發送郵件,還要配置一下郵件服務器,這裏以QQ郵箱的 IMAP/SMTP服務 來配置。dom

打開郵箱->設置->帳戶,而後開啓 IMAP/SMTP服務,而後根據文檔獲取 受權碼 ,這步比較重要。ssh

而後跳轉至掛載目錄 /srv/gitlab/config/ 編輯gitlab.rb 文件,找到 Email Settings的註釋位置,而後修改如下內容:工具

### Email Settings
gitlab_rails['smtp_enable'] = true # 開啓 SMTP 功能
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465 # 端口不能夠選擇587,測試過會發送郵件失敗
gitlab_rails['smtp_user_name'] = "test@qq.com" # 你的郵箱帳號
gitlab_rails['smtp_password'] = "1324dasd" # 受權碼,不是密碼
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'test@qq.com' # 發件人信息,必須跟‘smtp_user_name’保持一致,不然報錯
gitlab_rails['smtp_domain'] = "qq.com" # 修改並不影響

配置完成後保存,而後輸入下面的命令使配置生效。

$ sudo docker exec gitlab gitlab-ctl reconfigure

使配置生效以後咱們能夠使用 gitlab 自帶的工具進行一下測試。依次執行下面的命令:

# 開啓 gitlab 的 bash 工具
$ docker exec -it gitlab bash

# 開啓 gitlab-rails 工具
$ gitlab-rails console production

# 發送郵件進行測試
Notify.test_email('test_001@123.com', 'Message Subject', 'Message Body').deliver_now

測試完成以後退出gitlab的bash工具,重啓 gitlab 便可。

$ docker restart gitlab

配置 Git 倉庫訪問路徑

在以前第一次運行 gitlab 容器的時候,有一個參數 hostname 爲 gitlab.example.com , 若是配置了域名能夠忽略這一步,若是你沒有配置相應域名的話,你的倉庫的地址將會變爲下面這樣:

ssh : git@gitlab.example.com:test/test.git
http:gitlab.example.com/test/test.git

若是域名不存在的話,這個地址是沒法進行 clone 的。

爲了解決這個問題,咱們能夠設置成 IP 或 你配置了的域名來訪問。

打開文件 /srv/gitlab/config/gitlab.rb 文件並找到

# external_url 'GENERATED_EXTERNAL_URL'

這行,去掉註釋,並按照下面的格式修改。

# ip 形式
external_url 'http://192.168.1.44'

# 域名形式
external_url 'http://JemGeek.com'

# 子域名
external_url 'http://gitlab.JemGeek.com'

# 其餘形式
external_url 'http://JemGeek.com/gitlab'

以上形式都是能夠的。修改完成後,輸入命令:

$ docker exec gitlab gitlab-ctl reconfigure

使配置生效,而後重啓 gitlab 便可。

升級

參照官方的說明, 將原來的容器中止, 而後刪除:

$ docker stop gitlab
$ docker rm gitlab

而後從新拉一個新版本的鏡像下來,

$ docker pull gitlab/gitlab-ce

使用原來的運行命令運行:

$ docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:80 --publish 8222:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --privileged=true \
  gitlab/gitlab-ce:latest

GitLab 在初次運行的時候會自動升級, 爲了預防萬一, 仍是建議先備份一下 /srv/gitlab/ 這個目錄。

大版本升級(例如從 8.7.x 升級到 8.8.x)用上面的操做有可能會出現錯誤, 若是出現錯誤能夠嘗試登陸到容器內部, 依次執行下面的命令:

$ gitlab-ctl reconfigure
$ gitlab-ctl restart
相關文章
相關標籤/搜索