Gitlab 使用入门

1.简介

Gitlab是一个基于Ruby on Rails的开源的版本管理系统,实现一个自托管的Git项目仓库,可以通过Web界面访问代码仓库。它和Github拥有类似的功能,上手比较容易。
Gitlab的使用要求用户掌握基础的Git技能。以下文档按用户角色(普通用户和管理员),分别介绍使用方法。

2.普通用户

通过Gitlab管理员给的网址访问。如果是 https,可能服务器的SSL证书没有认证,浏览器会提示不安全。请忽略,点击继续浏览网站。

2.1 创建账号与加入项目

一般地,由管理员分配账号。管理员会将你加入到指定的项目。创建账号后,会收到系统发送的邮件,按提示设置密码。(收到的邮件有可能存在垃圾箱中,注意查看。)

2.2 拉取和推送代码

2.2.1 通过 SSH 协议
推荐使用这种方式!
首先需要在本地机器中生成公私钥密钥对。确保系统已安装好Git客户端,在Git Bash(或命令行)中运行如下命令,几个回车之后即可
ssh-keygen -t rsa -C "your_email@example.com" -b 4096
参数说明:
-t 密钥类型
-C 备注,填自己的账号邮箱
-b 密钥长度
密钥对默认保存在用户主目录(或者Git安装目录下./homepath/)的.ssh/下,.ssh 目录是隐藏目录。默认的名称为id_rsa和id_rsa.pub,后者为公钥。(Windows系统的目录为C:\Users\Administrator\.ssh)。若没有找到,可在硬盘中,搜索id_rsa。
然后打开Gitlab网站,点击右上角头像,弹出下拉菜单,点设置(Settings),打开设置界面。再点击SSH Keys,可以看到如下界面
gitlab-ssh-settings.png
将上一步生成的公钥(id_rsa.pub),用文本编辑器打开,复制其中文本内容,粘贴到Key文本框,点击添加Key即可。

测试配置是否成功(其中 domain 是 Git 仓库的域名):

ssh -T git@domain

返回欢迎语,则表示配置成功,如:

Welcome to GitLab, Zhangsan!

总结下来,就是在本地生成公私钥对,将公钥复制到服务器。完成以上两步,即可通过SSH方式免密码访问代码仓库,包括pull和push。
注意,由于Gitlab系统的安全限制,不允许通过master分支推送代码,请在开发分支(develop)提交和推送代码。如果是对已有的代码创建一个仓库,可先将用户设置为 Master 级别,此时添加远程仓库不会被拒绝。将本地生成的仓库,推送到服务端后,再将用户的等级改回 developer。同时在网页上修改仓库的配置,Settings -> Repository -> Protected branch,新增一个保护配置,设置相应的用户等级。

2.2.2 通过 http 协议
这种方式,拉取与推送时,需要填写账号和密码。一般地Git客户端工具可以记住密码。
第一次使用,可能会提示,仓库地址不是一个有效的地址,详细信息是SSL certificate problem: Invalid。原因是https证书没有认证,可以在客户端取消安全验证。在Git Bash(或命令行)中执行以下命令:
git config --global http.sslVerify false

3.管理员

3.1 账号与权限

默认的管理员账号为root。

管理员主要是创建组(group)、创建项目、创建用户。
一个组是几个项目的集合,组内项目的URL会以组名作为命名空间。可以将已有的项目移到某个组。

组的可见级别分为3种:

gitlab-group-permissions.png

私有(Private):该组和组内项目,只有组内成员可见。
内部(Internal):该组和任何内部项目对所有登录用户可见。
公开(Public):该组和任何公开项目无需权限,完全可见。

项目的可见级别也分为3种:

gitlab-project-permissions.png

私有(Private):授权用户才能访问
内部(Internal):任何登录用户均可访问
公开(Public):完全公开,无需任何授权

