Gitlab安裝、遷移和升級

安裝docker & docker-compose

1.安裝docker

ubuntu 安裝Docker

sudo apt-get install docker.io

 添加docker組

#Add your user to docker group
$sudo usermod -aG docker ubuntu(用戶名)

 添加之後重啓服務器即可 

#reboot

 

2.安裝docker-compose

https://docs.docker.com/compose/install/
which curl
# apt-get install curl -y #### libcurl3 libcurl3-dev php5-curl -y
# apt-get install python-pip python-dev -y
# pip install -U docker-compose  

 注意:如果提示下面錯誤,用root賬戶在重試一下上面命令

Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1235, in prepare_files
    req_to_install.assert_source_matches_version()
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 465, in assert_source_matches_version
    % (display_path(self.source_dir), version, self))
  File "/usr/lib/python2.7/dist-packages/pip/util.py", line 70, in display_path
    if path.startswith(os.getcwd() + os.path.sep):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 11: ordinal not in range(128)

Storing debug log for failure in /home/ccid/.pip/pip.log

 

Or 也可以用一下方式添加

 

$sudo curl -L https://github.com/docker/compose/releases/download/1.5.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$sudo chmod +x /usr/local/bin/docker-compose
$sudo docker-compose --v

 

注:提示docker-compose版本如“docker-compose version 1.7.1, build 6c29830”則安裝成功
注意:如果你在安裝的時候出現了 “Permission denied” 的錯誤信息,這說明你的 /usr/local/bin 目錄是不可寫的,你需要使用超級用戶來安裝。
運行 sudo -i , 然後運行上邊的兩個命令,然後 exit退出。

 

安裝配置Docker私有registry

docker首先安裝成功;

創建保存image和證書的目錄:

$sudo mkdir -p /opt/docker/registry/data
$sudo mkdir -p /opt/docker/registry/certs

 Docker的私有Registry要求使用https訪問。需要生成ssl證書。

$cd /opt/docker/registry/
$which openssl
$sudo apt-get install openssl libssl-dev (libssl-dev:openssl開發庫)
$openssl genrsa -out registry_tr_com.key 2048
$openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/registry_tr_com.key -x509 -days 365 -out certs/registry_tr_com.crt

 

 下面是輸出,需要填寫一些信息:

Generating a 4096 bit RSA private key
........................................++
..........................................++
writing new private key to 'certs/registry_tr_com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:BeiJing
Locality Name (eg, city) []:BeiJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:TR
Organizational Unit Name (eg, section) []:TR
Common Name (e.g. server FQDN or YOUR name) []:registry.tr.com
Email Address []:

 注意:上面提示裏的Common Name必須要添寫完整域名

 

使用編輯器編輯 /opt/docker/registry/docker-compose.yml,內容如下:

docker/registry爲源文檔的docker_registry)
registry:
    container_name : tr_registry
    restart : always
    image : registry:2
    ports:
        - 443:5000
    environment:
        REGISTRY_HTTP_TLS_CERTIFICATE: /certs/registry_tomhat_com.crt
        REGISTRY_HTTP_TLS_KEY: /certs/registry_tr_com.key
    volumes:
        - /opt/docker/registry/data:/var/lib/registry
        - /opt/docker/registry/certs:/certs

 注意:文本格式;

 

安裝docker-compose

 

使用docker-compose啓動registry容器。

# docker-compose up -d

 注意:用root用戶執行命令在docker-compose.yml所在目錄

如下是正確提示

 

Pulling registry (registry:2)...
2: Pulling from library/registry
efd26ecc9548: Pull complete
a3ed95caeb02: Pull complete
39091a8d8094: Pull complete
c5ad04c01f33: Pull complete
e441cc69d374: Pull complete
Digest: sha256:5206f99cc4d06dedc6d291324935ef134001f30fe05bf47e8d0b58d7e93e3843
Status: Downloaded newer image for registry:2
Creating cops_registry
 

 

