使用docker構建Gitlab

gitlab功能比較龐大,所佔用資源也不少,建議放在資源好一點的服務器,虛擬機運行4GB+,遇到問題可直接看最後面,可能會有所幫助html

特性

  • 使用docker-compose構建
  • 使用docker的方式進行構建,基於gitlab-ce社區版搭建(可根據須要獲取ee版)
  • 使用nginx作一層反向代理,最終經過一個二級域名的方式可直達gitlab

最終的目的是使用二級域名,直接映射過去linux

# 本地資源
192.168.204.138 -> 服務器
二級域名 gitlab.vm.com -> 192.168.204.138 (此處是本機作了個hosts)

# 映射關係
服務器中:7080 -> gitlab-docker:80
服務器中:7443 -> gitlab-docker:443 (後面沒有使用)
服務器中:7022 -> gitlab-docker:22 (用於ssh連方式)

# 訪問關係
192.168.204.138:7080 -> gitlab-docker
gitlab.vm.com:7080 -> gitlab-docker

# 最終使用nginx作一層反向代理
gitlab.vm.com -> gitlab-docker
複製代碼

安裝docker

curl https://get.docker.com/ > install-docker.sh # 下載安裝腳本

sh install-docker.sh # 執行安裝腳本

# 修改docker阿里源(此處是個人docker源,能夠去阿里雲免費獲取本身專屬的加速器源)
vim /etc/docker/daemon.json

# daemon.json
{
  "registry-mirrors": ["https://brnzp166.mirror.aliyuncs.com"]
}
複製代碼

設置開機自啓動systemctl enable dockernginx

安裝docker-compose(基於國內鏡像)

# 下載docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 賦予權限
chmod +x /usr/local/bin/docker-compose
複製代碼

設置外部目錄

因爲是docker鏡像運行, 因此咱們須要把gitlab的配置, 數據, 日誌存到容器外面, 即將其掛載到宿主機。git

mkdir -p /home/software/gitlab/etc
mkdir -p /home/software/gitlab/logs
mkdir -p /home/software/gitlab/data
複製代碼

製做docker-compose.yml文件

因爲使用了docker-compose幫助咱們部署,因此不須要進行拉取鏡像等,他會自動幫咱們執行docker

找一個目錄存放docker-compose.yml文件,這裏使用/home/software/gitlab目錄shell

  1. 新建文件
cd /home/software/gitlab

vim docker-compose.yml
複製代碼
  1. 編輯docker-compose.yml文件內容,若有要求可自行修改對應目錄
# docker-compose.yml

gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: unless-stopped
  hostname: 'gitlab.vm.com' # 最終暴露出去的host
  environment:
    GITLAB_OMNIBUS_CONFIG: |

      # 外部能夠訪問到gitlab的url
      external_url 'http://gitlab.vm.com' 
      
      # ssh相關(注意可能會和ssh鏈接工具端口衝突)
      gitlab_rails['gitlab_ssh_host'] = 'gitlab.vm.com'
      gitlab_rails['gitlab_shell_ssh_port'] = 7022

      # email相關
      gitlab_rails['smtp_enable'] = true
      gitlab_rails['smtp_address'] = "smtp.163.com" # smtp服務器地址
      gitlab_rails['smtp_port'] = 465
      gitlab_rails['smtp_user_name'] = "123456@163.com" # 發送郵件的郵箱
      gitlab_rails['smtp_password'] = "受權碼"     # 郵箱的受權碼
      gitlab_rails['smtp_domain'] = "smtp.163.com"
      gitlab_rails['smtp_authentication'] = "login"
      gitlab_rails['smtp_enable_starttls_auto'] = true
      gitlab_rails['smtp_tls'] = true 
      gitlab_rails['gitlab_email_from'] = '123456@163.com' # 發送郵件的郵箱
  ports:
    - '7080:80'
    - '7443:443'
    - '7022:22'
  volumes:
    - '/home/software/gitlab/etc:/etc/gitlab'
    - '/home/software/gitlab/logs:/var/log/gitlab'
    - '/home/software/gitlab/data:/var/opt/gitlab'
複製代碼

檢測配置成功

運行docekr

切換到剛剛的docker-compose.yml文件存在的地址(此時是在/home/software/gitlab)json

