docker部署gitlab,接入ldap

原创 purezjr 随笔 gitlab 511阅读 2017-11-27 09:30:39 举报

最近老大说自己搭一个gitlab,自己运营。于是百度谷歌了一下教程,现在来谈谈搭建的步骤跟遇到的问题。
详细文档可以参考:https://github.com/sameersbn/docker-gitlab
我用的是 Centos 7.2 服务器

硬件要求

CPU

[blockquote]1核能满足个100用户,但响应速度可能会受到影响。
2核最多支持100个用户。
4核最多支持1,000个用户。
8核最多支持10,000个用户。[/blockquote]

内存

[blockquote]如果使用512Mb内存,那么Gitlab会运行得非常缓慢,并且需要250Mb的虚拟内存。
768Mb是最低内存大小,我们並不推荐。
1GB内存能支持100个用户(仓库需要占用250Mb,否则Git需要使用交换空间)
2GB是推荐的大小,能支持1,000个用户。
4GB能支持10,000个用户。

如果硬件跟不上的话会一直停留在502的页面的。

[/blockquote]
接下来说说搭建的步骤来说说搭建的步骤

1.安装docker

[blockquote]yum install docker -y
安装完毕后,启动docker [/blockquote]

2.配置加速器

[blockquote]登录https://dashboard.daocloud.io 网站注册一个账号点击加速器获取加速命令,并执行。

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://288cf79c.m.daocloud.io
执行完这个命令之后,/etc/docker/daemon.json里面会多了一项配置。

注意:要将里面最后的逗号去掉,不然docker重启不了)[/color][/blockquote]

3.安装gitlab-ce

docker pull gitlab-ce

4.安装redis

docker pull sameersbn/redis

5.运行 redis

[blockquote] docker run --name gitlab-redis -d \
--volume /srv/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest[/blockquote]

6.运行gitlab-ce

[blockquote] docker run -d \
--hostname your hostname \ // 这个是hostname会出现在gitlab项目中下载地址中,不设置的话地址会变成containerID
--link gitlab-redis:redisio \ // 联通redis容器
--add-host "xxxxx:xxxxx" \ // 这个可以设置容器的hosts文件,有需要可以设置
--env GITLAB_OMNIBUS_CONFIG="external_url 'your domain'; gitlab_rails['lfs_enabled'] = true;" \ // gitlab域名
--env 'GITLAB_SSH_PORT=22' \ // ssh 端口
-p 8443:443 -p 9090:80 -p 22:22 \ 服务器映射端口映射到container的端口
--name gitlab-ce \ //容器名字
--volume /mnt/volumes/gitlab/config:/etc/gitlab \
--volume /mnt/volumes/gitlab/logs:/var/log/gitlab \
--volume /mnt/volumes/gitlab/data:/var/opt/gitlab \ // 将gitlab文件夹映射到本地
docker.io/gitlab/gitlab-ce // gitlab镜像 [/blockquote]

7.查看gitlab的运行日志

docker logs -f gitlab-ce

8.启动完成之后输入localhost:9090能打开gitlab登录页面。

9.gitlab接入ldap

[blockquote] 打开 gitlab.rd 目录
路径根据你自己设置的为主
vim /mnt/volumes/gitlab/config/gitlab.rb
设置 gitlab_rails['ldap_enabled'] 为 true // 允许ldap
接着修改参数配置,主要是蓝色部分

 gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
   main: # 'main' is the GitLab 'provider ID' of this LDAP server
     label: 'LDAP'
     host: 'your ldap address'
     port: your ldap port
     uid: 'uid'
     bind_dn: 'xxx'
     password: 'xxx'
     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
     verify_certificates: true
     ca_file: ''
     ssl_version: ''
     active_directory: true
     allow_username_or_email_login: false
     block_auto_created_users: false
     base: 'xxx'
     user_filter: ''
 末尾要将EOS的注释去掉[/blockquote]

[blockquote]设置 external_url "your domain
gitlab_rails['gitlab_shell_ssh_port'] = 22 // ssh端口
保存
重启gitlab docker restart gitlab-ce
打开登录页面,首先需要设置standard的root的密码
需要填写standar root账号的密码。
之后能看到多了一个ldap登录tab[/blockquote]

10.安装nginx

[blockquote]由于我的gitlab地址端口是9090,想直接通过域名的80端口访问,所以这里做了一次端口转发
nginx配置域名指向服务器的9090端口。
现在应该能通过域名访问gitlab了。
[/blockquote]

11.gitlab备份,默认备份地址可以在gitlab.rn修改 gitlab_rails

