Gitlab安装、迁移和升级

来源:互联网 发布:gelax软件 编辑:程序博客网 时间:2024/05/18 06:56

安装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 incorporatedinto 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 blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:CNState or Province Name (full name) [Some-State]:BeiJingLocality Name (eg, city) []:BeiJingOrganization Name (eg, company) [Internet Widgits Pty Ltd]:TROrganizational Unit Name (eg, section) []:TRCommon Name (e.g. server FQDN or YOUR name) []:registry.tr.comEmail 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/registryefd26ecc9548: Pull completea3ed95caeb02: Pull complete39091a8d8094: Pull completec5ad04c01f33: Pull completee441cc69d374: Pull completeDigest: sha256:5206f99cc4d06dedc6d291324935ef134001f30fe05bf47e8d0b58d7e93e3843Status: Downloaded newer image for registry:2Creating 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镜像的tag3,将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 ubuntu@10.10.10.3:/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/mysqlredis:# container_name: redis image: registry.tr.com/sameersbn/redis:latestgitlab: 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.........rootpassword......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] IMAGE8.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容器。   具体内容如上。

升级

运行12 步,对gitlab容器进行停止删除操作。ubuntu@gitlab ~ $:docker run --name gitlab -d [OPTIONS] IMAGE:8.8.5 具体内容如上。

ok,
已经成功,
如有问题欢迎提出与分享

1 0