前言
上周末公司说要搭建一个Gitlabe用来管理代码,于是自己就开始琢磨了,其中配置邮件这里踩了一个坑,被坑了两天时间,现把搭建过程记录下来。
注意事项:
1.注意你的服务器需要2G以上内存(博主用的虚拟机,当时设置1G的内存然后就访问的时候报个502...)
2.Centos的版本是6.5的,用7.0的小伙伴可能部分有些不一样。
第一种方法
先下载Gitlabe-----Gitlab地址
博主使用的是虚拟机安装所以有远程桌面,这一步可以跳过。
如果链接远程桌面时,提示"远程桌面连接无法验证您希望连接的计算机的身份"
解决方法:
1. 通过连接管理终端功能连接进入云服务器。
2. 点击任务栏powershell,然后输入命令gpedit.msc,输入完成后回车,回车后会显示本地组策略编辑器。
3. 依次找到【计算机配置】->【管理模板】->【windows组件】->【远程桌面服务】->【远程桌面会话主机】->【安全】->【远程(RDP)连接要求使用指定的安全层】
4. 双击【远程(RDP)连接要求使用指定的安全层
5. 修改为已启用,安全层选择 rdp,最后点击应用确认
将系统防火墙打开HTTP和SSH访问
sudo yum install openssh-server
sudo yum install postfix (看情况来,如果你想用163,qq之类的发邮件可以不用执行这句)
sudo lokkit -s http -s ssh
scp 待上传文件名 linux用户名@服务器IP:存放到服务器的哪个位置
比如:scp /Users/xxx/Downloads/gitlab-ce-10.0.0-ce.0.el6.x86_64.rpm root@10.10.10.70:/home/soft/
也可以用Cyberduck 工具来上传文件
cd 到上传的Gitlabe的目录下,执行命令
rpm -i gitlab-ce-10.0.0-ce.0.el6.x86_64.rpm
配置gitlab
sudo gitlab-ctl reconfigure
第二种方法
将系统防火墙打开HTTP和SSH访问
sudo yum install openssh-server
sudo yum install postfix (看情况来,如果你想用163,qq之类的发邮件可以不用执行这句)
sudo lokkit -s http -s ssh
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo yum install -y gitlab-ee
配置Gitlab
GitLab默认会占用80、8080和9090端口,如果你想安装Jenkins,会通到端口冲突,Jenkins默认也会使用8080端口,所以,这一步操作将会修改GitLab的默认端口为11000、11001和11002。
sudo vi /etc/gitlab/gitlab.rb
将:
external_url 'http://127.0.0.1'
修改为:
external_url 'http://<你的服务器地址或域名>:11000'
将:
unicorn['port'] = 8080
修改为:
unicorn['port'] = 11001
将:
prometheus['listen_address'] = 'localhost:9090'
修改为:
prometheus['listen_address'] = 'localhost:11002'
每次修改完时,记得要使用reconfigure命令重新配置
sudo gitlab-ctl reconfigure
PS:这里比较重要,如果你的Gitlab是搭建在Centos系统上的,需要开放上面的端口(因为Centos默认开放的端口只有22)
# 开放端口11000(记得还有11001和11002也要设置)
/sbin/iptables -I INPUT -p tcp --dport 11000 -j ACCEPT
# 将修改永久保存到防火墙中(不设置的话,下次重启上面的设置就会失效)
/etc/rc.d/init.d/iptables save
# 查看安装后的程序运行情况
sudo gitlab-ctl status
# 重启Gitlab服务
sudo gitlab-ctl restart
# 启动和关闭Gitlab
sudo gitlab-ctl start/stop
邮箱设置(下面这里需要注意的地方,就是要把#号去掉,默认有#这是被注释的)
PS :这里要说一个坑,就是在安装postfix
后,你再去设置其他的邮箱是没有效果的,博主也没有试过两者并存。所以你可以执行yum list | grep postfix
查看是否安装了postfix
,如果安装了,你可以执行yum remove postfix
进行删除
如果你在上面的设置中,选择了postfix
发邮件,那么设置方法如下:
执行vi /etc/gitlab/gitlab.rb
进入到配置文件,修改下面的参数
external_url 'http://<你的服务器地址或域名>:11000'
# gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com'
# gitlab_rails['time_zone'] = 'UTC'
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@http://<你的服务器地址或域名>'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
# gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
设置完成后,重配postfix
,执行sudo dpkg-reconfigure postfix
或者
sudo vi /etc/postfix/main.cf
执行gitlab-ctl tail
实时查看所有执行日志,当然你也可以进入/var/log/maillog
,查看log,想了解更多的postfix
设置的点这里
163邮箱设置
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxxx@163.com"
gitlab_rails['smtp_password'] = "这里填授权密码"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
user['git_user_email'] = "xxxx@163.com"
gitlab_rails['gitlab_email_from'] = "xxxx@163.com"
QQ企业邮箱设置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@域名.com"
gitlab_rails['smtp_password'] = "密码"
gitlab_rails['smtp_domain'] = "域名.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
user['git_user_email'] = "xxx@域名.com"
gitlab_rails['gitlab_email_from'] = "xxx@域名.com"
上面两个邮箱的设置,参数user['git_user_email']
与gitlab_rails['gitlab_email_from']
是手动添加上去的。在gitlab.rb
里也是有这两个参数的,只不过是被注释了。
测试邮箱
// 进入控制台
gitlab-rails console
// 发送测试邮件
Notify.test_email('收件人邮箱', '邮件标题', '邮件正文').deliver_now
更多的邮箱设置点这里
其他设置
批量添加用户,下面是批量添加的脚本,复制就可用,也可以从这里下载
private_token可以从root用户Settings-->Account查到。
#!/bin/bash
#批量创建gitlab用户
url_path="http://<地址>/api/v4/users"
private_token="private_token"
userinfo=''
if [[ $# > 0 ]]
then
echo "路径:$1"
userinfo=$1
else
echo "~~~~~~~~~~~~请输入添加用户文件的地址~~~~~~~~~~~~~~~"
read path
userinfo=$path
fi
while read line
do
password=`echo $line | awk '{print $1}'`
mail=`echo $line | awk '{print $2}'`
username=`echo $line | awk '{print $3}'`
name=`echo $line | awk '{print $4}'`
curl -d "password=$password&email=$mail&username=$username&name=$name&private_token=$private_token" "$url_path"
done <$userinfo
使用时,需要一个添加用户的text文件,格式如下:
12345678 test123@qq.com testname1 测试1
12345678 528634141@qq.com testname2 测试2
脚本使用,如下
sh /Users/xxx/Desktop/GitLabAddUser.sh
生成ssh
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
pbcopy < ~/.ssh/id_rsa.pub
安装过程中出现的问题:
1.在浏览器中访问GitLab出现502错误
原因:1.内存不足。2.修改了 gitlab.rb配置文件没有执行重新配置命令。
解决办法:1.检查系统的虚拟内存是否随机启动了,如果系统无虚拟内存,则增加虚拟内存,再重新启动系统。
2.使用sudo gitlab-ctl reconfigure重新配置。
2.80端口冲突
原因:Nginx默认使用了80端口。
解决办法:为了使Nginx与Apache能够共存,并且为了简化GitLab的URL地址,Nginx端口保持不变,修改Apache的端口为4040。这样就可以直接用使用ip访问Gitlab。而禅道则可以使用4040端口进行访问,像这样:xxx.xx.xxx.xx:4040/zentao。具体修改的地方在/etc/httpd/conf/httpd.conf这个文件中,找到Listen 80这一句并将之注释掉,在底下添加一句Listen 4040,保存后执行service httpd restart重启apache服务即可。
Listen 4040
3.GitLab头像无法正常显示
原因:gravatar被墙
解决办法:
编辑 /etc/gitlab/gitlab.rb
将
#gitlab_rails['gravatar_plain_url'] = 'http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon'
修改为:
gitlab_rails['gravatar_plain_url'] = 'http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon'
然后在命令行执行:
sudo gitlab-ctl reconfigure
sudo gitlab-rake cache:clear RAILS_ENV=production
4.EOFError: end of file reached
解决方法:
将
gitlab_rails['smtp_tls'] = false
修改为:
gitlab_rails['smtp_tls'] = true
其他问题
用户之前已经设置了其他的邮箱,修改邮箱后,发现原来的邮箱还是可以用的,你需要在Settings-->Emails
里删除原来的邮箱。
Ps:最后有什么不明白的,可以在下方评论或私信博主。
参考文章:
https://segmentfault.com/a/1190000002722631