全部博文(150)
分类: 系统运维
2017-07-07 15:08:44
一直用的gitolite缺少web管理界面,也没有代码review功能,计划用gitlab统一来做代码库的管理、代码review等工作
可用性
达到99.9%以上,满足公司内部使用的要求
易用性
有图形界面,可以做代码review
性价比
技术难度和实施难度和团队技术相适应; 最好还能提升效率和降低成本
决定选用docker swarm集群和ceph集群的结合来配置gitlab容器,有以下特点:
分布式系统设计
稳定性
提升效率
容器
nginx+gitlab容器,后期可以拆分开
容器监听80和22端口,映射到属主机的7080和2022端口(因是内部系统,前端还有个nginx进行反向代理)
redis容器
作为gitlab缓存
postgresql容器
gitlab数据库
容器源及私有仓库
网络
overlay网络可以跨越主机解决容器的通讯,在docker swarm集群内模拟一个私有网络供gitlab stack容器使用
内部负载
3个容器只各启动1个实例,运行状态由docker swarm集群负责监控,如果挂掉集群负责重启
存储
gitab需要存储挂载到属主机目录,属主机上被挂载的存储由ceph集群提供
日志相关
存储挂载到属主机目录,属主机上被挂载的存储由ceph集群提供
1、环境准备
2、下载gitlab映像并上传到内部仓库
docker pull sameersbn/gitlab:9.3.4 docker pull sameersbn/postgresql docker pull sameersbn/redis:latest docker tag sameersbn/gitlab:9.3.4 reg.goluk.cn/gitlab/gitlab:latest docker push reg.goluk.cn/gitlab/gitlab:latest docker tag sameersbn/redis reg.goluk.cn/gitlab/redis docker push reg.goluk.cn/gitlab/redis docker tag sameersbn/postgresql reg.goluk.cn/gitlab/postgresql docker push reg.goluk.cn/gitlab/postgresql
3、创建存储目录
mkdir -p /mnt/cephfs/app/gitlab cd /mnt/cephfs/app/gitlab mkdir git logs postgresql redis #分别存放 gitlab、日志、数据库、缓存数据
4、创建gitlab.yml及简要说明
GITLAB_HOST=gitlab.corp.goluk.cn 可以通过域名访问gitlab
GITLAB_PORT=80 默认为80,如果非默认的话,会有在连接中显示自定义端口
GITLAB_SSH_PORT=2022 为了不和属主机上的22端口冲突,修改为2022
DB_HOST=postgres DB_USER=gitlab DB_PASS=mobnote
自定义gitlab需要用到的keys,字符内容需自定义,注意长度要求
GITLAB_SECRETS_DB_KEY_BASE= 需要32以上字符 GITLAB_SECRETS_SECRET_KEY_BASE= 需要64以上字符 GITLAB_SECRETS_OTP_KEY_BASE= 需要64以上字符
GITLAB_TIMEZONE=Beijing
密码需要设置方便首次登陆
GITLAB_ROOT_PASSWORD=yourpassword
REDIS_HOST=redis REDIS_PORT=6379
邮件设置
发送邮件用的用户名密码服务器等设置,注意要自己的。
SMTP_USER=opsbot@goluk.com SMTP_PASS=your_self_password SMTP_HOST=smtp.exmail.qq.com SMTP_PORT=465 SMTP_TLS=true
5、完整版的docker stack yml文件
version: '3' services: postgres: image: reg.goluk.cn/gitlab/postgresql environment: - TZ=Asia/Shanghai - DB_NAME=gitlabhq_production - DB_USER=gitlab - DB_PASS=yourpassword - DB_EXTENSION=pg_trgm volumes: - /mnt/cephfs/app/gitlab/postgresql:/var/lib/postgresql deploy: replicas: 1 restart_policy: condition: on-failure redis: image: reg.goluk.cn/gitlab/redis environment: - TZ=Asia/Shanghai volumes: - /mnt/cephfs/app/gitlab/redis:/var/lib/redis deploy: replicas: 1 restart_policy: condition: on-failure gitlab: image: reg.goluk.cn/gitlab/gitlab environment: - TZ=Asia/Shanghai - GITLAB_HOST=gitlab.corp.goluk.cn - GITLAB_PORT=80 - GITLAB_SSH_PORT=2022 - DB_HOST=postgres - DB_USER=gitlab - DB_PASS=mobnote - GITLAB_SECRETS_DB_KEY_BASE=must_be_32 - GITLAB_SECRETS_SECRET_KEY_BASE=must_be_64 - GITLAB_SECRETS_OTP_KEY_BASE=must_be_64 - GITLAB_TIMEZONE=Beijing - GITLAB_ROOT_PASSWORD=mobnote@168 - REDIS_HOST=redis - REDIS_PORT=6379 - SMTP_USER=opsbot@goluk.com - SMTP_PASS=!YBWMsD&%97uEZqT - SMTP_HOST=smtp.exmail.qq.com - SMTP_PORT=465 - SMTP_TLS=true volumes: - /mnt/cephfs/app/gitlab/data:/root/.ssh - /mnt/cephfs/app/gitlab/git:/home/git/data - /mnt/cephfs/app/gitlab/logs:/var/log/gitlab ports: - 7080:80 - 2022:22 depends_on: - postgresql - redis deploy: replicas: 1 restart_policy: condition: on-failure
6、docker stack 运行
docker stack deploy -c gitlab.yml gitlab 首次运行准备时间较长,约15分钟,系统可以通过http访问。
docker stack ps gitlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 7jmw5g8h8t2x gitlab_gitlab.1 reg.goluk.cn/gitlab/gitlab:latest swarm3 Running Running 21 hours ago agbye91jcqif gitlab_redis.1 reg.goluk.cn/gitlab/redis:latest swarm2 Running Running 21 hours ago pav06a4kc5so gitlab_postgres.1 reg.goluk.cn/gitlab/postgresql:latest swarm3 Running Running 21 hours ago
docker service logs gitlab_gitlab docker stack发布的服务名为stack名字_yml文件定义的服务名
docker stack rm gitlab
7、登录测试
浏览器访问 输入默认用户名root和设置的密码即可登录系统