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
運行成功以後,能夠使用下面的命令查看容器運行狀態: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
在以前第一次運行 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