把證書複製到其他的節點上;

 

 

# scp /opt/docker_registry/certs/registry_tr_com.crt user@ip地址:/root
 請切換到節點上,安裝證書並重啓docker服務。

 

 

# mkdir -p /etc/docker/certs.d/registry.tr.com
# cp /root/registry_tomhat_com.crt /etc/docker/certs.d/registry.tr.com
# service docker restart
 Push tomcat鏡像到私有庫

 

 

方法爲
1,從我公司的私有庫裏將tomcat鏡像pull到本地。將公司私庫 (ip  registry.tr.com)添加到hosts中,並將私庫密鑰放到/etc/docker/certs.d/registry.tr.com/目錄中
2,修改tomcat鏡像的tag
3,將tomcat鏡像push到自建的倉庫裏
由於本文檔裏演示創建的私有庫(registry.tr.com)與我公司的私有庫名稱相同,node1和jenkins 在/etc/hosts文件中對registry.tr.com的解析均爲私網地址的私有庫,而這裏需要的tomcat鏡像在我公司的私有庫裏(公網地址)。所以操作要在gitlab節點上進行(gitlib節點上配置了訪問我公司私有倉庫的祕鑰和hosts文件)具體操作如下
# docker pull  registry.tr.com/tomcat
$sudo docker images 獲取tomcat鏡像的image id這裏爲660259e51042

# docker tag 660259e51042 registry.tr.com/tomcat
修改hosts文件將registry.tr.com的解析改成私網地址(127.0.0.1)替換/etc/docker/certs.d/registry.tr.com/registry_tr_com.crt 文件(該文件可以從node1節點相同目錄下獲得)
放置好registry.tr.com.crt之後重啓docker
# sudo service docker restart
# docker push registry.tr.com/tomcat    push鏡像到私有倉庫
通過瀏覽器訪問https://127.0.0.1/v2/_catalog查看鏡像是否push成功。
 訪問:http://ip/v2/_catalog

 

 

安裝gitlab server

 

1.安裝證書與pull鏡像

 

docker首先安裝成功

 

首先配置host
將registry的host配置好
命令如下

 

