基于docker快速搭建git仓库

gitlab简介

gitlab是一个仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,其架构如下图
gitlab架构图

nginx : web入口
database(postgresql,mysql)
redis 缓存,负责分发任务
sideiq:后台任务,主要负责发送电子邮件,任务需要来自redis
unicorn: 包含gitlab 主进程 gitlab-shell 用于ssh交互
gitlab-workhorse:反向代理服务器,可以处理与unicorn 无关的请求,处理git pull/push请求,处理到unicorn 的连接 gitaly 后台服务,用于处理GitLab发出的所有git调用

大致介绍完gitlab后,以下就开始通过docker 容器快捷搭建gitlab应用

下载gitlab镜像

docker pull gitlab/gitlab-ce
Using default tag: latest
latest: Pulling from gitlab/gitlab-ce
e80174c8b43b: Pull complete 
d1072db285cc: Pull complete 
858453671e67: Pull complete 
3d07b1124f98: Pull complete 
e7419c4b508e: Pull complete 
69df234f2343: Pull complete 
d35398dd029b: Pull complete 
73a46c7023f6: Pull complete 
6ba4c12a7e2f: Pull complete 
56e2c0315c67: Pull complete 
Digest: sha256:ebc6ee9faf326a5b44db94e3c7f3012ffa123b68f23b317fbb9323b3701f832a
Status: Downloaded newer image for gitlab/gitlab-ce:latest
docker.io/gitlab/gitlab-ce:latest

创建数据目录

保证数据和服务分离,将配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外

mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/logs 
mkdir -p /srv/gitlab/data

docker run gitlab

docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:80 --publish 8222:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --privileged=true \
  gitlab/gitlab-ce:latest
docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                            PORTS                                                               NAMES
9839e1602833        gitlab/gitlab-ce:latest   "/assets/wrapper"   2 minutes ago       Up 2 minutes (health: starting)   0.0.0.0:8222->22/tcp, 0.0.0.0:8880->80/tcp, 0.0.0.0:8443->443/tcp   gitlab

参数说明
–hostname gitlab.example.com: 设置主机名或域名
–publish 8443:443:将http:443映射到外部端口8443
–publish 8880:80:将web:80映射到外部端口8880
–publish 8222:22:将ssh:22映射到外部端口8222
–name gitlab: 运行容器名
–restart always: 自动重启
–volume /srv/gitlab/config:/etc/gitlab: 挂载目录
–volume /srv/gitlab/logs:/var/log/gitlab: 挂载目录
–volume /srv/gitlab/data:/var/opt/gitlab: 挂载目录
–privileged=true 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限

以上数据目录主要是配置目录,日志目录,数据库文件目录

修改配置

如果已经做过域名解析(自己玩的话,改hosts文件就行了),则无需修改就可以通过域名直接使用,如果要通过ip访问,并通过ip访问git仓库,则需要修改如下配置文件

vim /srv/gitlab/config/gitlab.rb

找到# external_url 'GENERATED_EXTERNAL_URL',删除 #,并将GENERATED_EXTERNAL_URL改为要使用的ip如http://192.168.3.52 ,基本功能就可以使用了,如果要配置邮件服务,ldap,移步(https://docs.gitlab.com/ee/install/installation.html#advanced-setup-tips),扩展功能应有尽有,gitlab 8.17之后还提供了除ruby之外的其他语言实现,如go,nodejs,有语言偏执症的可以一顿操作了

浏览器访问

如图可以访问了
gitlab首页

参考文献

便捷搭建:https://segmentfault.com/a/1190000019772866
gitlab:https://docs.gitlab.com/ee/install/installation.html#1-packages-and-dependencies


版权声明:本文为u014636124原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。