需求背景
最近在开发公司的项目时,因为不想使用公司的 SVN 服务进行版本管理,涉密的代码又无法放到 Github 等公开平台进行托管,正好手上有一台小主机,就想着在上面部署一个私有的 Git 服务,折腾了好一会,最终得到如下方案。
Gitea 安装
Gitea 是一个轻量级的 DevOps 平台软件,采用 Go 作为后端语言,非常轻量。安装也非常简单,直接使用 Docker 即可。
docker-compose.yaml
version: "3"
services:
server:
image: gitea/gitea:1.24
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:22"
或者直接使用命令启动:
docker run -itd -p 3000:3000 -p 2222:22 -e USER_UID=1000 -e USER_GID=1000 -v /app/gitea:/data --name gitea gitea/gitea:1.24
启动之后正常安装,设置管理员信息即可。
SSH 认证问题
我在内网搭建 gitea 时,即使配置了 ssh 公钥,但因为 gitea 容器的 ssh 端口被映射到了 2222 端口,所以在配置远程仓库时,无法直接使用默认端口,在 scp 地址中又无法直接指定端口为 2222,所以在尝试 push 时会一直提示输入密码。
为了解决这个问题,在网上找到的解决方案如下:
- 设置本地仓库的 origin:
git remote add origin git@192.168.100.1:2222/yv1ing/xxx.git - 设置本地仓库的 origin-url:
git remote set-url origin ssh://git@192.168.100.1:2222/yv1ing/xxx.git
配置完成之后就可以正常 push 了。
数据备份
由于使用 Docker 运行 gitea,因此只需要把 gitea 的数据目录映射到宿主机,然后定期归档压缩后,备份到其它地方即可。
附备份脚本如下:
#!/bin/bash
DATE=$(date +"%Y%m%d")
BACKUP_FILE="gitea-$DATE.tar.gz"
tar -czf /tmp/$BACKUP_FILE -C /app gitea
rclone copy /tmp/$BACKUP_FILE yvling:/普通归档/gitea/
rm -f /tmp/$BACKUP_FILE
rclone cleanup yvling:/普通归档/gitea/