GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

系统要求

系统:centos7 x86_64 (必须要64位系统,32位系统不能安装gitlab)

内存:4G

硬盘:10G就差不多了,没有要求

Gitlab下载

官网:https://about.gitlab.com/installation/#centos-7

由于官网很慢,故用国内的镜像源:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

目前rpm包最新版本:gitlab-ce-10.5.1-ce.0.el7.x86_64.rpm

安装

官方说明:

1. Install and configure the necessary dependencies

On CentOS 7 (and RedHat/Oracle/Scientific Linux 7), the commands below will also open HTTP and SSH access in the system firewall.

sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

Next, install Postfix to send notification emails. If you want to use another solution to send emails please skip this step and configure an external SMTP server after GitLab has been installed.

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

During Postfix installation a configuration screen may appear. Select ‘Internet Site’ and press enter. Use your server’s external DNS for ‘mail name’ and press enter. If additional screens appear, continue to press enter to accept the defaults.

2. Add the GitLab package repository and install the package

在线安装

Add the GitLab package repository.

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

Next, install the GitLab package. Change http://gitlab.example.com to the URL at which you want to access your GitLab instance. Installation will automatically configure and start GitLab at that URL. HTTPS requires additional configuration after installation.

sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ee
离线rpm包安装

由于在线安装很慢,故使用上面下载的rpm包安装

rpm -ivh gitlab-ce-10.5.1-ce.0.el7.x86_64.rpm

3.Configure and start GitLab

sudo gitlab-ctl reconfigure

4.Browse to the hostname and login

On your first visit, you’ll be redirected to a password reset screen to provide the password for the initial administrator account. Enter your desired password and you’ll be redirected back to the login screen. The default account’s username is root. Provide the password you created earlier and login. After login you can change the username if you wish. For configuration and troubleshooting options please see the Omnibus GitLab documentation If you are located in China, try using https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/

问题

出现页面502

原因:由于unicorn默认使用的是8080端口,可能有其他程序占用了8080端口。

解决办法:打开/etc/gitlab/gitlab.rb,打开# unicorn[‘port’] = 8080 的注释,将8080修改为9090,保存后运行

sudo gitlab-ctl reconfigure

修改默认80端口

vim /etc/gitlab/gitlab.rb

修改external_url ‘http://localhost:8888’ 保存退出。 刷新配置:

sudo gitlab-ctl reconfigure

如果端口修改后无法访问,请检查防火墙是否关闭。

另附gitlab重启命令(可以不执行)。

sudo gitlab-ctl restart

配置邮件发送

官方说明:https://docs.gitlab.com/omnibus/settings/smtp.html

修改gitlab.rb

sudo vi /etc/gitlab/gitlab.rb

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.server"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "smtp user"
gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

# 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'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'

SMTP without SSL

gitlab_rails['smtp_enable'] = true;
gitlab_rails['smtp_address'] = 'localhost';
gitlab_rails['smtp_port'] = 25;
gitlab_rails['smtp_domain'] = 'localhost';
gitlab_rails['smtp_tls'] = false;
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_ssl'] = false
gitlab_rails['smtp_force_ssl'] = false

修改完,重新配置

sudo gitlab-ctl reconfigure

查看日志 sudo gitlab-ctl tail

日志查看

unicorn日志查看:gitlab-ctl tail unicorn

gitlab日志查看:gitlab-ctl tail

gitlab汉化

停止gitlab

gitlab-ctl stop

查看版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION  
10.5.1
 
yum -y install git  

克隆获取汉化版本库

git clone https://gitlab.com/xhang/gitlab.git

查看该汉化补丁的版本

cat gitlab/VERSION  
10.5.1  

打汉化补丁

cd /root/gitlab/  
git diff v10.5.1 v10.5.1-zh >/tmp/10.5.1-zh.diff  

yum install patch -y  
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.5.1-zh.diff  

启动gitlab

gitlab-ctl start

重新配置gitlab

gitlab-ctl reconfigure

git仓库迁移

使用git push –mirror命令迁移仓库而不丢失log

先了解一些git的基本参数介绍 git clone –bare

GIT-CLONE(1)                      Git Manual                      GIT-CLONE(1)

NAME
       git-clone - Clone a repository into a new directory

SYNOPSIS
       git clone [--template=<template_directory>]
                 [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
                 [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
                 [--depth <depth>] [--recursive] [--] <repository> [<directory>]
        --bare
            Make a bare GIT repository. That is, instead of creating <directory> and placing the administrative files
           in <directory>/.git, make the <directory> itself the $GIT_DIR. This obviously implies the -n because there
           is nowhere to check out the working tree. Also the branch heads at the remote are copied directly to
           corresponding local branch heads, without mapping them to refs/remotes/origin/. When this option is used,
           neither remote-tracking branches nor the related configuration variables are created.

git push –mirror

--mirror
           Instead of naming each ref to push, specifies that all refs under refs/ (which includes but is not limited
           to refs/heads/, refs/remotes/, and refs/tags/) be mirrored to the remote repository. Newly created local
           refs will be pushed to the remote end, locally updated refs will be force updated on the remote end, and
           deleted refs will be removed from the remote end. This is the default if the configuration option
           remote.<remote>.mirror is set.
  • 克隆代码库

git clone --bare git://192.168.10.XX/git_repo/project_name.git

  • 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe,亦或是本地的私有仓库,如192.168.20.XX
  su - git
  cd /path/to/path/
  mkdir new_project_name.git
  git init --bare new_project_name.git
  • 以镜像推送的方式上传代码到 GitCafe 服务器上。请确保已经添加了公钥到新的机器上。
cd project_name.git
git push --mirror git@192.168.20.XX/path/to/path/new_project_name.git
  • 删除本地代码
cd ..
rm -rf project_name.git
  • 到新服务器上找到 Clone 地址,直接Clone到本地就可以了。
git clone git@192.168.20.XX/path/to/path/new_project_name.git

这种方式可以保留原版本库中的所有内容。