备份命令:
[blockquote]docker exec -t 容器名称 gitlab-rake gitlab:backup:create
备份是备份到服务器的,考虑到如果服务器挂了,备份了也是没用了,所以可以备份是同时推送到另外一服务器上面。
下午做了这一块的工作,实现秒密码同步备份文件到另一台服务器
假设要重A服务器复制文件到B服务器:
1.在A服务器上面执行:ssh-keygen -t rsa ,生成公钥
2.在A服务器上执行:scp ~/.ssh/id_rsa.pub b服务器地址:/root/.ssh/authorized_keys,复制A服务器的公钥到B服务器
ps:(在第2步中如果机器中已经存在authorized_keys文件,则需注意,这个文件可以包含多个SSH验证信息,这时可用 cat >>命令将验证文件内容附加上去。
比如复制到scp .ssh/id_rsa.pub 192.168.10.2:/root/.ssh/a.pub然后执行cat ~/.ssh/a.pub >> ~/.ssh/authorized_keys)
这个是复制的命令:scp -P 22 $(find /mnt/volumes/gitlab/data/backups/*.tar -mtime 0) root@ip:/backup 。 我将backup下面的 当天备份的tar包备份到了远程服务器,可已将这个命令加到定时任务里面就可以实现同步到远程了
[/blockquote]

12.恢复

**恢复命令:**
  [blockquote]docker exec -i -t  gitlab-ce /bin/bash
   gitlab-ctl stop unicorn
   gitlab-ctl stop sidekiq
   gitlab-ctl status
   gitlab-rake gitlab:backup:restore BACKUP=备份文件名(上面复制好的.tar文件,只要数字部分)
  (yes。。)
   gitlab-ctl start
   gitlab-rake gitlab:check SANITIZE=true
   exit[/blockquote]

可以用crontab做实时任务,定时备份。

13.安装docker-compose(用来做一键部署的)

[blockquote]可以用来配置好docker跑镜像的参数,可以用来管理多个容器。
方法一:(好慢)
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s-uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
方法二:
yum -y install epel-release
yum -y install python-pip
pip install docker-compose

上面docker run 参数对应的docker-compose.yml 文件

version: '2'
services:
  web:
    image: docker.io/gitlab/gitlab-ce
    ports:
     - "22:22"
     - "8443:443"
     - "9090:80"
    volumes:
     - "/mnt/volumes/gitlab/config:/etc/gitlab"
     - "/mnt/volumes/gitlab/logs:/var/log/gitlab"
     - "/mnt/volumes/gitlab/data:/var/opt/gitlab"
    environment:
     - GITLAB_OMNIBUS_CONFIG= "external_url your domain'; gitlab_rails['lfs_enabled'] = true;"
     - GITLAB_SSH_PORT=22
    links:
     - redis
    hostname: "your hostname"
    container_name: gitlab-ce
    restart: aways
    extra_hosts:
     - "xxxx :xxxx"
  redis:
   image: sameersbn/redis:latest
   volumes:
    - "/srv/docker/gitlab/redis:/var/lib/redis"

以后只需要 docker-compose up -d  就能够同时启动两个镜像了
其他功能可以google[/blockquote]

遇到的问题。

1.docker run gitlab -xxxx时报docker跟镜像之间没做nat转换的错(错误找不到了,大概是说iptables里面要做个关于docker的映射)

解决:

[blockquote] pkill docker

iptables -t nat -F

重新执行docker run gitlab -xxxxx 就可以。
[/blockquote]

2.service命令不见了

yum install initscripts

3.安装了docker不能启动

我在网易云的云服务器安装了docker,然后启动docker报错:

docker启动失败
这个应该是要设置一下SELinux的属性。
解决方法:
vim /etc/sysconfig/selinux
将SELINUX 改为 enforcing,保存之后,reboot一下。

接着启动有报错了,这个是网络里面没有生成docker0这个网卡。

docker启动时报2
于是,手动创建一个。
解决方法:
[blockquote]brctl addbr docker0
ip addr add 192.168.42.1/24 dev docker0
ip link set dev docker0 up
ip addr show docker0
systemctl restart docker[/blockquote]
如果没有brctl这个命令,执行yum install bridge-utils 进行安装

评论 ( 3 )
最新评论
aaawhz 2017-11-29 13:01:30 3F

公司用svn有必要迁移到git不

purezjr 1F 2017-11-27 14:29:56 2F

是的

aaawhz 2017-11-27 13:26:43 1F

这么说,你们都用git了