自建Git服务器 - 创建属于你自己的代码仓库
最近有线上朋友私信问我怎么搭建个人博客,也有咨询我个人项目的代码是如何保管的,还有一个朋友问我买了服务器玩了一段时间,等新鲜感过了就不知道做什么了。
关于这些问题并没有一个标准答案,每个人都有自己的使用习惯,找到适合你的才是最好的。关于博客搭建及使用的工具或服务在我博客的关于页里已经写的比较详细了,如果有人想看具体步骤我可以专门写一篇详细的教程,本篇先来讲讲我的个人项目代码是如何保管的。
Git私服的选择
最开始托管代码我使用的是GitHub和Gitee,后面折腾久了我就开始自己搭建Git服务了(包括很多其他服务我也有自建),现在我绝大部分个人项目代码都放在我的Git私服里面(还有一小部分放在自建SVN中没有迁移过来)。
搭建Git私服的工具其实有很多,比较出名的有gitlab,它的优点是功能特别全,你用的你不用的它都有,但对机器要求也很高,2C4G起步,适合企业使用,我们公司也是用它来搭建内网Git服务的,但我并不推荐个人使用gitlab私服。
其次有Gogs和Gitea(本文教程),它们都属于轻量级的Git服务,对配置要求较低很适合个人使用,1C1G就能跑。
Gitea其实是Gogs的孪生兄弟,它是从Gogs源码的基础上开发的,且前期它们的功能也极为相似,官方介绍是Gitea是一个开源社区驱动的Gogs克隆。那为何会出两个功能如此类似的产品呢?我在网上找到的资料是这样的:
基本上就是有一部分开发者认为Gogs的开发者效率比较慢,而且不接受他人加入开发,所有修改和PR都需要经过他一个人的审核,这对Gogs的发展很不利。因而部分开发者决定基于Gogs重开一个项目,这就是Gitea,关于这件事我不予置评,但是开源社区不就是因为这样才充满活力与生机吗,百花齐放。
所以才有了现在的Gitea,从2016年11月Fork至今,它的功能相较于Gogs已经发生了很大的变化,我个人也比较喜欢Gitea这个更有活力的产品,所以我选择了它来管理我的代码。
安装Gitea有多种方式,以Linux为例,常见的有3种:
- Docker安装(强烈推荐)
- 二进制安装
- 源码编译安装
第三种源码安装的方式最繁琐,需要先安装Go语言环境,这里介绍前面两种安装方式。
首发地址:https://www.guitu18.com/post/2020/02/04/67.html
二进制安装
考虑到有些同学不熟悉Docker,这里先说第二种最简单的二进制安装。二进制安装需要Git支持。
安装Git:
yum install git -y
下载二进制文件并赋予执行权限:
# 创建工作目录
mkdir -p /usr/local/gitea && cd /usr/local/gitea
wget -O gitea https://dl.gitea.io/gitea/1.11.4/gitea-1.11.4-linux-amd64 && chmod +x gitea
运行Gitea:
./gitea web
运行成功界面如下,所有的运行数据都会生成在你的gitea二进制文件同级目录下:

默认运行的端口是3000,这样通过你的你的IP+端口就能访问你的Gitea服务了(记得放行3000端口或者关闭防火墙),要停止服务直接按 Ctrl + C 即可。若要后台运行,用下面的命令执行:
nohup ./gitea web > gitea.log 2>&1 &
在首页点击登录,会跳转到配置页面,请根据实际情况进行配置。
Docker方式安装(强烈推荐)
安装Docker:
yum install docker -y
略作等待后即可安装成功,启动docker服务:
systemctl start docker
执行 docker -v 查看docker版本,要看更详细的信息请执行docker info:
[root@localhost gitea]# docker -v
Docker version 1.13.1, build cccb291/1.13.1
为了更加愉快的使用Docker你可能还需要配置镜像加速,执行vim /etc/docker/daemon.json,修改为如下配置:
{
    "registry-mirrors":[
        "https://reg-mirror.qiniu.com/",
        "https://hub-mirror.c.163.com/"
    ]
}
重新加载配置及重启Docker服务:
systemctl daemon-reload
systemctl restart docker
拉取Gitea镜像
至此Docker安装完成,那么可以开始部署Gitea了,第一步,拉去Gitea镜像:
docker pull gitea/gitea:latest

