最近有线上朋友私信问我怎么搭建个人博客,也有咨询我个人项目的代码是如何保管的,还有一个朋友问我买了服务器玩了一段时间,等新鲜感过了就不知道做什么了。
关于这些问题并没有一个标准答案,每个人都有自己的使用习惯,找到适合你的才是最好的。关于博客搭建及使用的工具或服务在我博客的关于页里已经写的比较详细了,如果有人想看具体步骤我可以专门写一篇详细的教程,本篇先来讲讲我的个人项目代码是如何保管的。
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