Dodker 安装GitLab
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://km6colp9.mirror.aliyuncs.com"] } EOF
重载服务配置
sudo systemctl daemon-reload sudo systemctl restart docker
以上步骤可以做也可以不做
搜索GitLab镜像
$ docker search gitlab
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
gitlab/gitlab-ce GitLab Community Edition docker image based … 3377 [OK]
sameersbn/gitlab Dockerfile to build a GitLab image for the D… 1172 [OK]
gitlab/gitlab-runner GitLab CI Multi Runner used to fetch and run… 730 [OK]
gitlab/gitlab-ee GitLab Enterprise Edition docker image based… 272
twang2218/gitlab-ce-zh 汉化的 GitLab 社区版 Docker Image 247 [OK]
jangrewe/gitlab-ci-android GitLab CI image for building Android apps 58 [OK]
edbizarro/gitlab-ci-pipeline-php Docker images for build and test PHP applica… 37
ulm0/gitlab GitLab Docker image for ARM 36
gitlab/gitlab-runner-helper 34
klud/gitlab-runner GitLab Runner for ARM devices 27
...
拉取GitLab镜像
$ docker pull gitlab/gitlab-ce:latest
# 不指定tag默认拉去latest最新版本
创建docker映射目录
其他教程中都会有这一步,其实当docker run -v …挂载目录后会自动创建以下目录
$ mkdir -p /srv/docker/gitlab/config # 创建config目录
$ mkdir -p /srv/docker/gitlab/logs # 创建logs目录
$ mkdir -p /srv/docker/gitlab/data # 创建data目录
运行容器
$ docker run -d \
-p 8443:443 \
-p 8080:80 \
-p 8022:22 \
--name gitlab \
--restart always \
-v /srv/docker/gitlab/config:/etc/gitlab \ # /srv/...这个目录可以换成你本地较大磁盘空间的目录
-v /srv/docker/gitlab/logs:/var/log/gitlab \
-v /srv/docker/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
# -d:后台运行
# --restart: 设置重启方式,always 代表当docker服务重启后,或者gitlab意外停止时,自动重启
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
端口解释
8443:443
作者是个初学者,也没有搞明白这端口啥意思,查看大佬的博客后,大概可能也许是 “通过https端口创建ssh连接github服务器” 的功能
可以查看GitLab官方文档
8080:80
外部网页访问的端口,如 http://10.10.10.10:8080,就可以登录自己搭建的gitlab
8022:22
gitlab的ssh端口,git clone时需要改变参数,如 git clone ssh://git@10.10.10.10:8022/groups/project.git
获取邮箱授权码
在配置gitlab文件之前先获取发送邮件的邮箱授权码
这里拿QQ邮箱为例
- 进入 设置 > 账户,找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
- 开启 POP3/SMTP服务 就可以了,然后会出现一串授权码,复制下来
- 如果忘了,下面黄色提示框内还有 生成授权码 的按钮
修改gitlab映射文件配置
# 在容器外使用如下命令
$ vim /srv/docker/gitlab/gitlab.rb # 是以上映射的config目录
# 配置URL
external_url 'http://10.10.10.10' # 换成自己主机的ip
gitlab_rails['gitlab_ssh_host'] = '10.10.10.10' # 换成自己主机的ip
gitlab_rails['gitlab_shell_ssh_port'] = 8022 # ssh的端口
# 配置邮箱
gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
gitlab_rails['smtp_address'] = "smtp.qq.com" # 是哪个邮箱的服务,也可以用smtp.163.com
gitlab_rails['smtp_port'] = 465 # 以前用的25,但是会失败,使用默认的就好
gitlab_rails['smtp_user_name'] = "youremail@qq.com" # 自己的邮箱账号
gitlab_rails['smtp_password'] = "gobjzqpsyhbbbefa" # 上面申请的邮箱授权码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['gitlab_email_from'] = 'youremail@qq.com' # 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错
进入容器重置GitLab客户端
$ docker exec -it gitlab bash
$ gitlab-ctl reconfigure
$ gitlab-ctl restart
# 也可以在容器外使用如下命令
$ sudo docker exec gitlab gitlab-ctl reconfigure
$ sudo docker exec gitlab gitlab-ctl restart
测试邮件服务是否正常
$ docker exec -it gitlab bash
$ gitlab-rails console
$ Notify.test_email('接收方邮件地址','邮件标题','邮件内容').deliver_now
# 如:
# irb(main):001:0> Notify.test_email('123456789@qq.com','test_email','Hello GitLab!').deliver_now
# 123456789@qq.com邮箱收到邮件表示设置成功
登录管理员账号
进入自己的GitLab网址
第一次进入会让你设置root管理远账号的密码,但是作者没有遇到过
不要慌,先抽支烟压压惊
使用如下操作,重置root账号
$ docker exec -it gitlab bash
$ gitlab-rails console -e production # 注意需要加上 -e,好多教程都是没有的,可以查看GitLab官网
Loading production environment (Rails 4.2.10)
irb(main):001:0> user=User.where(id:1).first
=> #<User id:1 @root>
irb(main):003:0> user.password='9aa9871ouf906' # 密码自定义,要大于等于8位不然不会通过,会有错误提示,不信你可以试试
=> "9aa9871ouf906"
irb(main):004:0> user.password_confirmation='9aa9871ouf906'
=> "9aa9871ouf906"
irb(main):005:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 55d5938a-8506-49cc-be8c-6afd666c4efe) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
irb(main):006:0>
至此配置完成!
补充
管理容器及服务命令
$ docker start gitlab 启动命令
$ docker restart gitlab 重启命令
$ docker stop gitlab 停止命令
$ gitlab-ctl reconfigure # 重新应用gitlab的配置
$ gitlab-ctl restart # 重启gitlab服务
$ gitlab-ctl status # 查看gitlab运行状态
$ gitlab-ctl stop # 停止gitlab服务
$ gitlab-ctl tail # 查看gitlab运行日志
gitlab邮箱配置检查
# 检查 ActionMailer 的 delivery_method 参数是否是你设置的值
irb(main):001:0> ActionMailer::Base.delivery_method
=> :smtp
# 检查邮件的设置
irb(main):002:0> ActionMailer::Base.smtp_settings
=> {:address=>"smtp.exmail.qq.com", :port=>465, :user_name=>"yeguan@szhuizhong.cn", :password=>"********", :domain=>"exmail.qq.com", :authentication=>"login", :enable_starttls_auto=>true, :openssl_verify_mode=>"none", :tls=>true}
# 如果有异常之处,可以检查邮件服务对应的日志(例如 /var/log/mail.log)
gitlab各个邮箱设置的区别
primary email
用户注册时的邮箱,默认状况下,通知邮箱也是同一个。可以在个人信息中修改。
notification email
用来接收系统邮件,如果 test、merge、review 通知等,和 primary email 一致就行。
public email
用户展示出来的个人信息,GitLab 并不使用。
ssh key 邮箱
设置公钥的时候是用的这个邮箱。用户将公钥添加到 GitLab 之后,可以在这个公钥的主机上 push 和 pull 代码。用户的commit后,系统鉴别的头像和用户名都和ssh key中的邮箱没有关系。
克隆时IP地址显示为一串数字
原因可能是因为你配置ssh时地址没写对
gitlab_rails['gitlab_ssh_host'] = '10.10.10.10' gitlab_rails['gitlab_shell_ssh_port'] = 8022