GitLab 分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,通常来讲我的开发者用社区版就足够了。nginx
首先须要先下载 GitLab CE 的镜像,使用下面的命令进行下载,由于文件较大,因此可能须要一点时间,耐心等待便可。
# 不加 tag 则默认为最新版本 latest $ docker pull gitlab/gitlab-ce
一般会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器以外, 便于往后升级, 所以请先准备这三个目录。
mkdir -p /srv/gitlab/config mkdir -p /srv/gitlab/logs mkdir -p /srv/gitlab/data
$ 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
说明:git
运行成功以后,能够使用下面的命令查看容器运行状态:web
$ docker ps
能够看到 GitLab 已经在运行了,有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,尚未启动完毕。等这个状态变成 healthy 时则说明已经部署完成,能够访问了。docker
gitlab启动成功后,浏览器访问http://ip:8880, 便可访问。为了使用域名访问,须要配置nginx:浏览器
upstream gitlab{ server 127.0.0.1:8880; } server { listen 80; server_name gitlab.example.com; access_log /var/log/nginx/gitlab.example.com-access.log; error_log /var/log/nginx/gitlab.example.com-error.log; location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://gitlab; } }
nginx重启配置生效后,浏览器访问http://gitlab.example.com 便可正常访问。bash
首次访问须要为root用户设置密码,设置完成后须要登陆,默认用户名为:root, 密码为刚刚设置的密码。服务器
想要让 GitLab 给你发送邮件,还要配置一下邮件服务器,这里以QQ邮箱的 IMAP/SMTP服务 来配置。dom
打开邮箱->设置->帐户,而后开启 IMAP/SMTP服务,而后根据文档获取 受权码 ,这步比较重要。ssh
而后跳转至挂载目录 /srv/gitlab/config/
编辑gitlab.rb
文件,找到 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'] = "test@qq.com" # 你的邮箱帐号 gitlab_rails['smtp_password'] = "1324dasd" # 受权码,不是密码 gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = 'test@qq.com' # 发件人信息,必须跟‘smtp_user_name’保持一致,不然报错 gitlab_rails['smtp_domain'] = "qq.com" # 修改并不影响
配置完成后保存,而后输入下面的命令使配置生效。
$ sudo docker exec gitlab gitlab-ctl reconfigure
使配置生效以后咱们能够使用 gitlab 自带的工具进行一下测试。依次执行下面的命令:
# 开启 gitlab 的 bash 工具 $ docker exec -it gitlab bash # 开启 gitlab-rails 工具 $ gitlab-rails console production # 发送邮件进行测试 Notify.test_email('test_001@123.com', 'Message Subject', 'Message Body').deliver_now
测试完成以后退出gitlab的bash工具,重启 gitlab 便可。
$ docker restart gitlab
在以前第一次运行 gitlab 容器的时候,有一个参数 hostname 为 gitlab.example.com , 若是配置了域名能够忽略这一步,若是你没有配置相应域名的话,你的仓库的地址将会变为下面这样:
ssh : git@gitlab.example.com:test/test.git http:gitlab.example.com/test/test.git
若是域名不存在的话,这个地址是没法进行 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'
以上形式都是能够的。修改完成后,输入命令:
$ docker exec gitlab gitlab-ctl reconfigure
使配置生效,而后重启 gitlab 便可。
参照官方的说明, 将原来的容器中止, 而后删除:
$ docker stop gitlab $ docker rm gitlab
而后从新拉一个新版本的镜像下来,
$ docker pull gitlab/gitlab-ce
使用原来的运行命令运行:
$ 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
GitLab 在初次运行的时候会自动升级, 为了预防万一, 仍是建议先备份一下 /srv/gitlab/
这个目录。
大版本升级(例如从 8.7.x 升级到 8.8.x)用上面的操做有可能会出现错误, 若是出现错误能够尝试登陆到容器内部, 依次执行下面的命令:
$ gitlab-ctl reconfigure $ gitlab-ctl restart