前言
作为开发人员使用Git进行版本管理是必不可少的一部分,但似乎从去年开始,最大的代码仓库GitHub在大陆经常无法访问,又或者经常超时。但是国内哪些Git仓库站点如Gitee、coding等似乎对个人用户不太友好,至少我是用不习惯Gitee的。于是我有自建Git仓库的想法,但目前看来网上最流行的自建git无非就是GitLab,而GitLab对服务器的性能要求极高。作为个人开发者,一般情况下大多数人的选择是1c2g的服务器,很显然这个配置无法带动GitLab。 我发现了一款优秀的Git托管程序Gitea,它是基于Gogs衍生而来的,且使用Golang作为开发语言。在安装非常便捷,同时功能也够个人开发者使用,还能结合Drone实现CICD。
服务器准备
这里我使用一台全新的腾讯云轻量云服务器基于Docker安装。你需要登录腾讯云平台,进入轻量应用服务器控制台如下图。找到你的服务器,在更多菜单下选择重装系统(如果你不是新服务器,又或者服务器已经有数据了,请不要随意重装,请手动安装Docker)。
在接下来的操作中选择Docker基础镜像下的CentOS7.6-Docker20然后点击确定,当然你也可以按照你自己的喜好选择其他的发行版。你也选择系统镜像,然后手动安装docker。
此时带有Docker的Centos系统已经安装完成,但是目前我们是不知道密码的,你可以点击下图中的重置密码按钮来设置密码,然后使用ssh工具如xshell、finalshell等链接你的服务器来进行接下来的操作。
也可以直接使用顶部的登录按钮直接登录。我暂且就使用上面这个按钮登录方便一点。登录成功以后使用docker -v
命令查看Docker是否安装成功。同时使用命令docker-compose -v
检查下是否安装了docker-compose,如图所示我们的服务器上已经安装有Docker了,接下来就可以进行下一步操作了。
接下来还有尤为重要的一步,放行端口。在轻量应用服务器的详情界面有个防火墙Tab页,进入后点击添加规则。
按照如图所示添加放行规则。端口这里填30001,222,你也可以按照自己的规划,使用其他未被使用的端口。
安装Gitea代码托程序
创建Gitea所需的文件夹,并设置相关权限。
代码语言:javascript复制# 创建文件夹
sudo mkdir -p /opt/gitea
# 设置权限
sudo chmod 777 /opt/gitea
# 创建hosts文件
touch /opt/gitea/hosts
切换到刚创建的文件夹下。
代码语言:javascript复制# 切换目录cd /opt/gitea
执行下面的命令创建docker-compose.yaml文件。注意修改其中的30001和222为你自己规划的端口。USER_UID和USER_GID设置为当前用户的id,可以使用命令id
查询。
cat > docker-compose.yaml <<EOF
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.13.3
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ${PWD}:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- ${PWD}/hosts:/etc/hosts
ports:
- "30001:3000"
- "222:22"
EOF
接下来执行命令启动gitea,如果没有报错信息,恭喜你已经安装成功了。
代码语言:javascript复制# 启动 终端关闭后服务停止
docker-compose up
# 后台启动服务
docker-compose up -d
现在你可以使用浏览器访问http://服务器ip:30001,会出现下面的界面。
)
点击上图右上角的登录按钮进入Gitea安装流程。如果你绑定有域名,你也可以将SSH 服务端口和基础URL设置为你的域名,否则设置为服务器ip,最后点击立即安装按钮。如果在刚才的安装步骤中,你没有设置管理员账户,现在立即注册一个用户即可。
登录账户后,可以在右上角点击加号创建一个仓库开始使用了。
安装Drone自动构建工具
Gitea还能结合Drone实现CICD,如果你有这方面的需求,可以接着往下看。
首先登录Gitea,点击右上角头像进入设置页,找到应用Tab页。填写OAuth2应用程序信息,重定向URL填写服务器IP:Drone的端口如:http://81.2.2.217:30002/login,其中30002端口会在下面的步骤中使用到。在此之前请参考上面的方式在轻量应用服务器防火墙界面放行30002、30003端口。
点击创建以后会得到id和secret,注意这很重要,接下来会用到。
创建drone文件夹。
代码语言:javascript复制# 创建文件夹
sudo mkdir -p /opt/drone/data
# 设置权限
sudo chmod 777 -R /opt/drone
编写yaml文件。注意配置environment中的各项参数和密码。其中runner中的DRONE_RPC_SECRET要和server中的DRONE_RPC_SECRET保持一致。
代码语言:javascript复制# 切换目录
cd /opt/drone
# 创建文件
cat > docker-compose.yaml <<EOF
version: "3"
services:
server:
image: drone/drone:1
container_name: drone_server
restart: always
environment:
DRONE_GITEA_SERVER: http://Gitea服务器ip或者域名:30001
DRONE_GITEA_CLIENT_ID: "Gitea OAuth2"
DRONE_GITEA_CLIENT_SECRET: "Gitea OAuth2客户端密钥"
DRONE_RPC_SECRET: a9e1160c4d69783a8fbdee4289c493as
DRONE_SERVER_HOST: 服务器ip或者域名:30002
DRONE_SERVER_PROTO: http
DRONE_USER_CREATE: username:对应gitea中的管理员账号名称,admin:true
ports:
- "30002:80"
volumes:
- "./data:/var/lib/drone"
runner:
image: drone/drone-runner-docker
container_name: drone_runner_docker
restart: always
environment:
DRONE_RPC_PROTO: http
DRONE_RPC_HOST: 服务器ip或者域名:30002
DRONE_RPC_SECRET: a9e1160c4d69783a8fbdee4289c493as
DRONE_RUNNER_CAPACITY: 5
DRONE_UI_USERNAME: drone
DRONE_UI_PASSWORD: 123456
DRONE_RUNNER_NAME: rains
ports:
- "30003:3000"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
EOF
启动服务,如果没有报错,恭喜安装成功!
代码语言:javascript复制# 启动 终端关闭后服务停止
docker-compose up
# 后台启动服务
docker-compose up -d
最后访问ip:30002,使用Gitea账号登录以后就可以访问到drone页面如下图。
之后在你的项目中创建.drone.yml文件,编写相关规则,并在Drone的页面中启用后就可以实现CICD,相关教程可以参见Drone官网。
结语
最后希望各位都能成功自建Git仓库,摆脱GitHub无法访问的苦恼。