Gitea源码分析
项目地址:https://github.com/go-gitea/gitea
项目目录
文件夹 |
说明 |
assets |
gitea的项目图标 |
cmd |
gitea子命令 |
contrib |
运行脚本,插件等 |
custom |
配置文件示例 |
docker |
s6-svscan运行docker的脚本 |
docs |
gitea的帮助页面服务 |
itegrations |
集成测试 |
models |
表结构,以及和数据库的相关操作 |
modules |
实现不同功能的模块 |
options |
gitignore,label,licenses等默认模板 |
public |
图标,vendor? |
routers |
路由 |
scripts |
生成gitigonre和license的程序 |
services |
封装了models和modules的一些功能 |
snap |
snapcraft linux上的包管理 |
templates |
页面模板 |
vendor |
项目的第三方依赖包 |
web_src |
css+js 静态资源 |
权限管理
仓库有Permission
1
2
3
4
5
|
type Permission struct {
AccessMode AccessMode //仓库整体的权限
Units []*RepoUnit //一个仓库拥有的所有功能模块
UnitsMode map[UnitType]AccessMode //每个功能模块的权限
}
|
AccessMode说明
常量 |
值 |
说明 |
AccessModeNone |
0 |
无权限 |
AccessModeRead |
1 |
读权限 |
AccessModeWrite |
2 |
写权限 |
AccessModeAdmin |
3 |
管理员权限 |
AccessModeOwner |
4 |
仓库所有者权限 |
UnitType包含以下几项,显示在仓库页面导航栏
常量 |
值 |
说明 |
UnitTypeCode UnitType |
= iota + 1 // 1 |
code |
UnitTypeIssues |
2 |
issues |
UnitTypePullRequests |
3 |
PRs |
UnitTypeReleases |
4 |
Releases |
UnitTypeWiki |
5 |
Wiki |
UnitTypeExternalWiki |
6 |
ExternalWiki |
UnitTypeExternalTracker |
7 |
ExternalTracker |
UnitTypeOutcomes |
8 |
Outcomes (成果物) |
例: 如要检查一个仓库是否有Release(发布版本)模块的读权限,有如下流程, 取出此模块的读写权限,和AccessModeRead对比,大于它则认为有读权限
部署步骤
- mysql或mariadb数据库建立gitea库
1
|
CREATE DATABASE gitea CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
|
-
git版本v2.1.2
及以上
-
在当前用户有读写权限的目录下创建文件夹,(建议创建一个gitea单独使用的用户),参考下图
1
2
3
4
|
--gitea
|--custom
|--conf
|--app.ini
|
- 配置app.ini文件,需要修改的内容如下
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#服务名称,如无必要,请勿修改
APP_NAME = Gitea
#当前运行gitea服务的用户,root或者是专用用户
RUN_USER = mmx
RUN_MODE = prod
[security]
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE1Nzc3ODEwNTF9.XRZ4QvT10FC32IeC68Fqp9H68NLmUsSMC24BqtP17pc
INSTALL_LOCK = true
SECRET_KEY = r7k2ogAskk0bD5jIg7PWd4M28s9aYvs6mWFasTMUbSzeZPPoSi9CUw8Y07wnNnaG
[database]
DB_TYPE = mysql
#mysql地址和端口
HOST = 192.168.0.0:3306
#数据库名,默认gitea
NAME = gitea
#用户名
USER = root
#密码
PASSWD = password
SSL_MODE = disable
CHARSET = utf8
[repository]
#仓库存储地址
ROOT = /home/mmx/gitea/data/gitea-repositories
[server]
#ssh域名,与DOMIN一致
SSH_DOMAIN = 192.168.0.0
#服务域名
DOMAIN = 192.168.0.0
#端口,默认3000
HTTP_PORT = 3000
#http+服务域名+端口
ROOT_URL = http://192.168.0.0:3000/
DISABLE_SSH = false
SSH_PORT = 22
LFS_START_SERVER = true
#lfs文件存储路径
LFS_CONTENT_PATH = /home/mmx/gitea/data/lfs
LFS_JWT_SECRET = __WVNmFsw4Aqt_TwBtkLq8t6II-CY9HreBK-KuLNtuU
OFFLINE_MODE = true
ENABLE_LOCAL_AUTH = true
[mailer]
ENABLED = false
[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
REQUIRE_SIGNIN_VIEW = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost
[picture]
DISABLE_GRAVATAR = true
ENABLE_FEDERATED_AVATAR = false
[openid]
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false
[session]
PROVIDER = file
[eureka]
ENABLE = true
#注册中心连接字符串,用户名+密码+地址
MACHINES = http://admin:admin@192.168.0.0:8761/eureka
#心跳间隔,秒
HEART_BEAT_INTERVAL = 5
#本机服务地址
IP = 192.168.0.11
[localUrl]
#用token请求用户信息的接口地址
LOCAL_USER_INFO_URL = http://192.168.0.0:8089/services/user/api/user/info
#通过用户名和密码请求token的接口地址
LOCAL_VERIFY_USER_URL = http://192.168.0.0:8089/auth/login
LOCAL_HOME = http://0.0.0.0
[cors]
ENABLED = true
SCHEME = http
ALLOW_DOMAIN = *
METHODS = GET
ALLOW_CREDENTIALS = true
[log]
MODE = file
LEVEL = debug
#日志存储路径
ROOT_PATH = /home/mmx/gitea/data/log
REDIRECT_MACARON_LOG=true
MACARON=file
ROUTER=file
|
- 执行命令 nohup ./gitea >/dev/null 2>&1 &
在浏览器中输入localhost:3000 可以显示即部署成功