cd /home/software/gitlab

# 後臺運行docker
docker-compose up -d
複製代碼

使用docker ps查看當前docker的運行情況,等待gitlab的狀態爲(healthy/unhealthy,約5分鐘左右),也即打包完畢後,訪問192.168.204.138:7080,若是能夠看到歡迎界面,恭喜你,搭建就成功了vim

之後直接切換去docker-compose.yml文件存在的地址,使用docker-compose up -d便可重啓,而且上文設置了docker開機自啓。centos

此時設置的密碼爲root帳戶,即之後用戶名爲root的帳戶,超級管理員瀏覽器

可點擊頭像框 settings -> preferences -> language 切換爲中文

測試郵箱服務

修改完成後,進入到另外一個終端中,進入gitlab-docker內

# 獲取到gitlab服務的containerID
docker ps

# 進入docker容器內
docker exec -it <containerID> /bin/bash

# 測試郵箱是否完成
gitlab-rails console     # 進入郵件控制檯, 稍等一會才能進入
Notify.test_email('test_another@qq.com', 'Message Subject', 'Message Body').deliver_now
複製代碼

使用nginx反向代理

反向代理說通俗就是,你去訪問192.168.204.138的時候,服務器趁你不知道安排了192.168.204.138:7080給你服務,此時是後臺服務器,經過一箇中間商,給你服務。

使用yum安裝nginx

# 下載對應當前系統版本的nginx包(package)
wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm  

# 創建nginx的yum倉庫
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm  

# 根據/etc/yum.repos.d/nginx.repo中的信息下載安裝nginx
yum install nginx   

# 啓動nginx服務
systemctl start nginx 

# 開機自啓nginx服務
systemctl enable nginx 
複製代碼

配置反向代理

使用此種方式安裝的nginx,配置文件是較爲分散的,能夠使用whereis nginx查看

# 進入到nginx配置目錄
cd /etc/nginx/conf.d

# 增長一個針對gitlab的proxy, 必定要爲*.conf, 查看 /etc/nginx/nginx.conf 就懂了
vim proxy_gitlab.conf

# 個人反向代理,gitlab.vm.com:80 -> http:127.0.0.1:7080
# 即docker映射出的gitlab 目錄
server {
  listen 80;
  server_name gitlab.vm.com;

  location / {
    proxy_pass http://127.0.0.1:7080;
  }
}
複製代碼

重啓nginx服務systemctl restart nginx

訪問便可http://gitlab.vm.com

可能出現的問題

SELINUX(針對反向代理)

linux安全模塊,此處直接關閉(不推薦這種作法,能夠去找selinux較好的解決方案)

vim /etc/sysconfig/selinux

SELINUX=disabled
複製代碼

firewalld

因爲防火牆的存在,可能形成瀏覽器一直轉圈的情況

本地虛擬機,直接關閉(不推薦,能夠去找firewalld較好的解決方案)

systemctl stop firewalld   # 關閉防火牆

systemctl disable firewalld   # 永久關閉(固然也不推薦啦)
複製代碼

gitlab-docker無限重啓

多是配置出了問題,以前配置extends_url出現這種情況,因此此時並未在進行過配置

能夠切換進去(此處gitlab-docker的name就叫gitlab,也能夠替換爲<containerID>docker ps -a便可查看),查看哪裏出了問題

docker container logs gitlab
複製代碼

nginx服務器啓動異常

nginx服務啓動說權限的問題,此處多是修改了SELINUX致使的問題,能夠先將selinux切換回以前的模式,重啓後,待nginx可正常啓動後,重啓在修改SELINUX便可

爆內存

由於gitlab對設備的仍是有必定要求的gitlab硬件要求

若是卡慢的話,能夠試一試增長虛擬內存

# 4GB虛擬內存
dd if=/dev/zero of=/home/swap bs=1024 count=4194304

# 格式化分區
mkswap /home/swap

# 開啓swap分區(關閉swap分區 swapoff /home/swap)
swapon /home/swap

# 掛載分區
vim /etc/fstab

/home/swap swap swap default 0 0
複製代碼

參考

docker方式構建gitlab(官方文檔)

雲服務器增長swap分區

相關文章
相關標籤/搜索