拉取成功后,通过docker images看到已经有Gitea的镜像信息了:

运行Gitea容器
现在可以通过Gitea镜像运行Gitea容器了,命令如下:
# 创建挂载目录
mkdir -p /usr/local/gitea
# 运行容器
docker run -d --name=gitea -p 9020:22 -p 9000:3000 -v /usr/local/gitea:/data gitea/gitea:latest
命令参数说明(更加详细的说明请查看Docker篇):
-d:后台运行
--name:为启动的容器命名
-p:端口映射,前面的为宿主机端口,后面的为容器端口
-v:目录挂载,前面的为宿主机目录,后面的为容器内目录
这个命令是后台运行的,执行完成会输出一个容器ID,你可以执行docker ps -a来查看容器的运行状态:
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                          NAMES
82c6b17c5710        gitea/gitea:latest   "/usr/bin/entrypoi..."   4 minutes ago       Up 1 second         0.0.0.0:9020->22/tcp, 0.0.0.0:9000->3000/tcp   gitea
正常来讲都会运行成功,你可通过IP+端口访问你的Gitea服务了,但是如果你的gitea容器的STATUS不是Up状态,那么可能是启动遇到错误了。
报错处理
如果容器没有正常运行起来,比如下面这样:
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
4985556f611f        gitea/gitea:latest   "/usr/bin/entrypoi..."   22 seconds ago      Exited (0) 20 seconds ago                       gitea
那么你就需要检查原因了,你需要查看启动日志信息,咱们先删除这个启动失败的容器,执行命令:
# 4985556f611f 是你在`docker ps -a`命令看到的gitea的容器ID(CONTAINER ID)
docker rm 4985556f611f
再用下面的命令重新启动容器:
docker run -it --name=gitea -p 9020:22 -p 9000:3000 -v /usr/local/gitea:/data gitea/gitea:latest
把之前启动命令中的 -d 改为 -it ,这样你就能通过前台启动,从而看到报错信息了。
接着看,最常见的是你们很可能遇到这个错:mkdir: can't create directory '/data/gitea/': Permission denied ...

如果出现上述问题,那么你需要关闭SELINUX,方法如下:
- 临时关闭: - setenforce 0
- 永久关闭: - vim /etc/selinux/config,修改- SELINUX的值为- disabled然后重启机器即可,看图: 
启动完毕之后,访问服务器的9000端口就能看到页面了,点击登录开始配置。
配置Gitea
安装完成首次访问需要对Gitea进行配置,默认的参数都已经配好了的,如果使用SQLite3数据库,甚至什么都不用做,直接点击立即安装即可。这里简单做一下说明:
数据库配置

第一项是数据库配置,一般默认使用SQLite3数据库即可(因为无需额外安装),使用其他数据库你需要有相关环境支持。以MySQL数据库为例,需提前在MySQL创建好对应的数据库,关于MySQL的安装教程已经准备好了:Linux 系统 MySQL 源码安装学习记录:

站点信息配置
一般配置里,页面基本上都告诉你这些参数是干什么的,各种目录都会有默认值,不喜欢可以按照你的喜好修改。端口你也可以设置为你自己想要的,比如我修改成9000端口。
需要注意的一点是,如果你修改了默认的3000端口号,那么安装完后不会立即生效,新的端口在重启服务后生效,不重启你依然需要通过3000端口访问。重启服务器按Ctrl + C杀掉进程,重新执行./gitea web即可。

可选配置
可选配置里可以不用配置,这些都是可以后期在配置文件里进行修改的。
自用的话一般也不用配置电子邮箱,服务器和第三方服务设置使用默认的就好。
管理员这里如果不设置那么第一个注册的用户将成为管理员,这里我不配置直接点立即安装。

安装完成会跳转到登录页面,如果你修改了端口这时候是访问不到的,要么你继续用3000端口访问,要么重启服务以启用新的端口。点击注册,你将成为Gitea权限最高的管理员:

