搭建git服务器

简介:

我们都知道GitHub只有公开库是免费的,而私有仓库是需要花钱买的。所以我们可以想办法自己搭建一个私有的,仅自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下如何搭建命令行的git服务器。

我这里准备了两台机器做这个实验,一台作为服务器,一台作为客户端:

  • 服务器IP:192.168.77.134
  • 客户端IP:192.168.77.130

首先在服务器上安装git,命令如下:

yum -y install git

添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆,并且在该用户的家目录下创建authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥:

[root@localhost ~]# useradd -s /usr/bin/git-shell git
[root@localhost ~]# cd /home/git/
[root@localhost /home/git]# mkdir .ssh/
[root@localhost /home/git]# touch .ssh/authorized_keys
[root@localhost /home/git]# chmod 600 .ssh/authorized_keys
[root@localhost /home/git]# chown -R git:git .ssh
[root@localhost /home/git]# passwd git  # 设置一下git用户的密码
更改用户 git 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost /home/git]# 

然后把客户端上的公钥复制到服务器的authorized_keys文件中,如果没有密钥则使用ssh-keygen命令生成,过程我就不演示了。

接着到客户端上使用ssh连接git用户,输出结果如下代表没问题,因为我们设置了不让git用户远程登陆:

[root@localhost ~]# ssh git@192.168.77.134
Enter passphrase for key '/root/.ssh/id_rsa':  # 客户端上的私钥文件所在路径吗,默认是/root/.ssh/id_rsa
git@192.168.77.134's password:   # 服务端上的git用户的密码
Last failed login: Tue Jan 16 22:30:40 CST 2018 from 192.168.77.130 on ssh:notty
There were 7 failed login attempts since the last successful login.
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.77.134 closed.
[root@localhost ~]#

完成以上操作后,在服务端创建git仓库的目录:

[root@localhost ~]# mkdir /data/gitroot
[root@localhost ~]# cd /data/gitroot
[root@localhost /data/gitroot]#

在该目录下创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾:

[root@localhost /data/gitroot]# git init --bare sample.git
初始化空的 Git 版本库于 /data/gitroot/sample.git/
[root@localhost /data/gitroot]# ls
sample.git
[root@localhost /data/gitroot]# chown -R git.git sample.git
[root@localhost /data/gitroot]# 

注意:以上是在git服务器上操作的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时的add、commit等命令都是在我们自己的pc上操作。

在客户端上克隆远程仓库:

[root@localhost ~]# git clone git@192.168.77.134:/data/gitroot/sample.git
正克隆到 'sample'...
Enter passphrase for key '/root/.ssh/id_rsa': 
git@192.168.77.134's password: 
warning: 您似乎克隆了一个空版本库。
[root@localhost ~]#

此时当前目录下就会生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程:

[root@localhost ~]# cd sample/
[root@localhost ~/sample]# ll -a
总用量 4
drwxr-xr-x   3 root root   17 1月  16 22:55 .
dr-xr-x---. 18 root root 4096 1月  16 22:55 ..
drwxr-xr-x   7 root root  111 1月  16 22:55 .git
[root@localhost ~/sample]# echo "This is test data" > test.txt
[root@localhost ~/sample]# git add test.txt
[root@localhost ~/sample]# git commit -m "add test.txt"
[master(根提交) e6e3dad] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
[root@localhost ~/sample]# git push origin master  # 因为是裸仓库,所以需要指定分支进行提交
Enter passphrase for key '/root/.ssh/id_rsa': 
git@192.168.77.134's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 220 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.77.134:/data/gitroot/sample.git
 * [new branch]      master -> master
[root@localhost ~/sample]#

然后到另一个目录下进行克隆,看看是否能从服务端上克隆刚刚提交上去的文件:

[root@localhost /tmp]# git clone git@192.168.77.134:/data/gitroot/sample.git
正克隆到 'sample'...
Enter passphrase for key '/root/.ssh/id_rsa': 
git@192.168.77.134's password: 
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
接收对象中: 100% (3/3), done.
[root@localhost /tmp]# cd sample/
[root@localhost /tmp/sample]# ll -a
总用量 8
drwxr-xr-x   3 root root   32 1月  16 23:03 .
drwxrwxrwt. 11 root root 4096 1月  16 23:03 ..
drwxr-xr-x   8 root root  152 1月  16 23:03 .git
-rw-r--r--   1 root root   18 1月  16 23:03 test.txt
[root@localhost /tmp/sample]# cat test.txt 
This is test data
[root@localhost /tmp/sample]#

如上,可以成功克隆则代表该git服务器已经能够正常提供服务了。


22.14/22.15 安装gitlab