用户对于项目或组的角色有5种,等级依次从低到高:
Guest - 游客,只能查看项目,不能pull或者下载代码及其它
Reporter - 报告者,只能pull或者下载代码,不能提交和推送代码及其它
Developer - 开发者,可以pull和push代码,不能添加新成员
Master - 管理者,可以添加新成员等管理性权限
Owner - 拥有者,几乎拥有全部权限
一般地,项目开发者,赋予Developer权限;项目管理者赋予Master权限。组的管理者赋予Owner权限。详细说明请参考文档:https://domain/help/user/permissions。(domain为Gitlab的域名或IP地址)

3.2 将已有的用户添加到某个组

打开组的Members列表,可以将用户添加到该组。打开项目的Members列表,可以将用户添加到该项目。

3.3 给用户重置密码

点击顶部工具栏,进入管理界面,点击用户(Users),可以查看到全部用户列表。然后点击相应用户行的编辑(Edit)按钮,进入用户编辑界面,可以设置新的密码。用户使用新的密码登录后,会要求重置密码。(一般让用户自动助找回密码,点击登录界面的“忘记你的密码?”链接,输入账号创建时的邮箱地址,提交后会收到重置密码的邮件,按提示操作即可。)

虚拟机搭建 Gitlab 服务器

1.部署过程

1.1方案

Gitlab是一款基于Ruby on Rails的开源的代码仓库管理程序,依赖的服务较多(如Nginx,Redis,PostgreSQL等),安装和配置非常麻烦。因此采用Bitnami提供的虚拟机镜像文件安装,该镜像文件包含了一个最小化的操作系统和完整配置好的全部程序,通过VMware或者VirtualBox运行即可。以下是简单的架构图,以及镜像安装方式的详细步骤。

virtualbox-gitlab.png

1.2 下载安装VirtualBox

下载地址:https://www.virtualbox.org/wiki/Downloads
选择相应操作系统的安装包。公司内网服务器是Windows Server 2016,下载Windows hosts版本的安装包。安装过程很简单,不详述。

1.3 下载Bitnami镜像文件

下载地址:https://bitnami.com/stack/gitlab/virtual-machine
该镜像包当前的版本是Gitlab Community Edition 9.4.4-0(64-bit),大约718M,.ova格式,支持VirtualBox和VMware等虚拟机软件。Bitnami的镜像文件更新较快,这点值得称赞。

1.4 导入镜像虚拟机

启动VirtualBox,点击菜单“管理”->“导入虚拟电脑”,选择刚刚下载的镜像文件。可以看到一个新虚拟机的配置,建议修改虚拟硬盘文件的路径,放到空间较大的盘(默认放在C盘)。启动这个虚拟机,就成功了!但这只是开始,请继续往下看。

1.5 账号

虚拟机的操作系统是Debian 8,默认的登录账号和密码都是bitnami(强烈建议修改默认密码),系统的root权限使用sudo获得。
部署好的Gitlab的访问地址是虚拟机的IP地址。启动虚拟机会看到提示说明,或者登录虚拟机后,通过命令ip addr查看IP地址。通过浏览器打开这个IP地址,即可使用Gitlab。管理员账号为root,默认密码为bitnami1。请务必修改该密码,确保安全。

1.6 配置邮件服务

Gitlab添加新账号、找回密码需要发送邮件。按如下配置好,才能正常使用。
修改配置文件 /etc/gitlab/gitlab.rb,将USERNAME和PASSWORD修改为能发送邮件的账号,修改相应的 SMTP 配置,下面以Gmail账号为例:

### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'USERNAME@gamil.com'
gitlab_rails['gitlab_email_display_name'] = 'admin' 

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "USERNAME@gmail.com"
gitlab_rails['smtp_password'] = "PASSWORD"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer' 

运行以下命令使修改生效:

sudo gitlab-ctl reconfigure

测试邮件服务是否生效(将下面红色部分的邮箱账号改为能收到邮件的账号):

gitlab-rails console
irb(main):003:0> Notify.test_email('test@qq.com', 'Message Subject', 'Message Body').deliver_now

1.7 开启SSH