注册并登录上去开启你的Git私服之旅吧。关于Docker的更多使用教程请跳转:Docker 虚拟化管理:30 分钟教你学会用 Docker
自建Git服务器 - 创建属于你自己的代码仓库的更多相关文章
- git服务器创建,冲突解决,远程仓库获取指定文件
		1.git服务器创建 在公司多人协作开发的情况下,不能简单地使用github,因为github是互联网公开的,这种情况公司的代码的保密性就会丧失了.这种情况下,需要创建git服务器. 登录服务器,使用 ... 
- 自建git服务器搭建使用记录
		git在push的时候出现insufficient permission for adding an object错误 //解决方法,在git库的目录下 //明明一开始创建user的时候有执行这个命令 ... 
- 使用自建Git服务器管理私有项目  Centos 7.3 + Git 2.11.0 + gitosis (实测 笔记)
		环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso GIT服务器IP:192.168.1 ... 
- git使用命令行拉取远程代码仓库中的分支至本地
		1.本地创建文件夹用于存放拉取的代码 2.执行git init初始化文件夹 3.与远程代码仓库建立连接 git remote add origin git@github.com.wuylin/noth ... 
- Ubuntu下 git 服务器的搭建【转】
		转自:http://www.open-open.com/lib/view/open1391477731082.html 搭建git服务器的4个步骤 1 配置服务器前的准备工作 首先ubuntu系统 ... 
- debian下使用gitosis+gitweb搭建SSH认证的git服务器
		搭建完成Git服务器后,需要使用两台机器进行测试,一台机器作为服务器端server,一台服务器作为客户端client.整个系统,需要三个计算机账户,这里假设server端的账户名为git,client ... 
- 在Linux下搭建Git服务器的方法是什么样?
		第一步 安装git:可以通过命令的方式快速安装,不同的linux的安装方法可能不一样,我的是采用的yum方法.ubuntu可以用apt-get命令.sudo yum install git 第二步 添 ... 
- 教你搭建你自己的Git服务器
		http://lib.csdn.net/article/git/50086 导读 现在我们将要学习如何搭建 git 服务器,如何编写自定义的 Git 钩子来在特定的事件触发相应的动作(例如通知),或者 ... 
- CentOS上安装Git服务器
		1.安装Git 打开控制台,执行以下命令进行安装 $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel ... 
随机推荐
- 读者来信 | 如何判断HBase Major Compact是否执行完毕?(已解决)
			前言:之前有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的:于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定为:<读者来信>.欢迎关注本人微信公众号<HBa ... 
- js 中对于this 的理解的 经典案例
			function Foo(){ getName = function(){console.log(1);}; return this; }Foo.getName = function(){consol ... 
- 【WPF学习】第六十六章 支持可视化状态
			上一章介绍的ColorPicker控件,是控件设计的最好示例.因为其行为和可视化外观是精心分离的,所以其他设计人员可开发动态改变其外观的新模板. ColorPicker控件如此简单的一个原因是不涉及状 ... 
- Java对字母大小写转换
			Java对字母大小写转换 1.小写——大写String aa = "abc".toUpperCase(); 2.大写——小写 String bb = "ABC" ... 
- node.js代码二
			var express = require('express'); var app = express(); var server = require('http').Server(app); var ... 
- python学习 0 python简介
			一.Python简介 python是一门简单易学又功能强大的编程语言.它具有高效的高级数据结构和简单而有效的面向对象编程的特性.python优雅的语法和动态类型.以及其解释性的性质,使它在许多领域和大 ... 
- Flask入门 之 endpoint
			首先,要纠正两个错误! 1.flask是通过endpoint找到viewfunction(视图函数的),并不是通过路由直接找到viewfunction的. 2.是url_for(endpoint)而不 ... 
- AJ学IOS(53)多线程网络之NSOperation简介
			AJ分享,必须精品 一:简单介绍 1:NSOperation的作⽤使用步骤: 配合使用NSOperation和NSOperationQueue也能实现多线程编程. NSOperation和NSOper ... 
- AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他
			AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ... 
- AJ学IOS(30)UI之Quartz2D画图片画文字
			回头看了看自己写的博客,AJ决定以后更改风格 本意是想大家看效果直接拷贝代码能用,注释齐全也方便学习,但是发现这样对新手学习特别困难 以后风格基本是–>看标题–>看目录–>看图片–& ... 
