部署gitea的原因

使用gitea的原因:本质上是因为在本地硬盘上每次学习一些新知识,于是创建一些demo性质的应用。特别是vue,react之类的前端应用。每个项目都会有node_module这个文件夹,这里面有特别多的4k小文件,这导致我备份硬盘数据时。速率总是被压的很低。所以我在想能不能通过一个本地部署的类似github的服务器,实现我对这些项目的备份,然后通过配置.gitignore忽略掉哪些中间过程文件和复杂的库文件。来实现对磁盘的高效率备份。

部署完gitea后,发现他其实可以很好的替代github,gitee来作为我自己的代码仓库使用。而且他也确实有很多优点,包括如下图片等功能。而且他作为本地化服务,我不需要担心网络故障,权限校验等问题。
自部署gitea-2024-12-24-22-49-16

部署过程

这部分内容主要参考大佬文章以及gitea官网

我只说明我需要使用的docker compose部署的内容

首先配置一个docker-compose.yml,其内容如下

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
version: "3"

networks:
gitea:
external: false
# 这个nginx_container是我自己创建的一个nginx的网络,实现https代理的功能,而且只通过nginx实现代理,而不占用外部端口。具体内容我会再另一篇关于nginx的实战中说明
# nginx_container:
# external: true
services:
server:
image: gitea/gitea:1.21.1
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
# 一定要设置好下面的两个环境变量,如果不设置好,使用的时候可能ssh克隆的时候会有问题
- SSH_PORT=20022
- SSH_LISTEN_PORT=22
# 设置应用程序名称,在页面标题中使用.
- APP_NAME="这里是标题"
# 日志部分
- GITEA__log__MODE=file
- GITEA__log__ROOT_PATH=/data/gitea/log
- GITEA__log__LEVEL=Debug
- GITEA__log__FILE_NAME=gitea.log
- GITEA__log__MAX_DAYS=7
# 左移20表示1M 左移23就是8M
- GITEA__log__MAX_SIZE_SHIFT=23
restart: always
networks:
- gitea
- nginx_container
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "30000:3000" # 如果你直接使用nginx代理后,这里可以直接注释掉,也就不占用30000这个端口,而直接通过nginx代理出来。
- "20022:22"
depends_on:
- db
db:
image: mysql:8.0
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
networks:
- gitea
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8
- --collation-server=utf8_bin
volumes:
- ./mysql:/var/lib/mysql

以上是一些最基础的配置,而关于具体的环境变量等一些选项,请详看关于原作者的解释,那里更加详细。我只谈我使用到的部分:

1
2
3
4
5
6
# 允许用户推送时直接创建仓库
- GITEA__repository__ENABLE_PUSH_CREATE_USER=TRUE
# 禁止注册
- GITEA__service__DISABLE_REGISTRATION=TRUE
# ROOTURL
- ROOT_URL="https://gitea.zfxt.top/"

这个内容直接在上面docker-compose.yml中配置在enviroment中即可。这些操作,确保了这个git服务只为我自己服务,不允许注册给其他人,我也可以直接推送来完成仓库的创建,做到全命令行操作。

然后运行docker compose up -d即可运行。然后访问对应的网站,完成初始化配置。不知道的话,一路默认下去就好。然后你就可以享受gitea了。

日常使用

当我创建了一个项目,并且使用git init完成本地仓库初始化后,我们就可以把这个仓库推送到我们的gitea中。

  1. 添加远程仓库

    1
    2
    git remote add gitea https://gitea.zfxt.top/{用户名}/{自定义仓库名}.git # gitea是自己任意起的名字,一般默认设置为origin
    # 使用git remote -v 查看是否添加成功

    类似这样子的样式
    自部署gitea-2024-12-24-23-40-53

  2. 推送并自动创建仓库
    随意编写几个测试文件
    自部署gitea-2024-12-24-23-36-05

    1
    2
    3
    4
    git add .
    git commit -m "test"
    git push -u gitea main # 注意,这里的远程分支要与本地分支同名:可能是master或者是main
    # 他推送上去后,会自动创建该仓库,我们就不需要图形化界面点击了

    自部署gitea-2024-12-24-23-47-35
    使用ai的解释如下
    自部署gitea-2024-12-24-23-38-32
    之后你默认的git push pull命令都会默认从gitea这个远程分支拉去。同样的,如果你有多个远程仓库分别在github,gitee上,你可以分别使用类似于git push github,git push gitee等方式完成推送

以上