Bitnami虚拟机的SSH默认未开启,而Git的SSH方式依赖于它。开启命令如下:
sudo rm -f /etc/ssh/sshd_not_to_be_run
sudo systemctl enable ssh
sudo systemctl start ssh

1.8 修改Gitlab的访问地址为域名

Gitlab默认的访问地址为虚拟机的IP地址,要改为域名访问,请运行如下命令,其中NAME是将要使用的域名,如code.xin3wei.com:
sudo /opt/bitnami/apps/gitlab/bnconfig --machine_hostname NAME
修改大约需要一分钟。
注意:修改成功后,务必重命名或者删除 /opt/bitnami/apps/gitlab/bnconfig 文件。避免重启虚拟机,导致修改失效。

2.注意事项

2.1 虚拟机的IP地址可能会变

当虚拟机或者宿主重启时,可能会分配到新的IP地址。当无法访问Gitlab时,可能是这个原因。可以在路由上配置固定的IP。

2.2 数据的安全

确保虚拟机硬盘文件(.vmdk格式)的安全,所有Gitlab的应用程序文件都存储在这个文件中,避免被误删。在VirtualBox的设置中,查看“存储”选项,可以看到该文件的在宿主机上的位置,注意保护好它。

2.3 Gitlab所依赖的服务

使用如下命令可以查看到Gitlab所依赖的全部服务

sudo /opt/bitnami/ctlscript.sh help

Logrotate - 日志截断工具
Nginx - Web服务器
PostgreSQL - 数据库
Redis - 缓存服务
Sidekiq - 基于Ruby的后台任务处理程序
Unicorn - Ruby Http Server

3.常见问题

3.1 如何从虚拟机界面呼出鼠标?

当点击虚拟机的窗口,鼠标将进入虚拟机系统,无法移动出来。使用键盘上右边的Ctrl键可以将鼠标呼出。

3.2 如何启动和停止虚拟机上的服务?

通过Bitnami的控制脚本来启动和停止相关服务:
/opt/bitnami/ctlscript.sh
不加任何服务名是启动所有的服务:
sudo /opt/bitnami/ctlscript.sh start
通过传递服务名来重启单个服务:
sudo /opt/bitnami/ctlscript.sh restart nginx

3.3 如何排错?

主要通过日志文件排查错误。当Gitlab使用过程中出现异常时,查看以下相关日志文件。
Gitlab日志:
/opt/gitlab/embedded/service/gitlab-rails/log/production.log
Sidekiq日志:
/var/log/gitlab/gitlab-rails/sidekiq.log
Gitlab-shell日志:
/var/log/gitlab/gitlab-shell/gitlab-shell.log
Nginx日志:
/var/log/gitlab/nginx/gitlab_error.log

4.参考资料

Bitnami Gitlab文档(英):https://docs.bitnami.com/virtual-machine/apps/gitlab/
Bitnami虚拟机常见问题(英):https://docs.bitnami.com/virtual-machine/faq/
如何升级Gitlab(英):https://docs.gitlab.com/omnibus/update/README.html

为什么要生活在大城市

  1. 资源多
    拥有丰富的教育、医疗、娱乐及体育资源。优质的教育、医疗都集中在北上广深几个大城市中。
  2. 见识多
    一线城市是科技、时尚、创意的潮头,比如iPhone、Tesla、名车、新款服饰、流行文化等。

小孩成长的环境自然就不一样了。
比如说在北京你能随时路过天安门,在深圳你能随时路过腾讯大厦。

  1. 周围人的素质高
    大城市的人们文化、文明程度高。比如小区的物业管理规范、对业主也很热情,路上汽车礼让行人,公交上给老人及有需要的人让座等等。

同样地,政府机构也更有效率、更透明、更公正。
少有流氓地痞、打架斗殴,人身安全更高一些。越富有的地区,治安环境更好。因为高档的区域,犯罪分子生存成本更高。

  1. 战争与自然灾害
    战争时期,大城市一般会被优先保护。

自然灾害时,优先保障大城市的物资供应。
当然得到消息的速度也会更快,不过现在互联网已经消除了这个时差。

