This commit is contained in:
2026-03-28 16:50:54 +08:00
parent d99cf1bc78
commit 3e8cd729ba
2 changed files with 80 additions and 214 deletions
+53 -212
View File
@@ -39,113 +39,72 @@ Gitea 采用微内核 + 插件扩展的轻量架构,核心组件如下:
### 架构图(Mermaid) ### 架构图(Mermaid)
```mermaid ```mermaid
graph TB graph TD
subgraph "客户端层" %% 客户端层
A[Web浏览器] Client_Web[Web浏览器]
B[Git客户端] Client_Git[Git客户端]
C[API客户端] Client_API[API客户端]
%% 负载层
Proxy[Nginx / 反向代理]
%% 核心服务层
subgraph Gitea核心服务
Web[Web服务 / Gin]
API[RESTful API]
Git[Git协议处理器]
Auth[认证授权 / Session / OAuth]
end end
subgraph "负载均衡/反向代理" %% 业务逻辑层
D[Nginx/Apache] subgraph 业务逻辑层
Repo[仓库管理]
User[用户与组织]
ACL[权限控制 RBAC]
Hook[WebHook]
Mail[邮件服务]
end end
subgraph "Gitea核心服务" %% 存储层
E[Web服务<br/>Gin框架] subgraph 数据存储层
F[API服务<br/>RESTful] DB[(数据库<br/>SQLite/MySQL)]
G[Git服务<br/>SSH/HTTP] FS[(Git仓库文件)]
H[认证授权<br/>Session/OAuth] LFS[(LFS对象)]
Cache[(Redis缓存)]
end end
subgraph "业务逻辑层" %% 扩展
I[仓库管理] Runner[[Gitea Runner<br/>CI/CD]]
J[用户管理] Pack[[包管理<br/>npm/docker]]
K[组织管理]
L[权限控制<br/>RBAC]
M[WebHook]
N[邮件服务]
end
subgraph "数据存储层" %% 关系连线
O[数据库<br/>SQLite/MySQL/PostgreSQL] Client_Web --> Proxy
P[Git仓库<br/>文件系统] Client_Git --> Proxy
Q[LFS对象存储] Client_API --> Proxy
R[缓存<br/>Redis/Memcached]
end
subgraph "后台任务" Proxy --> Web
S[定时任务<br/>Cron] Proxy --> API
T[队列处理<br/>WebHook/邮件] Proxy --> Git
U[索引构建]
V[镜像同步]
end
subgraph "可选扩展" Web --> Auth
W[Gitea Runner<br/>CI/CD] API --> Auth
X[包管理<br/>npm/docker/maven] Git --> Auth
Y[代码搜索<br/>Bleve]
end
A --> D Auth --> Repo
B --> D Auth --> User
C --> D Auth --> ACL
D --> E Repo --> DB
D --> F Repo --> FS
D --> G Repo --> LFS
User --> DB
ACL --> DB
E --> H Repo --> Hook
F --> H Hook --> Mail
G --> H
H --> I Runner -.-> API
H --> J Pack -.-> FS
H --> K
H --> L
I --> O
I --> P
J --> O
K --> O
L --> O
I --> Q
M --> T
N --> T
S --> V
U --> R
T --> N
W --> P
X --> Q
Y --> R
style A fill:#e1f5fe
style B fill:#e1f5fe
style C fill:#e1f5fe
style D fill:#fff3e0
style E fill:#f3e5f5
style F fill:#f3e5f5
style G fill:#f3e5f5
style H fill:#f3e5f5
style I fill:#e8f5e9
style J fill:#e8f5e9
style K fill:#e8f5e9
style L fill:#e8f5e9
style M fill:#e8f5e9
style N fill:#e8f5e9
style O fill:#ffebee
style P fill:#ffebee
style Q fill:#ffebee
style R fill:#ffebee
style S fill:#fce4ec
style T fill:#fce4ec
style U fill:#fce4ec
style V fill:#fce4ec
style W fill:#e0f2f1
style X fill:#e0f2f1
style Y fill:#e0f2f1
``` ```
### 架构说明 ### 架构说明
@@ -162,124 +121,6 @@ graph TB
这种架构设计使得 Gitea 具有轻量级、高可用和易扩展的特点。 这种架构设计使得 Gitea 具有轻量级、高可用和易扩展的特点。
```mermaid
graph TB
subgraph "客户端层"
A[Web浏览器]
B[Git客户端]
C[API客户端]
end
subgraph "负载均衡层"
D[Nginx/反向代理]
end
subgraph "Gitea核心服务"
E[Web服务<br/>Gin框架]
F[REST API]
G[Git协议处理器]
H[认证授权<br/>RBAC]
I[中间件<br/>CSRF/Session]
end
subgraph "业务逻辑层"
J[仓库管理]
K[用户/组织管理]
L[问题跟踪]
M[PR/MR流程]
N[WebHook系统]
O[通知系统]
end
subgraph "数据存储层"
P[Git仓库<br/>文件系统]
Q[SQLite/MySQL<br/>PostgreSQL]
R[LFS对象存储]
S[会话存储]
T[缓存Redis]
end
subgraph "后台服务"
U[定时任务<br/>镜像同步]
V[队列服务<br/>异步任务]
W[邮件服务]
X[索引构建]
end
subgraph "扩展组件"
Y[Gitea Runner<br/>CI/CD]
Z[包管理<br/>npm/maven]
AA[容器注册表]
end
A --> D
B --> D
C --> D
D --> E
D --> F
D --> G
E --> H
F --> H
G --> H
H --> I
I --> J
I --> K
I --> L
I --> M
I --> N
I --> O
J --> P
K --> Q
L --> Q
M --> P
N --> V
O --> W
V --> U
V --> X
V --> W
J --> Y
J --> Z
J --> AA
P --> R
Q --> S
Q --> T
style A fill:#e1f5fe
style B fill:#e1f5fe
style C fill:#e1f5fe
style D fill:#fff3e0
style E fill:#f3e5f5
style F fill:#f3e5f5
style G fill:#f3e5f5
style H fill:#f3e5f5
style I fill:#f3e5f5
style J fill:#e8f5e8
style K fill:#e8f5e8
style L fill:#e8f5e8
style M fill:#e8f5e8
style N fill:#e8f5e8
style O fill:#e8f5e8
style P fill:#fce4ec
style Q fill:#fce4ec
style R fill:#fce4ec
style S fill:#fce4ec
style T fill:#fce4ec
style U fill:#fff9c4
style V fill:#fff9c4
style W fill:#fff9c4
style X fill:#fff9c4
style Y fill:#e0f2f1
style Z fill:#e0f2f1
style AA fill:#e0f2f1
```
### 架构特点说明 ### 架构特点说明
**1. 轻量级设计** **1. 轻量级设计**
+25
View File
@@ -36,6 +36,29 @@
{{- partial "extend_footer.html" . }} {{- partial "extend_footer.html" . }}
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
document.addEventListener("DOMContentLoaded", function() {
mermaid.initialize({ startOnLoad: true, theme: 'default' });
document.querySelectorAll('.language-mermaid').forEach(function(block) {
const container = block.closest('.highlight') || block.parentNode;
const div = document.createElement('div');
div.className = 'mermaid';
// Some Markdown parsers will escape < > " & etc.
// So we unescape them before sending to Mermaid
const txt = document.createElement("textarea");
txt.innerHTML = block.innerHTML;
div.textContent = txt.value;
if (container) {
container.parentNode.replaceChild(div, container);
}
});
});
</script>
<script> <script>
let menu = document.getElementById('menu'); let menu = document.getElementById('menu');
if (menu) { if (menu) {
@@ -152,3 +175,5 @@
}); });
</script> </script>
{{- end }} {{- end }}