經過 docker 容器技術,在centos7系統下,使用 docker鏡像,安裝 gitlab,並將 gitlab的 http,https,ssh端口映射到其餘端口;在宿主機中裝入 nginx,經過 nginx反向代理技術訪問宿主機中的容器;
- 不一樣的服務依賴的環境各有差別
- 當服務須要遷移的時候,不少環境須要從新搭建其實也是挺崩潰的,經過容器技術能夠更快的實現遷移
- 不一樣的服務對宿主機的性能是有損耗的,經過容器能夠更好的控制和監管(不會出現一個服務跑掛了一臺機器。。。)
- 服務的依賴實現解耦,(eg:有多個服務依賴同一個nginx,其中一個須要重啓nginx,而致使其餘服務中斷)
- 最重要的緣由(我想試試....~O(∩_∩)O~)
閒話少說了。。。開始擼。。。(docker的安裝基本操做就不在這裏多說了)有須要的小夥伴能夠看下:html
Docker Hubnginx
在官網咱們能夠找到各類各樣咱們須要的鏡像,經過搜索能夠找到gitlab鏡像。git
docker pull gitlab/gitlab-ce
注意:若是沒有指定對應的版本,默認會拉取 latest版本web
通過漫長的等待。。。docker
經過docker images 命令看到gitlab鏡像證實你已經pull完了shell
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gitlab/gitlab-ce latest 5d8ab6b06918 4 days ago 1.43GB
運行:segmentfault
docker run --detach --hostname gitlab.xxx.com --publish 444:443 --publish 81:80 --publish 23: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 5d8ab6b06918
數據存儲地方centos
當地的位置 | 容器的位置 | 做用 |
---|---|---|
/srv/gitlab/config | /etc/gitlab | 用於存儲GitLab配置文件 |
/srv/gitlab/logs | /var/log/gitlab | 用於存儲日誌 |
/srv/gitlab/data | /var/opt/gitlab | 用於存儲應用數據 |
經過docker ps 命令看到gitlab容器證實你已經運行成功了bash
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9e12ae220c14 5d8ab6b06918 "/assets/wrapper" 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:23->22/tcp, 0.0.0.0:81->80/tcp, 0.0.0.0:444->443/tcp gitlab
上面的容器使用的是官方Omnibus GitLab軟件包,全部的配置都在惟一的配置文件 /etc/gitlab/gitlab.rbapp
固然咱們也能夠進入容器內部經過shell會話進行相關操做
docker exec -it gitlab /bin/bash
GitLab的使用過程當中涉及到大量的郵件,而郵件服務你能夠選擇使用Postfix,sendmai,配置SMTP服務其中一種;
Postfix還要安裝其餘東西,sendmai又是比較老,相對較下SMTP配置起來會比較方便,我使用的就是SMTP;
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "XXX@163.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = :login gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['gitlab_email_from'] = "XXX@163.com" user["git_user_email"] = "XXX@163.com"
說明:
獲取郵箱客戶端祕鑰:
gitlab-ctl reconfigure
gitlab-rails console Notify.test_email('543314032@qq.com', 'Message Subject', 'Message Body').deliver_now
應該會成功。。。
注意:
其實你在宿主機的 /srv/gitlab/config 目錄的下也能找到gitlab.rb,修改這個文件也能夠;可是修改完成後,必須重啓容器
docker restart gitlab
只要容器重啓Gitlab就會自動從新加載配置;
網上還有不少教程修改的 gitlab的其餘配置文件實現SMTP的配置,我不太建議,由於文檔上面要求是在gitlab.rb上修改相關的配置的;其餘文件修改,若是不是很熟悉可能會混亂。。。也可能會出現莫名其妙的問題。。。
若是你選擇的是其餘服務商的smtp,具體配置能夠看文檔
更多的配置能夠參考官方文檔:
Omnibus GitLab
來到這裏其實你已經能夠經過訪問81端口來訪問咱們的gitlab了
個人nginx是經過rpm安裝的;具體的安裝這裏就很少說了!
打開nginx的配置文件
upstream git{ # 域名對應 gitlab配置中的 external_url # 端口對應 gitlab 配置中的 nginx['listen_port'] server 域名:端口; } server{ listen 80; # 此域名是提供給最終用戶的訪問地址 server_name 域名; location / { # 這個大小的設置很是重要,若是 git 版本庫裏面有大文件,設置的過小,文件push 會失敗,根據狀況調整 client_max_body_size 50m; proxy_redirect off; #如下確保 gitlab中項目的 url 是域名而不是 http://git,不可缺乏 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 反向代理到 gitlab 內置的 nginx proxy_pass http://git; index index.html index.htm; } }
external_url 是一個很重要的配置,GitLab的資源(例如:git創庫,文件,圖片)都是基於這個URL;說白了就是咱們clone的地址;
external_url 的默認爲:
external_url 'GENERATED_EXTERNAL_URL'
其實就是 http://hostname
能夠把這個值改爲對應的主機名或者ip地址做爲項目的倉庫地址爲:
// http http://<external_url>:<port>/<組名>/<項目名>.git // ssh git@<external_url>:<組名>/<項目名>.git
也能夠直接將其改爲IP
external_url 'http://10.2.237.56'
若是是ssh端口,須要修改gitlab_shell_ssh_port。
gitlab_rails['gitlab_shell_ssh_port'] = 23
若是要修改 ssh 的域名,就須要修改 gitlab_ssh_host
gitlab_rails['gitlab_ssh_host'] = '10.2.123.123'
若是你修改了external_url 並加了端口,你會忽然發現,gital 的 web 訪問不了了,其實你不用慌張,由於這是由於nginx 默認監聽的是 external_url 的端口
你只須要更改下 nginx 的端口配置就行了
# nginx['listen_port'] = nil nginx['listen_port'] = 80
以上的配置都是在 gitlab.rb 裏面改的!!!