安装FFmpeg

编译安装

0.环境

CentOS Linux release 7.3.1611 (Core)

1.下载安装文件,解压
下载地址 http://ffmpeg.org/download.html

wget http://ffmpeg.org/releases/ffmpeg-3.4.tar.bz2
tar -xvf ffmpeg-3.4.tar.bz2

2.安装

cd ffmpeg-3.4
./configure

此时可能报错:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled
build.

发现本机没有安装 yasm,那么安装它
yum install yasm

make

时间略长,需要好几分钟时间

make install

《零售的哲学》读书笔记

《零售的哲学》是 7-Eleven 便利店创始人铃木敏文自述的连锁便利店创业与经营的经验之谈。

这本书字数不多,读完让我印象最深刻的是。经营一家公司,必须找准消费者的需求,并且根据消费者的需求变化而改变经营策略,就像招商银行的广告“因你而变”一样。

“我做任何事情都不会半途而废,总是坚持以这样的性格全身心投入,竭尽全力地度过每一天。即使是被外界定论为‘不可能’的事,我也能不畏艰难、勇敢地发起挑战。”这是铃木敏文先生的优秀品质,贯穿于他的整个职业生涯。

人们总是希望市场上的竞争对手越少越好,然而没有竞争对手未必是好事。一旦没有了竞争对手,事业往往会止步不前。以零售行业为例,如果一家店铺的周围没有任何同业竞争者,那么顾客可能只是由于受到交通上的限制,无奈地进店消费,久而久之,店铺经营者将变得得过且过,产生麻痹懈怠的情绪,失去对产品和服务进行变革创新的动力。

密集选址和小额配送是 7-Eleven 便利店的两个重要策略。

密集选址有三大优点。一是在一定区域内提高了品牌效应。二是店与店之间的距离较短,能提升物流和配送的效率。三是广告和促销宣传更有成效。

日本第1号店铺开业后,出现了库存积压。当时是从批发商处大批量进货,直到货源不足时再进行下一轮采购。这样就导致了店铺不良库存越积越多,因此必须减少单次采购量。

铃木敏文强调,我们要盯住“客户”而不是竞争对手。在我们眼中,真正的竞争对手不是其它品牌的便利店,而是不断变化的“客户需求”。

为了提供更便捷的服务,7-Eleven 在便利店里引进了 ATM 机。为此费尽周折申请了银行业务许可证,开办了一家银行。实践表明,这是值得的,来店内取钱的顾客,一般都会顺带买点东西。

7-Eleven 非常注重产品的品质,他们认为,比起“价廉”,“物美”更重要。因此在 2007 年,创建自有品牌——7-Premium,研发了超过 1700 个食品种类的产品。一款新产品的问世,不仅需要得到产品研发负责人的同意,还必须通过包括铃木敏文先生在内的所有高层董事试吃,只有所有人都对味道满意,才能正式对外发售。

有天午饭时间,董事们在试吃公司的产品。其中既有最新研发的,也有已经上线、正在销售中的产品。铃木敏文先生在试吃炒饭时,感觉饭粒黏在了一起,口感不能让人满意。他立即要求全店当天就将炒饭下架。由于现有工厂不具备中式炒菜锅和烹饪技术,完全达不到制作炒饭所需要的高温。他要求负责人立即进行改良,在没有成功生产出地道的炒饭前不允许上架。经过一年零八个月的努力,负责人和厂商终于研发出了新设备,改进了烹饪方法,成功推出了“正宗炒饭”。而这一产品重新问世后也获得了顾客的热烈欢迎,长久以来都是大热产品。

现在社会变化太快,新旧事务更替越来越快。造成产品滞销、生意萧条的原因只有一个,即是现在的工作方法已经无法满足时代和消费者需求的变化。为了捕捉变化,铃木敏文先生数年来向员工和加盟成员强调:工作上应该遵循“假设-执行-验证”的步骤。

总结下来,7-Eleven 的成功可以归结为把握顾客的需求,始终如一地坚持品质。不过这个道理,好像大家都懂……