前言
作为大一的小朋友,虽然学的专业和CS有那么一点关系,但放到实习的工作当中,那是完全不够用了:(
在实习老师的指导和帮助下,在实习的头个礼拜,逐步接触了解了git——开源分布式版本控制系统。并在第二个礼拜,搭建了能被公司所使用的Gitlab服务器,还是很有成就感的。今天打算整理一下这段时间的所学,也希望对之后有类似想法的朋友有所帮助。
期间主要参考了以下文档,非常感谢:
链接:廖雪峰的官方网站
Mac下使用gitosis搭建git服务器
Mac 下配置 Git 服务器
服务器上的 Git - Gitosis
Mac搭建Git服务器(Git+Gitlite)
ubuntu搭建gitlab服务器
gitlab服务器邮箱配置
AD 域服务简介(一)- 基于 LDAP 的 AD 域服务器搭建及其使用
Gitlab 部署和AD对接
其实参考的文章远不止这些,再次向知识的传播者们表示感谢??
Part 1. 建设Gitlab服务器前的“弯路”——比较
刚接触git的人,接触的第一个git服务器应该是GitHub。
作为一个面向开源、私有软件项目的托管平台,GitHub其实蛮良心的。只要你不是什么企业公司的机密代码,没有私密需求,它是完全免费的。而且设置简单,几乎是一条龙服务,非常适合小伙伴们平时日常的活动。
但这里要注意的是,当你把代码上传到GitHub上去后,它是完全公开的,这也就意味着任何人都可以参与你的代码编辑。虽然GitHub也提供私人仓库,但考虑到其每月的金额,可以让不少中小公司的开发团队望而却步了。
(上图为2019/7/2 github官网查询的GitHub Enterprise服务价格,注意是per user,实际价格更高)
同时,其作为公共网站,怎么说呢,树大招风,总归觉得有安全隐患。之前某知名弹幕网站的网站源代码貌似就在上面被公布了,虽然不知道是怎么泄漏的。
总之,在我了解了git和GitHub的使用后,老师希望能搭建一个私人的git服务器,作为公司的代码编写协作平台。
Gitosis
首先尝试了gitosis,该工具是目前百度上,搜索“git”、“远程服务器”、“搭建”等相似关键词,出现最多的工具。通过对authorized_keys文件的编写,利用ssh密钥(可以理解为每台电脑的id),gitosis可以做到对特定库的权限管理。通过对网络上的多个教程的学习,以及相关资料的搜寻,成功在mac上建立了git的服务器端与客户端。我尝试的时候使用的是同一台电脑的两个不同账户,分别作为服务器端与客户端,并成功从服务器端克隆库至客户端。但也要指出的是,在此过程中,我遇到了无法将本地文件上传的问题。
但这都不重要,因为在这之后,我发现Gitosis在2016年就停止更新维护了…百度??:(
Gitolite
转投Gitolite。gitolite的优势很明显,根据网上所查询到的内容,gitolite不仅可以做到对库的权限管理,还可以对branch——分支,进行权限管理。其操作方法类似于之前对authorized_keys文件的管理。同理,我也尝试了建立以gitolite为权限管理基础的本地服务器。不过在我成功之前,老师又找到了一个名为Gitlab的神器,因而以Gitolite为基础的服务器并没有搭建成功,不过感觉方法和gitosis是类似的,有兴趣的朋友可以看看下面的链接。
小结
(weian1 https://www.jianshu.com/p/6d5530fc2890)
上面这份总结是我在看Gitolite搭建教程的时候,看到的,感觉总结得很好。我这里就不赘述啦!
Part 2. GitLab
终于到我们的主角了。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。(百度百科)
如果要简单理解的话,通过GitLab,你可以构建一个私人的GitHub网页,并且根据你的设置,赋予不同人登陆权限,开发权限。由于其网页简单易用,操作也很人性化,非常适合中小公司自己搭建使用。
其实gitlab的服务器搭建已经非常简化了,网上也有很多教程,这里就介绍下我自己一边看教程资料、一边搭建时候的经验。
操作系统:Ubuntu 18.04.1
注意:由于操作系统不同,操作系统版本不同,以及先前使用时已安装的模块不同,可能会出现命令找不到(command not found)的情况。此时可以按照提示进行安装,或者自行搜索下对应模块的安装方法资源。
首先登陆GitLab官网的下载界面:https://about.gitlab.com/install/
你会看到:
找到自己的操作系统,点进去后,会看到一些命令符,这里以Ubuntu为例。
在终端(Terminal)执行下列命令:
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
这里有用到一个邮箱发送的模块,虽然官方教程用的是postfix:
sudo apt-get install -y postfix
但实际上我用的是sendmail模块:
sudo apt-get install sendmail
安装完成后,执行:
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
最后执行:
sudo apt-get install gitlab-ce
可能会出现下载gitlab-ce特别慢的情况,可以考虑使用镜像,参考:清华大学开源软件镜像站
完成这些后,你就可以在浏览器上,通过计算机名,即在终端@后面那些字符,来访问你的服务器啦!进去以后,注册一个账号,便可使用。
邮箱设置
使用GitLab,有一个非常方便的地方在于,你可以通过邮件邀请他人,在你的服务器上创建账户,和你进行协同工作。但邮箱是需要自己设置的,而网上很多教程都是以qq邮箱为例。实际上,企业大都一般用的是O365服务,所以我也在网上搜寻了一阵子,找到了集合。
首先需要了解下如何配置你的GitLab服务器
先来了解配置下超级用户(root):
sudo gitlab-rails console production
u=User.wher(id:1).first
(root用户是编号为1的账号,也就是超级管理员)
u.password='12345678'
u.password_confirmation='12345678'
(密码其实无所谓,你登录网页后也可以修改)
u.save!
如果你看到后面的true,就成功啦!
所以这个账户就是
用户名:root
密码:123456789
接下来是配置服务器
打开终端,输入:
sudo vim /etc/gitlab/gitlab.rb
通过这个指令,你会进入到gitlab服务器的配置文件内。
按i进入坦克,啊不,开始编辑
按esc退出编辑
在非编辑状态下,分别按“:”“w”“q”退出文件
在这里留一手gitlab.rb的原文件,防止各位修改后不知道原来长啥样。
gitlab.rb原文件
关于各种邮箱的配置,这里有个链接,整理得十分详尽?
gitlab服务器邮箱配置
但关于O365的配置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "partner.outlook.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "user.name@company.com"
gitlab_rails['smtp_password'] = "secret"
gitlab_rails['smtp_domain'] = "company.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
我在address处填写的并非"smtp.office365.com"
不知道有什么影响
完成后,退出文件,启动改动:
sudo gitlab-ctl reconfigure
(在每次对配置文件进行改动后,都要执行一下这个命令来使之生效)
来测试一下邮件
sudo gitlab-rails console
进入控制台
Notify.test_email('目标邮箱地址','标题','正文').deliver_now
目标邮箱查看一下,如果收到的话,恭喜!!
以及,如果不行,可能是防火墙的问题,可以自行搜索下防火墙端口的开关方法,这里提供开关的方法:
sudo ufw enable
(开启防火墙)
sudo ufw disable
(关闭防火墙)
特定端口的开关也有相应命令
哦对了,在看文章的时候,也有文章提到阿里云的25端口是关着的,所以要换成别的端口
(注意,以上在配置文件中的改动,切记要删除每行字符串前的#,我因为忘记删除,浪费了不少时间在找问题上)
LDAP
在了解LDAP前,我先去了解了下AD,AD域
说实话,我现在还是不是很了解
稍微整理了下自己的笔记,大致如下:
AD(Active Directory)
LDAP(Light-weighted Data Access Protocol)
这两个都是用于身份验证。在以前,在一家公司里,你要访问公司的各个服务器,设备,需要准备不同账号密码,这就很不方便。但通过这两个工具,就可以使得不同服务器设备,使用同一个公司账号,就可以访问了。
(字丑见谅2333)
好,建立在公司已经有AD域和服务器的情况下
接下来就开始配置:
gitlab_rails['ldap_enabled'] = true
###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: '起个名字吧LDAP'
host: '你的服务器的IP地址'
port: 389
uid: 'sAMAccountName'
bind_dn: '根据相应目录列表,分级设置,例如:cn=张三(用户名),ou=倒垃圾组,dc=shanghai,dc=com'
password: '对应密码'
encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
verify_certificates: true
smartcard_auth: false
active_directory: true
allow_username_or_email_login: true
lowercase_usernames: false
block_auto_created_users: false
base: 'dc=shanghai,dc=com'
user_filter: ''
## EE only
group_base: ''
admin_group: ''
这里,"bind_dn="设置的是管理员是谁(大概,也可能是从谁那里获得账号密码)
‘base=’指的是你的用户资料库是哪些,哪些人or组被允许访问
别忘了在最后,把EOS的#去掉
OK,老样子,退出文件
sudo gitlab-ctl reconfigure
让我们来测试一下:
sudo gitlab-rake gitlab:ldap:check
如果成功的话,会显示出好多用户的资料。
总结
其实单纯搭建一个gitlab服务器并不是很难,但我觉得真正快乐、有意义的是这段过程。从git到GitHub,再到osis与olite,最后再到gitlab,以及之后的各种配置。
这样的学习过程,其实包含着很多分支。你会在这里或是那里,发现一个你从不知晓的知识技能,再稍微探究下,又发现其背后又是一片浩瀚。
写到这里,其实已经很累了OTZ
总之
相信过程,享受过程,求实创新