前言

最近又想开始折腾了,目前手里有两台云服务器,一台阿里云的,一台腾讯云。阿里云的服务器配置比较拉垮,用来放我的Hexo博客了。

腾讯云的配置稍好,装了一个Bitwarden用于密码管理服务,装完后发现还可以干点其他事,后面因为比较忙就暂时没继续折腾了。最近难得有点时间,打算再给他整点东西。

想来想去,我还缺一个代码管理平台,于是乎决定用它来搭一个私人Git带代码管理服务。

本来是想装GitLab的,可是听别人说GitLab对服务器配置要求较高,有的人装了后把服务器给跑挂了。于是乎我打算找个轻量级别的开源Git代码托管服务——Gitea。不过听说Gitea在对密钥的安全保护上做的不是很好,但想了想我只是自己用,也没啥大关系,于是开整,这里做个记录。

Gitea简介

Gitea是基于Go语言开发一款开源代码托管平台,它具有以下特性:

  • 开源
  • 易安装
  • 跨平台
  • 轻量级

Gitea官网: Gitea

Gitea的github地址: go-gitea/gitea: Git with a cup of tea, painless self-hosted git service (github.com)

这里我们使用docker-compose来安装gitea,可以通过直接调用官方镜像运行即可。

Gitea的搭建

前置软件

  • Docker
  • Docker-Compose
  • Caddy2

以上软件如果没有的,请自行Google或百度安装。

开始搭建

Step1 配置Gitea

在服务器上创建一个目录用于存放Gitea的相关文件。

1
2
3
4
5
[root@VM-12-15-centos home]# mkdir gitea
[root@VM-12-15-centos home]# cd gitea/
[root@VM-12-15-centos gitea]# touch docker-compose.yml
[root@VM-12-15-centos gitea]# pwd
/home/gitea

docker-compose.yml是docker-compose创建容器的配置参数项。

前往这个地址上复制 docker-compose配置文件:docker-compose.yml (github.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
version: "3"

networks: # 创建一个gitea的网络组
gitea:
external: false

services:
server: # 创建一个服务
image: gitea/gitea:latest # 服务用的镜像是gitea的最新版本
environment:
- USER_UID=1000
- USER_GID=1000
# 下面是db参数
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=gitea
- DB_USER=xxx
- DB_PASSWD=xxxx
restart: always # 只要重启docker-compose,这个服务会跟着重启
networks: # 指定服务的内网组成
- gitea
volumes: # 容器卷磁盘映射
- ./data:/data # 本地./data文件夹映射到gitea的/data文件夹
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000" # 指定服务器端口与容器内部端口映射
- "222:222" # gitea的ssh端口映射
depends_on:
- db # 依赖mysql db数据库

db: # 这里的db服务被server服务依赖,所以我们可以直接启动server,db就会被优先启动
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=xxx
- MYSQL_PASSWORD=xxxx
- MYSQL_DATABASE=gitea
networks: # 保证两者在同一网络可以互相访问
- gitea
volumes:
- ./mysql:/var/lib/mysql

使用上面的配置前请先去掉注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: "4"

networks:
gitea:
external: false

services:
server:
image: gitea/gitea:latest
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=gitea
- DB_USER=xxxx
- DB_PASSWD=xxxx
restart: always
networks:
- gitea
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:222"
depends_on:
- db

db:
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=xxxx
- MYSQL_PASSWORD=xxxx
- MYSQL_DATABASE=gitea
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql

Step2 开放服务器相关端口

到你自己的云服务器控制台上去开启对应端口。

Step3 设置代理服务(无域名跳过)

去往域名服务商,设置二级域名解析到服务器ip地址。

下载Caddy2:

1
2
3
4
5
6
7
8
# 创建文件夹并进入(自己可以改)
mkdir /usr/local/caddy && cd /usr/local/caddy

# 下载 Caddy 文件,Caddy 2 不再支持 32 位系统了,如果要安装某些插件,还要进 https://caddyserver.com/download 去挑选一下
wget -N --no-check-certificate -O "caddy" "https://caddyserver.com/api/download?os=linux&arch=amd64"

# 赋予执行权限
chmod +x caddy

设置Caddy2的反向代理:

由于V1版本停止服务了,所以这里更新一下Caddy V2的代码,比V1还简单,在/usr/local/caddy/Caddyfile里输入下面的内容即可(要改下面的域名)

1
2
3
gitea.xxxx.com { 
reverse_proxy 127.0.0.1:3000 # 将来自gitea.xxxx.com的访问请求转发到端口3000,即我们设置的gitea端口映射
}

之后,我们就可以通过域名访问gitea了。

Step4 DockerCompose拉取容器运行

接下来运行命令,去拉取对应容器运行,下面是终端运行,测试用,没有放到后台运行。

1
2
3
4
5
6
[root@VM-12-15-centos gitea]# docker-compose up server
Creating network "gitea_gitea" with the default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
...
server_1 | 2022/05/04 16:29:09 ...s/graceful/server.go:62:NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: 15

之后可以访问[服务器ip:port](有域名直接访问设置的二级域名)可以看到这个页面:

接下来在后台启动再去调整配置:

1
2
3
[root@VM-12-15-centos gitea]# docker-compose up -d server
gitea_db_1 is up-to-date
Starting gitea_server_1 ... done

可以查看容器运行状况:

1
2
3
4
5
6
7
[root@VM-12-15-centos gitea]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
gitea_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
gitea_server_1 /usr/bin/entrypoint /bin/s ... Up 0.0.0.0:222->22/tcp,:::222->22/t
cp, 0.0.0.0:3000->3000/tcp,:::30
00->3000/tcp

继续访问页面,修改一般配置。

配置管理员账号:

之后进行安装。安装速度很快。

安装完成:

Gitea测试

新建一个仓库:

再将此仓库克隆到本地:

通过HTTP Clone

进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 G:\code\mygitea 
$ git clone https://gitea.everweekup.com/Jabari/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.

G:\code\mygitea 
$ cd test\

G:\code\mygitea\test
$ vim Readme.md

G:\code\mygitea\test   master ± 
$ git add .
warning: LF will be replaced by CRLF in Readme.md.
The file will have its original line endings in your working directory

G:\code\mygitea\test   master ± 
$ git commit -m "First up To Gitea"
[master (root-commit) db34071] First up To Gitea
1 file changed, 3 insertions(+)
create mode 100644 Readme.md

G:\code\mygitea\test   master 
$ git push origin master
Username for 'https://xxx.com': Jabari
Password for 'https://xxx.everweekup.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 271 bytes | 271.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To https://gitea.everweekup.com/Jabari/test.git
* [new branch] master -> master

查看仓库:

通过SSH

配置SSH key:

将你自己电脑上生成的公钥放到gitea上即可。(不会的请自行搜索引擎)

1
2
3
4
5
6
7
8
 G:\code\mygitea\test\test-ssh   master 
$ git clone ssh://git@xxx.com:222/Jabari/test.git
Cloning into 'test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

剩下的步骤跟Http方式的一样就不写了。

到目前为止,我们的私人代码托管平台Gitea就搭建好了。