Please enable Javascript to view the contents

Gitea源码分析

 ·  ☕ 3 分钟

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对比,大于它则认为有读权限

部署步骤

  1. mysql或mariadb数据库建立gitea库
1
CREATE DATABASE gitea CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
  1. git版本v2.1.2及以上

  2. 在当前用户有读写权限的目录下创建文件夹,(建议创建一个gitea单独使用的用户),参考下图

1
2
3
4
--gitea
	|--custom
	|--conf
		|--app.ini
  1. 配置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

  1. 执行命令 nohup ./gitea >/dev/null 2>&1 &

在浏览器中输入localhost:3000 可以显示即部署成功

分享

三排三号
作者
三排三号
Backend Programmer