最近感受就是在不断的搭建/迁移版本服务器,而如今市面上关于版本服务器搭建的指南都流于表面,真正深刻骨骼的少之又少,每每以偏概全不少关键点并未说起。而版本服务器的搭建每每是一个初创型或中小型公司迫切须要解决的问题。nginx
目前市用户量和口碑较好的Git服务提供商,屈指可数。国外的话
GitHub
,BitBucket
都是不错的选择,但国际形势变幻莫测,须要随时备好*。国内的话Coding
用户体验就作的很不错,很切合码农们的审美, 开源中国的码云
**也有对应的代码托管服务,不过自从他们家Maven仓库镜像下架事件后已不推荐再用,不久后被阿里收购不是没有可能。git
各个版本管理软件各有优劣,大多数的企业和团队为了隐私性的须要,选择了目前市面上功能和体验都十分给力的Gitlab
做为非开源的代码管理平台。github
Gitlab目前有两种不一样的版本,社区/我的版和企业版
GitLab社区版是彻底免费的,不但能创建免费的私有仓库并且没有数量上限,参与人员也没有数量限制,还能设置成员的权限,甚至细致到具体某条分支的权限,以及强大的工做流等等。彻底知足咱们平常开发、投产所须要的版本控制功能。
Gitlab企业版支持LDAP架构和对应功能,以达到更高的处理性能和存储效率,并提供其余更多模块和服务支持web
参考连接:Gitlab社区版/企业版对比redis
目前来讲,Gitlab的发行版本并非支持全部Linux/Unix内核版本,如下几种可能仍是须要广大同窗们经过其开源源码进行编译安装 。sql
- Arch Linux
- Fedora
- FreeBSD
- Gentoo
- macOS
除此以外,存储/CPU/内存分别影响到Gitlab所能运行的效率和能支持到的性能指标,为了避免让开发童靴们在协做办公中怒砸键盘,官方给出的硬件建议能够结合公司和团队规模做为版本服务器硬件选型的重要参考。shell
按照CPU核心数量,官方建议大体有以下划分:数据库
- 单核: 能够支持100个左右的用户并发,可是可能会有些许卡顿,毕竟全部的先后台处理都须要这个苦逼的核心一人包办。
- 双核: 约500并发用户,这也是官方给出的建议最低配置
- 4核: 约2,000并发用户
- 8核/16核: 约5,000/10,000并发用户
- 32核/64核: 官方给出数据中,核心数和用户数基本成线性增加了,可是实际使用中,发现其对CPU和内存占用明显过大,能维持在官方1/10的性能指标已是不错的状况了,因此其应该存在必定的内存泄露
官方建议的内存是最好不要低于4G,否则每次push和commit都会让你痛不欲生。8G内存就能很稳的支持1,000个并发数,因此至少选择8G以上的内存来搭建你的版本服务器。centos
咱们以CentOs 7.4举例,CentOs 7.x在防火墙等一系列组件上的安装配置和6.x稍微差别,请灵活搬砖。总的来讲,彻底正确的把Gitlab弄起来,大概包含如下操做和模块支持,跳过其中某几步安装成功并不表明操做步骤就彻底正确;可是若是安装出现问题,能够回头详细来看看此处的描述,检查是否遗漏了某个基础模块/组件支持或者忘记了某些配置项。浏览器
- 基础操做系统(CentOs 7.4)和对应的包/依赖项
- Ruby
- Go
- 系统用户或分配用户(建议单独分配)
- 数据库(目前是postgresql)
- Redis
- Gitlab
- Web服务
- 防火墙安装、配置
GitLab官方提供了Omnibus安装包来安装,整合了大部分的套件(Nginx、ruby on rails、git、redis、postgresql等),让使用者不用额外安装这些软件,减轻了绝大部分安装量。
咱们通常采用这种方式来安装,但自动挡所带来的隐患和冲突也会较多。特别是若是以前的服务器原本就不单纯,单独安装了nginx、redis之类的组件,再经过这种模式安装会产生一系列的冲突和配置问题,好比反向代理配置异常、服务访问不到等等,这个咱们之后有时间再具体说。
参考连接:Gitlab Omnibus安装包
yum install curl openssh-server openssh-clients postfix > cronie service postfix start chkconfig postfix on
centos7使用systemctl命令
*下载并安装gitlab的yum源* curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash *自动安装最新版本* yum install gitlab-ce *安装指定版本* gitlab-ce-11.2.3-ce.0.el7.x86_64
固然,你也能够手动来安装Gitlab所须要的各种组件,结合其源码安装来达到一样的目的。固然,目前官方已经再也不建议使用这种模式安装,身为Geek能够尝试一番刷刷成就感。这一步骤比较繁琐复杂,稍有不慎就可能会烧脑。
若是你打算使用这样的方式来安装的话,你可能须要作好屡次失败重来的准备
参考连接:Gitlab源码编译安装
以上主要是详细描述了Gitlab从选型、安装都基本配置的过程,基本能知足一个项目团队协做平台的基础任务,如下为整理后的gitlab经常使用命令,能更有效的帮助运维人员来进行gitlab服务器的管理。
查看版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
实时查看日志
gitlab-ctl tail
数据库关系升级
gitlab-rake db:migrate
清理redis缓存
gitlab-rake cache:clear
升级GitLab-ce 版本
yum update gitlab-ce
升级PostgreSQL最新版本
gitlab-ctl pg-upgrade
启动/中止/重启全部 gitlab 组件:
gitlab-ctl start/stop/restart
启动指定模块组件:
gitlab-ctl start redis/postgresql/gitlab-workhorse/logrotate/nginx/sidekiq/unicorn
中止指定模块组件:
gitlab-ctl stop 模块名
查看服务状态
gitlab-ctl status
生成配置并启动服务
gitlab-ctl reconfigure
实时查看全部日志
gitlab-ctl tail
实时各个模块日志
gitlab-ctl tail redis/postgresql/gitlab-workhorse/logrotate/nginx/sidekiq/unicorn
不论是经过上述三种方式之中的哪一种安装,在Gitlab安装完成以后,咱们是能够直接经过gitlab-ctl
命令来启动gitlab服务的。
GitLab由主要由如下服务构成,他们共同承担了Gitlab的运做须要
nginx: 静态web服务器
gitlab-shell: 用于处理Git命令和修改authorized keys列表
gitlab-workhorse: 轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)
unicorn:HTTP服务,GitLab Rails应用是托管在这个服务器上面的。
若是不是经过纯手工的方式安装,通常来讲Gitlab的各个模块配置文件存放目录是固定的,手动编译安装出来的全部配置文件理论上会存放与手动置顶的编译安装目录。在平常的配置中,咱们能够经过修改如下配置文件之中的参数来调节Gitlab的功能
主配置文件: /etc/gitlab/gitlab.rb
文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
Nginx配置文件: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql数据目录: /var/opt/gitlab/postgresql/data
通常来讲咱们的常规配置均可以经过修改/etc/gitlab/gitlab.rb
这一配置文件来达到目的
咱们可使用默认的管理员root
来登陆控制台,管理员首次登陆时会要求咱们重置登陆密码。进入控制台以后,你能够从新修改密码。但这时你会发现GitLab管理员帐号,缺省邮箱admin@example.com
是个根本不存在的地址,因此没法经过邮箱重置密码。
这时,咱们能够经过Gitlab服务器控制台命令来从新设置管理员或指定帐户的登陆密码。
切换到root用户,执行
gitlab-rails console production
等待控制台执行完毕,刷出等待输入界面以后,执行
[root@mail .ssh]# gitlab-rails console production ------------------------------------------------------------------------------------- GitLab: 11.2.3 (06cbee3) GitLab Shell: 8.1.1 postgresql: 9.6.8 ------------------------------------------------------------------------------------- Loading production environment (Rails 4.2.10) irb(main):001:0> user = User.where(id: 1).first => #<User id:1 @root> irb(main):002:0> user.password = '88888888' => "88888888" irb(main):003:0> user.password_confirmation = '88888888' => "88888888" irb(main):004:0> user.save! Enqueued ActionMailer::DeliveryJob (Job ID: 56cdcd6c-0af6-43c5-9b04-642d7f94cd3d) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1 => true irb(main):005:0> exit
这样咱们就成功重置了管理员的登陆密码,不过请慎用哦!
在Gitlab启动以后,在不修改主配置的状况下,咱们能够经过访问http://ip
来经过浏览器访问Gitlab管理平台。通常来讲咱们直接经过这种方式已经能知足咱们平常的版本管理须要,并不须要强制绑定域名。
可是在使用中,若是咱们使用默认的配置来建立了一个项目,那么Gitlab会使用默认配置做为.git文件的版本地址,致使咱们经过客户端clone时没法访问到对应的域名和真实的IP地址。
如咱们暂时没有域名也不想解析,而单纯想使用服务器IP地址来做为git索引路径,那么咱们能够修改配置文件/etc/gitlab/gitlab.rb
之中的绑定域名
external_url '[http://gitlab.bjwf125.com'](http://gitlab.bjwf125.com')
这一行修改成服务器的对应IP地址(内网示例)
external_url 'http://192.168.1.10'
再从新加载配置文件
gitlab-ctl reconfigure
咱们就能够看到项目中的地址已经变成了IP地址的索引,而且能被咱们客户端正常访问了
若是你不想用Gitlab服务器自带的postfix服务来发邮件,能够改用SMTP服务。一样是修改/etc/gitlab/gitlab.rb
中的邮件服务配置,使用SMTP服务器来做为邮件通知的发送方
gitlab_rails['smtp_address'] = "smtp.yourdomain.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "xxx" gitlab_rails['smtp_password'] = "xxx" gitlab_rails['smtp_domain'] = "smtp.yourdomain.com" gitlab_rails['smtp_authentication'] = 'plain' gitlab_rails['smtp_enable_starttls_auto'] = true
Gitlab安装后,默认是使用HTTP方式访问,若咱们想使用更为安全的HTTPS方式,须要进行一些额外的设置
mkdir -p /etc/gitlab/ssl chmod 0700 /etc/gitlab/ssl
经过Sftp等方式上传证书gitlab.xxx.com.crt
,修改对应证书访问权限
chmod 600 /etc/gitlab/ssl/gitlab.xxx.com.crt
仍然是修改/etc/gitlab/gitlab.rb
主配置文件
external_url "[https://gitlab.bjwf125.com](https://gitlab.bjwf125.com)" nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.com.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.com.key"
经过修改主配置而且gitlab-ctl reconfigure
后,nginx服务的配置文件/var/opt/gitlab/nginx/conf/gitlab-http.conf
会被自动修改成
server { listen *:80; server_name gitlab.bjwf125.com; server_tokens off; ## Don't show the nginx version number, a security best practice return 301 [https://gitlab.xxx.com:443$request_uri](https://gitlab.bjwf125.com:443%24request_uri); access_log /var/log/gitlab/nginx/gitlab_access.log gitlab_access; error_log /var/log/gitlab/nginx/gitlab_error.log; }
已经支持了HTTPS的访问和解析
接下来,咱们须要开启服务器的443端口,以容许HTTPS访问。
centos 7.x
firewall-cmd --zone=public --add-port=443/tcp --permanent
至此,咱们的Gitlab已经支持了HTTPS方式的访问
gitLab备份的默认目录是/var/opt/gitlab/backups
,若想要主动执行备份操做,能够经过
gitlab-rake gitlab:backup:create
命令会在备份目录下建立一个以时间戳开头的xxxxxxxx_gitlab_backup.tar的压缩包,这个压缩包包括整个完整的gitlab。
若须要修改默认的备份目录,能够经过修改/etc/gitlab/gitlab.rb
主配置文件来设置
gitlab_rails['backup_path'] = '/data/backups'
指定恢复文件,gitlab会自动去查找备份目录。
指定文件名的格式相似:1535861590_2018_09_02_11.2.3,文件名后缀_gitlab_backup.tar不须要添加”
gitlab-rake gitlab:backup:restore BACKUP=1535861590_2018_09_02_11.2.3