#echo "ip registry.ecloud.com.cn" >> /etc/hosts
 `###########此處有一個安裝證書,由開發提供############

 


安裝證書到/etc/docker/certs.d/registry.tr.com/


命令和方法如下


將證書文件上傳到服務器,windows下可使用winscp工具,Linux系統下可通過此方法上傳


“#scp -i wendangmiyao.pem registry_tr_com.crt [email protected]:/home/ubuntu” 


.crt, 爲證書文件,.pem爲登陸服務器使用的祕鑰文件。


在服務器上創建證書存放目錄並將證書拷貝到其中

 

 

# mkdir -p /etc/docker/certs.d/registry.tr.com
# cp /home/ubuntu/registry_tr_com.crt /etc/docker/certs.d/registry.tr.com/
 重啓docker 服務

 

 

# service docker restart
 

 

接下來pull gitlab的images.

 

# docker pull registry.tr.com/sameersbn/gitlab:8.2.0
# docker pull registry.tr.com/sameersbn/redis:latest
# docker pull registry.tr.com/mysql:5.7

 

安裝docker compose.

 

查看上面安裝方法;

 

創建MySQL和gitlab的數據目錄

 

 

$sudo mkdir -p /opt/data/mysql
$sudo mkdir -p /opt/data/gitlab

 

創建一個新文件docker-compose.yml,加入以下內容:

 

mysql:
 container_name: mysql
 image: registry.tr.com/mysql:5.7
 environment:
 #mysql password:mysql
  - MYSQL_ROOT_PASSWORD=mysql
 volumes:
  - /opt/data/mysql:/var/lib/mysql

redis:
# container_name: redis
 image: registry.tr.com/sameersbn/redis:latest

gitlab:
 image: registry.tr.com/sameersbn/gitlab:8.2.0
 command: app:start
 container_name: gitlab
 ports:
  - "80:80"
  - "8443:443"
 environment:
 #project url http://GITLAB_HOST/project/xxxx.git
  - GITLAB_HOST=gitlab.tr.com
  - DB_USER=gitlab
  - DB_PASS=1q2w3e4r
  - DB_NAME=gitlabhq_production
  - GITLAB_TIMEZONE=Beijing
  - GITLAB_GRAVATAR_ENABLED=false
  - GITLAB_BACKUPS=daily
  - NGINX_MAX_UPLOAD_SIZE=100m
  - "UNICORN_TIMEOUT=120"
  - GITLAB_SECRETS_DB_KEY_BASE=fvXhxg7tthcg4jpxpfg9MbrWJbbHTqsRj3xpLNxdrMpsWmgnMNjRdhc73qX7dsgz
  - DEBUG=1
 volumes:
  - /opt/data/gitlab:/home/git/data
 links:
  - mysql:mysql
  - redis:redisio

 

啓動容器

 

# docker-compose up -d

 

如果啓動不起來,就是剛纔配置的文件格式不對,請調整配置文件格式
登錄到mysql容器,創建所需的數據庫,並添加授權。

 

$sudo docker exec -it mysql bash
$mysql -u root -pmysql

 

mysql root用戶的密碼是mysql.
然後執行下面的SQL.

 

CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'%' IDENTIFIED BY '1q2w3e4r';

FLUSH PRIVILEGES;


#exit退出mysql容器

 

登錄到Gitlab容器

 

# docker exec -it gitlab bash

 在容器裏執行下面的命令來初始化Gitlab.

$ /sbin/entrypoint.sh app:rake gitlab:setup

 

初始化設置完成後,提示如下:

 

login.........root
password......5iveL!fe

 

這就是gitlab的管理員登錄用戶。
用這個用戶登錄gitlab,首次登錄會要求修改密碼(這裏修改成tr.com)。
通過宿主機ip訪問如http://ip/users/sign_in

 

以下是jenkins用的
登錄gitlab首頁,點擊Profile settings->Account,這裏會顯示當前用戶的 Private token,請把這個值保存到文本文件裏,稍後在Jenkins裏會用到(這裏爲CVufh7Bs82ohsaWEa6mv)。

 

Gitlab數據遷移與升級

 

Tip :在部署gitlab數據遷移之前,首先查看A主機gitlab的版本號。
下面所示主機A爲原主機。B主機爲遷移目的主機。
A主機gitlab version 爲8.2.2.
數據遷移必須保證A主機和B主機的gitlab版本號相同.

 



 

數據遷移

 

 

在A主機上操作:

1.  部署gitlab容器時沒有進行自動備份的配置,先創建備份。
ubuntu@gitlab ~ $:docker stop gitlab 停止當前運行的gitlab容器 
eg:docker stop gitlab   注:gitlab爲容器的名稱。

2. ubuntu@gitlab ~ $:docker rm gitlab 刪除當前存在的gitlab容器 
eg:docker rm gitlab      注:gitlab爲容器的名稱    

 注:在gitla容器創建時b設置了自動備份的請忽略次步。直接導出最近/opt/data/gitlab/backup/下的最近的備份文件。

3. ubuntu@gitlab ~ $:docker run --name gitlab --rm  -ti -p 80:80  -p 8443:443   --link mysql:mysql   --link redis:redisio   -e "DB_USER=gitlab" -e "DB_PASS=1q2w3e4r"   -e "DB_NAME=gitlabhq_production"   -e "GITLAB_HOST=gitlab.dev.ecloud.com.cn"   -e "GITLAB_TIMEZONE=Beijing"   -e "GITLAB_GRAVATAR_ENABLED=false"  -e 'GITLAB_BACKUPS=daily' -e "NGINX_MAX_UPLOAD_SIZE=100m" -e "UNICORN_TIMEOUT=120" -e "GITLAB_SECRETS_DB_KEY_BASE=fvXhxg7tthcg4jpxpfg9MbrWJbbHTqsRj3xpLNxdrMpsWmgnMNjRdhc73qX7dsgz"  -v /opt/gitlab/data:/home/git/data   sameersbn/gitlab:8.2.2 app:rake gitlab:backup:create  運行此命令就會在創建gitlab容器時掛載的/opt/data/gitlab/backup目錄下生成如下圖所示的壓縮文件,
 

 
-p 80:80 開放80端口映射主機80端口    -p 8443:443 開放443端口映射主機8443端口
--name gitlab  容器名稱爲gitlab
-rm  當容器停止時進行刪除容器.
--link mysql:mysql    連接mysql容器   mysql:   mysql爲容器名稱。
--link redis:redisio   連接redis容器    redis:   redis爲容器名稱。
-e "DB_USER=gitlab"    環境變量DB_USER   gitlab爲mysql用戶名。
-e "DB_PASS=1q2w3e4r"  環境變量DB_PASS  1q2w3e4r爲gitlab用戶名的密碼。
-e "DB_NAME=gitlabhq_production" 環境變量 DB_NAME gitlabhq_production爲數據庫名稱。
-e "GITLAB_HOST=gitlab.dev.ecloud.com.cn" 環境變量GITLAB_HOST gitlab.dev.ecloud.com.cn爲訪問地址,自定義。
-e 'GITLAB_BACKUPS=daily'  環境變量GITLAB_BACKUP daily爲每天備份。  
sameersbn/gitlab:8.2.2  鏡像名稱。
 在B主機上操作:
將此備份目錄下的文件拷貝到你需要遷移的主機的目錄下。 創建gitlab:8.2.2的容器,搭建出gitlab在宿主機上的環境。 Tip : 詳細步驟請參閱上面部署:
3. 安裝Gitlab server  
 
將從A主機遷移過來的備份文件拷貝到/opt/data/gitlab/baskup下,運行如下命令恢復備份。
ubuntu@gitlab ~ $:docker run --name gitlab --rm -ti -p 80:80  -p 8443:443   --link mysql:mysql   --link redis:redisio   -e "DB_USER=gitlab" -e "DB_PASS=1q2w3e4r"   -e "DB_NAME=gitlabhq_production"   -e "GITLAB_HOST=gitlab.dev.ecloud.com.cn"   -e "GITLAB_TIMEZONE=Beijing"   -e "GITLAB_GRAVATAR_ENABLED=false"  -e 'GITLAB_BACKUPS=daily' -e "NGINX_MAX_UPLOAD_SIZE=100m" -e "UNICORN_TIMEOUT=120" -e "GITLAB_SECRETS_DB_KEY_BASE=fvXhxg7tthcg4jpxpfg9MbrWJbbHTqsRj3xpLNxdrMpsWmgnMNjRdhc73qX7dsgz"  -v /opt/gitlab/data:/home/git/data   sameersbn/gitlab:8.2.2 app:rake gitlab:backup:restore 

或者如下命令:
ubuntu@gitlab ~ $:docker run --name gitlab -it --rm [OPTIONS] IMAGE:8.2.2 app:rake gitlab:backup:restore BACKUP=1417624827   
具體內容如上。
 

注:1417624827爲/opt/data/gitlab/backup
目錄下的文件:1417624827_gitlab_back.tar

4.  運行gitlab容器:
ubuntu@gitlab ~ $:docker run --name gitlab -d [OPTIONS] IMAGE:8.2.2  此容器就是已經進行了數據遷移的gitlab容器。   
具體內容如上。

 

升級

 

運行1、 2 步,對gitlab容器進行停止刪除操作。
ubuntu@gitlab ~ $:docker run --name gitlab -d [OPTIONS] IMAGE:8.8.5 
具體內容如上。

 

ok,
已經成功,
如有問題歡迎提出與分享

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章