GitLab 配置腾讯企业邮箱

发布于:7/30/2019, 2:49:30 PM @孙博
技术分享 | GitLab
许可协议:署名-非商业性使用(by-nc)

受美国贸易战影响,GitHub限制了克里米亚、伊朗等多个国家和地区用户访问,对于程序员来说,自己的代码是非常宝贵的财富,肯定不允许轻易丢掉,为了防止未来 GitHub 再限制更多国家或地区的访问,我们只能寻找一些新的替代品。对于大陆来说,免费易用的码云(Gitee)就是一个很好的替代,虽然在世界范围内的知名度不如 GitHub,但借助开源中国的名号,在国内还是有着不小的影响力。

但也有部分程序员在这个时候,希望能够搭建一个自己的代码仓库站,无论发生什么状况,只要是自己管理的,就不会轻易被外界关闭,而这个时候,GitLab 就成了一个不错的选择。

与 GitHub 类似,GitLab 也有着极为丰富的站点管理功能,并且它还推出强大的社区版供所有用户免费使用以搭建大家自己的代码仓库,在Docker的加持下,整个搭建过程也非常容易。

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /var/gitlab/config:/etc/gitlab \
  --volume /var/gitlab/logs:/var/log/gitlab \
  --volume /var/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

只需要短短几行命令,就能自动启动运行属于自己的代码仓库应用。初次进入应用时,需要设置管理员密码。当前版本的GitLab,内置的管理员帐号为root,其内置邮箱为admin@expamle.com,如果设置完密码后不知道使用什么帐号登陆,可以尝试使用该帐户。

默认情况下,GitLab 是无法正常发送邮件通知的,因为我们并没有设置邮件服务器。对于个人开发者来说,一般不喜欢使用自己的邮箱作为服务帐号,这时选择一些免费的企业邮箱是个不错的选择,比如腾讯企业邮箱,我们可以根据指南,在容器内通过 vim /etc/gitlab/gitlab.rb 命令将邮件相关的配置设置为官方文档建议的那样:

# https://docs.gitlab.com/omnibus/settings/smtp.html#qq-exmail
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
gitlab_rails['smtp_domain'] = "exmail.qq.com"

结果坑爹的是居然无法正常发送?总是提示网络连接异常。经过百度,我找到了一些16年的博客,别人说腾讯官网介绍的465端口没法用,还是得用25端口。我心想,这已经2019年了,不至于还没改吧,但我仍然抱着试试看的心态试了一下,果然是可以用的,那官方文档不是扯淡么……

下面给出修改后的配置,仅供各位参考(也许某天腾讯修复了这个问题):

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
gitlab_rails['smtp_domain'] = "exmail.qq.com"

修改完配置后,重新加载配置的命令如下:

gitlab-ctl reconfigure

使用控制台测试邮件的指令如下:

gitlab-rails console
Notify.test_email('xxxx@xx.com', 'subject', 'body').deliver_now