gitlab官网:

https://about.gitlab.com/gitlab-com/

官方的安装文档:

https://about.gitlab.com/installation/?version=ce#centos-7

注:官方说安装gitlab要求服务器内存最好不少于4g ( 我之前试了一下使用2g的机器去搭gitlab,卡顿挺明显的,所以最好还是使用4个g的内存 ) ,gitlab的社区版是免费的,企业版则是收费的。

由于官方提供的yum源是国外的,而且包的大小有几百M,所以下载会很慢,我这里使用的是国内的镜像源进行安装,编辑文件如下:

[root@localhost ~]# vim /etc/yum.repos.d/gitlab.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

然后就可以使用yum安装了:

[root@localhost ~]# yum install -y gitlab-ce

注:如果使用这种方式安装不成功的话,可以尝试其他的镜像源,还是不行的话,就按照官方文档进行安装,虽然会慢一点。

安装完后使用以下命令进行配置,这个过程可能需要花几分钟:

[root@localhost ~]# gitlab-ctl reconfigure
# 成功后末尾会输出如下信息
Running handlers:
Running handlers complete
Chef Client finished, 384/544 resources updated in 01 minutes 37 seconds
gitlab Reconfigured!
[root@localhost ~]# echo $?
0
[root@localhost ~]#

检查进程和端口:

