gitlab服务器搭建邮件
1. 学习Linux难吗
Linux是学习曲线比较陡峭的学科,刚开始学习有些难度 ,入门后就相对比较轻松了。学习Linux大部分做的是运维工程师或者云计算工程师。
运维不仅仅是懂Linux就行,因为还有一大部分的Windows运维,最近看一个报道说,windows的服务器占了47.71%。嗯,向windows运维人员致敬。当然我们这篇文章不是说运维除了懂Linux,还要懂Windows,而是涉及运维的其他方方面面。
环境部署
一开始这个世界是开发的,然后才是运维的。
开发实现产品逻辑,将产品开发完成后,然后提交运维进行部署。此时允许就需要准备好部署环境,如部署在Linux服务器上,安装相应的软件,如Apache、Nginx、tomcat、JDK、php、Mysql等等。你不能只装了软件吧,还需要看看具体是哪个版本,java 7 和java 8 的差别还是有点的,php5和php7也有些语法不兼容。把软件都安装好了,就可以上线了?还是不行。还需要测试吧,那就还需要部署一套测试环境。有些时候,开发环境也是需要运维来部署的。
排错和调优
事情从来都没有一帆风顺的。
上线没多久,服务就502了,还不被老板骂死。尽管你有一肚子的委屈,我只是个运维,代码不是我写的,为什么要我来背这锅?!委屈归委屈,服务访问不了了,就是运维的事。尽快定位问题,解决问题才是王道。怎么来定位问题呢?最简单直接的办法就是看日志,看系统日志,看软件相关的日志,结合故障现象和经验,快速的进行定位和恢复。然后就是总结经验,吸取教训,写事故报告。OK,现在你知道,需要对系统环境需要进行一定的调优操作,不再做背锅侠。
相关技术: top, vmstat, iftop, awk, sed, sar, iostat, strace, ...
备份
做最好的计划,做最坏的打算。
前不久的gitlab删库事件的教训犹在眼前,丢失了几小时的数据,虽然大部分的备份策略都失效了,但还是挽救了几小时前的一个备份,才没有造成更大的数据丢失和公司损失。我们需要对设备进行备份冗余,需要对数据库进行备份及离线备份,需要对网站静态进行备份冗余,需要对机房进行备用,能做到双活,那是更好的啦。
相关技术: rsync, crontab, lvm快照, mysqlmp, extrabackup, 完全备份, 差异备份, 增量备份, 离线异地备份, ...
高可用和集群
没有永垂不朽,我们不能保证硬件24小时在线,但需要保障服务24小时在线。
出现故障后,如果做好高可用和冗余,故障自动切换,移除故障节点,那样也就保障了服务的实时在线。在老板和用户不知情的情况下,悄么的把故障处理好的,KPI算是保住了,奖金也许就会有的吧。
相关技术: F5, Nginx, LVS, HA-proxy, MHA, Zookeeper, 各种其他分布式集群方案, ...
监控告警
运维工程师的第一次解放运动。
时刻担心网站挂掉,一年365天、每周7天、每天24小时,时刻保持精神高度紧张,就算你是神仙都会撑不住的。我们需要一个机器来监督其他的机器工作,我们需要解放我们自己。当有故障发生的时候,通过短信、微信、钉钉、邮件等等通知对应的运维工程师来处理,甚至是自动切换或摘除故障节点,然后我们离线对故障节点进行问题排查。
相关技术:Zabbix, Nagios, Cacti, Prometheus, open-falcon, Ganglia, sar, ...
安全和审计
狂奔在互联网的康庄大道上,不过有些人是在裸奔。
不安全的网络环境和服务器配置,无异于在网络世界裸奔,任何人都可以窥探你的隐私。你的应用是否做了SQL防注入?你的防火墙是否开启?是否还在用root+密码的方式登录服务器?网站开启了https么?是否对系统操作进行审计?
相关技术: iptables, firewalld, waf, auditd, 各服务的正确配置, ...
自动化和DevOps
运维工程师的第二次解放运动。
偷懒是社会进步的第一动力。聪明的我们怎么会让自己一直在重复枯燥的事情上浪费时间,装系统、部署环境、发版本、批量操作,把这一切交给程序去实现吧,我们需要的是享受生活。
相关技术: shell, python, go, rundeck, ansible, saltstack, puppet, chef, cobbler, fabric, ...
虚拟化和云服务
正在发生的一场运维革命。
这场革命的发起人是买书的亚马逊,这家伙希望卖一切可以卖的东西,包括自己闲置的服务器资源。现在国内的阿里云和腾讯云也发展得如日中天,他们几乎提供了运维所需要的一切,甚至可以让一个公司不再需要运维的岗位。你需要服务器,只需要几秒钟,就可以创建一台。你需要数据库集群,只需要鼠标点击几下,就可以开通。
相关技术:docker, Moby, kubernetes, Xen, CoreOS, Hyper-V, KVM, ...
2. docker快速部署gitlab代码仓库
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用 Ruby语言 写成。后来,一部分用 Go语言 重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。
Git、Github、Gitlab的区别:
• Git
一种代码版本管理系统,可以理解为标准或者统称。
• Github
产品名称,基于git开发的代码管理系统,必须公开于互联网上的公共仓库,安全较低,私有项目需要另外付费。
• Gitlab
产品名称,基于git开发的私有代码管理系统,开源免费、可自行管理的私有仓库,安全较高。
• 其它Git
msysGit、 Gitee(码云)、Gitea、 Gogs、 GitBucket类似于Github、Gitlab
下面我们介绍如何用docker快速部署一套功能强大的gitlab-ce社区版代码仓库。
第一步、centos 7.6安装、配置IP、dns、网关等(略)
第二步、安装docker安装,参考作者前几天的文章《centos 7下安装docker》
https://www.toutiao.com/i6994343127452566054/
第三步、安装docker-compose,参考作者前几天的文章《使用docker-compose运行docker容器》
https://www.toutiao.com/i6994600889604440608/
第四步、下载gitlab-ce 13.12.10官方镜像
docker pull gitlab/gitlab-ce:13.12.10-ce.0
第五步、建立相关目录结构,配置目录权限
mkdir -p /data/gitlab/config
mkdir -p /data/gitlab/data
mkdir -p /data/gitlab/logs
第六步、建立docker-compose.yml
cd /data/gitlab && vi docker-compose.yml
docker-compose.yml具体配置和说明放本文章后面。
第七步、使用dc up -d起动容器
cd /data/gitlab && dc up -d
等待几分钟后服务初始化完成,使用宿主机IP在浏览器上进入gitlab,配置root管理员的密码。一套功能强大的gitlab代码仓库搭建完成,关于gitlab的具使用,后面会推出相关视频/文章说明。
附:docker-compose.yml
version: '3.6' #配置编排的版本
services:
gitlab:
image: gitlab/gitlab-ce:13.12.10-ce.0
TZ: 'Asia/Shanghai' #配置容器时区,不会有8小时差异
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.18.95.158' #服务器访问地址,也可以是域名
gitlab_rails['time_zone'] = 'Asia/Shanghai' #配置gitlab服务的时区
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" #管理员邮箱smtp地址
gitlab_rails['smtp_port'] = 465 #管理员邮箱服务器端口
gitlab_rails['smtp_user_name'] = "[email protected]" #管理员邮箱地址
gitlab_rails['smtp_password'] = "ZSfS11AssBXX" #管理员邮箱密码,配置后才可以给用户发邮件等信息
gitlab_rails['smtp_domain'] = "xxxxxx.com" #管理员邮箱域名
gitlab_rails['smtp_authentication'] = "login" #管理员邮箱的验证方式为login
gitlab_rails['smtp_enable_starttls_auto'] = true #使用安全加密方式登陆管理员邮箱
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]' #管理员邮箱账号
gitlab_rails['gitlab_shell_ssh_port'] = 22
ports: #放开gitlab 80端口,后面我们用80端口访问gitlab
- '80:80'
volumes: #挂载配置、数据持久化、日志目录
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
3. 如何在gitlab里面设置邮件提醒
安装环境:CentOS 6.5最小化安装
Gitlab 官方一键安装包
sudo yum install curl openssh-server postfix cronie
sudo service postfix start
sudo chkconfig postfix on
sudo lokkit -s http -s ssh
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce
sudo gitlab-ctl reconfigure
邮件配置
#创建配置文件gitlab.rb
mkdir /etc/gitlab/gitlab.rb
#公司用的是腾讯企业邮箱
vi /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_authentication'] = "plain"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "****"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_enable_starttls_auto'] = true
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
4. GitLab搭建个人(或公司)版本控制系统
说明:Git,Github,GitLab三者关系。
Git - 是一款自由和开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。(svn是集中化的版本控制系统)。
GitHub - 是一个面向开源及私有软件项目的托管平台(也就一个网站),提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等。它可以托管各种git库,并提供一个web界面。被戏称为“全世界最大的同性交流社区”。
GitLab - 基于Git的项目管理软件。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
当然啦国内开源中国出的“码云”,第一次听得人还以为是“马云”。我酱紫。它跟Github功能差不多,都能建立公有和私有的仓库。不过嘛感觉有点封闭,社区没有Github热闹。
有的人就说啦,我完全可以在Github或者GitLab上做远端代码仓库,为啥还要倒腾GitLab自建代码托管系统?就一个字: “代码安全性”(公司保密规定)。 对于公司来说,GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:
一、自建代码托管系统都需要做些什么工作?
1. 选择开源软件
Git 大家族的 GitLab ,它提供了完善的用户权限管理,除了涵盖 Git 所有的功能,同时又提供方便的后台管理。分别有CE(社区版)、EE(企业版)、OM(RPM 包完整版)三个版本,目前市面上开发者们的普遍选择是使用 CE 版的源码,成本较低且相对方便。
2. 硬件设施方面
如果是对于中小型企业来讲,自建机房一般成本较高,所以除非是大型集团企业。现在市面上存在太多的云服务器厂商,平均价格多在 5000元/年以上,都是不错的选择。
可能遇到的坑:
3.由于个人眼界以及信息不对称,目前大部分公司都是在公司局域网内自行用GitLab搭建代码托管系统。部署Gitlab 是对服务器有配置要求的建议是CPU两核,内存4G以上。个人经验,勿喷啦。
二、搭建过程(这里仅是作者接触的,其实还有很多更高级的盘法)
Gitlab的服务构成
1.搭建方法分为:传统方式安装GitLab和Docker安装(推荐)。
2.传统安装过程(平台使用centos7安装)
安装和配置必要的依赖项:
安装Postfix以发送通知邮件:
在安装Postfix期间,可能会出现配置屏幕。选择“Internet Site”并按enter键。使用您的服务器的外部DNS以“mail name”并按enter。如果出现额外的屏幕,继续按enter键接受默认值。
添加GitLab镜像源并安装gitlab服务器:
注意这里设置的端口不能被占用,默认是8080端口,如果8080已经使用,请自定义其它端口,并在防火墙设置开放相对应得端口。
重置并启动GitLab:
访问 GitLab页面:如果没有域名,直接输入服务器ip和指定端口进行访问
获取/修改超级管理员root的密码:
最后我们使用默认的账号:root 和刚刚设置好的密码12345678进行登录。
后面的步骤配置SSH key,git Bash的global config等初始化设置跟GitHub一样。可是还有一点就是“汉化”。(英文不好的小伙伴)但是有一定风险,后面我打开报502错误。有两种方法:用git比对出英文与中文的补丁,将英文打补丁。第二是直接下载中文版,替换英文。
3.Docker安装(推荐)
(1)配置docker镜像
直接从 docker hub 获取的话速度非常慢,所以需要配置一个镜像。我使用的是 cloud.io提供的加速器,速度很快。
(2)获取 GitLab 镜像
下载完成后,查看镜像列表
(3)启动容器
3个--publish指定容器与主机的端口映射,分别是 http、https、ssh
3个--volume指定数据卷的映射,分别是 gitlab 的 配置、日志、数据
(4)配置外部访问 URL
修改 gitlab 配置文件:
找到 external_url 这一项修改为自己服务器的访问地址:
保存后,重启容器
(5)访问
初次访问时,gitlab 要求我们重置管理员密码,修改完成后登录。默认用户root。
当然以上为个人实验,公司里面大部分为CTO等大佬已经搭建完毕,我们主要是折腾。
最后推荐个人用很顺手的工具: SourceTree (可视化界面的Git),当然啦要想成为大牛或者装13也好,还是从Git Bash里敲命令行。
5. 如何在win7上安装gitlab服务器
GitLab是由Ruby语言开发的基于Linux的Git服务器,是我见过的最强大的Git服务器。发现它之后,立即决定将Git服务器换成GitLab。
但安装好GitLab之后面临一个问题,如何将服务器上的git项目直接导入到GitLab,之前的Git服务器是由是git+apache搭建的(详见在Linux上用Apache搭建Git服务器)。
在网上发现了这篇文档——Import bare repositories into your GitLab instance,并按之进行了操作。
1)设置存放代码库的主目录
vi /etc/gitlab/gitlab.rb
比如这里设置为:git_data_dir "/gitlab/repos"
2)访问刚搭建的GitLab站点,创建一个group,比如cnblogs。
这时会在 /gitlab/repos 下创建 /gitlab/repos/repositories/cnblogs 文件夹。
然后在/gitlab/repos/repositories/创建一个文件夹,比如cnblogs
3)将现有的所有git项目文件复制到这个文件夹
cp -r /data/git/* /gitlab/repos/repositories/cnblogs
4)修改一下复制过来的文件夹的所有者:
chown -R git:git /gitlab/repos/repositories/cnblogs
5)运行GitLab导入命令
cd /var/opt/gitlab
gitlab-rake gitlab:import:repos
等了一段时间之后,显示done,却一个项目也没导入进来。
经研究发现,在导入时,GitLab只认文件夹名以.git结尾的项目。于是,将要导入的项目文件夹名称加上.git后缀,再次进行导入。
结果显示导入成功,比如:
Processing cnblogs/CNBlogsJob.git
* Created CNBlogsJob (cnblogs/CNBlogsJob.git)
Done!
可以是GitLab站点上却看不到已导入的项目。多次努力,也没能解决这个问题。
后来,实在没办法,改为手动导入,导入方法如下:
1)在GitLab站点上创建与要导入的项目同名的项目。
2)进入刚创建的项目文件夹
cd /gitlab/repos/repositories/cnblogs/项目名称.git
3)删除该文件下的所有文件
rm -rf *
4)将要导入的项目文件夹下的所有文件复制过来
cp -r /data/git/CNBlogsJob/* /gitlab/repos/repositories/cnblogs/CNBlogsJob.git
就这样将项目一个一个地导入进来。
5)导入完成后,修改一下导入的所有项目的文件所有者
chown -R git:git /gitlab/repos/repositories/cnblogs
如果不修改所有者,客户端无法进行git push。
就这样手动地完成了现有Git项目的导入。
备注:操作系统是CentOS 6.2,GitLab版本是7.8.4。
6. Python培训线上和线下的区别
一、可以利用自己的休息时间来听课,并且一般线上培训都是有录像的,错过也可以通过回放的方式再次观看
二、培训价格相对于线下的也是要便宜一些的,
缺点也是比较明显,学习的时间线会被拉得很长,对于想要靠Python技术找工作的小伙伴来说可能会无法接受,还有另外一点,就是线上培训的学生也是很多的,大家基本都是靠公屏打字进行交流,有时候你的问题会被老师认为没有价值或者是压根就没看到被忽略掉,并且自己学习的时候可能会觉得没有学习气氛,导致有的时候自己不太想学习。
那么线下Python培训呢,其实就是相对于线上培训的说法,也就是我们传统的学习方法,类似我们之前上学时候的模式,大家在一个教室里听老师的课程,好处就是大家在一起学习,并且由于大家都是来学习Python来找工作的,大家的学习气氛一般都会不错,可以让好多自制力不是太好的小伙伴沉下心来进行学习Python知识,并且有的小问题可以和同校之间相互套路,解决不掉,大家可以当堂就问老师,直接把问题解决,而不用让问题一直存在,一直拖着,可以做到让问题不过夜。唯一不好的点就是学费会相对于线上贵一点儿,毕竟要吃饭和住宿的花费,但是中公优就业IT培训提供免费食宿,并且可以让自己早点儿学完去找工作,能够进入Python相关工作继续进行学习,会让自己进步的更快。
所以说两种培训方式的优缺点都是十分明显的,大家想要学习Python就需要根据自身条件进行去选择。
7. 如何在gitlab里面设置邮件提醒
首先绑定你的邮箱,有一个设置是有关注或者信息时邮件通知你,勾上就可以了
8. 搭建GitLab服务器
GitLab是GitHub的免费私有库替代方案,并且安装与配置都很方便。
GitLab要求最少4GB内存,支持小团队使用没问题,实测2GB内存的VPS基本没法用,开swapfile也不行,动不动就60秒超时。因此4GB内存是必须的。
关于这一点,内存大户主要是Unicorn,基于ruby的http服务器。Unicorn会在启动后预先占用大部分内存,内存会随着使用逐渐增长,并且不会释放。根据GitLab和Unicorn的官方文档,这不是它们的锅,那么这个锅可能是ruby和rails了。解决方法是unicorn-work-kill,会根据请求次数和内存占用自动重启Unicorn。Omnibus版的GitLab是默认开启的。
GitLab分为社区版和企业版,在未付费的情况下,两者的功能是一样的。并且社区版整合了CI/CD,因此可以满足绝大部分的开发需求。
安装包主要包括Omnibus整合包,Docker、AWS等的云镜像,以及一些第三方维护的版本。其中Omnibus直接整合了所有服务端组件,适合自用和练手。
安装以Omnibus整合包为例,操作系统为Ubuntu16.04。
Gitlab需要 curl,openSSH 和 ca-certificates 这几个组件:
不过服务器系统一般自带,所以是可选的。
邮件服务,用于GitLab发送找回密码的邮件:
不过如果服务器没有域名的话,大部分邮箱会拒收邮件,而管理员帐号可以直接重置其他账号的密码,所以是可选的。
官方提供的脚本:
这个脚本会自动添加源到apt 的source list,以及安全key。另外,如果自己服务器在国内,脚本会自动添加清华的镜像,速度还行。
先更新apt缓存:
推荐使用 apt 而不是 apt-get ,前者大多数情况下更简单一点。
然后是安装:
其中 EXTERNAL_URL ,改成自己的域名。没有域名的话,可以直接设置成IP的形式: http://1.2.3.4 ,这个推测跟nginx服务以及GitLab中的项目地址有关,所以最好正确设置。当然也可以之后在配置文件里更改。
安装完成后,可以在配置文件中修改配置 /etc/gitlab/gitlab.rb 。
比如之前的 EXTERNAL_URL :
官方还有一个关于 unicorn 的优化建议:
默认值是2,如果服务器只用于GitLab的话,官方建议是CPU核心数加一,可以提高服务器的响应速度。不过如果内存只有4G,或者服务器同时承载其他服务,就不要改了,以免内存不足。另外,这个参数最小值是2,设为1,服务器可能会卡死。
配置完成后,刷新配置:
每次修改完 gitlab.rb ,都要刷新配置。
如果没有报错的话,GitLab就配置完毕并且正常运行了。接下来可以打开浏览器开始访问了。