做为互联网工做者,相信对 GitHub 这个 全球最大的同性交友网站 必定不会陌生,GitHub 使用的是目前如日中天的 Git 分布式版本控制系统。html
Git 是什么?Git 是目前世界上最早进的分布式版本控制系统,没有之一!关于 Git 与 GitHub 的相关内容能够查看我往期的教程。而本篇博客要介绍的是如何搭建一套私人的相似于 GitHub 的网站【GitLab】,它能够为我的、组织、企业提供项目或代码的管理功能。git
具体请查看我往期的博客文章:github
GitLab
的搭建有多种方式,在本篇博客将介绍一种比较简单快捷的方式,那就是使用 Docker 来搭建。docker
想要使用 Docker 来搭建 GitLab 的话须要先安装 Docker, 关于 Docker 的详细安装步骤已经在个人上一篇博客中介绍了。请前往查看:Docker 之 ubuntu 安装。ubuntu
在按照上篇博客成功安装了 Docker 以后,咱们就能够在 Docker 中来搭建 GitLab 了。vim
GitLab
分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,通常来讲我的开发者用社区版就足够了,本篇博文的教程也只是针对社区版。浏览器
首先须要先下载 GitLab CE 的镜像,使用下面的命令进行下载,由于文件较大,因此可能须要一点时间,耐心等待便可。bash
# 不加 tag 则默认为最新版本 latest (通常使用这种)
$ sudo docker pull gitlab/gitlab-ce
# 若是须要下载其余版本,加上对应的 tag 便可,如:
$ sudo docker pull gitlab/gitlab-ce:rc
复制代码
下载完成以后只须要一行命令便可启动 GitLab
,复制下面的命令直接运行便可。服务器
$ sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22: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 \
gitlab/gitlab-ce:latest
复制代码
这条命令很长,咱们来分解一下看看每行都表明什么意思。dom
$ sudo docker run --detach \
--hostname gitlab.example.com \ # 设置主机名或域名
--publish 443:443 --publish 80:80 --publish 22:22 \ # 本地端口的映射
--name gitlab \ # gitlab-ce 的镜像运行成为一个容器,这里是对容器的命名
--restart always \ # 设置重启方式,always 表明一直开启,服务器开机后也会自动开启的
--volume /srv/gitlab/config:/etc/gitlab \ # 将 gitlab 的配置文件目录映射到 /srv/gitlab/config 目录中
--volume /srv/gitlab/logs:/var/log/gitlab \ # 将 gitlab 的log文件目录映射到 /srv/gitlab/logs 目录中
--volume /srv/gitlab/data:/var/opt/gitlab \ # 将 gitlab 的数据文件目录映射到 /srv/gitlab/data 目录中
gitlab/gitlab-ce:latest # 须要运行的镜像
复制代码
运行成功以后,可使用下面的命令列表全部的容器,固然其中应该包括刚运行的 gitlab
容器。
$ sudo docker container ls
复制代码
如上图所示,能够看到 GitLab
已经在运行了,其余有一个属性 STATUS
为 health: starting
,说明 gitlab 的服务正在启动中,尚未启动完毕。等这个状态变成 healthy
时则说明已经部署完成,能够访问了。使用 ip addr
命令查看系统的 IP 地址,而后在浏览器输入地址便可访问。
想要让 GitLab 给你发送邮件,还要配置一下邮件服务器,这里以QQ邮箱的 IMAP/SMTP服务 来配置。
打开邮箱->设置->帐户,而后开启 IMAP/SMTP服务,而后根据文档获取 受权码 ,这步比较重要。
而后打开在系统中打开文件 /srv/gitlab/config/gitlab.rb
文件,可使用gedit
、vi
、vim
等等编辑器编辑。找到 Email Settings
的注释位置,而后添加如下内容:
### Email Settings
gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465 # 端口不能够选择587,测试过会发送邮件失败
gitlab_rails['smtp_user_name'] = "212****71@qq.com" # * 你的邮箱帐号,也能够是ge**lin@qq.com等
gitlab_rails['smtp_password'] = "cdns********fdgc" # * 受权码,不是密码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '212****71@qq.com' # * 发件人信息,必须跟‘smtp_user_name’保持一致,不然报错
gitlab_rails['smtp_domain'] = "qq.com" # 修改并不影响 可修改成exmail.qq.com/james.com 经测试彻底不影响,删除也不影响,而且发送的邮件都是同样的。
复制代码
上面这些参数,除了注释开头加了 *
的须要修改成你本身的信息以外,其余信息照写便可,配置完成后保存。而后输入下面的命令使配置生效。
# 使用 Docker安装的 gitlab 只能使用下面的命令,gitlab-ctl reconfigure命令是不会生效的
$ sudo docker exec gitlab gitlab-ctl reconfigure
复制代码
使配置生效以后咱们可使用 gitlab 自带的工具进行一下测试。依次执行下面的命令:
# 开启 gitlab 的 bash 工具
$ sudo docker exec -it gitlab bash
# 开启 gitlab-rails 工具
$ gitlab-rails console production
# 发送邮件进行测试,换本身邮箱哈~
Notify.test_email('gekylin@gmail.com', 'Message Subject', 'Message Body').deliver_now
复制代码
测试完成以后重启 gitlab 便可。
在以前第一次运行 gitlab 容器的时候,有一个参数 hostname
为 gitlab.example.com
, 若是你没有配置相应域名的话,你的仓库的地址将会变为下面这样:
若是域名不存在的话,这个地址是没法进行 clone
的。
为了解决这个问题,咱们能够设置成 IP 或 你配置了的域名来访问。
打开文件 /srv/gitlab/config/gitlab.rb
文件并找到 # external_url 'GENERATED_EXTERNAL_URL'
这行,去掉注释,并按照下面的格式修改。
# ip 形式
external_url 'http://192.168.1.44'
# 域名形式
external_url 'http://JemGeek.com'
# 子域名
external_url 'http://gitlab.JemGeek.com'
# 其余形式
external_url 'http://JemGeek.com/gitlab'
复制代码
以上形式都是能够的。修改完成后,输入命令 sudo docker exec gitlab gitlab-ctl reconfigure
使配置生效,而后重启 gitlab 便可。
重启以后,仓库的地址将变为下面这样,以 ip 形式为例:
在 Docker 中,gitlab 是做为一个容器存在的,gitlab 的全部程序,配置,依赖等都在这个容器中。下面列出一些容器的经常使用操做命令。
# 开启 gitlab 容器
# 上面那个特别长的那一条命令仅在第一次运行 gitlab 的时候须要
# 以后开启 gitlab 使用下面的命令便可
$ sudo docker start gitlab
# 关闭 gitlab
$ sudo docker stop gitlab
# 重启 gitlab
$ sudo docker restart gitlab
复制代码
关于Docker
及 GitLab
的知识还有不少,我会在后续的文章继续介绍,欢迎您持续关注本博客。
更多技术文章欢迎关注个人博客主页:JemGeek.com