[root@localhost ~]# ps aux |grep git  # 会输出很多信息
[root@localhost ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9100          0.0.0.0:*               LISTEN      6769/node_exporter  
tcp        0      0 127.0.0.1:9229          0.0.0.0:*               LISTEN      6730/gitlab-workhor 
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      6917/unicorn master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6761/nginx: master  
tcp        0      0 127.0.0.1:9168          0.0.0.0:*               LISTEN      6726/ruby           
tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      6812/sidekiq 5.0.4  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1168/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2320/master         
tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      6761/nginx: master  
tcp        0      0 127.0.0.1:9121          0.0.0.0:*               LISTEN      6806/redis_exporter 
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN      6789/prometheus     
tcp        0      0 127.0.0.1:9187          0.0.0.0:*               LISTEN      6775/postgres_expor 
tcp6       0      0 ::1:9168                :::*                    LISTEN      6726/ruby           
tcp6       0      0 :::22                   :::*                    LISTEN      1168/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2320/master         
[root@localhost ~]#

gitlab-ctl命令可以用于重启、启动、停止gitlab服务以及查看服务状态:

gitlab-ctl {stop | restart | star | status}

现在就可以在浏览器上访问gitlab了,如下可以看到第一步就是设置密码,设置的是root用户的密码:
搭建git服务器

设置完之后就可以使用root账户登录了:
搭建git服务器

登录后的界面:
搭建git服务器


22.16 简单使用gitlab

先来看看如何配置gitlab内置的nginx服务器,配置文件所在的路径如下:

[root@localhost ~]# ls /var/opt/gitlab/nginx/conf/
gitlab-http.conf  nginx.conf  nginx-status.conf
[root@localhost ~]#

域名和监听端口在gitlab-http.conf文件中配置,如果机器上只跑一个gitlab服务就不用配置保持默认即可。

在gitlab上新建一个用户组:
搭建git服务器
搭建git服务器

然后在当前这个组里新建一个项目:
搭建git服务器
搭建git服务器

点击右上角头像,在settings界面里,添加密钥认证:
搭建git服务器
搭建git服务器

gitlap的用户可以自己注册,也可以由管理员进行创建,以下演示由管理员来创建用户:
搭建git服务器
搭建git服务器
剩下的默认即可,然后点击页面下方的Create user按钮。

创建完成后,还可以点击Edit按钮编辑该用户,例如修改个密码什么的:
搭建git服务器
搭建git服务器

保存修改后,退出当前用户,看看是否可以登录新建的用户:
搭建git服务器
搭建git服务器

然后再重新登录即可,我这里是登录成功的:
搭建git服务器

点击Create a project可以创建一个新项目:
搭建git服务器

创建成功:
搭建git服务器

剩下的操作就和GitHub很像了,而且平时我们在这个服务端上也都只是创建或编辑组和用户,大部分的操作都是在pc完成的。

gitlab常用命令:

https://www.cnyunwei.cc/archives/1204


22.17 gitlab备份和恢复

gitlab自带了一个工具用于备份和恢复,命令如下:

[root@localhost ~]# gitlab-rake gitlab:backup:create
Dumping database ... 
Dumping PostgreSQL database gitlabhq_production ... [DONE]
done
Dumping repositories ...
 * example/exampleProject ... [SKIPPED]
 * example/exampleProject.wiki ...  [SKIPPED]
 * example-test/study ... [SKIPPED]
 * example-test/study.wiki ...  [SKIPPED]
done
Dumping uploads ... 
done
Dumping builds ... 
done
Dumping artifacts ... 
done
Dumping pages ... 
done
Dumping lfs objects ... 
done
Dumping container registry images ... 
[DISABLED]
Creating backup archive: 1516123939_2018_01_17_10.3.3_gitlab_backup.tar ... done  # 备份文件名
Uploading backup archive to remote storage  ... skipped
Deleting tmp directories ... done
done
done
done
done
done
done
done
Deleting old backups ... skipping
[root@localhost ~]# 

如果数据量大的话,需要蛮久的。这个操作会备份:组、用户、项目以及仓库文件等。

备份目录在/var/opt/gitlab/backups目录下:

[root@localhost ~]# ls /var/opt/gitlab/backups
1516123939_2018_01_17_10.3.3_gitlab_backup.tar
[root@localhost ~]#

备份文件名的前缀格式依次是:时间戳、日期、gitlab版本号

恢复数据需要停掉以下两个服务:

[root@localhost ~]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
[root@localhost ~]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
[root@localhost ~]#

停止这两个服务的目录是让gitlab停止数据的变更,以免出现数据不一致的问题。

恢复数据命令如下:

# BACKUP的值是备份文件的前缀
[root@localhost ~]# gitlab-rake gitlab:backup:restore BACKUP=1516123939_2018_01_17_10.3.3

恢复的过程中会询问是否继续什么的,输入yes即可。

恢复完之后记得要启动服务:

gitlab-ctl start

注意:恢复备份需要注意版本问题,如果当时备份的是旧版本的gitlab数据,而现在要恢复到新版本的gitlab上,是无法恢复的。只有版本一致才能进行恢复。



本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/2061710,如需转载请自行联系原作者

相关文章
|
27天前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
51 18
[Git] 深入理解 Git 的客户端与服务器角色
|
28天前
|
网络安全 Apache 开发工具
图解Git——服务器上的Git《Pro Git》
Git 远程仓库及通信协议简介:远程仓库为团队协作提供平台,支持共享代码。常见形式为裸仓库,仅保存 Git 元数据。Git 支持多种协议,包括本地协议(适合局域网)、HTTP/HTTPS(推荐智能 HTTP,安全易用)、SSH(企业内部协作首选)和 Git 协议(高效只读访问)。选择协议需根据协作需求、安全性和配置难度权衡。此外,搭建 Git 服务器涉及创建裸仓库、上传至服务器、初始化共享仓库等步骤。生成 SSH 公钥、配置服务器及使用 GitWeb 或 GitLab 等工具可进一步增强功能。第三方托管服务如 GitHub 提供便捷的托管选项,适合快速启动和开源项目。总结而言,自行运行服务器提
38 11
|
4月前
|
前端开发 开发工具 git
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
59 5
|
5月前
|
Linux 开发工具 数据安全/隐私保护
搭建 Git 私人服务器完整指南
本文详细介绍了如何从零开始搭建一个私人的 `Git` 服务器。首先,文章解释了 `Git` 的概念及其优势,并阐述了搭建私人 `Git` 服务器的重要性,包括数据隐私、定制化需求及成本效益。接着,文章分步骤指导读者完成服务器的准备工作,包括操作系统、硬件和网络要求。随后,详细介绍了在不同操作系统上安装 `Git` 的方法,并演示了如何创建 `git` 用户、部署仓库以及设置免密登录。此外,还提供了客户端连接远程仓库的具体步骤,包括 Linux 和 Windows 的操作方式。最后,文章探讨了迁移仓库的方法以及搭建 `Git` 服务器的一些进阶选项。
1049 0
搭建 Git 私人服务器完整指南
|
6月前
|
开发工具 git iOS开发
服务器配置Huggingface并git clone模型和文件
该博客提供了在服务器上配置Huggingface、安装必要的工具(如git-lfs和huggingface_hub库)、登录Huggingface以及使用git clone命令克隆模型和文件的详细步骤。
582 1
|
4天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
6天前
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
8天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
10天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
|
3天前
|
机器学习/深度学习 人工智能 程序员
阿里云出手DeepSeek拒绝服务器繁忙,程序员直呼:真香!
阿里云PAI平台支持一键部署DeepSeek-V3和DeepSeek-R1大模型,用户无需编写代码即可完成从训练到部署的全过程。通过PAI Model Gallery,开发者可轻松选择并部署所需模型版本,享受高效、便捷的AI开发体验。教程详细介绍了开通PAI、选择模型及一键部署的具体步骤,帮助用户快速上手。