Update zh tw languages and fix some broken links (#455)

---------

Co-authored-by: silverwind <[email protected]>
Co-authored-by: silverwind <[email protected]>
Reviewed-on: https://gitea.com/gitea/docs/pulls/455
Reviewed-by: silverwind <[email protected]>
This commit is contained in:
committed 2026-07-09 23:41:46 +00:00
1 parent c0f8a04185
commit 965c269495
652 files changed
+30864 -30792

No files matched your search

@@ -13,19 +13,19 @@ aliases:
## 獲取頁面
Gitea 源代碼附帶了示例頁面,位於 `contrib/legal` 目錄中。將它們複製到 `custom/public/assets/` 目錄下。例如,如果要添加隱私政策:
Gitea 源程式碼附帶了範例頁面,位於 `contrib/legal` 目錄中。將它們複製到 `custom/public/assets/` 目錄下。例如,如果要添加隱私政策:
```
wget -O /path/to/custom/public/assets/privacy.html https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/legal/privacy.html.sample
```
現在,你需要編輯該頁面以滿足你的需求。特別是,你必須更改電子郵件地址、網址以及與 "Your Gitea Instance" 相關的引用,以匹配你的情況。
現在,你需要編輯該頁面以滿足你的需求。特別是,你必須更改電子電子郵件地址、網址以及與 "Your Gitea Instance" 相關的引用,以匹配你的情況。
請務必不要放置會暗示 Gitea 項目對你的服務器負責的一般服務條款或隱私聲明。
請務必不要放置會暗示 Gitea 專案對你的伺服器負責的一般服務條款或隱私聲明。
## 使其可見
創建或追加到 `/path/to/custom/templates/custom/extra_links_footer.tmpl` 文件中:
建立或追加到 `/path/to/custom/templates/custom/extra_links_footer.tmpl` 文件中:
```go
<a class="item" href="{{AppSubUrl}}/assets/privacy.html">隱私政策</a>
@@ -8,206 +8,206 @@ aliases:
# 認證
## 轻量级目錄访问协议(Lightweight Directory Access Protocol,LDAP)
## 輕量級目錄訪問協議(Lightweight Directory Access Protocol,LDAP)
通過 BindDN 的 LDAP 和简單認證方式 LDAP 共享以下字段:
透過 BindDN 的 LDAP 和簡單認證方式 LDAP 共享以下欄位:
- 認證名稱 **(必選)**
- 分配给新授权方法的名稱。
- 分配給新授權方法的名稱。
- 主机名 **(必選)**
- 主機名 **(必選)**
- LDAP 服务的主机地址.
- LDAP 服務的主機地址.
- 例如:`mydomain.com`
- 端口号 **(必選)**
- 端口號 **(必選)**
- LDAP 服务的端口号.
- LDAP 服務的端口號.
- 例如: LDAP `389`/ LDAPs `636`
- 安全协议 (可選)
- 安全協議 (可選)
- 连接 LDAP 服务器时是否使用 TLS 协议。
- 連接 LDAP 伺服器時是否使用 TLS 協議。
- 管理员過滤規則 (可選)
- 管理員過濾規則 (可選)
- 一个 LDAP 過滤器,用于指定哪些使用者應該被赋予管理员特权。如果使用者帳戶符合過滤器条件,则該使用者将被授予管理员权限。
- 示例:`(objectClass=adminAccount)`
- 适用于 Microsoft Active Directory(AD)的示例:`memberOf=CN=admin-group,OU=example,DC=example,DC=org`
- 一個 LDAP 過濾器,用於指定哪些使用者應該被賦予管理員特權。如果使用者帳戶符合過濾器條件,則該使用者將被授予管理員權限。
- 範例:`(objectClass=adminAccount)`
- 適用於 Microsoft Active Directory(AD)的範例:`memberOf=CN=admin-group,OU=example,DC=example,DC=org`
- 使用者名属性(可選)
- 使用者名稱屬性(可選)
- 使用者 LDAP 记录中包含使用者名稱的属性。在第一次成功登入后,将使用指定的属性值作為新的 Gitea 账户使用者名。若留空,则使用登入表單上提供的使用者名。
- 当提供的登入名与多个属性匹配时,这一選项非常有用,但是只有一个特定属性應該用于 Gitea 账户名稱,請参阅"使用者過滤器"。
- 示例:uid
- 适用于 Microsoft Active Directory(AD)的示例:`sAMAccountName`
- 使用者 LDAP 記錄中包含使用者名稱稱的屬性。在第一次成功登入後,將使用指定的屬性值作為新的 Gitea 帳號使用者名稱。若留空,則使用登入表單上提供的使用者名稱。
- 當提供的登入名與多個屬性匹配時,這一選項非常有用,但是隻有一個特定屬性應該用於 Gitea 帳號名稱,請參閱"使用者過濾器"。
- 範例:uid
- 適用於 Microsoft Active Directory(AD)的範例:`sAMAccountName`
- 名字属性(可選)
- 名字屬性(可選)
- 使用者 LDAP 记录中包含使用者名字的属性。将用于填充他们的账户信息。
- 示例:givenName
- 使用者 LDAP 記錄中包含使用者名稱字的屬性。將用於填充他們的帳號資訊。
- 範例:givenName
- 姓氏属性(可選)
- 姓氏屬性(可選)
- 使用者 LDAP 记录中包含使用者姓氏的属性。将用于填充他们的账户信息。
- 示例:`sn`
- 使用者 LDAP 記錄中包含使用者姓氏的屬性。將用於填充他們的帳號資訊。
- 範例:`sn`
- 电子邮件属性 **(必選)**
- 使用者 LDAP 记录中包含使用者电子邮件地址的属性。将用于填充他们的账户信息。
- 示例:`mail`
- 電子郵件屬性 **(必選)**
- 使用者 LDAP 記錄中包含使用者電子電子郵件地址的屬性。將用於填充他們的帳號資訊。
- 範例:`mail`
### LDAP(via BindDN)
需要额外设置以下字段:
需要額外設定以下欄位:
- 绑定 DN (可選)
- 綁定 DN (可選)
- 搜索使用者时绑定到 LDAP 服务器的 DN。这可以留空以執行匿名搜索。
- 示例: `cn=Search,dc=mydomain,dc=com`
- 搜索使用者時綁定到 LDAP 伺服器的 DN。這可以留空以執行匿名搜索。
- 範例: `cn=Search,dc=mydomain,dc=com`
- 绑定密碼 (可選)
- 綁定密碼 (可選)
- 上述指定的 Bind DN(绑定区别名)的密碼,如果有的话。注意:該密碼在服务器上使用 SECRET_KEY 進行加密存儲。仍然建议确保 Bind DN 具有尽可能少的权限。
- 上述指定的 Bind DN(綁定區別名)的密碼,如果有的話。注意:該密碼在伺服器上使用 SECRET_KEY 進行加密儲存。仍然建議確保 Bind DN 具有儘可能少的權限。
- 使用者搜索基准 **(必選)**
- 使用者搜索基準 **(必選)**
- 这是用于搜索使用者帳戶的 LDAP 基础路径.
- 示例: `ou=Users,dc=mydomain,dc=com`
- 這是用於搜索使用者帳戶的 LDAP 基礎路徑.
- 範例: `ou=Users,dc=mydomain,dc=com`
- 使用者過滤規則 **(必選)**
- LDAP 過滤器声明如何查找试图進行身份驗證的使用者记录
`%[1]s`匹配參數将替换為登入表單中给出的登入名
- 示例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))`
- 示例 for Microsoft Active Directory (AD): `(&(objectCategory=Person)(memberOf=CN=user-group,OU=example,DC=example,DC=org)(sAMAccountName=%s)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))`
- 如需多次替换,應使用 `%[1]s`,例如在将提供的登入名与多个属性(如使用者标识符、电子邮件甚至电话号码)進行匹配时。
- 示例: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))`
- 启用使用者同步
- 这个選项启用了一个周期性任务,用于将 Gitea 使用者与 LDAP 服务器進行同步。默认的同步周期是每 24 小时,
- 使用者過濾規則 **(必選)**
- LDAP 過濾器聲明如何查找試圖進行身份驗證的使用者記錄
`%[1]s`匹配參數將替換為登入表單中給出的登入名
- 範例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))`
- 範例 for Microsoft Active Directory (AD): `(&(objectCategory=Person)(memberOf=CN=user-group,OU=example,DC=example,DC=org)(sAMAccountName=%s)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))`
- 如需多次替換,應使用 `%[1]s`,例如在將提供的登入名與多個屬性(如使用者標識符、電子郵件甚至電話號碼)進行匹配時。
- 範例: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))`
- 啟用使用者同步
- 這個選項啟用了一個週期性任務,用於將 Gitea 使用者與 LDAP 伺服器進行同步。預設的同步週期是每 24 小時,
但您可以在 app.ini 文件中進行更改。
有关此部分的详细说明,請参阅[sample
有關此部分的詳細說明,請參閱[sample
app.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini)
的*cron.sync_external_users* 部分的注释。前面提到的*User Search Base*和*User Filter*
设置将限制哪些使用者可以使用 Gitea 以及哪些使用者将被同步。
在初始运行任务时,将根据给定的设置建立所有与 LDAP 匹配的使用者,因此在使用大型企业 LDAP 目錄时需要小心。
的*cron.sync_external_users* 部分的註釋。前面提到的*User Search Base*和*User Filter*
設定將限制哪些使用者可以使用 Gitea 以及哪些使用者將被同步。
在初始運行任務時,將根據給定的設定建立所有與 LDAP 匹配的使用者,因此在使用大型企業 LDAP 目錄時需要小心。
### LDAP(simple auth)
需要额外设置以下字段:
需要額外設定以下欄位:
- 使用者 DN **(必選)**
- 用作使用者 DN 的模板。匹配參數 `%s` 将替换為登入表單中的登入名。
- 示例: `cn=%s,ou=Users,dc=mydomain,dc=com`
- 示例: `uid=%s,ou=Users,dc=mydomain,dc=com`
- 用作使用者 DN 的模板。匹配參數 `%s` 將替換為登入表單中的登入名。
- 範例: `cn=%s,ou=Users,dc=mydomain,dc=com`
- 範例: `uid=%s,ou=Users,dc=mydomain,dc=com`
- 使用者搜索基准 (可選)
- 使用者搜索基準 (可選)
- 使用者搜索基准声明哪些使用者帳戶将被搜索.
- 示例: `ou=Users,dc=mydomain,dc=com`
- 使用者搜索基準聲明哪些使用者帳戶將被搜索.
- 範例: `ou=Users,dc=mydomain,dc=com`
- 使用者過滤規則 **(必選)**
- LDAP 過滤器声明何时允许使用者登入
`%[1]s`匹配參數将替换為登入表單中给出的登入名。
- 示例: `(&(objectClass=posixAccount)(|(cn=%[1]s)(mail=%[1]s)))`
- 示例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))`
- 使用者過濾規則 **(必選)**
- LDAP 過濾器聲明何時允許使用者登入
`%[1]s`匹配參數將替換為登入表單中給出的登入名。
- 範例: `(&(objectClass=posixAccount)(|(cn=%[1]s)(mail=%[1]s)))`
- 範例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))`
### 使用 LDAP 驗證分组成员
### 使用 LDAP 驗證分組成員
使用以下字段:
使用以下欄位:
- 群组搜索基础 DN(可選)
- 群組搜索基礎 DN(可選)
- 组使用的 LDAP DN。
- 示例: `ou=group,dc=mydomain,dc=com`
- 組使用的 LDAP DN。
- 範例: `ou=group,dc=mydomain,dc=com`
- 组名過滤器 (可選)
- 組名過濾器 (可選)
- LDAP 過滤器,声明如何在上述 DN 中查找有效组。
- 示例: `(|(cn=gitea_users)(cn=admins))`
- LDAP 過濾器,聲明如何在上述 DN 中查找有效組。
- 範例: `(|(cn=gitea_users)(cn=admins))`
- 组中的使用者属性 (可選)
- 組中的使用者屬性 (可選)
- 组中列出了哪个使用者的 LDAP 属性。
- 示例: `uid`
- 組中列出了哪個使用者的 LDAP 屬性。
- 範例: `uid`
- 使用者组属性 (可選)
- 哪个组的 LDAP 属性包含一个高于使用者属性名稱的数组。
- 示例: `memberUid`
- 使用者組屬性 (可選)
- 哪個組的 LDAP 屬性包含一個高於使用者屬性名稱的數組。
- 範例: `memberUid`
## 可插拔式認證模組(Pluggable Authentication Module,PAM)
这个過程启用了 PAM(Pluggable Authentication Modules)認證。使用者仍然可以通過使用者管理手动添加到系统中。
PAM 提供了一种機制,通過对使用者進行 PAM 認證来自动将其添加到当前数据库中。為了与普通的 Linux 密碼一起使用,
运行 Gitea 的使用者還必須具有对`/etc/shadow`的读取权限,以便在使用公钥登入时检查账户的有效性。
這個過程啟用了 PAM(Pluggable Authentication Modules)認證。使用者仍然可以透過使用者管理手動添加到系統中。
PAM 提供了一種機制,通過對使用者進行 PAM 認證來自動將其添加到當前資料庫中。為了與普通的 Linux 密碼一起使用,
運行 Gitea 的使用者還必須具有對`/etc/shadow`的讀取權限,以便在使用公鑰登入時檢查帳號的有效性。
**注意**:如果使用者已将 SSH 公钥添加到 Gitea 中,使用这些密钥可能会绕過登入检查系统。因此,
如果您希望禁用使用 PAM 進行身份驗證的使用者,應該在 Gitea 中手动禁用該账户,使用内置的使用者管理功能。
**注意**:如果使用者已將 SSH 公鑰添加到 Gitea 中,使用這些密鑰可能會繞過登入檢查系統。因此,
如果您希望禁用使用 PAM 進行身份驗證的使用者,應該在 Gitea 中手動禁用該帳號,使用內置的使用者管理功能。
1. 配置和安裝准备.
- 建议您建立一个管理使用者.
- 建议取消自动注册.
1. 一旦数据库已初始化完成,使用新建立的管理员账户登入.
1. 导航至使用者设置(右上角的图标),然后選择
`Site Administration` -> `Authentication Sources`, 並選择
1. 設定和安裝準備.
- 建議您建立一個管理使用者.
- 建議取消自動註冊.
1. 一旦資料庫已初始化完成,使用新建立的管理員帳號登入.
1. 導航至使用者設定(右上角的圖標),然後選擇
`Site Administration` -> `Authentication Sources`, 並選擇
`Add Authentication Source`.
1. 填写字段如下:
1. 填寫欄位如下:
- 認證類型:`PAM`。
- 名稱:任何有效的值都可以,如果您愿意,可以使用"System Authentication"。
- PAM 服务名稱:从/etc/pam.d/目錄下選择适用于所需認證的正确文件[^1]。
- PAM 电子邮件域:使用者認證时要附加的电子邮件后缀。例如,如果登入系统期望一个名為 gituse 的使用者,
並且将此字段设置為 mail.com,那么 Gitea 在驗證一个 GIT 实例的使用者时将期望 user emai 字段為gituser@mail.com[^2]。
- 名稱:任何有效的值都可以,如果您願意,可以使用"System Authentication"。
- PAM 服務名稱:從/etc/pam.d/目錄下選擇適用於所需認證的正確文件[^1]。
- PAM 電子郵件域:使用者認證時要附加的電子郵件後綴。例如,如果登入系統期望一個名為 gituse 的使用者,
並且將此欄位設定為 mail.com,那麼 Gitea 在驗證一個 GIT 實例的使用者時將期望 user emai 欄位為gituser@mail.com[^2]。
**Note**: PAM 支持通過[build-time flags](installation/from-source.md#build)添加,
而官方提供的二進制文件通常不会默认启用此功能。PAM 需要确保系统上有必要的 libpam 动态库,並且编译器可以访问必要的 PAM 开发头文件。
**Note**: PAM 支援通過[build-time flags](installation/from-source.md)添加,
而官方提供的二進制文件通常不會預設啟用此功能。PAM 需要確保系統上有必要的 libpam 動態庫,並且編譯器可以訪問必要的 PAM 開發頭文件。
[^1]:
例如,在 Debian "Bullseye"上使用标准 Linux 登入,可以使用`common-session-noninteractive`。这个值對於其他版本的 Debian,
包括 Ubuntu 和 Mint,可能也是有效的,請查阅您所使用发行版的文檔以确认。
例如,在 Debian "Bullseye"上使用標準 Linux 登入,可以使用`common-session-noninteractive`。這個值對於其他版本的 Debian,
包括 Ubuntu 和 Mint,可能也是有效的,請查閱您所使用發行版的文件以確認。
[^2]: **PAM 的必選项** 請注意:在上面的示例中,使用者将作為`gituser`而不是`[email protected]`登入到 Gitea 的 Web 界面。
[^2]: **PAM 的必選項** 請注意:在上面的範例中,使用者將作為`gituser`而不是`[email protected]`登入到 Gitea 的 Web 介面。
## 简單邮件传输协议(Simple Mail Transfer Protocol,SMTP)
## 簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)
此選项允许 Gitea 以 Gitea 使用者身份登入 SMTP 主机。請设置以下字段:
此選項允許 Gitea 以 Gitea 使用者身份登入 SMTP 主機。請設定以下欄位:
- 身份驗證名稱 **(必選)**
- 分配给新授权方法的名稱
- 分配給新授權方法的名稱
- SMTP 驗證類型 **(必選)**
- 用于连接 SMTP 主机的驗證類型,plain 或 login
- 用於連接 SMTP 主機的驗證類型,plain 或 login
- 主机名 **(必選)**
- 主機名 **(必選)**
- SMTP 服务的主机地址
- SMTP 服務的主機地址
- 例如:`smtp.mydomain.com`
- 端口号 **(必選)**
- 端口號 **(必選)**
- SMTP 服务的端口号
- SMTP 服務的端口號
- 例如: `587`
- 允许的域名
- 允許的域名
- 如果使用公共 SMTP 主机或有多个域的 SMTP 主机,限制哪些域可以登入
- 如果使用公共 SMTP 主機或有多個域的 SMTP 主機,限制哪些域可以登入
限制哪些域可以登入。
- 示例: `gitea.com,mydomain.com,mydomain2.com`
- 範例: `gitea.com,mydomain.com,mydomain2.com`
- 强制使用 SMTPS
- 默认情况下将使用 SMTPS 连接到端口 465.如果您希望将 smtp 用于其他端口,自行设置
- 否则,如果服务器提供' STARTTLS '扩展名,则将使用此扩展名
- 強制使用 SMTPS
- 預設情況下將使用 SMTPS 連接到端口 465.如果您希望將 smtp 用於其他端口,自行設定
- 否則,如果伺服器提供' STARTTLS '擴展名,則將使用此擴展名
- 跳過 TLS 驗證
- 禁用 TLS 驗證身份.
- 該認證源处于激活状态
- 启用或禁用此身份驗證源
- 該認證源處於激活狀態
- 啟用或禁用此身份驗證源
## FreeIPA
- 要使用 FreeIPA 凭据登入 Gitea,需要為 Gitea 建立一个绑定帳戶。
建立一个绑定帳戶:
- 在 FreeIPA 服务器上建立一个 gitea.ldif 文件,並将`dc=example,dc=com`替换為您的`dn`,然后提供一个适当安全的密碼。
- 要使用 FreeIPA 憑據登入 Gitea,需要為 Gitea 建立一個綁定帳戶。
建立一個綁定帳戶:
- 在 FreeIPA 伺服器上建立一個 gitea.ldif 文件,並將`dc=example,dc=com`替換為您的`dn`,然後提供一個適當安全的密碼。
```sh
dn: uid=gitea,cn=sysaccounts,cn=etc,dc=example,dc=com
@@ -220,76 +220,76 @@ PAM 提供了一种機制,通過对使用者進行 PAM 認證来自动将其
nsIdleTimeout: 0
```
- 导入 LDIF 文件(如果需要,請将 localhost 更改為 IPA 服务器)。系统会提示您输入 Directory Manager 的密碼。:
- 導入 LDIF 文件(如果需要,請將 localhost 更改為 IPA 伺服器)。系統會提示您輸入 Directory Manager 的密碼。:
```sh
ldapmodify -h localhost -p 389 -x -D \
"cn=Directory Manager" -W -f gitea.ldif
```
- 為`gitea_users`添加 IPA 组:
- 為`gitea_users`添加 IPA 組:
```sh
ipa group-add --desc="Gitea Users" gitea_users
```
- **提示**:對於 IPA 凭证错误,运行' kinit admin '並提供域管理帳戶密碼.
- 以管理员身份登入 Gitea,點擊 Admin Panel 下的`Authentication`。然后單擊`Add New Source`並填写详细信息,更改所有适当的地方。
- **提示**:對於 IPA 憑證錯誤,運行' kinit admin '並提供域管理帳戶密碼.
- 以管理員身份登入 Gitea,點擊 Admin Panel 下的`Authentication`。然後單擊`Add New Source`並填寫詳細資訊,更改所有適當的地方。
## SPNEGO with SSPI (Kerberos/NTLM, for Windows only)
Gitea 支持通過 Windows 内置的安全支持提供程序接口(Security Support Provider Interface,SSPI)实現 SPNEGO 單点登入認證(由 RFC4559 定义的方案),用于服务器的 Web 部分。SSPI 僅在 Windows 环境中工作,即当服务器和客户端都在 Windows 操作系统上运行时。
Gitea 支援通過 Windows 內置的安全支援提供程式介面(Security Support Provider Interface,SSPI)實現 SPNEGO 單點登入認證(由 RFC4559 定義的方案),用於伺服器的 Web 部分。SSPI 僅在 Windows 環境中工作,即當伺服器和客戶端都在 Windows 操作系統上運行時。
在激活 SSPI 單点登入認證(SSO)之前,您需要准备您的环境:
在激活 SSPI 單點登入認證(SSO)之前,您需要準備您的環境:
- 在 Active Directory 中建立一个單独的使用者账户,gitea.exe 進程将在該账户下运行(例如,在 domain.local 域下建立一个名為 user 的账户:
- 為运行 gitea.exe 的主机建立一个服务主體名稱(Service Principal Name,SPN),其类别為 HTTP:
- 在 Active Directory 中建立一個單獨的使用者帳號,gitea.exe 進程將在該帳號下運行(例如,在 domain.local 域下建立一個名為 user 的帳號:
- 為運行 gitea.exe 的主機建立一個服務主體名稱(Service Principal Name,SPN),其類別為 HTTP:
- 以特权域使用者(例如域管理员)的身份启动“命令提示符”或“PowerShell”。
- 运行下面的命令,将 host.domain.local 替换為 Web 應用程序将运行的服务器的完全限定域名(FQDN),将 domain\user 替换為在前一步中建立的账户名稱:
- 以特權域使用者(例如域管理員)的身份啟動“命令提示符”或“PowerShell”。
- 運行下面的命令,將 host.domain.local 替換為 Web 應用程式將運行的伺服器的完全限定域名(FQDN),將 domain\user 替換為在前一步中建立的帳號名稱:
```sh
setspn -A HTTP/host.domain.local domain\user
```
在遵循上述步骤之前,請确保您按照以下流程進行操作:
在遵循上述步驟之前,請確保您按照以下流程進行操作:
1. 用之前建立的使用者登入(如果已经登入,請先注销)。
2. 确保在`custom/conf/app.ini`文件的`[server]`部分中,`ROOT_URL`设置為 Web 應用程序将运行的服务器的完全限定域名(FQDN),与之前建立服务主體名稱时使用的一致(例如,`host.domain.local`)。
3. 启动 Web 服务器(运行 `gitea.exe web`)。
4. 在 `Site Administration -> Authentication Sources` 中添加一个 `SPNEGO with SSPI` 認證源,以启用 SSPI 認證。
5. 在域中的客户端计算机上,使用任何域使用者登入(与运行`gitea.exe`的服务器不同)。
6. 如果您使用 Chrome 或 Edge 浏览器,請将 Web 應用程序的 URL 添加到“本地站点”(`Internet選项 -> 安全 -> 本地站点 -> 站点`)。
7. 启动 Chrome 或 Edge 浏览器,导航到 Gitea 的 FQDN URL(例如,`http://host.domain.local:3000`)。
8. 在控制面板中點擊“Sign In”按钮,然后選择 SSPI,将会自动使用当前登入到计算机的使用者進行登入。
9. 如果無法正常工作,請确保:
- 您不是在运行`gitea.exe`的同一台服务器上运行 Web 浏览器。應該在与服务器不同的域加入计算机(客户端)上运行 Web 浏览器。如果客户端和服务器都在同一台计算机上运行,则 NTLM 将优先于 Kerberos。
- 主机上只有一个`HTTP/...`的 SPN。
- SPN 中只包含主机名,不包含端口号。
- 将 Web 應用程序的 URL 添加到"本地站点"。
- 服务器和客户端的时钟差异不超過 5 分钟(取决于组策略)。
- 在 Internet Explorer 中启用了"集成 Windows 身份驗證"(在"高级设置"下)。
1. 用之前建立的使用者登入(如果已經登入,請先註銷)。
2. 確保在`custom/conf/app.ini`文件的`[server]`部分中,`ROOT_URL`設定為 Web 應用程式將運行的伺服器的完全限定域名(FQDN),與之前建立服務主體名稱時使用的一致(例如,`host.domain.local`)。
3. 啟動 Web 伺服器(運行 `gitea.exe web`)。
4. 在 `Site Administration -> Authentication Sources` 中添加一個 `SPNEGO with SSPI` 認證源,以啟用 SSPI 認證。
5. 在域中的客戶端計算機上,使用任何域使用者登入(與運行`gitea.exe`的伺服器不同)。
6. 如果您使用 Chrome 或 Edge 瀏覽器,請將 Web 應用程式的 URL 添加到“本地站點”(`Internet選項 -> 安全 -> 本地站點 -> 站點`)。
7. 啟動 Chrome 或 Edge 瀏覽器,導航到 Gitea 的 FQDN URL(例如,`http://host.domain.local:3000`)。
8. 在控制面板中點擊“Sign In”按鈕,然後選擇 SSPI,將會自動使用當前登入到計算機的使用者進行登入。
9. 如果無法正常工作,請確保:
- 您不是在運行`gitea.exe`的同一臺伺服器上運行 Web 瀏覽器。應該在與伺服器不同的域加入計算機(客戶端)上運行 Web 瀏覽器。如果客戶端和伺服器都在同一臺計算機上運行,則 NTLM 將優先於 Kerberos。
- 主機上只有一個`HTTP/...`的 SPN。
- SPN 中只包含主機名,不包含端口號。
- 將 Web 應用程式的 URL 添加到"本地站點"。
- 伺服器和客戶端的時鐘差異不超過 5 分鐘(取決於組策略)。
- 在 Internet Explorer 中啟用了"整合 Windows 身份驗證"(在"高級設定"下)。
遵循这些步骤,您應該能够成功启用和使用 SSPI 單点登入認證(SSO)。
遵循這些步驟,您應該能夠成功啟用和使用 SSPI 單點登入認證(SSO)。
## 反向代理認證
Gitea 支持通過读取反向代理传递的 HTTP 头中的登入名或者 email 地址来支持反向代理来認證。默认是不启用的,你可以用以下配置启用。
Gitea 支援通過讀取反向代理傳遞的 HTTP 頭中的登入名或者 email 地址來支援反向代理來認證。預設是不啟用的,你可以用以下設定啟用。
```ini
[service]
ENABLE_REVERSE_PROXY_AUTHENTICATION = true
```
默认的登入使用者名的 HTTP 头是 `X-WEBAUTH-USER`,你可以通過修改 `REVERSE_PROXY_AUTHENTICATION_USER` 来变更它。如果使用者不存在,可以自动建立使用者,当然你需要修改 `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION=true` 来启用它。
預設的登入使用者名稱的 HTTP 頭是 `X-WEBAUTH-USER`,你可以透過修改 `REVERSE_PROXY_AUTHENTICATION_USER` 來變更它。如果使用者不存在,可以自動建立使用者,當然你需要修改 `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION=true` 來啟用它。
默认的登入使用者 Email 的 HTTP 头是 `X-WEBAUTH-EMAIL`,你可以通過修改 `REVERSE_PROXY_AUTHENTICATION_EMAIL` 来变更它。如果使用者不存在,可以自动建立使用者,当然你需要修改 `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION=true` 来启用它。你也可以通過修改 `ENABLE_REVERSE_PROXY_EMAIL` 来启用或停用这个 HTTP 头。
預設的登入使用者 Email 的 HTTP 頭是 `X-WEBAUTH-EMAIL`,你可以透過修改 `REVERSE_PROXY_AUTHENTICATION_EMAIL` 來變更它。如果使用者不存在,可以自動建立使用者,當然你需要修改 `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION=true` 來啟用它。你也可以透過修改 `ENABLE_REVERSE_PROXY_EMAIL` 來啟用或停用這個 HTTP 頭。
如果设置了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,则使用者的全名会从 `X-WEBAUTH-FULLNAME` 读取,这样在自动建立使用者时将使用这个字段作為使用者全名,你也可以通過修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 来变更 HTTP 头。
如果設定了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,則使用者的全名會從 `X-WEBAUTH-FULLNAME` 讀取,這樣在自動建立使用者時將使用這個欄位作為使用者全名,你也可以透過修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 來變更 HTTP 頭。
你也可以通過修改 `REVERSE_PROXY_TRUSTED_PROXIES` 来设置反向代理的 IP 地址范围,加强安全性,默认值是 `127.0.0.0/8,::1/128`。 通過 `REVERSE_PROXY_LIMIT`, 可以设置最多信任几级反向代理。
你也可以透過修改 `REVERSE_PROXY_TRUSTED_PROXIES` 來設定反向代理的 IP 地址範圍,加強安全性,預設值是 `127.0.0.0/8,::1/128`。 通過 `REVERSE_PROXY_LIMIT`, 可以設定最多信任幾級反向代理。
你可以通過以下配置為 API 启用此認證方法:
你可以透過以下設定為 API 啟用此認證方法:
```ini
[service]
@@ -297,5 +297,5 @@ ENABLE_REVERSE_PROXY_AUTHENTICATION_API = true
```
:::note
当此方法用于 API 时,反向代理负责处理 CSRF 保护。
當此方法用於 API 時,反向代理負責處理 CSRF 保護。
:::
@@ -7,19 +7,19 @@ aliases:
- /zh-tw/backup-and-restore
---
# 备份与恢复
# 備份與恢復
Gitea 已经实現了 `dump` 命令可以用来备份所有需要的文件到一个 zip 压缩文件。該压缩文件可以被用来進行数据恢复。
Gitea 已經實現了 `dump` 命令可以用來備份所有需要的文件到一個 zip 壓縮文件。該壓縮文件可以被用來進行資料恢復。
## 备份一致性
## 備份一致性
為了确保 Gitea 实例的一致性,在备份期间必須关闭它。
為了確保 Gitea 實例的一致性,在備份期間必須關閉它。
Gitea 包括数据库、文件和 Git 存放庫,当它被使用时所有这些都会发生变化。例如,当迁移正在進行时,在数据库中建立一个事务,而 Git 存放庫正在被复制。如果备份发生在迁移的中间,Git 存放庫可能是不完整的,尽管数据库声稱它是完整的,因為它是在之后被转儲的。避免这种竞争条件的唯一方法是在备份期间停止 Gitea 实例。
Gitea 包括資料庫、文件和 Git 存放庫,當它被使用時所有這些都會發生變化。例如,當遷移正在進行時,在資料庫中建立一個事務,而 Git 存放庫正在被複制。如果備份發生在遷移的中間,Git 存放庫可能是不完整的,儘管資料庫聲稱它是完整的,因為它是在之後被轉儲的。避免這種競爭條件的唯一方法是在備份期間停止 Gitea 實例。
## 备份命令 (`dump`)
## 備份命令 (`dump`)
先转到 git 使用者的权限: `su git`. 再 Gitea 目錄运行 `./gitea dump`。一般会显示类似如下的输出:
先轉到 git 使用者的權限: `su git`. 再 Gitea 目錄運行 `./gitea dump`。一般會顯示類似如下的輸出:
```
2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001
@@ -30,20 +30,20 @@ Gitea 包括数据库、文件和 Git 存放庫,当它被使用时所有这些
2016/12/27 22:32:34 Finish dumping in file gitea-dump-1482906742.zip
```
最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容:
最後生成的 `gitea-dump-1482906742.zip` 文件將會包含如下內容:
- `app.ini` - 如果原先存儲在默认的 custom/ 目錄之外,则是配置文件的可選副本
- `custom/` - 所有保存在 `custom/` 目錄下的配置和自定义的文件。
- `data/` - 数据目錄(APP_DATA_PATH),如果使用文件会话,则不包括会话。該目錄包括 `attachments`、`avatars`、`lfs`、`indexers`、如果使用 SQLite 则包括 SQLite 文件。
- `app.ini` - 如果原先儲存在預設的 custom/ 目錄之外,則是設定文件的可選副本
- `custom/` - 所有保存在 `custom/` 目錄下的設定和自訂的文件。
- `data/` - 資料目錄(APP_DATA_PATH),如果使用文件會話,則不包括會話。該目錄包括 `attachments`、`avatars`、`lfs`、`indexers`、如果使用 SQLite 則包括 SQLite 文件。
- `repos/` - 存放庫目錄的完整副本。
- `gitea-db.sql` - 数据库 dump 出来的 SQL。
- `log/` - Logs 文件,如果用作迁移不是必須的。
- `gitea-db.sql` - 資料庫 dump 出來的 SQL。
- `log/` - Logs 文件,如果用作遷移不是必須的。
中间备份文件将会在临时目錄進行建立,如果您要重新指定临时目錄,可以用 `--tempdir` 參數,或者用 `TMPDIR` 环境变量。
中間備份文件將會在臨時目錄進行建立,如果您要重新指定臨時目錄,可以用 `--tempdir` 參數,或者用 `TMPDIR` 環境變量。
## 备份数据库
## 備份資料庫
`gitea dump` 建立的 SQL 转儲使用 XORM,Gitea 管理员可能更喜欢使用本地的 MySQL 和 PostgreSQL 转儲工具。使用 XORM 转儲数据库时仍然存在一些问题,可能会导致在尝试恢复时出現问题。
`gitea dump` 建立的 SQL 轉儲使用 XORM,Gitea 管理員可能更喜歡使用本地的 MySQL 和 PostgreSQL 轉儲工具。使用 XORM 轉儲資料庫時仍然存在一些問題,可能會導致在嘗試恢復時出現問題。
```sh
# mysql
@@ -54,23 +54,23 @@ pg_dump -U $USER $DATABASE > gitea-db.sql
### 使用 Docker (`dump`)
在使用 Docker 时,使用 `dump` 命令有一些注意事项。
在使用 Docker 時,使用 `dump` 命令有一些注意事項。
必須以 `gitea/conf/app.ini` 中指定的 `RUN_USER = <OS_USERNAME>` 執行該命令;並且,為了让备份文件夹的压缩過程能够顺利執行,`docker exec` 命令必須在 `--tempdir` 内部執行。
必須以 `gitea/conf/app.ini` 中指定的 `RUN_USER = <OS_USERNAME>` 執行該命令;並且,為了讓備份文件夾的壓縮過程能夠順利執行,`docker exec` 命令必須在 `--tempdir` 內部執行。
示例:
範例:
```none
docker exec -u <OS_USERNAME> -it -w <--tempdir> $(docker ps -qf 'name=^<NAME_OF_DOCKER_CONTAINER>$') bash -c '/usr/local/bin/gitea dump -c </path/to/app.ini>'
```
\*注意:`--tempdir` 指的是 Gitea 使用的 Docker 环境的临时目錄;如果您没有指定自定义的 `--tempdir`,那么 Gitea 将使用 `/tmp` 或 Docker 容器的 `TMPDIR` 环境变量。對於 `--tempdir`,請相應调整您的 `docker exec` 命令選项。
\*注意:`--tempdir` 指的是 Gitea 使用的 Docker 環境的臨時目錄;如果您沒有指定自訂的 `--tempdir`,那麼 Gitea 將使用 `/tmp` 或 Docker 容器的 `TMPDIR` 環境變量。對於 `--tempdir`,請相應調整您的 `docker exec` 命令選項。
结果應該是一个文件,存儲在指定的 `--tempdir` 中,类似于:`gitea-dump-1482906742.zip`
結果應該是一個文件,儲存在指定的 `--tempdir` 中,類似於:`gitea-dump-1482906742.zip`
## 恢复命令 (`restore`)
## 恢復命令 (`restore`)
当前還没有恢复命令,恢复需要人工進行。主要是把文件和数据库進行恢复。
當前還沒有恢復命令,恢復需要人工進行。主要是把文件和資料庫進行恢復。
例如:
@@ -93,54 +93,54 @@ psql -U $USER -d $DATABASE < gitea-db.sql
service gitea restart
```
如果安裝方式发生了变化(例如 二進制 -> Docker),或者 Gitea 安裝到了与之前安裝不同的目錄,则需要重新生成存放庫 Git 钩子。
如果安裝方式發生了變化(例如 二進制 -> Docker),或者 Gitea 安裝到了與之前安裝不同的目錄,則需要重新生成存放庫 Git 鉤子。
在 Gitea 运行时,並从 Gitea 二進制文件所在的目錄執行:`./gitea admin regenerate hooks`
在 Gitea 運行時,並從 Gitea 二進制文件所在的目錄執行:`./gitea admin regenerate hooks`
这样可以确保存放庫 Git 钩子中的應用程序和配置文件路径与当前安裝一致。如果这些路径没有更新,存放庫的 `push` 操作将失败。
這樣可以確保存放庫 Git 鉤子中的應用程式和設定文件路徑與當前安裝一致。如果這些路徑沒有更新,存放庫的 `push` 操作將失敗。
### 使用 Docker (`restore`)
在基于 Docker 的 Gitea 实例中,也没有恢复命令的支持。恢复過程与前面描述的步骤相同,但路径不同。
在基於 Docker 的 Gitea 實例中,也沒有恢復命令的支援。恢復過程與前面描述的步驟相同,但路徑不同。
示例:
範例:
```sh
# 在容器中打开 bash 会话
# 在容器中打開 bash 會話
docker exec --user git -it 2a83b293548e bash
# 在容器内解压您的备份文件
# 在容器內解壓您的備份文件
unzip gitea-dump-1610949662.zip
cd gitea-dump-1610949662
# 恢复 Gitea 数据
# 恢復 Gitea 數據
mv data/* /data/gitea
# 恢复存放庫本身
# 恢復存放庫本身
mv repos/* /data/git/gitea-repositories/
# 调整文件权限
# 調整文件權限
chown -R git:git /data
# 重新生成 Git 钩子
# 重新生成 Git 鉤子
/usr/local/bin/gitea -c '/data/gitea/conf/app.ini' admin regenerate hooks
```
Gitea 容器中的默认使用者是 `git`(1000:1000)。請用您的 Gitea 容器 ID 或名稱替换 `2a83b293548e`。
Gitea 容器中的預設使用者是 `git`(1000:1000)。請用您的 Gitea 容器 ID 或名稱替換 `2a83b293548e`。
### 使用 Docker-rootless (`restore`)
在 Docker-rootless 容器中的恢复工作流程只是要使用的目錄不同:
在 Docker-rootless 容器中的恢復工作流程只是要使用的目錄不同:
```sh
# 在容器中打开 bash 会话
# 在容器中打開 bash 會話
docker exec --user git -it 2a83b293548e bash
# 在容器内解压您的备份文件
# 在容器內解壓您的備份文件
unzip gitea-dump-1610949662.zip
cd gitea-dump-1610949662
# 恢复 app.ini
# 恢復 app.ini
mv data/conf/app.ini /etc/gitea/app.ini
# 恢复 Gitea 数据
# 恢復 Gitea 數據
mv data/* /var/lib/gitea
# 恢复存放庫本身
# 恢復存放庫本身
mv repos/* /var/lib/gitea/git/gitea-repositories
# 调整文件权限
# 調整文件權限
chown -R git:git /etc/gitea/app.ini /var/lib/gitea
# 重新生成 Git 钩子
# 重新生成 Git 鉤子
/usr/local/bin/gitea -c '/etc/gitea/app.ini' admin regenerate hooks
```
@@ -7,37 +7,37 @@ aliases:
- /zh-tw/cmd-embedded
---
# 嵌入资源提取工具
# 嵌入資源提取工具
Gitea 的可執行文件包含了运行所需的所有资源:模板、图片、样式表和翻译文件。你可以通過在 `custom` 目錄下的相應路径中放置替换文件来覆盖其中的任何资源(详见 [自定义 Gitea 配置](../administration/customizing-gitea.md))。
Gitea 的可執行文件包含了運行所需的所有資源:模板、圖片、樣式表和翻譯文件。你可以透過在 `custom` 目錄下的相應路徑中放置替換文件來覆蓋其中的任何資源(詳見 [自訂 Gitea 設定](../administration/customizing-gitea.md))。
要获取嵌入资源的副本以進行编辑,可以使用 CLI 中的 `embedded` 命令,通過操作系统的 shell 執行。
要獲取嵌入資源的副本以進行編輯,可以使用 CLI 中的 `embedded` 命令,通過操作系統的 shell 執行。
**注意:** 嵌入资源提取工具包含在 Gitea 1.12 及以上版本中。
**注意:** 嵌入資源提取工具包含在 Gitea 1.12 及以上版本中。
## 资源列表
## 資源列表
要列出嵌入在 Gitea 可執行文件中的资源,請使用以下语法:
要列出嵌入在 Gitea 可執行文件中的資源,請使用以下語法:
```sh
gitea embedded list [--include-vendored] [patterns...]
```
`--include-vendored` 标志使命令包括被供應的文件,这些文件通常被排除在外;即来自外部库的文件,这些文件是 Gitea 所需的(例如 [octicons](https://octicons.github.com/) 等)。
`--include-vendored` 標誌使命令包括被供應的文件,這些文件通常被排除在外;即來自外部庫的文件,這些文件是 Gitea 所需的(例如 [octicons](https://octicons.github.com/) 等)。
可以提供一系列文件搜索模式。Gitea 使用 [gobwas/glob](https://github.com/gobwas/glob) 作為其 glob 语法。以下是一些示例:
可以提供一系列文件搜索模式。Gitea 使用 [gobwas/glob](https://github.com/gobwas/glob) 作為其 glob 語法。以下是一些範例:
- 列出所有模板文件,無论在哪个虚拟目錄下:`**.tmpl`
- 列出所有邮件模板文件:`templates/mail/**.tmpl`
- 列出所有模板文件,無論在哪個虛擬目錄下:`**.tmpl`
- 列出所有郵件模板文件:`templates/mail/**.tmpl`
列出 `public/assets/img` 目錄下的所有文件:`public/assets/img/**`
不要忘记為模式使用引号,因為空格、`*` 和其他字符可能对命令行解释器有特殊含义。
不要忘記為模式使用引號,因為空格、`*` 和其他字符可能對命令行解釋器有特殊含義。
如果未提供模式,则列出所有文件。
如果未提供模式,則列出所有文件。
### 示例:列出所有嵌入文件
### 範例:列出所有嵌入文件
列出所有路径中包含 `openid` 的嵌入文件:
列出所有路徑中包含 `openid` 的嵌入文件:
```sh
$ gitea embedded list '**openid**'
@@ -51,33 +51,33 @@ templates/user/auth/signup_openid_register.tmpl
templates/user/settings/security_openid.tmpl
```
## 提取资源
## 提取資源
要提取嵌入在 Gitea 可執行文件中的资源,請使用以下语法:
要提取嵌入在 Gitea 可執行文件中的資源,請使用以下語法:
```sh
gitea [--config {file}] embedded extract [--destination {dir}|--custom] [--overwrite|--rename] [--include-vendored] {patterns...}
```
`--config` 選项用于告知 Gitea `app.ini` 配置文件的位置(如果不在默认位置)。此選项僅在使用 `--custom` 标志时使用。
`--config` 選項用於告知 Gitea `app.ini` 設定文件的位置(如果不在預設位置)。此選項僅在使用 `--custom` 標誌時使用。
`--destination` 選项用于指定提取文件的目标目錄。默认為当前目錄。
`--destination` 選項用於指定提取文件的目標目錄。預設為當前目錄。
`--custom` 标志告知 Gitea 直接将文件提取到 `custom` 目錄中。為使其正常工作,該命令需要知道 `app.ini` 配置文件的位置(通過 `--config` 指定),並且根据配置的不同,需要从 Gitea 通常启动的目錄运行。有关详细信息,請参阅 [自定义 Gitea 配置](../administration/customizing-gitea.md)。
`--custom` 標誌告知 Gitea 直接將文件提取到 `custom` 目錄中。為使其正常工作,該命令需要知道 `app.ini` 設定文件的位置(通過 `--config` 指定),並且根據設定的不同,需要從 Gitea 通常啟動的目錄運行。有關詳細資訊,請參閱 [自訂 Gitea 設定](../administration/customizing-gitea.md)。
`--overwrite` 标志允许覆盖目标目錄中的任何現有文件。
`--overwrite` 標誌允許覆蓋目標目錄中的任何現有文件。
`--rename` 标志告知 Gitea 将目标目錄中的任何現有文件重命名為 `filename.bak`。之前的 `.bak` 文件将被覆盖。
`--rename` 標誌告知 Gitea 將目標目錄中的任何現有文件重命名為 `filename.bak`。之前的 `.bak` 文件將被覆蓋。
至少需要提供一个文件搜索模式;有关模式的语法和示例,請参阅上述 `list` 子命令。
至少需要提供一個文件搜索模式;有關模式的語法和範例,請參閱上述 `list` 子命令。
### 重要提示
請确保**只提取需要自定义的文件**。位于 `custom` 目錄中的文件不会受到 Gitea 的升级過程的影響。当 Gitea 升级到新版本(通過替换可執行文件)时,许多嵌入文件将发生变化。Gitea 将尊重並使用在 `custom` 目錄中找到的任何文件,即使这些文件是旧的和不兼容的。
請確保**只提取需要自訂的文件**。位於 `custom` 目錄中的文件不會受到 Gitea 的升級過程的影響。當 Gitea 升級到新版本(通過替換可執行文件)時,許多嵌入文件將發生變化。Gitea 將尊重並使用在 `custom` 目錄中找到的任何文件,即使這些文件是舊的和不相容的。
### 示例:提取邮件模板
### 範例:提取郵件模板
将邮件模板提取到临时目錄:
將郵件模板提取到臨時目錄:
```sh
$ mkdir tempdir
File diff suppressed because it is too large. Load diff
@@ -7,77 +7,77 @@ aliases:
- /zh-tw/customizing-gitea
---
# 自定义 Gitea 配置
# 自訂 Gitea 設定
Gitea 引用 `custom` 目錄中的自定义配置文件来覆盖配置、模板等默认配置。
Gitea 引用 `custom` 目錄中的自訂設定文件來覆蓋設定、模板等預設設定。
如果从二進制部署 Gitea ,则所有默认路径都将相對於該 gitea 二進制文件;如果从发行版安裝,则可能会将这些路径修改為 Linux 文件系统标准。Gitea
将会自动建立包括 `custom/` 在内的必要應用目錄,應用本身的配置存放在
`custom/conf/app.ini` 当中。在发行版中可能会以 `/etc/gitea/` 的形式為 `custom` 设置一个符号链接,查看配置详情請移步:
如果從二進制部署 Gitea ,則所有預設路徑都將相對於該 gitea 二進制文件;如果從發行版安裝,則可能會將這些路徑修改為 Linux 文件系統標準。Gitea
將會自動建立包括 `custom/` 在內的必要應用目錄,應用本身的設定存放在
`custom/conf/app.ini` 當中。在發行版中可能會以 `/etc/gitea/` 的形式為 `custom` 設定一個符號鏈接,查看設定詳情請移步:
- [快速备忘單](../administration/config-cheat-sheet.md)
- [完整配置清單](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini)
- [快速備忘單](../administration/config-cheat-sheet.md)
- [完整設定清單](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini)
如果您在 binary 同目錄下無法找到 `custom` 文件夹,請检查您的 `GITEA_CUSTOM`
环境变量配置, 因為它可能被配置到了其他地方(可能被一些启动脚本设置指定了目錄)。
如果您在 binary 同目錄下無法找到 `custom` 文件夾,請檢查您的 `GITEA_CUSTOM`
環境變量設定, 因為它可能被設定到了其他地方(可能被一些啟動腳本設定指定了目錄)。
- [环境变量清單](../administration/environment-variables.md)
- [環境變量清單](../administration/environment-variables.md)
**注:** 必須完全重启 Gitea 以使配置生效。
**注:** 必須完全重啟 Gitea 以使設定生效。
## 使用自定义 /robots.txt
## 使用自訂 /robots.txt
将 [想要展示的内容](http://www.robotstxt.org/) 存放在 `custom` 目錄中的
`robots.txt` 文件来让 Gitea 使用自定义的`/robots.txt` (默认:空 404)。
將 [想要展示的內容](http://www.robotstxt.org/) 存放在 `custom` 目錄中的
`robots.txt` 文件來讓 Gitea 使用自訂的`/robots.txt` (預設:空 404)。
## 使用自定义的公共文件
## 使用自訂的公共文件
将自定义的公共文件(比如页面和图片)作為 webroot 放在 `custom/public/` 中来让 Gitea 提供这些自定义内容(符号链接将被追踪)。
將自訂的公共文件(比如頁面和圖片)作為 webroot 放在 `custom/public/` 中來讓 Gitea 提供這些自訂內容(符號鏈接將被追蹤)。
举例说明:`image.png` 存放在 `custom/public/assets/`中,那么它可以通過链接 http://gitea.domain.tld/assets/image.png 访问。
舉例說明:`image.png` 存放在 `custom/public/assets/`中,那麼它可以透過鏈接 http://gitea.domain.tld/assets/image.png 訪問。
## 修改默认头像
## 修改預設頭像
替换以下目錄中的 png 图片: `custom/public/assets/img/avatar\_default.png`
替換以下目錄中的 png 圖片: `custom/public/assets/img/avatar\_default.png`
## 自定义 Gitea 页面
## 自訂 Gitea 頁面
您可以改变 Gitea `custom/templates` 的每个單页面。您可以在 Gitea 源码的 `templates` 目錄中找到用于覆盖的模板文件,應用将根据
`custom/templates` 目錄下的路径结构進行匹配和覆盖。
您可以改變 Gitea `custom/templates` 的每個單頁面。您可以在 Gitea 源碼的 `templates` 目錄中找到用於覆蓋的模板文件,應用將根據
`custom/templates` 目錄下的路徑結構進行匹配和覆蓋。
包含在 `{{` 和 `}}` 中的任何语句都是 Gitea 的模板语法,如果您不完全理解这些组件,不建议您对它们進行修改。
包含在 `{{` 和 `}}` 中的任何語句都是 Gitea 的模板語法,如果您不完全理解這些元件,不建議您對它們進行修改。
### 添加链接和页签
### 添加鏈接和頁籤
如果您只是想添加额外的链接到顶部导航栏或额外的選项卡到存儲库视图,您可以将它们放在您 `custom/templates/custom/` 目錄下的 `extra_links.tmpl` 和 `extra_tabs.tmpl` 文件中。
如果您只是想添加額外的鏈接到頂部導航欄或額外的選項卡到儲存庫視圖,您可以將它們放在您 `custom/templates/custom/` 目錄下的 `extra_links.tmpl` 和 `extra_tabs.tmpl` 文件中。
举例说明:假设您需要在网站放置一个静态的“关于”页面,您只需将該页面放在您的
"custom/public/"目錄下(比如 `custom/public/impressum.html`)並且将它与 `custom/templates/custom/extra_links.tmpl` 链接起来即可。
舉例說明:假設您需要在網站放置一個靜態的“關於”頁面,您只需將該頁面放在您的
"custom/public/"目錄下(比如 `custom/public/impressum.html`)並且將它與 `custom/templates/custom/extra_links.tmpl` 鏈接起來即可。
这个链接應当使用一个名為“item”的 class 来匹配当前样式,您可以使用 `{{AppSubUrl}}` 来获取 base URL:
這個鏈接應當使用一個名為“item”的 class 來匹配當前樣式,您可以使用 `{{AppSubUrl}}` 來獲取 base URL:
`<a class="item" href="{{AppSubUrl}}/assets/impressum.html">Impressum</a>`
同理,您可以将页签添加到 `extra_tabs.tmpl` 中,使用同样的方式来添加页签。它的具體样式需要与
`templates/repo/header.tmpl` 中已有的其他選项卡的样式匹配
同理,您可以將頁籤添加到 `extra_tabs.tmpl` 中,使用同樣的方式來添加頁籤。它的具體樣式需要與
`templates/repo/header.tmpl` 中已有的其他選項卡的樣式匹配
([source in GitHub](https://github.com/go-gitea/gitea/blob/main/templates/repo/header.tmpl))
### 页面的其他新增内容
### 頁面的其他新增內容
除了 `extra_links.tmpl` 和 `extra_tabs.tmpl`,您可以在您的 `custom/templates/custom/` 目錄中存放一些其他有用的模板,例如:
- `header.tmpl`,在 `<head>` 标记结束之前的模板,例如添加自定义 CSS 文件
- `body_outer_pre.tmpl`,在 `<body>` 标记开始处的模板
- `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 `<div class="full height">`
- `body_inner_post.tmpl`,在主 container 结束处的模板
- `header.tmpl`,在 `<head>` 標記結束之前的模板,例如添加自訂 CSS 文件
- `body_outer_pre.tmpl`,在 `<body>` 標記開始處的模板
- `body_inner_pre.tmpl`,在頂部導航欄之前,但在主 container 內部的模板,例如添加一個 `<div class="full height">`
- `body_inner_post.tmpl`,在主 container 結束處的模板
- `body_outer_post.tmpl`,在底部 `<footer>` 元素之前.
- `footer.tmpl`,在 `<body>` 標籤结束处的模板,可以在这里填写一些附加的 Javascript 脚本。
- `footer.tmpl`,在 `<body>` 標籤結束處的模板,可以在這裡填寫一些附加的 Javascript 腳本。
## 自定义 gitignores,labels, licenses, locales 以及 readmes
## 自訂 gitignores,labels, licenses, locales 以及 readmes
将自定义文件放在 `custom/options` 下相應子的文件夹中即可
將自訂文件放在 `custom/options` 下相應子的文件夾中即可
## 更改 Gitea 外观
## 更改 Gitea 外觀
内置主题是“gitea-light”、“gitea-dark”和“gitea-auto”(自动适應操作系统设置)。
內置主題是“gitea-light”、“gitea-dark”和“gitea-auto”(自動適應操作系統設定)。
默认主题可以通過 `app.ini` 的 [ui](../administration/config-cheat-sheet.md#界面) 部分中的 `DEFAULT_THEME` 進行更改。
預設主題可以透過 `app.ini` 的 [ui](../administration/config-cheat-sheet.md) 部分中的 `DEFAULT_THEME` 進行更改。
@@ -7,17 +7,17 @@ aliases:
- /zh-tw/email-setup
---
# Email 设置
# Email 設定
Gitea 具有邮件功能,用于发送事务性邮件(例如注册确认邮件)。它可以配置為使用 Sendmail(或兼容的 MTA,例如 Postfix 和 msmtp)或直接使用 SMTP 服务器。
Gitea 具有郵件功能,用於發送事務性郵件(例如註冊確認郵件)。它可以設定為使用 Sendmail(或相容的 MTA,例如 Postfix 和 msmtp)或直接使用 SMTP 伺服器。
## 使用 Sendmail
使用 `sendmail` 命令作為邮件传输代理(mailer)。
使用 `sendmail` 命令作為郵件傳輸代理(mailer)。
注意:對於在官方 Gitea Docker 镜像中使用,請使用 SMTP 版本進行配置(請参考下一节)。
注意:對於在官方 Gitea Docker 鏡像中使用,請使用 SMTP 版本進行設定(請參考下一節)。
注意:對於面向互联网的网站,請查阅您的 MTA 文檔以了解通過 TLS 发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受為合法邮件。
注意:對於面向互聯網的網站,請查閱您的 MTA 文件以瞭解通過 TLS 發送郵件的說明。同時設定 SPF、DMARC 和 DKIM DNS 記錄,以使發送的郵件被各個電子郵件提供商接受為合法郵件。
```ini title="app.ini"
[mailer]
@@ -25,12 +25,12 @@ ENABLED = true
FROM = [email protected]
PROTOCOL = sendmail
SENDMAIL_PATH = /usr/sbin/sendmail
SENDMAIL_ARGS = "--" ; 大多数 "sendmail" 程序都接受選项,使用 "--" 将防止电子邮件地址被解释為選项。
SENDMAIL_ARGS = "--" ; 大多數 "sendmail" 程序都接受選項,使用 "--" 將防止電子郵件地址被解釋為選項。
```
## 使用 SMTP
直接使用 SMTP 服务器作為中继。如果您不想在实例上设置 MTA,但在电子邮件提供商那里有一个帳戶,这个選项非常有用。
直接使用 SMTP 伺服器作為中繼。如果您不想在實例上設定 MTA,但在電子郵件提供商那裡有一個帳戶,這個選項非常有用。
```ini title="app.ini"
[mailer]
@@ -43,29 +43,29 @@ USER = [email protected]
PASSWD = `password`
```
重启 Gitea 以使配置更改生效。
重啟 Gitea 以使設定更改生效。
要发送测试邮件以驗證设置,請转到 Gitea > 站点管理 > 配置 > SMTP 邮件配置。
要發送測試郵件以驗證設定,請轉到 Gitea > 站點管理 > 設定 > SMTP 郵件設定。
有关所有選项的完整列表,請查看[配置速查表](../administration/config-cheat-sheet.md)。
有關所有選項的完整列表,請查看[設定速查表](../administration/config-cheat-sheet.md)。
請注意:只有在使用 TLS 或 `HOST=localhost` 加密 SMTP 服务器通信时才支持身份驗證。TLS 加密可以通過以下方式進行:
請注意:只有在使用 TLS 或 `HOST=localhost` 加密 SMTP 伺服器通信時才支援身份驗證。TLS 加密可以透過以下方式進行:
- 通過端口 587 的 STARTTLS(也稱為 Opportunistic TLS)。初始连接是明文的,但如果服务器支持,则可以升级為 TLS。
- 通過默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。
- 使用 `PROTOCOL=smtps` 進行强制的 SMTPS 连接。(这两种方式都被稱為 Implicit TLS)
这是由于 Go 内部库对 STRIPTLS 攻擊的保护機制。
- 通過端口 587 的 STARTTLS(也稱為 Opportunistic TLS)。初始連接是明文的,但如果伺服器支援,則可以升級為 TLS。
- 通過預設端口 465 的 SMTPS 連接。連接到伺服器從一開始就使用 TLS。
- 使用 `PROTOCOL=smtps` 進行強制的 SMTPS 連接。(這兩種方式都被稱為 Implicit TLS)
這是由於 Go 內部庫對 STRIPTLS 攻擊的保護機制。
請注意,自 2018 年起,[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。
請注意,自 2018 年起,[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推薦使用 Implicit TLS。
### Gmail
以下配置應該适用于 Gmail 的 SMTP 服务器:
以下設定應該適用於 Gmail 的 SMTP 伺服器:
```ini title="app.ini"
[mailer]
ENABLED = true
HOST = smtp.gmail.com:465 ; 對於 Gitea >= 1.18.0,删除此行
HOST = smtp.gmail.com:465 ; 對於 Gitea >= 1.18.0,刪除此行
SMTP_ADDR = smtp.gmail.com
SMTP_PORT = 465
FROM = [email protected]
@@ -74,4 +74,4 @@ PASSWD = `***`
PROTOCOL = smtps
```
請注意,您需要建立並使用一个 [應用密碼](https://support.google.com/accounts/answer/185833?hl=en) 並在您的 Google 帳戶上启用 2FA。您将無法直接使用您的 Google 帳戶密碼。
請注意,您需要建立並使用一個 [應用密碼](https://support.google.com/accounts/answer/185833?hl=en) 並在您的 Google 帳戶上啟用 2FA。您將無法直接使用您的 Google 帳戶密碼。
@@ -7,43 +7,43 @@ aliases:
- /zh-tw/environment-variables
---
# 环境变量清單
# 環境變量清單
这里是用来控制 Gitea 行為表現的的环境变量清單,您需要在執行如下 Gitea 启动命令前设置它们来确保配置生效:
這裡是用來控制 Gitea 行為表現的的環境變量清單,您需要在執行如下 Gitea 啟動命令前設定它們來確保設定生效:
```
GITEA_CUSTOM=/home/gitea/custom ./gitea web
```
## Go 的配置
## Go 的設定
因為 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置參數:
因為 Gitea 使用 Go 語言編寫,因此它使用了一些相關的 Go 的設定參數:
- `GOOS`
- `GOARCH`
- [`GOPATH`](https://go.dev/cmd/go/#hdr-GOPATH_environment_variable)
您可以在[官方文檔](https://go.dev/cmd/go/#hdr-Environment_variables)中查阅这些配置參數的详细信息。
您可以在[官方文件](https://go.dev/cmd/go/#hdr-Environment_variables)中查閱這些設定參數的詳細資訊。
## Gitea 的文件目錄
- `GITEA_WORK_DIR`:工作目錄的绝对路径
- `GITEA_CUSTOM`:默认情况下 Gitea 使用默认目錄 `GITEA_WORK_DIR`/custom,您可以使用这个參數来配置 _custom_ 目錄
- `GOGS_WORK_DIR`: 已废弃,請使用 `GITEA_WORK_DIR` 替代
- `GOGS_CUSTOM`: 已废弃,請使用 `GITEA_CUSTOM` 替代
- `GITEA_WORK_DIR`:工作目錄的絕對路徑
- `GITEA_CUSTOM`:預設情況下 Gitea 使用預設目錄 `GITEA_WORK_DIR`/custom,您可以使用這個參數來設定 _custom_ 目錄
- `GOGS_WORK_DIR`: 已廢棄,請使用 `GITEA_WORK_DIR` 替代
- `GOGS_CUSTOM`: 已廢棄,請使用 `GITEA_CUSTOM` 替代
## 操作系统配置
## 操作系統設定
- `USER`:Gitea 运行时使用的系统使用者,它将作為一些 repository 的访问地址的一部分
- `USERNAME`: 如果没有配置 `USER`, Gitea 将使用 `USERNAME`
- `HOME`: 使用者的 home 目錄,在 Windows 中会使用 `USERPROFILE` 环境变量
- `USER`:Gitea 運行時使用的系統使用者,它將作為一些 repository 的訪問地址的一部分
- `USERNAME`: 如果沒有設定 `USER`, Gitea 將使用 `USERNAME`
- `HOME`: 使用者的 home 目錄,在 Windows 中會使用 `USERPROFILE` 環境變量
### 僅限于 Windows 的配置
### 僅限於 Windows 的設定
- `USERPROFILE`: 使用者的主目錄,如果未配置则会使用 `HOMEDRIVE` + `HOMEPATH`
- `HOMEDRIVE`: 用于访问 home 目錄的主驱动器路径(C 盘)
- `HOMEPATH`:在指定主驱动器下的 home 目錄相对路径
- `USERPROFILE`: 使用者的主目錄,如果未設定則會使用 `HOMEDRIVE` + `HOMEPATH`
- `HOMEDRIVE`: 用於訪問 home 目錄的主驅動器路徑(C 盤)
- `HOMEPATH`:在指定主驅動器下的 home 目錄相對路徑
## Miscellaneous
- `SKIP_MINWINSVC`:如果设置為 1,在 Windows 上不会以 service 的形式运行。
- `SKIP_MINWINSVC`:如果設定為 1,在 Windows 上不會以 service 的形式運行。
@@ -9,18 +9,18 @@ aliases:
# 外部渲染器
Gitea 通過外部二進制文件支持自定义文件渲染(例如 Jupyter notebooks、asciidoc 等),只需要進行以下步骤:
Gitea 通過外部二進制文件支援自訂文件渲染(例如 Jupyter notebooks、asciidoc 等),只需要進行以下步驟:
- 安裝外部二進制文件
- 在您的 `app.ini` 文件中添加一些配置
- 重新启动 Gitea 实例
- 在您的 `app.ini` 文件中添加一些設定
- 重新啟動 Gitea 實例
此功能支持整个文件的渲染。如果您想要在 Markdown 中渲染代码块,您需要使用 JavaScript 進行一些操作。請参阅 [自定义 Gitea 配置](../administration/customizing-gitea.md) 页面上的一些示例。
此功能支援整個文件的渲染。如果您想要在 Markdown 中渲染程式碼塊,您需要使用 JavaScript 進行一些操作。請參閱 [自訂 Gitea 設定](../administration/customizing-gitea.md) 頁面上的一些範例。
## 安裝外部二進制文件
為了通過外部二進制文件進行文件渲染,必須安裝它们的关联軟體包。
如果您正在使用 Docker 镜像,则您的 `Dockerfile` 應該包含以下内容:
為了通過外部二進制文件進行文件渲染,必須安裝它們的關聯套件。
如果您正在使用 Docker 鏡像,則您的 `Dockerfile` 應該包含以下內容:
```docker
FROM docker.gitea.com/gitea:@dockerVersion@
@@ -36,16 +36,16 @@ RUN pipx install jupyter docutils --include-deps
# 在上面添加您需要安裝的任何其他 Python 軟體包
```
## `app.ini` 文件配置
## `app.ini` 文件設定
在您的自定义 `app.ini` 文件中為每个外部渲染器添加一个 `[markup.XXXXX]` 部分:
在您的自訂 `app.ini` 文件中為每個外部渲染器添加一個 `[markup.XXXXX]` 部分:
```ini
[markup.asciidoc]
ENABLED = true
FILE_EXTENSIONS = .adoc,.asciidoc
RENDER_COMMAND = "asciidoctor -s -a showtitle --out-file=- -"
; 输入不是标准输入而是文件
; 輸入不是標準輸入而是文件
IS_INPUT_FILE = false
[markup.jupyter]
@@ -61,12 +61,12 @@ RENDER_COMMAND = "timeout 30s pandoc +RTS -M512M -RTS -f rst"
IS_INPUT_FILE = false
```
如果您的外部标记语言依赖于在生成的 HTML 元素上的额外类和属性,您可能需要启用自定义的清理策略。Gitea 使用 [`bluemonday`](https://godoc.org/github.com/microcosm-cc/bluemonday) 包作為我们的 HTML 清理器。下面的示例可以用于支持从 [`pandoc`](https://pandoc.org/) 输出的服务器端 [KaTeX](https://katex.org/) 渲染结果。
如果您的外部標記語言依賴於在生成的 HTML 元素上的額外類和屬性,您可能需要啟用自訂的清理策略。Gitea 使用 [`bluemonday`](https://godoc.org/github.com/microcosm-cc/bluemonday) 包作為我們的 HTML 清理器。下面的範例可以用於支援從 [`pandoc`](https://pandoc.org/) 輸出的伺服器端 [KaTeX](https://katex.org/) 渲染結果。
```ini
[markup.sanitizer.TeX]
; Pandoc 渲染 TeX 段落為带有 "math" 类的 <span> 元素,根据上下文可能還带有 "inline" 或 "display" 类。
; - 請注意,这与我们的 Markdown 解析器中内置的数学支持不同,后者使用 <code> 元素。
; Pandoc 渲染 TeX 段落為帶有 "math" 類的 <span> 元素,根據上下文可能還帶有 "inline" 或 "display" 類。
; - 請注意,這與我們的 Markdown 解析器中內置的數學支持不同,後者使用 <code> 元素。
ELEMENT = span
ALLOW_ATTR = class
REGEXP = ^\s*((math(\s+|$)|inline(\s+|$)|display(\s+|$)))+
@@ -77,19 +77,19 @@ FILE_EXTENSIONS = .md,.markdown
RENDER_COMMAND = pandoc -f markdown -t html --katex
```
您必須在每个部分中定义 `ELEMENT` 和 `ALLOW_ATTR`。
您必須在每個部分中定義 `ELEMENT` 和 `ALLOW_ATTR`。
要定义多个条目,請添加唯一的字母数字后缀(例如,`[markup.sanitizer.1]` 和 `[markup.sanitizer.something]`)。
要定義多個條目,請添加唯一的字母數字後綴(例如,`[markup.sanitizer.1]` 和 `[markup.sanitizer.something]`)。
要僅為特定的外部渲染器應用清理規則,它们必須使用渲染器名稱,例如 `[markup.sanitizer.asciidoc.rule-1]`、`[markup.sanitizer.<renderer>.rule-1]`。
要僅為特定的外部渲染器應用清理規則,它們必須使用渲染器名稱,例如 `[markup.sanitizer.asciidoc.rule-1]`、`[markup.sanitizer.<renderer>.rule-1]`。
**注意**:如果規則在渲染器 ini 部分之前定义,或者名稱与渲染器不匹配,它将應用于所有渲染器。
**注意**:如果規則在渲染器 ini 部分之前定義,或者名稱與渲染器不匹配,它將應用於所有渲染器。
完成配置更改后,請重新启动 Gitea 以使更改生效。
完成設定更改後,請重新啟動 Gitea 以使更改生效。
**注意**:在 Gitea 1.12 之前,存在一个名為 `markup.sanitiser` 的單个部分,其中的键被重新定义為多个規則,但是,这种配置方法存在重大问题,需要通過多个部分進行配置。
**注意**:在 Gitea 1.12 之前,存在一個名為 `markup.sanitiser` 的單個部分,其中的鍵被重新定義為多個規則,但是,這種設定方法存在重大問題,需要通過多個部分進行設定。
### 示例:HTML
### 範例:HTML
直接渲染 HTML 文件:
@@ -98,7 +98,7 @@ RENDER_COMMAND = pandoc -f markdown -t html --katex
ENABLED = true
FILE_EXTENSIONS = .html,.htm
RENDER_COMMAND = cat
; 输入不是标准输入,而是文件
; 輸入不是標準輸入,而是文件
IS_INPUT_FILE = true
[markup.sanitizer.html.1]
@@ -110,13 +110,13 @@ ELEMENT = a
ALLOW_ATTR = class
```
請注意:此示例中的配置将允许渲染 HTML 文件,並使用 `cat` 命令将文件内容输出為 HTML。此外,配置中的两个清理規則将允许 `<div>` 和 `<a>` 元素使用 `class` 属性。
請注意:此範例中的設定將允許渲染 HTML 文件,並使用 `cat` 命令將文件內容輸出為 HTML。此外,設定中的兩個清理規則將允許 `<div>` 和 `<a>` 元素使用 `class` 屬性。
在進行配置更改后,請重新启动 Gitea 以使更改生效。
在進行設定更改後,請重新啟動 Gitea 以使更改生效。
### 示例:Office DOCX
### 範例:Office DOCX
使用 [`pandoc`](https://pandoc.org/) 显示 Office DOCX 文件:
使用 [`pandoc`](https://pandoc.org/) 顯示 Office DOCX 文件:
```ini
[markup.docx]
@@ -128,17 +128,17 @@ RENDER_COMMAND = "pandoc --from docx --to html --self-contained --template /path
ALLOW_DATA_URI_IMAGES = true
```
在此示例中,配置将允许显示 Office DOCX 文件,並使用 `pandoc` 命令将文件转换為 HTML 格式。同时,清理規則中的 `ALLOW_DATA_URI_IMAGES` 设置為 `true`,允许使用 Data URI 格式的图片。
在此範例中,設定將允許顯示 Office DOCX 文件,並使用 `pandoc` 命令將文件轉換為 HTML 格式。同時,清理規則中的 `ALLOW_DATA_URI_IMAGES` 設定為 `true`,允許使用 Data URI 格式的圖片。
模板文件的内容如下:
模板文件的內容如下:
```
$body$
```
### 示例:Jupyter Notebook
### 範例:Jupyter Notebook
使用 [`nbconvert`](https://github.com/jupyter/nbconvert) 显示 Jupyter Notebook 文件:
使用 [`nbconvert`](https://github.com/jupyter/nbconvert) 顯示 Jupyter Notebook 文件:
```ini
[markup.jupyter]
@@ -150,15 +150,15 @@ RENDER_COMMAND = "jupyter-nbconvert --stdin --stdout --to html --template basic"
ALLOW_DATA_URI_IMAGES = true
```
在此示例中,配置将允许显示 Jupyter Notebook 文件,並使用 `nbconvert` 命令将文件转换為 HTML 格式。同样,清理規則中的 `ALLOW_DATA_URI_IMAGES` 设置為 `true`,允许使用 Data URI 格式的图片。
在此範例中,設定將允許顯示 Jupyter Notebook 文件,並使用 `nbconvert` 命令將文件轉換為 HTML 格式。同樣,清理規則中的 `ALLOW_DATA_URI_IMAGES` 設定為 `true`,允許使用 Data URI 格式的圖片。
在進行配置更改后,請重新启动 Gitea 以使更改生效。
在進行設定更改後,請重新啟動 Gitea 以使更改生效。
## 自定义 CSS
## 自訂 CSS
在 `.ini` 文件中,可以使用 `[markup.XXXXX]` 的格式指定外部渲染器,並且由外部渲染器生成的 HTML 将被包装在一个带有 `markup` 和 `XXXXX` 类的 `<div>` 中。`markup` 类提供了预定义的样式(如果 `XXXXX` 是 `markdown`,则使用 `markdown` 类)。否则,您可以使用这些类来针对渲染的 HTML 内容進行定制样式。
在 `.ini` 文件中,可以使用 `[markup.XXXXX]` 的格式指定外部渲染器,並且由外部渲染器生成的 HTML 將被包裝在一個帶有 `markup` 和 `XXXXX` 類的 `<div>` 中。`markup` 類提供了預定義的樣式(如果 `XXXXX` 是 `markdown`,則使用 `markdown` 類)。否則,您可以使用這些類來針對渲染的 HTML 內容進行定製樣式。
因此,您可以编写一些 CSS 样式:
因此,您可以編寫一些 CSS 樣式:
```css
.markup.XXXXX html {
@@ -185,10 +185,10 @@ ALLOW_DATA_URI_IMAGES = true
}
```
将您的样式表添加到自定义目錄中,例如 `custom/public/assets/css/my-style-XXXXX.css`,並使用自定义的头文件 `custom/templates/custom/header.tmpl` 進行导入:
將您的樣式表添加到自訂目錄中,例如 `custom/public/assets/css/my-style-XXXXX.css`,並使用自訂的頭文件 `custom/templates/custom/header.tmpl` 進行導入:
```html
<link rel="stylesheet" href="{{AppSubUrl}}/assets/css/my-style-XXXXX.css" />
```
通過以上步骤,您可以将自定义的 CSS 样式應用到特定的外部渲染器,使其具有所需的样式效果。
通過以上步驟,您可以將自訂的 CSS 樣式應用到特定的外部渲染器,使其具有所需的樣式效果。
@@ -7,13 +7,13 @@ aliases:
- /zh-tw/fail2ban-setup
---
# 设置 Fail2ban
# 設定 Fail2ban
**Fail2ban 检查客户端登入日志,将多次登入失败的客户端识别為攻擊者並在一段时间内阻止其访问服务。如果你的实例是公开的,这一点尤其重要。請管理员仔细设置 fail2ban,错误的配置将导致防火墙阻止你访问自己的服务器。**
**Fail2ban 檢查客戶端登入日誌,將多次登入失敗的客戶端識別為攻擊者並在一段時間內阻止其訪問服務。如果你的實例是公開的,這一點尤其重要。請管理員仔細設定 fail2ban,錯誤的設定將導致防火牆阻止你訪問自己的伺服器。**
Gitea 会在日志文件 `log/gitea.log` 中记录登入失败的 CLI、SSH 或 HTTP 客户端 IP 地址,而你需要将 Gitea 的日志输出模式从默认的 `console` 更改為 `file`。这表示将日志输出到文件,使得 fail2ban 可以定期掃描日志内容。
Gitea 會在日誌文件 `log/gitea.log` 中記錄登入失敗的 CLI、SSH 或 HTTP 客戶端 IP 地址,而你需要將 Gitea 的日誌輸出模式從預設的 `console` 更改為 `file`。這表示將日誌輸出到文件,使得 fail2ban 可以定期掃描日誌內容。
当使用者的身份驗證失败时,日志中会记录此类信息:
當使用者的身份驗證失敗時,日誌中會記錄此類資訊:
```log
2018/04/26 18:15:54 [I] Failed authentication attempt for user from xxx.xxx.xxx.xxx
@@ -23,9 +23,9 @@ Gitea 会在日志文件 `log/gitea.log` 中记录登入失败的 CLI、SSH 或
2020/10/15 16:08:44 [E] invalid credentials from xxx.xxx.xxx.xxx
```
## 配置規則
## 設定規則
添加日志過滤器規則到配置文件 `/etc/fail2ban/filter.d/gitea.conf`:
添加日誌過濾器規則到設定文件 `/etc/fail2ban/filter.d/gitea.conf`:
```ini
[Definition]
@@ -33,7 +33,7 @@ failregex = .*(Failed authentication attempt|invalid credentials|Attempted acce
ignoreregex =
```
添加监狱規則到配置文件 `/etc/fail2ban/jail.d/gitea.conf`:
添加監獄規則到設定文件 `/etc/fail2ban/jail.d/gitea.conf`:
```ini
[gitea]
@@ -46,9 +46,9 @@ bantime = 900
action = iptables-allports
```
如果你的 Gitea 实例运行在 Docker 容器中,並且直接将容器端口暴露到外部网络,
你還需要添加 `chain="FORWARD"` 到监狱規則配置文件 `/etc/fail2ban/jail.d/gitea-docker.conf`
以适應 Docker 的网络转发規則。但如果你在容器的宿主机上使用 Nginx 反向代理连接到 Gitea 则無需这样配置。
如果你的 Gitea 實例運行在 Docker 容器中,並且直接將容器端口暴露到外部網路,
你還需要添加 `chain="FORWARD"` 到監獄規則設定文件 `/etc/fail2ban/jail.d/gitea-docker.conf`
以適應 Docker 的網路轉發規則。但如果你在容器的宿主機上使用 Nginx 反向代理連接到 Gitea 則無需這樣設定。
```ini
[gitea-docker]
@@ -61,26 +61,26 @@ bantime = 900
action = iptables-allports[chain="FORWARD"]
```
最后,运行 `systemctl restart fail2ban` 即可應用更改。現在,你可以使用 `systemctl status fail2ban` 检查 fail2ban 运行状态。
最後,運行 `systemctl restart fail2ban` 即可應用更改。現在,你可以使用 `systemctl status fail2ban` 檢查 fail2ban 運行狀態。
上述規則规定客户端在 1 小时内,如果登入失败的次数达到 10 次,则通過 iptables 锁定該客户端 IP 地址 15 分钟。
上述規則規定客戶端在 1 小時內,如果登入失敗的次數達到 10 次,則通過 iptables 鎖定該客戶端 IP 地址 15 分鐘。
## 设置反向代理
## 設定反向代理
如果你使用 Nginx 反向代理到 Gitea 实例,你還需要设置 Nginx 的 HTTP 头部值 `X-Real-IP` 将真实的客户端 IP 地址传递给 Gitea。否则 Gitea 程序会将客户端地址错误解析為反向代理服务器的地址,例如回环地址 `127.0.0.1`。
如果你使用 Nginx 反向代理到 Gitea 實例,你還需要設定 Nginx 的 HTTP 頭部值 `X-Real-IP` 將真實的客戶端 IP 地址傳遞給 Gitea。否則 Gitea 程式會將客戶端地址錯誤解析為反向代理伺服器的地址,例如迴環地址 `127.0.0.1`。
```
proxy_set_header X-Real-IP $remote_addr;
```
额外注意,在 Gitea 的配置文件 `app.ini` 中存在下列默认值:
額外注意,在 Gitea 的設定文件 `app.ini` 中存在下列預設值:
```
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128
```
`REVERSE_PROXY_LIMIT` 限制反向代理服务器的层数,设置為 `0` 表示不使用这些标头。
`REVERSE_PROXY_TRUSTED_PROXIES` 表示受信任的反向代理服务器网络地址,
经過該网络地址转发来的流量会经過解析 `X-Real-IP` 头部得到真实客户端地址。
(参考 [configuration cheat sheet](../administration/config-cheat-sheet.md#安全性))
`REVERSE_PROXY_LIMIT` 限制反向代理伺服器的層數,設定為 `0` 表示不使用這些標頭。
`REVERSE_PROXY_TRUSTED_PROXIES` 表示受信任的反向代理伺服器網路地址,
經過該網路地址轉發來的流量會經過解析 `X-Real-IP` 頭部得到真實客戶端地址。
(參考 [configuration cheat sheet](../administration/config-cheat-sheet.md))
@@ -7,18 +7,18 @@ aliases:
- /zh-tw/git-lfs-setup
---
# Git LFS 设置
# Git LFS 設定
要使用 Gitea 内置的 LFS 支持,您需要更新 `app.ini` 文件:
要使用 Gitea 內置的 LFS 支援,您需要更新 `app.ini` 文件:
```ini
[server]
; 启用 git-lfs 支持。true 或 false,默认為 false。
; 啟用 git-lfs 支持。true 或 false,默認為 false。
LFS_START_SERVER = true
[lfs]
; 存放 LFS 文件的路径,默认為 data/lfs。
; 存放 LFS 文件的路徑,默認為 data/lfs。
PATH = /home/gitea/data/lfs
```
**注意**:LFS 服务器支持需要服务器上安裝 Git v2.1.2 以上版本。
**注意**:LFS 伺服器支援需要伺服器上安裝 Git v2.1.2 以上版本。
@@ -5,16 +5,16 @@ sidebar_position: 12
---
# HTTPS配置
# HTTPS設定
## 使用内置服务器
## 使用內置伺服器
在启用HTTPS之前,确保您拥有有效的SSL/TLS证书。
建议在测试和评估情况下使用自签名证书,請运行 `gitea cert --host [HOST]` 以生成自签名证书
在啟用HTTPS之前,確保您擁有有效的SSL/TLS證書。
建議在測試和評估情況下使用自簽名證書,請運行 `gitea cert --host [HOST]` 以生成自簽名證書
如果您在服务器上使用阿帕奇(Apache)或Nginx,建议参考 [反向代理指南](reverse-proxies.md)。
如果您在伺服器上使用阿帕奇(Apache)或Nginx,建議參考 [反向代理指南](reverse-proxies.md)。
要使用Gitea内置HTTPS支持,您必須编辑`app.ini`文件。
要使用Gitea內置HTTPS支援,您必須編輯`app.ini`文件。
```ini
[server]
@@ -25,13 +25,13 @@ CERT_FILE = cert.pem
KEY_FILE = key.pem
```
請注意,如果您的证书由第三方证书颁发机构签名(即不是自签名的),则 cert.pem 應包含证书链。服务器证书必須是 cert.pem 中的第一个条目,后跟中介(如果有)。不必包含根证书,因為连接客户端必須已经拥有根证书才能建立信任关系。要了解有关配置值的更多信息,請查看 [配置备忘單](../administration/config-cheat-sheet#server-server)。
請注意,如果您的證書由第三方證書頒發機構簽名(即不是自簽名的),則 cert.pem 應包含證書鏈。伺服器證書必須是 cert.pem 中的第一個條目,後跟中介(如果有)。不必包含根證書,因為連接客戶端必須已經擁有根證書才能建立信任關係。要了解有關設定值的更多資訊,請查看 [設定備忘單](../administration/config-cheat-sheet.md)。
對於“CERT_FILE”或“KEY_FILE”字段,当文件路径是相对路径时,文件路径相對於“GITEA_CUSTOM”环境变量。它也可以是绝对路径。
對於“CERT_FILE”或“KEY_FILE”欄位,當文件路徑是相對路徑時,文件路徑相對於“GITEA_CUSTOM”環境變量。它也可以是絕對路徑。
### 设置HTTP重定向
### 設定HTTP重定向
Gitea服务器僅支持监听一个端口;要重定向HTTP請求致HTTPS端口,您需要启用HTTP重定向服务:
Gitea伺服器僅支援監聽一個端口;要重定向HTTP請求致HTTPS端口,您需要啟用HTTP重定向服務:
```ini
[server]
@@ -40,13 +40,13 @@ REDIRECT_OTHER_PORT = true
PORT_TO_REDIRECT = 3080
```
如果您使用Docker,确保端口已配置在 `docker-compose.yml` 文件
如果您使用Docker,確保端口已設定在 `docker-compose.yml` 文件
## 使用 ACME (默认: Let's Encrypt)
## 使用 ACME (預設: Let's Encrypt)
[ACME](https://tools.ietf.org/html/rfc8555) 是一种证书颁发机构标准协议,允许您自动請求和续订 SSL/TLS 证书。[Let`s Encrypt](https://letsencrypt.org/) 是使用此标准的免费公开信任的证书颁发机构服务器。僅实施“HTTP-01”和“TLS-ALPN-01”挑战。為了使 ACME 质询通過並驗證您的域所有权,“80”端口(“HTTP-01”)或“443”端口(“TLS-ALPN-01”)上 gitea 域的外部流量必須由 gitea 实例提供服务。可能需要设置 [HTTP 重定向](#设置http重定向) 和端口转发才能正确路由外部流量。否则,到端口“80”的正常流量将自动重定向到 HTTPS。**您必須同意**ACME提供商的服务条款(默认為Let's Encrypt的 [服务条款](https://letsencrypt.org/documents/LE-SA-v1.2-2017年11月15日.pdf)。
[ACME](https://tools.ietf.org/html/rfc8555) 是一種證書頒發機構標準協議,允許您自動請求和續訂 SSL/TLS 證書。[Let`s Encrypt](https://letsencrypt.org/) 是使用此標準的免費公開信任的證書頒發機構伺服器。僅實施“HTTP-01”和“TLS-ALPN-01”挑戰。為了使 ACME 質詢通過並驗證您的域所有權,“80”端口(“HTTP-01”)或“443”端口(“TLS-ALPN-01”)上 gitea 域的外部流量必須由 gitea 實例提供服務。可能需要設定 [HTTP 重定向](#設定http重定向) 和端口轉發才能正確路由外部流量。否則,到端口“80”的正常流量將自動重定向到 HTTPS。**您必須同意**ACME提供商的服務條款(預設為Let's Encrypt的 [服務條款](https://letsencrypt.org/documents/LE-SA-v1.2-2017年11月15日.pdf)。
使用默认 Let's Encrypt 的最小配置如下:
使用預設 Let's Encrypt 的最小設定如下:
```ini
[server]
@@ -59,7 +59,7 @@ ACME_DIRECTORY=https
ACME_EMAIL=[email protected]
```
小型配置請使用 [smallstep CA](https://github.com/smallstep/certificates), 點擊 [教程](https://smallstep.com/docs/tutorials/acme-challenge) 了解更多信息。
小型設定請使用 [smallstep CA](https://github.com/smallstep/certificates), 點擊 [教學](https://smallstep.com/docs/tutorials/acme-challenge) 瞭解更多資訊。
```ini
[server]
@@ -74,16 +74,16 @@ ACME_DIRECTORY=https
ACME_EMAIL=[email protected]
```
要了解关于配置, 請访问 [配置备忘單](../administration/config-cheat-sheet.md#server-server)获取更多信息
要了解關於設定, 請前往 [設定備忘單](../administration/config-cheat-sheet.md)獲取更多資訊
## 使用反向代理服务器
## 使用反向代理伺服器
按照 [reverse proxy guide](reverse-proxies.md) 的規則设置你的反向代理服务器
按照 [reverse proxy guide](reverse-proxies.md) 的規則設定你的反向代理伺服器
然后,按照下面的向导启用 HTTPS:
然後,按照下面的嚮導啟用 HTTPS:
- [nginx](https://nginx.org/en/docs/http/configuring_https_servers.html)
- [apache2/httpd](https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html)
- [caddy](https://caddyserver.com/docs/tls)
注意:僅在代理层启用 HTTPS 被稱為 [TLS 终止代理](https://en.wikipedia.org/wiki/TLS_termination_proxy)。代理服务器接受传入的 TLS 连接,解密内容,然后将現在未加密的内容传递给 Gitea。只要代理和 Gitea 实例在同一台计算机上或在私有网络中的不同计算机上(代理暴露给外部网络),这通常是可以接受的。如果您的 Gitea 实例与代理隔离在公共网络上,或者如果您想要全端到端的加密,您還可以直接在 Gitea 中 [启用内置服务器的 HTTPS 支持](#使用内置服务器),並将连接转发到 HTTPS 上。
注意:僅在代理層啟用 HTTPS 被稱為 [TLS 終止代理](https://en.wikipedia.org/wiki/TLS_termination_proxy)。代理伺服器接受傳入的 TLS 連接,解密內容,然後將現在未加密的內容傳遞給 Gitea。只要代理和 Gitea 實例在同一臺計算機上或在私有網路中的不同計算機上(代理暴露給外部網路),這通常是可以接受的。如果您的 Gitea 實例與代理隔離在公共網路上,或者如果您想要全端到端的加密,您還可以直接在 Gitea 中 [啟用內置伺服器的 HTTPS 支援](#使用內置伺服器),並將連接轉發到 HTTPS 上。
@@ -6,44 +6,44 @@ aliases:
- /zh-tw/logging-configuration
---
# 日志配置
# 日誌設定
Gitea 的日志配置主要由以下三种類型的组件组成:
Gitea 的日誌設定主要由以下三種類型的元件組成:
- `[log]` 部分用于一般配置
- `[log.<mode-name>]` 部分用于配置不同的日志输出方式,也稱為 "writer mode",模式名稱同时也作為 "writer name"
- `[log]` 部分還可以包含遵循 `logger.<logger-name>.<CONFIG-KEY>` 模式的子日志记录器的配置
- `[log]` 部分用於一般設定
- `[log.<mode-name>]` 部分用於設定不同的日誌輸出方式,也稱為 "writer mode",模式名稱同時也作為 "writer name"
- `[log]` 部分還可以包含遵循 `logger.<logger-name>.<CONFIG-KEY>` 模式的子日誌記錄器的設定
默认情况下,已经有一个完全功能的日志输出,因此不需要重新定义。
預設情況下,已經有一個完全功能的日誌輸出,因此不需要重新定義。
## 收集日志以获取帮助
## 收集日誌以獲取幫助
要收集日志以获取帮助和报告问题,請参阅 [需要帮助](help/support.md)。
要收集日誌以獲取幫助和報告問題,請參閱 [需要幫助](help/support.md)。
## `[log]` 部分
在 Gitea 中,日志设施的配置在 `[log]` 部分及其子部分。
在 Gitea 中,日誌設施的設定在 `[log]` 部分及其子部分。
在顶层的 `[log]` 部分,可以放置以下配置项:
在頂層的 `[log]` 部分,可以放置以下設定項:
- `ROOT_PATH`:(默认值:**%(GITEA_WORK_DIR)/log**):日志文件的基本路径。
- `MODE`:(默认值:**console**):要用于默认日志记录器的日志输出列表。
- `LEVEL`:(默认值:**Info**):要持久化的最严重的日志事件,不区分大小写。可能的值為:`Trace`、`Debug`、`Info`、`Warn`、`Error`、`Fatal`。
- `STACKTRACE_LEVEL`:(默认值:**None**):對於此类及更严重的事件,将在记录时打印堆栈跟踪。
- `ROOT_PATH`:(預設值:**%(GITEA_WORK_DIR)/log**):日誌文件的基本路徑。
- `MODE`:(預設值:**console**):要用於預設日誌記錄器的日誌輸出列表。
- `LEVEL`:(預設值:**Info**):要持久化的最嚴重的日誌事件,不區分大小寫。可能的值為:`Trace`、`Debug`、`Info`、`Warn`、`Error`、`Fatal`。
- `STACKTRACE_LEVEL`:(預設值:**None**):對於此類及更嚴重的事件,將在記錄時打印堆棧跟蹤。
它還可以包含以下子日志记录器:
它還可以包含以下子日誌記錄器:
- `logger.router.MODE`:(默认值:**,**):用于路由器日志记录器的日志输出列表。
- `logger.access.MODE`:(默认值:**_empty_**):用于访问日志记录器的日志输出列表。默认情况下,访问日志记录器被禁用。
- `logger.xorm.MODE`:(默认值:**,**):用于 XORM 日志记录器的日志输出列表。
- `logger.router.MODE`:(預設值:**,**):用於路由器日誌記錄器的日誌輸出列表。
- `logger.access.MODE`:(預設值:**_empty_**):用於訪問日誌記錄器的日誌輸出列表。預設情況下,訪問日誌記錄器被禁用。
- `logger.xorm.MODE`:(預設值:**,**):用於 XORM 日誌記錄器的日誌輸出列表。
将子日志记录器的模式设置為逗号(`,`)表示使用默认的全局 `MODE`。
將子日誌記錄器的模式設定為逗號(`,`)表示使用預設的全域 `MODE`。
## 快速示例
## 快速範例
### 默认(空)配置
### 預設(空)設定
空配置等同于默认配置:
空設定等同於預設設定:
```ini
[log]
@@ -55,7 +55,7 @@ logger.router.MODE = ,
logger.xorm.MODE = ,
logger.access.MODE =
; 这是“控制台”模式的配置選项(由上面的 MODE=console 使用)
; 這是“控制檯”模式的配置選項(由上面的 MODE=console 使用)
[log.console]
MODE = console
FLAGS = stdflags
@@ -63,13 +63,13 @@ PREFIX =
COLORIZE = true
```
这等同于将所有日志发送到控制台,並将默认的 Golang 日志也发送到控制台日志中。
這等同於將所有日誌發送到控制檯,並將預設的 Golang 日誌也發送到控制檯日誌中。
这只是一个示例,默认情况下不需要将其写入配置文件中。
這只是一個範例,預設情況下不需要將其寫入設定文件中。
### 禁用路由日志並将一些访问日志记录到文件中
### 禁用路由日誌並將一些訪問日誌記錄到文件中
禁用路由日志,将访问日志(>=Warn)记录到 `access.log` 中:
禁用路由日誌,將訪問日誌(>=Warn)記錄到 `access.log` 中:
```ini
[log]
@@ -82,16 +82,16 @@ LEVEL = Warn
FILE_NAME = access.log
```
### 為不同的模式设置不同的日志级别
### 為不同的模式設定不同的日誌級別
将默认日志(>=Warn)记录到 `gitea.log` 中,将错误日志记录到 `file-error.log` 中:
將預設日誌(>=Warn)記錄到 `gitea.log` 中,將錯誤日誌記錄到 `file-error.log` 中:
```ini
[log]
LEVEL = Warn
MODE = file, file-error
; 默认情况下,"file" 模式会将日志记录到 %(log.ROOT_PATH)/gitea.log,因此我们不需要设置它
; 默認情況下,"file" 模式會將日誌記錄到 %(log.ROOT_PATH)/gitea.log,因此我們不需要設置它
; [log.file]
[log.file-error]
@@ -99,165 +99,165 @@ LEVEL = Error
FILE_NAME = file-error.log
```
## 日志输出(模式和写入器)
## 日誌輸出(模式和寫入器)
Gitea 提供以下日志写入器:
Gitea 提供以下日誌寫入器:
- `console` - 输出日志到 `stdout`(或 `stderr`,如果已在配置中设置)
- `file` - 输出日志到文件
- `conn` - 输出日志到套接字(网络或 Unix 套接字)
- `console` - 輸出日誌到 `stdout`(或 `stderr`,如果已在設定中設定)
- `file` - 輸出日誌到文件
- `conn` - 輸出日誌到套接字(網路或 Unix 套接字)
### 公共配置
### 公共設定
某些配置适用于所有日志输出模式:
某些設定適用於所有日誌輸出模式:
- `MODE` 是日志输出写入器的模式。它将默认為 ini 部分的模式名稱。因此,`[log.console]` 将默认為 `MODE = console`。
- `LEVEL` 是此输出将记录的最低日志级别。
- `STACKTRACE_LEVEL` 是此输出将打印堆栈跟踪的最低日志级别。
- `COLORIZE` 對於 `console`,默认為 `true`,否则默认為 `false`。
- `MODE` 是日誌輸出寫入器的模式。它將預設為 ini 部分的模式名稱。因此,`[log.console]` 將預設為 `MODE = console`。
- `LEVEL` 是此輸出將記錄的最低日誌級別。
- `STACKTRACE_LEVEL` 是此輸出將打印堆棧跟蹤的最低日誌級別。
- `COLORIZE` 對於 `console`,預設為 `true`,否則預設為 `false`。
#### `EXPRESSION`
`EXPRESSION` 表示日志事件必須匹配才能被输出写入器记录的正则表达式。
日志消息(去除颜色)或 `longfilename:linenumber:functionname` 必須匹配其中之一。
注意:整个消息或字符串不需要完全匹配。
`EXPRESSION` 表示日誌事件必須匹配才能被輸出寫入器記錄的正則表達式。
日誌消息(去除顏色)或 `longfilename:linenumber:functionname` 必須匹配其中之一。
注意:整個消息或字符串不需要完全匹配。
請注意,此表达式将在写入器的 goroutine 中运行,而不是在日志事件的 goroutine 中运行。
請注意,此表達式將在寫入器的 goroutine 中運行,而不是在日誌事件的 goroutine 中運行。
#### `FLAGS`
`FLAGS` 表示在每条消息之前打印的前置日志上下文信息。
它是一个逗号分隔的字符串集。值的顺序無关紧要。
`FLAGS` 表示在每條消息之前打印的前置日誌上下文資訊。
它是一個逗號分隔的字符串集。值的順序無關緊要。
默认值為 `stdflags`(= `date,time,medfile,shortfuncname,levelinitial`)。
預設值為 `stdflags`(= `date,time,medfile,shortfuncname,levelinitial`)。
可能的值為:
- `none` 或 `,` - 無标志。
- `date` - 当地时区的日期:`2009/01/23`。
- `time` - 当地时区的时间:`01:23:23`。
- `microseconds` - 微秒精度:`01:23:23.123123`。假定有时间。
- `longfile` - 完整的文件名和行号:`/a/b/c/d.go:23`。
- `shortfile` - 文件名的最后一个部分和行号:`d.go:23`。
- `funcname` - 调用者的函数名:`runtime.Caller()`。
- `shortfuncname` - 函数名的最后一部分。覆盖 `funcname`。
- `utc` - 如果设置了日期或时间,则使用 UTC 而不是本地时区。
- `levelinitial` - 提供的级别的初始字符,放在方括号内,例如 `[I]` 表示 info。
- `level` - 在方括号内的级别,例如 `[INFO]`。
- `none` 或 `,` - 無標誌。
- `date` - 當地時區的日期:`2009/01/23`。
- `time` - 當地時區的時間:`01:23:23`。
- `microseconds` - 微秒精度:`01:23:23.123123`。假定有時間。
- `longfile` - 完整的文件名和行號:`/a/b/c/d.go:23`。
- `shortfile` - 文件名的最後一個部分和行號:`d.go:23`。
- `funcname` - 調用者的函數名:`runtime.Caller()`。
- `shortfuncname` - 函數名的最後一部分。覆蓋 `funcname`。
- `utc` - 如果設定了日期或時間,則使用 UTC 而不是本地時區。
- `levelinitial` - 提供的級別的初始字符,放在方括號內,例如 `[I]` 表示 info。
- `level` - 在方括號內的級別,例如 `[INFO]`。
- `gopid` - 上下文的 Goroutine-PID。
- `medfile` - 文件名的最后 20 个字符 - 相当于 `shortfile,longfile`。
- `stdflags` - 相当于 `date,time,medfile,shortfuncname,levelinitial`。
- `medfile` - 文件名的最後 20 個字符 - 相當於 `shortfile,longfile`。
- `stdflags` - 相當於 `date,time,medfile,shortfuncname,levelinitial`。
### Console 模式
在此模式下,日志记录器将将日志消息转发到 Gitea 進程附加的 stdout 和 stderr 流。
在此模式下,日誌記錄器將將日誌消息轉發到 Gitea 進程附加的 stdout 和 stderr 流。
對於 console 模式的日志记录器,如果不在 Windows 上,或者 Windows 终端可以设置為 ANSI 模式,或者是 cygwin 或 Msys 管道,则 `COLORIZE` 默认為 `true`。
對於 console 模式的日誌記錄器,如果不在 Windows 上,或者 Windows 終端可以設定為 ANSI 模式,或者是 cygwin 或 Msys 管道,則 `COLORIZE` 預設為 `true`。
设置:
設定:
- `STDERR`:**false**:日志记录器是否應将日志打印到 `stderr` 而不是 `stdout`。
- `STDERR`:**false**:日誌記錄器是否應將日誌打印到 `stderr` 而不是 `stdout`。
### File 模式
在此模式下,日志记录器将将日志消息保存到文件中。
在此模式下,日誌記錄器將將日誌消息保存到文件中。
设置:
設定:
- `FILE_NAME`:要将日志事件写入的文件,相對於 `ROOT_PATH`,默认為 `%(ROOT_PATH)/gitea.log`。异常情况:访问日志默认為 `%(ROOT_PATH)/access.log`。
- `MAX_SIZE_SHIFT`:**28**:單个文件的最大大小位移。28 表示 256Mb。详细信息见下文。
- `LOG_ROTATE` **true**:是否轮转日志文件。
- `DAILY_ROTATE`:**true**:是否每天旋转日志。
- `MAX_DAYS`:**7**:在此天数之后删除旋转的日志文件。
- `COMPRESS`:**true**:默认情况下是否使用 gzip 压缩旧的日志文件。
- `COMPRESSION_LEVEL`:**-1**:压缩级别。详细信息见下文。
- `FILE_NAME`:要將日誌事件寫入的文件,相對於 `ROOT_PATH`,預設為 `%(ROOT_PATH)/gitea.log`。異常情況:訪問日誌預設為 `%(ROOT_PATH)/access.log`。
- `MAX_SIZE_SHIFT`:**28**:單個文件的最大大小位移。28 表示 256Mb。詳細資訊見下文。
- `LOG_ROTATE` **true**:是否輪轉日誌文件。
- `DAILY_ROTATE`:**true**:是否每天旋轉日誌。
- `MAX_DAYS`:**7**:在此天數之後刪除旋轉的日誌文件。
- `COMPRESS`:**true**:預設情況下是否使用 gzip 壓縮舊的日誌文件。
- `COMPRESSION_LEVEL`:**-1**:壓縮級別。詳細資訊見下文。
`MAX_SIZE_SHIFT` 通過将给定次数左移 1 (`1 << x`) 来定义文件的最大大小。
在 v1.17.3 版本时的确切行為可以在[这里](https://github.com/go-gitea/gitea/blob/v1.17.3/modules/setting/log.go#L185)中查看。
`MAX_SIZE_SHIFT` 通過將給定次數左移 1 (`1 << x`) 來定義文件的最大大小。
在 v1.17.3 版本時的確切行為可以在[這裡](https://github.com/go-gitea/gitea/blob/v1.17.3/modules/setting/log.go#L185)中查看。
`COMPRESSION_LEVEL` 的有用值范围从 1 到(包括)9,其中较高的数字表示更好的压缩。
請注意,更好的压缩可能会带来更高的资源使用。
必須在前面加上 `-` 符号。
`COMPRESSION_LEVEL` 的有用值範圍從 1 到(包括)9,其中較高的數字表示更好的壓縮。
請注意,更好的壓縮可能會帶來更高的資源使用。
必須在前面加上 `-` 符號。
### Conn 模式
在此模式下,日志记录器将通過网络套接字发送日志消息。
在此模式下,日誌記錄器將通過網路套接字發送日誌消息。
设置:
設定:
- `ADDR`:**:7020**:设置要连接的地址。
- `PROTOCOL`:**tcp**:设置协议,可以是 "tcp"、"unix" 或 "udp"。
- `RECONNECT`:**false**:在连接丢失时尝试重新连接。
- `RECONNECT_ON_MSG`:**false**:為每条消息重新连接主机。
- `ADDR`:**:7020**:設定要連接的地址。
- `PROTOCOL`:**tcp**:設定協議,可以是 "tcp"、"unix" 或 "udp"。
- `RECONNECT`:**false**:在連接丟失時嘗試重新連接。
- `RECONNECT_ON_MSG`:**false**:為每條消息重新連接主機。
### "Router" 日志记录器
### "Router" 日誌記錄器
当 Gitea 的路由处理程序工作时,Router 日志记录器记录以下消息類型:
當 Gitea 的路由處理程式工作時,Router 日誌記錄器記錄以下消息類型:
- `started` 消息将以 TRACE 级别记录
- `polling`/`completed` 路由将以 INFO 级别记录。异常情况:"/assets" 静态资源請求也会以 TRACE 级别记录。
- `slow` 路由将以 WARN 级别记录
- `failed` 路由将以 WARN 级别记录
- `started` 消息將以 TRACE 級別記錄
- `polling`/`completed` 路由將以 INFO 級別記錄。異常情況:"/assets" 靜態資源請求也會以 TRACE 級別記錄。
- `slow` 路由將以 WARN 級別記錄
- `failed` 路由將以 WARN 級別記錄
### "XORM" 日志记录器
### "XORM" 日誌記錄器
為了使 XORM 输出 SQL 日志,還應将 `[database]` 部分中的 `LOG_SQL` 设置為 `true`。
為了使 XORM 輸出 SQL 日誌,還應將 `[database]` 部分中的 `LOG_SQL` 設定為 `true`。
### "Access" 日志记录器
### "Access" 日誌記錄器
"Access" 日志记录器是自 Gitea 1.9 版本以来的新日志记录器。它提供了符合 NCSA Common Log 标准的日志格式。虽然它具有高度可配置性,但在更改其模板时應谨慎。此日志记录器的主要好处是,Gitea 現在可以使用标准日志格式记录访问日志,因此可以使用标准工具進行分析。
"Access" 日誌記錄器是自 Gitea 1.9 版本以來的新日誌記錄器。它提供了符合 NCSA Common Log 標準的日誌格式。雖然它具有高度可設定性,但在更改其模板時應謹慎。此日誌記錄器的主要好處是,Gitea 現在可以使用標準日誌格式記錄訪問日誌,因此可以使用標準工具進行分析。
您可以通過使用 `logger.access.MODE = ...` 来启用此日志记录器。
您可以透過使用 `logger.access.MODE = ...` 來啟用此日誌記錄器。
如果需要,可以通過更改 `ACCESS_LOG_TEMPLATE` 的值来更改 "Access" 日志记录器的格式。
如果需要,可以透過更改 `ACCESS_LOG_TEMPLATE` 的值來更改 "Access" 日誌記錄器的格式。
請注意,访问日志记录器将以 `INFO` 级别记录,将此日志记录器的 `LEVEL` 设置為 `WARN` 或更高级别将导致不记录访问日志。
請注意,訪問日誌記錄器將以 `INFO` 級別記錄,將此日誌記錄器的 `LEVEL` 設定為 `WARN` 或更高級別將導致不記錄訪問日誌。
#### ACCESS_LOG_TEMPLATE
此值表示一个 Go 模板。其默认值為
此值表示一個 Go 模板。其預設值為
```tmpl
{{.Ctx.RemoteHost}} - {{.Identity}} {{.Start.Format "[02/Jan/2006:15:04:05 -0700]" }} "{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}} {{.Ctx.Req.Proto}}" {{.ResponseWriter.Status}} {{.ResponseWriter.Size}} "{{.Ctx.Req.Referer}}" "{{.Ctx.Req.UserAgent}}"`
```
模板接收以下選项:
模板接收以下選項:
- `Ctx` 是 `context.Context`
- `Identity` 是 `SignedUserName`,如果使用者未登入,则為 "-"
- `Start` 是請求的开始时间
- `Identity` 是 `SignedUserName`,如果使用者未登入,則為 "-"
- `Start` 是請求的開始時間
- `ResponseWriter` 是 `http.ResponseWriter`
更改此模板时必須小心,因為它在标准的 panic 恢复陷阱之外运行。此模板應該尽可能简單,因為它会為每个請求运行一次。
更改此模板時必須小心,因為它在標準的 panic 恢復陷阱之外運行。此模板應該儘可能簡單,因為它會為每個請求運行一次。
## 释放和重新打开、暂停和恢复日志记录
## 釋放和重新打開、暫停和恢復日誌記錄
如果您在 Unix 上运行,您可能希望释放和重新打开日志以使用 `logrotate` 或其他工具。
可以通過向运行中的進程发送 `SIGUSR1` 信号或运行 `gitea manager logging release-and-reopen` 命令来强制 Gitea 释放並重新打开其日志文件和连接。
如果您在 Unix 上運行,您可能希望釋放和重新打開日誌以使用 `logrotate` 或其他工具。
可以透過向運行中的進程發送 `SIGUSR1` 信號或運行 `gitea manager logging release-and-reopen` 命令來強制 Gitea 釋放並重新打開其日誌文件和連接。
或者,您可能希望暂停和恢复日志记录 - 可以通過使用 `gitea manager logging pause` 和 `gitea manager logging resume` 命令来实現。請注意,当日志记录暂停时,低于 INFO 级别的日志事件将不会存儲,並且只会存儲有限数量的事件。在暂停时,日志记录可能会阻塞,尽管是暂时性的,但会大大减慢 Gitea 的运行速度,因此建议僅暂停很短的时间。
或者,您可能希望暫停和恢復日誌記錄 - 可以透過使用 `gitea manager logging pause` 和 `gitea manager logging resume` 命令來實現。請注意,當日志記錄暫停時,低於 INFO 級別的日誌事件將不會儲存,並且只會儲存有限數量的事件。在暫停時,日誌記錄可能會阻塞,儘管是暫時性的,但會大大減慢 Gitea 的運行速度,因此建議僅暫停很短的時間。
### 在 Gitea 运行时添加和删除日志记录
### 在 Gitea 運行時添加和刪除日誌記錄
可以使用 `gitea manager logging add` 和 `remove` 子命令在 Gitea 运行时添加和删除日志记录。
此功能只能调整正在运行的日志系统,不能用于启动未初始化的访问或路由日志记录器。如果您希望启动这些系统,建议调整 app.ini 並(优雅地)重新启动 Gitea 服务。
可以使用 `gitea manager logging add` 和 `remove` 子命令在 Gitea 運行時添加和刪除日誌記錄。
此功能只能調整正在運行的日誌系統,不能用於啟動未初始化的訪問或路由日誌記錄器。如果您希望啟動這些系統,建議調整 app.ini 並(優雅地)重新啟動 Gitea 服務。
这些命令的主要目的是在运行中的系统上轻松添加临时日志记录器,以便调查问题,因為重新启动可能会导致问题消失。
這些命令的主要目的是在運行中的系統上輕鬆添加臨時日誌記錄器,以便調查問題,因為重新啟動可能會導致問題消失。
## 使用 `logrotate` 而不是内置的日志轮转
## 使用 `logrotate` 而不是內置的日誌輪轉
Gitea 包含内置的日志轮转功能,對於大多数部署来说應該已经足够了。但是,如果您想使用 `logrotate` 工具:
Gitea 包含內置的日誌輪轉功能,對於大多數部署來說應該已經足夠了。但是,如果您想使用 `logrotate` 工具:
- 在 `app.ini` 中将 `LOG_ROTATE` 设置為 `false`,禁用内置的日志轮转。
- 在 `app.ini` 中將 `LOG_ROTATE` 設定為 `false`,禁用內置的日誌輪轉。
- 安裝 `logrotate`。
- 根据部署要求配置 `logrotate`,有关配置语法细节,請参阅 `man 8 logrotate`。
在 `postrotate/endscript` 块中通過 `kill -USR1` 或 `kill -10` 向 `gitea` 進程本身发送 `USR1` 信号,
或者运行 `gitea manager logging release-and-reopen`(使用适当的环境设置)。
确保配置适用于由 Gitea 日志记录器生成的所有文件,如上述部分所述。
- 始终使用 `logrotate /etc/logrotate.conf --debug` 来测试您的配置。
- 如果您正在使用 Docker 並从容器外部运行,您可以使用
- 根據部署要求設定 `logrotate`,有關設定語法細節,請參閱 `man 8 logrotate`。
在 `postrotate/endscript` 塊中通過 `kill -USR1` 或 `kill -10` 向 `gitea` 進程本身發送 `USR1` 信號,
或者運行 `gitea manager logging release-and-reopen`(使用適當的環境設定)。
確保設定適用於由 Gitea 日誌記錄器生成的所有文件,如上述部分所述。
- 始終使用 `logrotate /etc/logrotate.conf --debug` 來測試您的設定。
- 如果您正在使用 Docker 並從容器外部運行,您可以使用
`docker exec -u $OS_USER $CONTAINER_NAME sh -c 'gitea manager logging release-and-reopen'`
或 `docker exec $CONTAINER_NAME sh -c '/bin/s6-svc -1 /etc/s6/gitea/'`,或直接向 Gitea 進程本身发送 `USR1` 信号。
或 `docker exec $CONTAINER_NAME sh -c '/bin/s6-svc -1 /etc/s6/gitea/'`,或直接向 Gitea 進程本身發送 `USR1` 信號。
下一个 `logrotate` 作业将包括您的配置,因此不需要重新启动。
您還可以立即使用 `logrotate /etc/logrotate.conf --force` 重新加载 `logrotate`。
下一個 `logrotate` 作業將包括您的設定,因此不需要重新啟動。
您還可以立即使用 `logrotate /etc/logrotate.conf --force` 重新加載 `logrotate`。
@@ -6,110 +6,110 @@ aliases:
- /zh-tw/mail-templates
---
# 邮件模板
# 郵件模板
為了定制特定操作的电子邮件主题和内容,可以使用模板来自定义 Gitea。这些功能的模板位于 [`custom` 目錄](../administration/customizing-gitea.md) 下。
如果没有自定义的替代方案,Gitea 将使用内部模板作為默认模板。
為了定製特定操作的電子郵件主題和內容,可以使用模板來自訂 Gitea。這些功能的模板位於 [`custom` 目錄](../administration/customizing-gitea.md) 下。
如果沒有自訂的替代方案,Gitea 將使用內部模板作為預設模板。
自定义模板在 Gitea 启动时加载。对它们的更改在 Gitea 重新启动之前不会被识别。
自訂模板在 Gitea 啟動時加載。對它們的更改在 Gitea 重新啟動之前不會被識別。
## 支持模板的邮件通知
## 支援模板的郵件通知
目前,以下通知事件使用模板:
| 操作名稱 | 用途 |
| ---------- | ---------------------------------------------------------------------- |
| `new` | 建立了新的工單或合並請求。 |
| `comment` | 在現有工單或合並請求中建立了新的评论。 |
| `close` | 关闭了工單或合並請求。 |
| `reopen` | 重新打开了工單或合並請求。 |
| `review` | 在合並請求中進行审查的首要评论。 |
| `approve` | 对合並請求進行批准的首要评论。 |
| `reject` | 对合並請求提出更改請求的审查的首要评论。 |
| `code` | 关于合並請求的代码的單个评论。 |
| `assigned` | 使用者被分配到工單或合並請求。 |
| `default` | 未包括在上述类别中的任何操作,或者当对應类别的模板不存在时使用的模板。 |
| `new` | 建立了新的工單或合併請求。 |
| `comment` | 在現有工單或合併請求中建立了新的評論。 |
| `close` | 關閉了工單或合併請求。 |
| `reopen` | 重新打開了工單或合併請求。 |
| `review` | 在合併請求中進行審查的首要評論。 |
| `approve` | 對合併請求進行批准的首要評論。 |
| `reject` | 對合併請求提出更改請求的審查的首要評論。 |
| `code` | 關於合併請求的程式碼的單個評論。 |
| `assigned` | 使用者被分配到工單或合併請求。 |
| `default` | 未包括在上述類別中的任何操作,或者當對應類別的模板不存在時使用的模板。 |
特定消息類型的模板路径為:
特定消息類型的模板路徑為:
```sh
custom/templates/mail/{操作類型}/{操作名稱}.tmpl
```
其中 `{操作類型}` 是 `issue` 或 `pull`(针对合並請求),`{操作名稱}` 是上述列出的操作名稱之一。
其中 `{操作類型}` 是 `issue` 或 `pull`(針對合併請求),`{操作名稱}` 是上述列出的操作名稱之一。
例如,有关合並請求中的评论的电子邮件的特定模板是:
例如,有關合併請求中的評論的電子郵件的特定模板是:
```sh
custom/templates/mail/pull/comment.tmpl
```
然而,並不需要為每个操作類型/名稱组合建立模板。
使用回退系统来選择适当的模板。在此列表中,将使用 _第一个存在的_ 模板:
然而,並不需要為每個操作類型/名稱組合建立模板。
使用回退系統來選擇適當的模板。在此列表中,將使用 _第一個存在的_ 模板:
- 所需**操作類型**和**操作名稱**的特定模板。
- 操作類型為 `issue` 和所需**操作名稱**的模板。
- 所需**操作類型**和操作名稱為 `default` 的模板。
- 操作類型為` issue` 和操作名稱為 `default` 的模板。
唯一必需的模板是操作類型為 `issue` 操作名稱為 `default` 的模板,除非使用者在 `custom` 目錄中覆盖了它。
唯一必需的模板是操作類型為 `issue` 操作名稱為 `default` 的模板,除非使用者在 `custom` 目錄中覆蓋了它。
## 模板语法
## 模板語法
邮件模板是 UTF-8 编码的文本文件,需要遵循以下格式之一:
郵件模板是 UTF-8 編碼的文本文件,需要遵循以下格式之一:
```
用于主题行的文本和宏
用於主題行的文本和宏
------------
用于邮件正文的文本和宏
用於郵件正文的文本和宏
```
或者
```
用于邮件正文的文本和宏
用於郵件正文的文本和宏
```
指定 _主题_ 部分是可選的(因此也是虚线分隔符)。在使用时,_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。
指定 _主題_ 部分是可選的(因此也是虛線分隔符)。在使用時,_主題_ 和 _郵件正文_ 模板之間的分隔符需要至少三個虛線;分隔符行中不允許使用其他字符。
_主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text/template/) 解析,並提供了為每个通知组装的 _元数据上下文_。上下文包含以下元素:
_主題_ 和 _郵件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text/template/) 解析,並提供了為每個通知組裝的 _元資料上下文_。上下文包含以下元素:
| 名稱 | 類型 | 可用性 | 用途 |
| ------------------ | ---------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 |
| `.Subject` | string | 僅在正文中可用 | 解析后的 _主题_。 |
| `.Body` | string | 始终可用 | 工單、合並請求或评论的消息,从 Markdown 解析為 HTML 並進行了清理。請勿与 _邮件正文_ 混淆。 |
| `.Link` | string | 始终可用 | 源工單、合並請求或评论的地址。 |
| `.Issue` | models.Issue | 始终可用 | 产生通知的工單(或合並請求)。要获取特定于合並請求的数据(例如 `HasMerged`),可以使用 `.Issue.PullRequest`,但需要注意,如果工單 _不是_ 合並請求,则該字段将為 `nil`。 |
| `.Comment` | models.Comment | 如果适用 | 如果通知是针对添加到工單或合並請求的评论,则其中包含有关评论的信息。 |
| `.IsPull` | bool | 始终可用 | 如果邮件通知与合並請求关联(即 `.Issue.PullRequest` 不為 `nil` ),则為 `true`。 |
| `.Repo` | string | 始终可用 | 存放庫的名稱,包括所有者名稱(例如 `mike/stuff`) |
| `.User` | models.User | 始终可用 | 事件来源存放庫的所有者。要获取使用者名(例如 `mike`),可以使用 `.User.Name`。 |
| `.Doer` | models.User | 始终可用 | 執行触发通知事件的操作的使用者。要获取使用者名(例如 `rhonda`),可以使用 `.Doer.Name`。 |
| `.IsMention` | bool | 始终可用 | 如果此通知僅是因為在评论中提到了使用者而生成的,並且收件人未订阅源,则為 `true`。如果收件人已订阅工單或存放庫,则為 `false`。 |
| `.SubjectPrefix` | string | 始终可用 | 如果通知是关于除工單或合並請求建立之外的其他内容,则為 `Re:`;否则為空字符串。 |
| `.ActionType` | string | 始终可用 | `"issue"` 或 `"pull"`。它将与实际的 _操作類型_ 对應,与選择的模板無关。 |
| `.ActionName` | string | 始终可用 | 它将是上述操作類型之一(`new` ,`comment` 等),並与選择的模板对應。 |
| `.ReviewComments` | []models.Comment | 始终可用 | 审查中的代码评论列表。评论文本将在 `.RenderedContent` 中,引用的代码将在 `.Patch` 中。 |
| `.FallbackSubject` | string | 始終可用 | 預設主題行。參見下文。 |
| `.Subject` | string | 僅在正文中可用 | 解析後的 _主題_。 |
| `.Body` | string | 始終可用 | 工單、合併請求或評論的消息,從 Markdown 解析為 HTML 並進行了清理。請勿與 _郵件正文_ 混淆。 |
| `.Link` | string | 始終可用 | 源工單、合併請求或評論的地址。 |
| `.Issue` | models.Issue | 始終可用 | 產生通知的工單(或合併請求)。要獲取特定於合併請求的資料(例如 `HasMerged`),可以使用 `.Issue.PullRequest`,但需要注意,如果工單 _不是_ 合併請求,則該欄位將為 `nil`。 |
| `.Comment` | models.Comment | 如果適用 | 如果通知是針對添加到工單或合併請求的評論,則其中包含有關評論的資訊。 |
| `.IsPull` | bool | 始終可用 | 如果郵件通知與合併請求關聯(即 `.Issue.PullRequest` 不為 `nil` ),則為 `true`。 |
| `.Repo` | string | 始終可用 | 存放庫的名稱,包括所有者名稱(例如 `mike/stuff`) |
| `.User` | models.User | 始終可用 | 事件來源存放庫的所有者。要獲取使用者名稱(例如 `mike`),可以使用 `.User.Name`。 |
| `.Doer` | models.User | 始終可用 | 執行觸發通知事件的操作的使用者。要獲取使用者名稱(例如 `rhonda`),可以使用 `.Doer.Name`。 |
| `.IsMention` | bool | 始終可用 | 如果此通知僅是因為在評論中提到了使用者而生成的,並且收件人未訂閱源,則為 `true`。如果收件人已訂閱工單或存放庫,則為 `false`。 |
| `.SubjectPrefix` | string | 始終可用 | 如果通知是關於除工單或合併請求建立之外的其他內容,則為 `Re:`;否則為空字符串。 |
| `.ActionType` | string | 始終可用 | `"issue"` 或 `"pull"`。它將與實際的 _操作類型_ 對應,與選擇的模板無關。 |
| `.ActionName` | string | 始終可用 | 它將是上述操作類型之一(`new` ,`comment` 等),並與選擇的模板對應。 |
| `.ReviewComments` | []models.Comment | 始終可用 | 審查中的程式碼評論列表。評論文本將在 `.RenderedContent` 中,引用的程式碼將在 `.Patch` 中。 |
所有名稱区分大小写。
所有名稱區分大小寫。
### 模板中的主题部分
### 模板中的主題部分
用于邮件主题的模板引擎是 Golang 的 [`text/template`](https://go.dev/pkg/text/template/)。
有关语法的详细信息,請参阅链接的文檔。
用於郵件主題的模板引擎是 Golang 的 [`text/template`](https://go.dev/pkg/text/template/)。
有關語法的詳細資訊,請參閱鏈接的文件。
主题构建的步骤如下:
主題構建的步驟如下:
- 根据通知類型和可用的模板選择一个模板。
- 解析並解析模板(例如,将 `{{.Issue.Index}}` 转换為工單或合並請求的编号)。
- 将所有空格字符(例如 `TAB`,`LF` 等)转换為普通空格。
- 删除所有前导、尾随和多余的空格。
- 将字符串截断為前 256 个字母(字符)。
- 根據通知類型和可用的模板選擇一個模板。
- 解析並解析模板(例如,將 `{{.Issue.Index}}` 轉換為工單或合併請求的編號)。
- 將所有空格字符(例如 `TAB`,`LF` 等)轉換為普通空格。
- 刪除所有前導、尾隨和多餘的空格。
- 將字符串截斷為前 256 個字母(字符)。
如果最终结果為空字符串,**或者**没有可用的主题模板(即所選模板不包含主题部分),将使用 Gitea 的**内部默认值**。
如果最終結果為空字符串,**或者**沒有可用的主題模板(即所選模板不包含主題部分),將使用 Gitea 的**內部預設值**。
内部默认(回退)主题相当于:
內部預設(回退)主題相當於:
```
{{.SubjectPrefix}}[{{.Repo}}] {{.Issue.Title}} (#{{.Issue.Index}})
@@ -117,31 +117,31 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
例如:`Re: [mike/stuff] New color palette (#38)`
即使存在有效的主题模板,Gitea 的默认主题也可以在模板的元数据中作為 `.FallbackSubject` 找到。
即使存在有效的主題模板,Gitea 的預設主題也可以在模板的元資料中作為 `.FallbackSubject` 找到。
### 模板中的邮件正文部分
### 模板中的郵件正文部分
用于邮件正文的模板引擎是 Golang 的 [`html/template`](https://go.dev/pkg/html/template/)。
有关语法的详细信息,請参阅链接的文檔。
用於郵件正文的模板引擎是 Golang 的 [`html/template`](https://go.dev/pkg/html/template/)。
有關語法的詳細資訊,請參閱鏈接的文件。
邮件正文在邮件主题之后進行解析,因此還有一个额外的 _元数据_ 字段,即在考虑所有情况之后实际呈現的主题。
郵件正文在郵件主題之後進行解析,因此還有一個額外的 _元資料_ 欄位,即在考慮所有情況之後實際呈現的主題。
期望的结果是 HTML(包括结构元素,如`<html>`,`<body>`等)。可以通過 `<style>` 块、`class` 和 `style` 属性進行样式设置。但是,`html/template` 会進行一些 [自动转义](https://go.dev/pkg/html/template/#hdr-Contexts),需要考虑这一点。
期望的結果是 HTML(包括結構元素,如`<html>`,`<body>`等)。可以透過 `<style>` 塊、`class` 和 `style` 屬性進行樣式設定。但是,`html/template` 會進行一些 [自動轉義](https://go.dev/pkg/html/template/#hdr-Contexts),需要考慮這一點。
不支持附件(例如图像或外部样式表)。但是,也可以引用其他模板,例如以集中方式提供 `<style>` 元素的内容。外部模板必須放置在 `custom/mail` 下,並相對於該目錄引用。例如,可以使用 `{{template styles/base}}` 包含 `custom/mail/styles/base.tmpl`。
不支援附件(例如圖像或外部樣式表)。但是,也可以引用其他模板,例如以集中方式提供 `<style>` 元素的內容。外部模板必須放置在 `custom/mail` 下,並相對於該目錄引用。例如,可以使用 `{{template styles/base}}` 包含 `custom/mail/styles/base.tmpl`。
邮件以 `Content-Type: multipart/alternative` 发送,因此正文以 HTML 和文本格式发送。通過剥离 HTML 标记来获取文本版本。
郵件以 `Content-Type: multipart/alternative` 發送,因此正文以 HTML 和文本格式發送。通過剝離 HTML 標記來獲取文本版本。
## 故障排除
邮件的呈現方式直接取决于邮件應用程序的功能。许多邮件客户端甚至不支持 HTML,因此显示生成邮件中包含的文本版本。
郵件的呈現方式直接取決於郵件應用程式的功能。許多郵件客戶端甚至不支援 HTML,因此顯示生成郵件中包含的文本版本。
如果模板無法呈現,则只有在发送邮件时才会注意到。
如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈現了任何内容,则将使用該内容,忽略其他内容。
如果模板無法呈現,則只有在發送郵件時纔會注意到。
如果主題模板失敗,將使用預設主題,如果從 _郵件正文_ 中成功呈現了任何內容,則將使用該內容,忽略其他內容。
如果遇到问题,請检查 [Gitea 的日志](../administration/logging-config.md) 以获取错误消息。
如果遇到問題,請檢查 [Gitea 的日誌](../administration/logging-config.md) 以獲取錯誤消息。
## 示例
## 範例
`custom/templates/mail/issue/default.tmpl`:
@@ -150,11 +150,11 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
{{if eq .ActionName "new"}}
建立了
{{else if eq .ActionName "comment"}}
评论了
評論了
{{else if eq .ActionName "close"}}
关闭了
關閉了
{{else if eq .ActionName "reopen"}}
重新打开了
重新打開了
{{else}}
更新了
{{end}}
@@ -175,7 +175,7 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
<body>
{{if .IsMention}}
<p>
您收到此邮件是因為 @{{.Doer.Name}} 提到了您。
您收到此郵件是因為 @{{.Doer.Name}} 提到了您。
</p>
{{end}}
<p>
@@ -187,16 +187,16 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
{{if eq .ActionName "new"}}
建立了
{{else if eq .ActionName "close"}}
关闭了
關閉了
{{else if eq .ActionName "reopen"}}
重新打开了
重新打開了
{{else}}
更新了
{{end}}
<a href="{{.Link}}">{{.Repo}}#{{.Issue.Index}}</a>。
</p>
{{if not (eq .Body "")}}
<h3>消息内容:</h3>
<h3>消息內容:</h3>
<hr>
{{.Body}}
{{end}}
@@ -209,17 +209,17 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
</html>
```
該模板将生成以下内容:
該模板將生成以下內容:
### 主题
### 主題
> [mike/stuff] @rhonda 在合並請求 #38 上進行了评论:New color palette
> [mike/stuff] @rhonda 在合併請求 #38 上進行了評論:New color palette
### 邮件正文
### 郵件正文
> [@rhonda](#)(Rhonda Myers)更新了 [mike/stuff#38](#)。
>
> #### 消息内容
> #### 消息內容
>
> \_**************\*\*\*\***************\_**************\*\*\*\***************
>
@@ -229,25 +229,25 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
>
> [在 Gitea 上查看](#)。
## 高级用法
## 高級用法
模板系统包含一些函数,可用于進一步处理和格式化消息。以下是其中一些函数的列表:
模板系統包含一些函數,可用於進一步處理和格式化消息。以下是其中一些函數的列表:
| 函数名 | 參數 | 可用于 | 用法 |
| 函數名 | 參數 | 可用於 | 用法 |
| ---------------- | ----------- | ---------- | ------------------------------------------------ |
| `AppUrl` | - | 任何地方 | Gitea 的 URL |
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常為 "Gitea" |
| `AppDomain` | - | 任何地方 | Gitea 的主机名 |
| `EllipsisString` | string, int | 任何地方 | 将字符串截断為指定长度;根据需要添加省略号 |
| `SanitizeHTML` | string | 僅正文部分 | 通過删除其中的危险 HTML 標籤对文本進行清理 |
| `SafeHTML` | string | 僅正文部分 | 将输入作為 HTML 处理;可用于输出原始的 HTML 内容 |
| `AppName` | - | 任何地方 | 從 `app.ini` 中設定,通常為 "Gitea" |
| `AppDomain` | - | 任何地方 | Gitea 的主機名 |
| `EllipsisString` | string, int | 任何地方 | 將字符串截斷為指定長度;根據需要添加省略號 |
| `SanitizeHTML` | string | 僅正文部分 | 通過刪除其中的危險 HTML 標籤對文本進行清理 |
| `SafeHTML` | string | 僅正文部分 | 將輸入作為 HTML 處理;可用於輸出原始的 HTML 內容 |
这些都是 _函数_,而不是元数据,因此必須按以下方式使用:
這些都是 _函數_,而不是元資料,因此必須按以下方式使用:
```html
像这样使用: {{SanitizeHTML "Escape<my
>text"}} 或者这样使用: {{"Escape<my
>text" | SanitizeHTML}} 或者这样使用: {{AppUrl}} 但不要像这样使用:
像這樣使用: {{SanitizeHTML "Escape<my
>text"}} 或者這樣使用: {{"Escape<my
>text" | SanitizeHTML}} 或者這樣使用: {{AppUrl}} 但不要像這樣使用:
{{.AppUrl}}</my
></my
>
@@ -8,9 +8,9 @@ aliases:
# 存放庫索引器
## 设置存放庫索引器
## 設定存放庫索引器
通過在您的 [`app.ini`](../administration/config-cheat-sheet.md) 中启用此功能,Gitea 可以通過存放庫的文件進行搜索:
通過在您的 [`app.ini`](../administration/config-cheat-sheet.md) 中啟用此功能,Gitea 可以透過存放庫的文件進行搜索:
```ini
[indexer]
@@ -22,29 +22,29 @@ REPO_INDEXER_INCLUDE =
REPO_INDEXER_EXCLUDE = resources/bin/**
```
請记住,索引内容可能会消耗大量系统资源,特别是在首次建立索引或全局更新索引时(例如升级 Gitea 之后)。
請記住,索引內容可能會消耗大量系統資源,特別是在首次建立索引或全域更新索引時(例如升級 Gitea 之後)。
### 按大小選择要索引的文件
### 按大小選擇要索引的文件
`MAX_FILE_SIZE` 選项将使索引器跳過所有大于指定值的文件。
`MAX_FILE_SIZE` 選項將使索引器跳過所有大於指定值的文件。
### 按路径選择要索引的文件
### 按路徑選擇要索引的文件
Gitea 使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来選择要包含在索引中的文件。
Gitea 使用 [`gobwas/glob` 庫](https://github.com/gobwas/glob) 中的 glob 模式匹配來選擇要包含在索引中的文件。
限制文件列表可以防止索引被派生或無关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这還有助于减小索引的大小。
限制文件列表可以防止索引被派生或無關的文件(例如 lss、sym、map 等)污染,從而使搜索結果更相關。這還有助於減小索引的大小。
`REPO_INDEXER_EXCLUDE_VENDORED`(默认值為 true)将排除供應商文件不包含在索引中。
`REPO_INDEXER_EXCLUDE_VENDORED`(預設值為 true)將排除供應商文件不包含在索引中。
`REPO_INDEXER_INCLUDE`(默认值為空)是一个逗号分隔的 glob 模式列表,用于在索引中**包含**的文件。空列表表示“_包含所有文件_”。
`REPO_INDEXER_EXCLUDE`(默认值為空)是一个逗号分隔的 glob 模式列表,用于从索引中**排除**的文件。与該列表匹配的文件将不会被索引。`REPO_INDEXER_EXCLUDE` 优先于 `REPO_INDEXER_INCLUDE`。
`REPO_INDEXER_INCLUDE`(預設值為空)是一個逗號分隔的 glob 模式列表,用於在索引中**包含**的文件。空列表表示“_包含所有文件_”。
`REPO_INDEXER_EXCLUDE`(預設值為空)是一個逗號分隔的 glob 模式列表,用於從索引中**排除**的文件。與該列表匹配的文件將不會被索引。`REPO_INDEXER_EXCLUDE` 優先於 `REPO_INDEXER_INCLUDE`。
模式匹配工作方式如下:
- 要匹配所有带有 `.txt` 扩展名的文件,無论在哪个目錄中,請使用 `**.txt`。
- 要匹配僅在存放庫的根级别中具有 `.txt` 扩展名的所有文件,請使用 `*.txt`。
- 要匹配所有帶有 `.txt` 擴展名的文件,無論在哪個目錄中,請使用 `**.txt`。
- 要匹配僅在存放庫的根級別中具有 `.txt` 擴展名的所有文件,請使用 `*.txt`。
- 要匹配 `resources/bin` 目錄及其子目錄中的所有文件,請使用 `resources/bin/**`。
- 要匹配位于 `resources/bin` 目錄下的所有文件,請使用 `resources/bin/*`。
- 要匹配位於 `resources/bin` 目錄下的所有文件,請使用 `resources/bin/*`。
- 要匹配所有名為 `Makefile` 的文件,請使用 `**Makefile`。
- 匹配目錄没有效果;模式 `resources/bin` 不会包含/排除該目錄中的文件;`resources/bin/**` 会。
- 所有文件和模式都规范化為小写,因此 `**Makefile`、`**makefile` 和 `**MAKEFILE` 是等效的。
- 匹配目錄沒有效果;模式 `resources/bin` 不會包含/排除該目錄中的文件;`resources/bin/**` 會。
- 所有文件和模式都規範化為小寫,因此 `**Makefile`、`**makefile` 和 `**MAKEFILE` 是等效的。
@@ -8,30 +8,30 @@ aliases:
# 反向代理
## 通用配置
## 通用設定
1. 在您的 `app.ini` 文件中添加配置 `[server] ROOT_URL = https://git.example.com/`
2. 将 `https://git.example.com/foo` 反向代理到 `http://gitea:3000/foo`
3. 确保反向代理不会解码 URI。`https://git.example.com/a%2Fb`的請求應該被传递给 `http://gitea:3000/a%2Fb`。
4. 确保 `Host` 和 `X-Forwarded-Proto` 头被正确的传递给 Gitea,使 Gitea 可以看到正在访问的真实 URL。
1. 在您的 `app.ini` 文件中添加設定 `[server] ROOT_URL = https://git.example.com/`
2. 將 `https://git.example.com/foo` 反向代理到 `http://gitea:3000/foo`
3. 確保反向代理不會解碼 URI。`https://git.example.com/a%2Fb`的請求應該被傳遞給 `http://gitea:3000/a%2Fb`。
4. 確保 `Host` 和 `X-Forwarded-Proto` 頭被正確的傳遞給 Gitea,使 Gitea 可以看到正在訪問的真實 URL。
## 使用子路径
## 使用子路徑
通常,**不推荐**将 Gitea 放到子路径。人们很少使用此配置,並且在极少数情况下可能会出現一些问题。
通常,**不推薦**將 Gitea 放到子路徑。人們很少使用此設定,並且在極少數情況下可能會出現一些問題。
為了让 Gitea 在子路径工作(例如:`https://common.example.com/gitea/`),需要在上面的通用配置之外進行一些额外的配置:
為了讓 Gitea 在子路徑工作(例如:`https://common.example.com/gitea/`),需要在上面的通用設定之外進行一些額外的設定:
1. 在 `app.ini` 文件中使用配置 `[server] ROOT_URL = https://common.example.com/gitea/`。
2. 将 `https://common.example.com/gitea/foo` 反向代理到 `http://gitea:3000/foo`。
3. 容器映像註冊表需要在根目錄级别有一个固定的子路径 `v2`,您必須做下列配置:
- 将 `https://common.example.com/v2` 反向代理到 `http://gitea:3000/v2`。
- 确保 URI 和标头也被正确的传递(见上面的通用配置)
1. 在 `app.ini` 文件中使用設定 `[server] ROOT_URL = https://common.example.com/gitea/`。
2. 將 `https://common.example.com/gitea/foo` 反向代理到 `http://gitea:3000/foo`。
3. 容器映像註冊表需要在根目錄級別有一個固定的子路徑 `v2`,您必須做下列設定:
- 將 `https://common.example.com/v2` 反向代理到 `http://gitea:3000/v2`。
- 確保 URI 和標頭也被正確的傳遞(見上面的通用設定)
## 使用 Nginx 作為反向代理服务
## 使用 Nginx 作為反向代理服務
如果您想使用 Nginx 作為 Gitea 的反向代理服务,您可以参照以下 `nginx.conf` 配置中 `server` 的 `http` 部分。
如果您想使用 Nginx 作為 Gitea 的反向代理服務,您可以參照以下 `nginx.conf` 設定中 `server` 的 `http` 部分。
确保 `client_max_body_size` 足够大,否则在上传大文件时会出現 "client_max_body_size" 错误。
確保 `client_max_body_size` 足夠大,否則在上傳大文件時會出現 "client_max_body_size" 錯誤。
```nginx
server {
@@ -49,9 +49,9 @@ server {
}
```
## 使用 Nginx 作為反向代理服务並将 Gitea 路由至一个子路径
## 使用 Nginx 作為反向代理服務並將 Gitea 路由至一個子路徑
如果您已经有一个域名並且想与 Gitea 共享該域名,您可以增加以下 `nginx.conf` 配置中 `server` 的 `http` 部分,為 Gitea 添加路由規則:
如果您已經有一個域名並且想與 Gitea 共享該域名,您可以增加以下 `nginx.conf` 設定中 `server` 的 `http` 部分,為 Gitea 添加路由規則:
```nginx
server {
@@ -59,12 +59,12 @@ server {
location ~ ^/(gitea|v2)($|/) {
client_max_body_size 512M;
# 确保 nginx 使用未转义 URI, 按原样保持 "%2F"。 确保 nginx 去除 "/gitea" 子路径前缀, 按原样传递 "/v2"。
# 確保 nginx 使用未轉義 URI, 按原樣保持 "%2F"。 確保 nginx 去除 "/gitea" 子路徑前綴, 按原樣傳遞 "/v2"。
rewrite ^ $request_uri;
rewrite ^(/gitea)?(/.*) $2 break;
proxy_pass http://127.0.0.1:3000$uri;
# 其他的常规 HTTP 表头,见上面“使用 Nginx 作為反向代理服务”小节的配置
# 其他的常規 HTTP 表頭,見上面“使用 Nginx 作為反向代理服務”小節的配置
proxy_set_header Connection $http_connection;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
@@ -75,27 +75,27 @@ server {
}
```
然后您**必須**在 Gitea 的配置文件中正确的添加类似 `[server] ROOT_URL = http://git.example.com/git/` 的配置项。
然後您**必須**在 Gitea 的設定文件中正確的添加類似 `[server] ROOT_URL = http://git.example.com/git/` 的設定項。
## 使用 Nginx 直接提供静态资源
## 使用 Nginx 直接提供靜態資源
我们可以通過将资源分為静态和动态两种類型来调节性能。
我們可以透過將資源分為靜態和動態兩種類型來調節性能。
CSS 文件、JavaScript 文件、图片和字體是静态内容。首页、存放庫视图和工單列表是动态内容。
CSS 文件、JavaScript 文件、圖片和字體是靜態內容。首頁、存放庫視圖和工單列表是動態內容。
Nginx 可以直接提供静态资源,並且只代理动态资源請求给 Gitea。
Nginx 為提供静态内容進行了优化,而代理大響應可能与这一优化行為相反。
(见[https://serverfault.com/q/587386](https://serverfault.com/q/587386))
Nginx 可以直接提供靜態資源,並且只代理動態資源請求給 Gitea。
Nginx 為提供靜態內容進行了優化,而代理大響應可能與這一優化行為相反。
(見[https://serverfault.com/q/587386](https://serverfault.com/q/587386))
将 Gitea 源代码存放庫的一个快照下载到 `/path/to/gitea`。
在此之后,在本地存放庫目錄运行 `make frontend` 来生成静态资源。在这个情况下,我们只对 `public/` 目錄感兴趣,您可以删除剩下的其他目錄。
(為了生成静态资源,您需要安裝一个[带 npm 的 Node ](https://nodejs.org/en/download/)和 `make`)
將 Gitea 源程式碼存放庫的一個快照下載到 `/path/to/gitea`。
在此之後,在本地存放庫目錄運行 `make frontend` 來生成靜態資源。在這個情況下,我們只對 `public/` 目錄感興趣,您可以刪除剩下的其他目錄。
(為了生成靜態資源,您需要安裝一個[帶 npm 的 Node ](https://nodejs.org/en/download/)和 `make`)
取决于您的使用者量的大小,您可以将流量分离到两个不同的服务器,或者為静态资源配置一个 cdn。
取決於您的使用者量的大小,您可以將流量分離到兩個不同的伺服器,或者為靜態資源設定一個 cdn。
### 單服务器节点,單域名
### 單伺服器節點,單域名
将 `[server] STATIC_URL_PREFIX = /_/static` 写入您的 Gitea 配置文件,並配置 nginx:
將 `[server] STATIC_URL_PREFIX = /_/static` 寫入您的 Gitea 設定文件,並設定 nginx:
```nginx
server {
@@ -112,12 +112,12 @@ server {
}
```
### 双服务器节点,双域名
### 雙伺服器節點,雙域名
将 `[server] STATIC_URL_PREFIX = http://cdn.example.com/gitea` 写入您的 Gitea 配置文件,並配置 nginx:
將 `[server] STATIC_URL_PREFIX = http://cdn.example.com/gitea` 寫入您的 Gitea 設定文件,並設定 nginx:
```nginx
# 运行 Gitea 的服务器
# 運行 Gitea 的服務器
server {
listen 80;
server_name git.example.com;
@@ -129,7 +129,7 @@ server {
```
```nginx
# 提供静态资源的服务器
# 提供靜態資源的服務器
server {
listen 80;
server_name cdn.example.com;
@@ -144,9 +144,9 @@ server {
}
```
## 使用 Apache HTTPD 作為反向代理服务
## 使用 Apache HTTPD 作為反向代理服務
如果您想使用 Apache HTTPD 作為 Gitea 的反向代理服务,您可以為您的 Apache HTTPD 作如下配置(在 Ubuntu 中,配置文件通常在 `/etc/apache2/httpd.conf` 目錄下):
如果您想使用 Apache HTTPD 作為 Gitea 的反向代理服務,您可以為您的 Apache HTTPD 作如下設定(在 Ubuntu 中,設定文件通常在 `/etc/apache2/httpd.conf` 目錄下):
```apacheconf
<VirtualHost *:80>
@@ -159,11 +159,11 @@ server {
</VirtualHost>
```
注:必須启用以下 Apache HTTPD 组件:`proxy`, `proxy_http`
注:必須啟用以下 Apache HTTPD 元件:`proxy`, `proxy_http`
## 使用 Apache HTTPD 作為反向代理服务並将 Gitea 路由至一个子路径
## 使用 Apache HTTPD 作為反向代理服務並將 Gitea 路由至一個子路徑
如果您已经有一个域名並且想与 Gitea 共享該域名,您可以增加以下配置為 Gitea 添加路由規則(在 Ubuntu 中,配置文件通常在 `/etc/apache2/httpd.conf` 目錄下):
如果您已經有一個域名並且想與 Gitea 共享該域名,您可以增加以下設定為 Gitea 添加路由規則(在 Ubuntu 中,設定文件通常在 `/etc/apache2/httpd.conf` 目錄下):
```
<VirtualHost *:80>
@@ -173,7 +173,7 @@ server {
Allow from all
</Proxy>
AllowEncodedSlashes NoDecode
# 注意: 路径和 URL 后面都不要写路径符号 '/'
# 注意: 路徑和 URL 後面都不要寫路徑符號 '/'
ProxyPass /git http://localhost:3000 nocanon
</VirtualHost>
```
@@ -186,20 +186,20 @@ server {
Allow from all
</Proxy>
AllowEncodedSlashes NoDecode
# 注意: 路径和 URL 后面都不要写路径符号 '/'
# 注意: 路徑和 URL 後面都不要寫路徑符號 '/'
ProxyPass /git http://localhost:3000 nocanon
ProxyPreserveHost On
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
```
然后您**必須**在 Gitea 的配置文件中正确的添加类似 `[server] ROOT_URL = http://git.example.com/git/` 的配置项。
然後您**必須**在 Gitea 的設定文件中正確的添加類似 `[server] ROOT_URL = http://git.example.com/git/` 的設定項。
注:必須启用以下 Apache HTTPD 组件:`proxy`, `proxy_http`
注:必須啟用以下 Apache HTTPD 元件:`proxy`, `proxy_http`
## 使用 Caddy 作為反向代理服务
## 使用 Caddy 作為反向代理服務
如果您想使用 Caddy 作為 Gitea 的反向代理服务,您可以在 `Caddyfile` 中添加如下配置:
如果您想使用 Caddy 作為 Gitea 的反向代理服務,您可以在 `Caddyfile` 中添加如下設定:
```
git.example.com {
@@ -207,9 +207,9 @@ git.example.com {
}
```
## 使用 Caddy 作為反向代理服务並将 Gitea 路由至一个子路径
## 使用 Caddy 作為反向代理服務並將 Gitea 路由至一個子路徑
如果您已经有一个域名並且想与 Gitea 共享該域名,您可以在您的 `Caddyfile` 文件中增加以下配置,為 Gitea 添加路由規則:
如果您已經有一個域名並且想與 Gitea 共享該域名,您可以在您的 `Caddyfile` 文件中增加以下設定,為 Gitea 添加路由規則:
```
git.example.com {
@@ -220,23 +220,23 @@ git.example.com {
}
```
然后您**必須**在 Gitea 的配置文件中正确的添加类似 `[server] ROOT_URL = http://git.example.com/git/` 的配置项。
然後您**必須**在 Gitea 的設定文件中正確的添加類似 `[server] ROOT_URL = http://git.example.com/git/` 的設定項。
## 使用 IIS 作為反向代理服务
## 使用 IIS 作為反向代理服務
如果您想使用 IIS 作為 Gitea 的反向代理服务,你需要為 IIS 设置 URL 重写来作為反向代理。
如果您想使用 IIS 作為 Gitea 的反向代理服務,你需要為 IIS 設定 URL 重寫來作為反向代理。
1. 在 IIS 中设置一个空网页,比如命名為 `Gitea Proxy`。
2. 根据[微软社区中為 IIS 设置 URL 重写的指南](https://techcommunity.microsoft.com/t5/iis-support-blog/setup-iis-with-url-rewrite-as-a-reverse-proxy-for-real-world/ba-p/846222#M343)的前两步進行配置,也就是:
1. 在 IIS 中設定一個空網頁,比如命名為 `Gitea Proxy`。
2. 根據[微軟社區中為 IIS 設定 URL 重寫的指南](https://techcommunity.microsoft.com/t5/iis-support-blog/setup-iis-with-url-rewrite-as-a-reverse-proxy-for-real-world/ba-p/846222#M343)的前兩步進行設定,也就是:
- 使用 Microsoft Web Platform Installer 5.1 (WebPI) 安裝 Application Request Routing(简稱 ARR),或者在 [IIS.net](https://www.iis.net/downloads/microsoft/application-request-routing) 下载这个插件。
- 一但这个模組被安裝到 IIS 上,你将会在 IIS 管理控制台看到一个叫做 URL Rewrite 的新图标。
- 打开 IIS 管理控制台,在左边的列表中點擊 `Gitea Proxy` 网页。在中间選中並且双擊 URL Rewrite 的图标来加载 URL 重写的面板。
- 在管理控制台的右边選择 `Add Rule` 操作,並且在 `Inbound and Outbound Rules` 分类中選择 `Reverse Proxy Rule`。
- 在 Inbound Rules 中, 将 server name 设置為 Gitea 正在运行的主机以及对應端口。例如,如果你在 localhost 的 3000 端口上运行 Gitea,则设置為 `127.0.0.1:3000`。
- 启用 SSL Offloading
- 在 Outbound Rules 中,确保设置了 `Rewrite the domain names of the links in HTTP response`,並且将 `From:` 设置為上面的 server name,将 `To:` 设置為你的外部访问名稱,例如:`git.example.com`
- 現在,根据下面的内容為您的网页编辑 `web.config`(将 `127.0.0.1:3000` 和 `git.example.com` 改為适当的值)
- 使用 Microsoft Web Platform Installer 5.1 (WebPI) 安裝 Application Request Routing(簡稱 ARR),或者在 [IIS.net](https://www.iis.net/downloads/microsoft/application-request-routing) 下載這個外掛。
- 一但這個模組被安裝到 IIS 上,你將會在 IIS 管理控制檯看到一個叫做 URL Rewrite 的新圖標。
- 打開 IIS 管理控制檯,在左邊的列表中點擊 `Gitea Proxy` 網頁。在中間選中並且雙擊 URL Rewrite 的圖標來加載 URL 重寫的面板。
- 在管理控制檯的右邊選擇 `Add Rule` 操作,並且在 `Inbound and Outbound Rules` 分類中選擇 `Reverse Proxy Rule`。
- 在 Inbound Rules 中, 將 server name 設定為 Gitea 正在運行的主機以及對應端口。例如,如果你在 localhost 的 3000 端口上運行 Gitea,則設定為 `127.0.0.1:3000`。
- 啟用 SSL Offloading
- 在 Outbound Rules 中,確保設定了 `Rewrite the domain names of the links in HTTP response`,並且將 `From:` 設定為上面的 server name,將 `To:` 設定為你的外部訪問名稱,例如:`git.example.com`
- 現在,根據下面的內容為您的網頁編輯 `web.config`(將 `127.0.0.1:3000` 和 `git.example.com` 改為適當的值)
```xml
<?xml version="1.0" encoding="UTF-8"?>
@@ -305,11 +305,11 @@ git.example.com {
</configuration>
```
## 使用 HAProxy 作為反向代理服务
## 使用 HAProxy 作為反向代理服務
如果您想使用 HAProxy 作為 Gitea 的反向代理服务,您可以将下面的内容加入您的 HAProxy 配置。
如果您想使用 HAProxy 作為 Gitea 的反向代理服務,您可以將下面的內容加入您的 HAProxy 設定。
在 frontend 部分加入一个 acl 来将对 gitea.example.com 的請求重定向到正确的后端。
在 frontend 部分加入一個 acl 來將對 gitea.example.com 的請求重定向到正確的後端。
```
frontend http-in
@@ -319,18 +319,18 @@ frontend http-in
...
```
添加之前定义好的 backend 部分
添加之前定義好的 backend 部分
```
backend gitea
server localhost:3000 check
```
如果您将 http 内容重定向到 https,上面的配置文件也能够使用。只需要记住,在 HAProxy 和 Gitea 之间的连接将由 http 完成,所以你不需要在 Gitea 的配置文件中启用 https。
如果您將 http 內容重定向到 https,上面的設定文件也能夠使用。只需要記住,在 HAProxy 和 Gitea 之間的連接將由 http 完成,所以你不需要在 Gitea 的設定文件中啟用 https。
## 使用 HAProxy 作為反向代理服务並将 Gitea 路由至一个子路径
## 使用 HAProxy 作為反向代理服務並將 Gitea 路由至一個子路徑
如果您已经有一个域名並且想与 Gitea 共享該域名,您可以在您的 HAProxy 中加入如下配置,為 Gitea 添加路由規則:
如果您已經有一個域名並且想與 Gitea 共享該域名,您可以在您的 HAProxy 中加入如下設定,為 Gitea 添加路由規則:
```
frontend http-in
@@ -340,9 +340,9 @@ frontend http-in
...
```
在这个配置下,http://example.com/gitea/ 将被重定向到您的 Gitea 实例。
在這個設定下,http://example.com/gitea/ 將被重定向到您的 Gitea 實例。
接下来,對於 backend 部分:
接下來,對於 backend 部分:
```
backend gitea
@@ -350,13 +350,13 @@ backend gitea
server localhost:3000 check
```
添加的 http-request 在需要的时候会自动加入反斜杠/,並且通過将 http://example.com/gitea 正确设置為根来在内部路径中删除 /gitea,使其能够正常工作。
添加的 http-request 在需要的時候會自動加入反斜槓/,並且通過將 http://example.com/gitea 正確設定為根來在內部路徑中刪除 /gitea,使其能夠正常工作。
然后您**必須**在 Gitea 的配置文件中正确的添加类似 `[server] ROOT_URL = http://example.com/gitea/` 的配置项。
然後您**必須**在 Gitea 的設定文件中正確的添加類似 `[server] ROOT_URL = http://example.com/gitea/` 的設定項。
## 使用 Traefik 作為反向代理服务
## 使用 Traefik 作為反向代理服務
如果您想使用 traefik 作為 Gitea 的反向代理服务,您可以在 `docker-compose.yaml` 中添加 label 部分(假设使用 docker 作為 traefik 的 provider):
如果您想使用 traefik 作為 Gitea 的反向代理服務,您可以在 `docker-compose.yaml` 中添加 label 部分(假設使用 docker 作為 traefik 的 provider):
```yaml
gitea:
@@ -368,11 +368,11 @@ gitea:
- "traefik.http.services.gitea-websecure.loadbalancer.server.port=3000"
```
这份配置假设您使用 traefik 来处理 HTTPS 服务,並在其和 Gitea 之间使用 HTTP 進行通信。
這份設定假設您使用 traefik 來處理 HTTPS 服務,並在其和 Gitea 之間使用 HTTP 進行通信。
## 使用 Traefik 作為反向代理服务並将 Gitea 路由至一个子路径
## 使用 Traefik 作為反向代理服務並將 Gitea 路由至一個子路徑
如果您已经有一个域名並且想与 Gitea 共享該域名,您可以在您的 `docker-compose.yaml` 文件中增加以下配置,為 Gitea 添加路由規則(假设使用 docker 作為 traefik 的 provider):
如果您已經有一個域名並且想與 Gitea 共享該域名,您可以在您的 `docker-compose.yaml` 文件中增加以下設定,為 Gitea 添加路由規則(假設使用 docker 作為 traefik 的 provider):
```yaml
gitea:
@@ -386,6 +386,6 @@ gitea:
- "traefik.http.routers.gitea.middlewares=gitea-stripprefix"
```
这份配置假设您使用 traefik 来处理 HTTPS 服务,並在其和 Gitea 之间使用 HTTP 進行通信。
這份設定假設您使用 traefik 來處理 HTTPS 服務,並在其和 Gitea 之間使用 HTTP 進行通信。
然后您**必須**在 Gitea 的配置文件中正确的添加类似 `[server] ROOT_URL = http://example.com/gitea/` 的配置项。
然後您**必須**在 Gitea 的設定文件中正確的添加類似 `[server] ROOT_URL = http://example.com/gitea/` 的設定項。
@@ -8,21 +8,21 @@ aliases:
# 搜索引擎索引
默认情况下,您的 Gitea 安裝将被搜索引擎索引。
如果您不希望您的存放庫对搜索引擎可见,請進一步阅读。
預設情況下,您的 Gitea 安裝將被搜索引擎索引。
如果您不希望您的存放庫對搜索引擎可見,請進一步閱讀。
## 使用 robots.txt 阻止搜索引擎索引
為了使 Gitea 為顶级安裝提供自定义的`robots.txt`(默认為空的 404),請在 [`custom`文件夹或`CustomPath`](administration/customizing-gitea.md)中建立一个名為 `public/robots.txt` 的文件。
為了使 Gitea 為頂級安裝提供自訂的`robots.txt`(預設為空的 404),請在 [`custom`文件夾或`CustomPath`](administration/customizing-gitea.md)中建立一個名為 `public/robots.txt` 的文件。
有关如何配置 `robots.txt` 的示例,請参考 [https://moz.com/learn/seo/robotstxt](https://moz.com/learn/seo/robotstxt)。
有關如何設定 `robots.txt` 的範例,請參考 [https://moz.com/learn/seo/robotstxt](https://moz.com/learn/seo/robotstxt)。
```txt
User-agent: *
Disallow: /
```
如果您将 Gitea 安裝在子目錄中,则需要在顶级目錄中建立或编辑 `robots.txt`。
如果您將 Gitea 安裝在子目錄中,則需要在頂級目錄中建立或編輯 `robots.txt`。
```txt
User-agent: *
@@ -6,36 +6,36 @@ aliases:
- /zh-tw/signing
---
# GPG 提交签名
# GPG 提交簽名
Gitea 将通過检查提交是否由 Gitea 数据库中的密钥签名,或者提交是否与 Git 的默认密钥匹配,来驗證提供的树中的 GPG 提交签名。
Gitea 將通過檢查提交是否由 Gitea 資料庫中的密鑰簽名,或者提交是否與 Git 的預設密鑰匹配,來驗證提供的樹中的 GPG 提交簽名。
密钥不会被检查以确定它们是否已過期或撤销。密钥也不会与密钥服务器進行检查。
密鑰不會被檢查以確定它們是否已過期或撤銷。密鑰也不會與密鑰伺服器進行檢查。
如果找不到用于驗證提交的密钥,提交将被标记為灰色的未锁定图标。如果提交被标记為红色的未锁定图标,则表示它使用带有 ID 的密钥签名。
如果找不到用於驗證提交的密鑰,提交將被標記為灰色的未鎖定圖標。如果提交被標記為紅色的未鎖定圖標,則表示它使用帶有 ID 的密鑰簽名。
請注意:提交的签署者不必是提交的作者或提交者。
請注意:提交的簽署者不必是提交的作者或提交者。
此功能要求 Git >= 1.7.9,但要实現全部功能,需要 Git >= 2.0.0。
此功能要求 Git >= 1.7.9,但要實現全部功能,需要 Git >= 2.0.0。
## 自动签名
## 自動簽名
有许多地方 Gitea 会生成提交:
有許多地方 Gitea 會生成提交:
- 存放庫初始化
- Wiki 更改
- 使用编辑器或 API 進行的 CRUD 操作
- 从合並請求進行合並
- 使用編輯器或 API 進行的 CRUD 操作
- 從合併請求進行合併
根据配置和服务器信任,您可能希望 Gitea 对这些提交進行签名。
根據設定和伺服器信任,您可能希望 Gitea 對這些提交進行簽名。
## 安裝和生成 Gitea 的 GPG 密钥
## 安裝和生成 Gitea 的 GPG 密鑰
如何安裝签名密钥由服务器管理员决定。Gitea 目前使用服务器的 `git` 命令生成所有提交,因此将使用服务器的 `gpg` 進行签名(如果配置了)。管理员應該审查 GPG 的最佳实践 - 特别是可能建议僅安裝签名的子密钥,而不是主签名和認證的密钥。
如何安裝簽名密鑰由伺服器管理員決定。Gitea 目前使用伺服器的 `git` 命令生成所有提交,因此將使用伺服器的 `gpg` 進行簽名(如果設定了)。管理員應該審查 GPG 的最佳實踐 - 特別是可能建議僅安裝簽名的子密鑰,而不是主簽名和認證的密鑰。
## 通用配置
## 通用設定
Gitea 的签名配置可以在 `app.ini` 的 `[repository.signing]` 部分找到:
Gitea 的簽名設定可以在 `app.ini` 的 `[repository.signing]` 部分找到:
```ini
...
@@ -53,84 +53,84 @@ MERGES = pubkey, twofa, basesigned, commitssigned
### `SIGNING_KEY`
首先讨论的選项是 `SIGNING_KEY`。有三个主要選项:
首先討論的選項是 `SIGNING_KEY`。有三個主要選項:
- `none` - 这将阻止 Gitea 对任何提交進行签名
- `default` - Gitea 将使用 `git config` 中配置的默认密钥
- `KEYID` - Gitea 将使用具有 ID `KEYID` 的 GPG 密钥对提交進行签名。在这种情况下,您應該提供 `SIGNING_NAME` 和 `SIGNING_EMAIL`,以便显示此密钥的信息。
- `none` - 這將阻止 Gitea 對任何提交進行簽名
- `default` - Gitea 將使用 `git config` 中設定的預設密鑰
- `KEYID` - Gitea 將使用具有 ID `KEYID` 的 GPG 密鑰對提交進行簽名。在這種情況下,您應該提供 `SIGNING_NAME` 和 `SIGNING_EMAIL`,以便顯示此密鑰的資訊。
`default` 選项将读取 `git config` 中的 `commit.gpgsign` 選项 - 如果设置了該選项,它将使用 `user.signingkey`、`user.name` 和 `user.email` 的结果。
`default` 選項將讀取 `git config` 中的 `commit.gpgsign` 選項 - 如果設定了該選項,它將使用 `user.signingkey`、`user.name` 和 `user.email` 的結果。
通過在 Gitea 的存放庫中调整 Git 的 `config` 文件,可以使用 `SIGNING_KEY=default` 為每个存放庫提供不同的签名密钥。然而,这显然不是一个理想的使用者界面,因此可能会发生更改。
通過在 Gitea 的存放庫中調整 Git 的 `config` 文件,可以使用 `SIGNING_KEY=default` 為每個存放庫提供不同的簽名密鑰。然而,這顯然不是一個理想的使用者介面,因此可能會發生更改。
:::warning
**自 1.17 起**,Gitea 在自己的主目錄 `[git].HOME_PATH`(默认為 `%(APP_DATA_PATH)/home`)中运行 git,並使用自己的配置文件 `{[git].HOME_PATH}/.gitconfig`。
**自 1.17 起**,Gitea 在自己的主目錄 `[git].HOME_PATH`(預設為 `%(APP_DATA_PATH)/home`)中運行 git,並使用自己的設定文件 `{[git].HOME_PATH}/.gitconfig`。
如果您有自己定制的 Gitea git 配置,您應該将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。
如果您有自己定製的 Gitea git 設定,您應該將這些設定設定在系統 git 設定文件中(例如 `/etc/gitconfig`)或者 Gitea 的內部 git 設定文件 `{[git].HOME_PATH}/.gitconfig` 中。
与 git 命令相关的主目錄文件(如 `.gnupg`)也應該放在 Gitea 的 git 主目錄 `[git].HOME_PATH` 中。
如果您希望将 `.gnupg` 目錄放在 `{[git].HOME_PATH}/` 之外的位置,請考虑设置 `$GNUPGHOME` 环境变量為您首選的位置,否则 Gitea 将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。
與 git 命令相關的主目錄文件(如 `.gnupg`)也應該放在 Gitea 的 git 主目錄 `[git].HOME_PATH` 中。
如果您希望將 `.gnupg` 目錄放在 `{[git].HOME_PATH}/` 之外的位置,請考慮設定 `$GNUPGHOME` 環境變量為您首選的位置,否則 Gitea 將會從 `{[git].HOME_PATH}/.gnupg` 查找私鑰。
:::
### `INITIAL_COMMIT`
此選项确定在建立存放庫时,Gitea 是否應該对初始提交進行签名。可能的取值有:
此選項確定在建立存放庫時,Gitea 是否應該對初始提交進行簽名。可能的取值有:
- `never`:从不签名
- `pubkey`:僅在使用者拥有公钥时進行签名
- `twofa`:僅在使用者使用 2FA 登入时進行签名
- `always`:始终签名
- `never`:從不簽名
- `pubkey`:僅在使用者擁有公鑰時進行簽名
- `twofa`:僅在使用者使用 2FA 登入時進行簽名
- `always`:始終簽名
除了 `never` 和 `always` 之外的選项可以组合為逗号分隔的列表。如果所有選择的選项都為 true,则提交将被签名。
除了 `never` 和 `always` 之外的選項可以組合為逗號分隔的列表。如果所有選擇的選項都為 true,則提交將被簽名。
### `WIKI`
此選项确定 Gitea 是否應該对 Wiki 的提交進行签名。可能的取值有:
此選項確定 Gitea 是否應該對 Wiki 的提交進行簽名。可能的取值有:
- `never`:从不签名
- `pubkey`:僅在使用者拥有公钥时進行签名
- `twofa`:僅在使用者使用 2FA 登入时進行签名
- `parentsigned`:僅在父提交已签名时進行签名。
- `always`:始终签名
- `never`:從不簽名
- `pubkey`:僅在使用者擁有公鑰時進行簽名
- `twofa`:僅在使用者使用 2FA 登入時進行簽名
- `parentsigned`:僅在父提交已簽名時進行簽名。
- `always`:始終簽名
除了 `never` 和 `always` 之外的選项可以组合為逗号分隔的列表。如果所有選择的選项都為 true,则提交将被签名。
除了 `never` 和 `always` 之外的選項可以組合為逗號分隔的列表。如果所有選擇的選項都為 true,則提交將被簽名。
### `CRUD_ACTIONS`
此選项确定 Gitea 是否應該对 Web 编辑器或 API CRUD 操作的提交進行签名。可能的取值有:
此選項確定 Gitea 是否應該對 Web 編輯器或 API CRUD 操作的提交進行簽名。可能的取值有:
- `never`:从不签名
- `pubkey`:僅在使用者拥有公钥时進行签名
- `twofa`:僅在使用者使用 2FA 登入时進行签名
- `parentsigned`:僅在父提交已签名时進行签名。
- `always`:始终签名
- `never`:從不簽名
- `pubkey`:僅在使用者擁有公鑰時進行簽名
- `twofa`:僅在使用者使用 2FA 登入時進行簽名
- `parentsigned`:僅在父提交已簽名時進行簽名。
- `always`:始終簽名
除了 `never` 和 `always` 之外的選项可以组合為逗号分隔的列表。如果所有選择的選项都為 true,则更改将被签名。
除了 `never` 和 `always` 之外的選項可以組合為逗號分隔的列表。如果所有選擇的選項都為 true,則更改將被簽名。
### `MERGES`
此選项确定 Gitea 是否應該对 PR 的合並提交進行签名。可能的選项有:
此選項確定 Gitea 是否應該對 PR 的合併提交進行簽名。可能的選項有:
- `never`:从不签名
- `pubkey`:僅在使用者拥有公钥时進行签名
- `twofa`:僅在使用者使用 2FA 登入时進行签名
- `basesigned`:僅在基础存放庫中的父提交已签名时進行签名。
- `headsigned`:僅在头分支中的头提交已签名时進行签名。
- `commitssigned`:僅在头分支中的所有提交到合並点的提交都已签名时進行签名。
- `approved`:僅对已批准的合並到受保护分支的提交進行签名。
- `always`:始终签名
- `never`:從不簽名
- `pubkey`:僅在使用者擁有公鑰時進行簽名
- `twofa`:僅在使用者使用 2FA 登入時進行簽名
- `basesigned`:僅在基礎存放庫中的父提交已簽名時進行簽名。
- `headsigned`:僅在頭分支中的頭提交已簽名時進行簽名。
- `commitssigned`:僅在頭分支中的所有提交到合併點的提交都已簽名時進行簽名。
- `approved`:僅對已批准的合併到受保護分支的提交進行簽名。
- `always`:始終簽名
除了 `never` 和 `always` 之外的選项可以组合為逗号分隔的列表。如果所有選择的選项都為 true,则合並将被签名。
除了 `never` 和 `always` 之外的選項可以組合為逗號分隔的列表。如果所有選擇的選項都為 true,則合併將被簽名。
## 获取签名密钥的公钥
## 獲取簽名密鑰的公鑰
用于签署 Gitea 提交的公钥可以通過 API 获取:
用於簽署 Gitea 提交的公鑰可以透過 API 獲取:
```sh
/api/v1/signing-key.gpg
```
在存在特定于存放庫的密钥的情况下,可以通過以下方式获取:
在存在特定於存放庫的密鑰的情況下,可以透過以下方式獲取:
```sh
/api/v1/repos/:username/:reponame/signing-key.gpg
@@ -6,54 +6,54 @@ aliases:
- /zh-tw/guidelines-backend
---
# 后端开发指南
# 後端開發指南
## 背景
Gitea 使用 Golang 作為后端编程语言。它使用了许多第三方包,並且自己也编写了一些包。
例如,Gitea 使用[Chi](https://github.com/go-chi/chi)作為基本的 Web 框架。[Xorm](https://xorm.io)是一个用于与数据库交互的 ORM 框架。
因此,管理这些包非常重要。在开始编写后端代码之前,請参考以下准则。
Gitea 使用 Golang 作為後端編程語言。它使用了許多第三方包,並且自己也編寫了一些包。
例如,Gitea 使用[Chi](https://github.com/go-chi/chi)作為基本的 Web 框架。[Xorm](https://xorm.io)是一個用於與資料庫交互的 ORM 框架。
因此,管理這些包非常重要。在開始編寫後端程式碼之前,請參考以下準則。
## 包设计准则
## 包設計準則
### 包列表
為了保持易于理解的代码並避免循环依赖,拥有良好的代码结构是很重要的。Gitea 后端分為以下几个部分:
為了保持易於理解的程式碼並避免循環依賴,擁有良好的程式碼結構是很重要的。Gitea 後端分為以下幾個部分:
- `build`:帮助构建 Gitea 的脚本。
- `cmd`:包含所有 Gitea 的实际子命令,包括 web、doctor、serv、hooks、admin 等。`web`将启动 Web 服务。`serv`和`hooks`将被 Git 或 OpenSSH 调用。其他子命令可以帮助维护 Gitea。
- `tests`:常用的测试函数
- `tests/integration`:集成测试,用于测试后端回归。
- `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。
- `models`:包含由 xorm 用于构建数据库表的数据结构。它還包含查询和更新数据库的函数。應避免与其他 Gitea 代码的依赖关系。在某些情况下,比如日志记录时可以例外。
- `models/db`:基本的数据库操作。所有其他`models/xxx`包都應依赖于此包。`GetEngine`函数只能从 models/中调用。
- `models/fixtures`:單元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。
- `models/migrations`:存儲不同版本之间的数据库迁移。修改数据库结构的 PR**必須**包含一个迁移步骤。
- `modules`:在 Gitea 中处理特定功能的不同模組。工作正在進行中:其中一些模組應該移到`services`中,特别是那些依赖于 models 的模組,因為它们依赖于数据库。
- `modules/setting`:存儲从 ini 文件中读取的所有系统配置,並在各处引用。但是在可能的情况下,應将其作為函数參數使用。
- `modules/git`:用于与`Git`命令行或 Gogit 包交互的包。
- `public`:编译后的前端文件(JavaScript、图像、CSS 等)
- `routers`:处理服务器請求。由于它使用其他 Gitea 包来处理請求,因此其他包(models、modules 或 services)不能依赖于 routers。
- `routers/api`:包含`/api/v1`相关路由,用于处理 RESTful API 請求。
- `routers/install`:只能在系统处于安裝模式(INSTALL_LOCK=false)时響應。
- `routers/private`:僅由内部子命令调用,特别是`serv`和`hooks`。
- `routers/web`:处理来自 Web 浏览器或 Git SMART HTTP 协议的 HTTP 請求。
- `services`:用于常见路由操作或命令執行的支持函数。使用`models`和`modules`来处理請求。
- `templates`:用于生成 HTML 输出的 Golang 模板。
- `build`:幫助構建 Gitea 的腳本。
- `cmd`:包含所有 Gitea 的實際子命令,包括 web、doctor、serv、hooks、admin 等。`web`將啟動 Web 服務。`serv`和`hooks`將被 Git 或 OpenSSH 調用。其他子命令可以幫助維護 Gitea。
- `tests`:常用的測試函數
- `tests/integration`:整合測試,用於測試後端迴歸。
- `tests/e2e`:端到端測試,用於測試前端和後端的相容性和視覺迴歸。
- `models`:包含由 xorm 用於構建資料庫表的資料結構。它還包含查詢和更新資料庫的函數。應避免與其他 Gitea 程式碼的依賴關係。在某些情況下,比如日誌記錄時可以例外。
- `models/db`:基本的資料庫操作。所有其他`models/xxx`包都應依賴於此包。`GetEngine`函數只能從 models/中調用。
- `models/fixtures`:單元測試和整合測試中使用的範例資料。一個`yml`文件表示一個將在測試開始時加載到資料庫中的表。
- `models/migrations`:儲存不同版本之間的資料庫遷移。修改資料庫結構的 PR**必須**包含一個遷移步驟。
- `modules`:在 Gitea 中處理特定功能的不同模組。工作正在進行中:其中一些模組應該移到`services`中,特別是那些依賴於 models 的模組,因為它們依賴於資料庫。
- `modules/setting`:儲存從 ini 文件中讀取的所有系統設定,並在各處引用。但是在可能的情況下,應將其作為函數參數使用。
- `modules/git`:用於與`Git`命令行或 Gogit 包交互的包。
- `public`:編譯後的前端文件(JavaScript、圖像、CSS 等)
- `routers`:處理伺服器請求。由於它使用其他 Gitea 包來處理請求,因此其他包(models、modules 或 services)不能依賴於 routers。
- `routers/api`:包含`/api/v1`相關路由,用於處理 RESTful API 請求。
- `routers/install`:只能在系統處於安裝模式(INSTALL_LOCK=false)時響應。
- `routers/private`:僅由內部子命令調用,特別是`serv`和`hooks`。
- `routers/web`:處理來自 Web 瀏覽器或 Git SMART HTTP 協議的 HTTP 請求。
- `services`:用於常見路由操作或命令執行的支援函數。使用`models`和`modules`來處理請求。
- `templates`:用於生成 HTML 輸出的 Golang 模板。
### 包依赖关系
### 包依賴關係
由于 Golang 不支持导入循环,我们必須仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。
由於 Golang 不支援導入循環,我們必須仔細決定包之間的依賴關係。這些包之間有一些級別。以下是理想的包依賴關係方向。
`cmd` -> `routers` -> `services` -> `models` -> `modules`
从左到右,左侧的包可以依赖于右侧的包,但右侧的包不能依赖于左侧的包。在同一级别的子包中,可以根据該级别的規則進行依赖。
從左到右,左側的包可以依賴於右側的包,但右側的包不能依賴於左側的包。在同一級別的子包中,可以根據該級別的規則進行依賴。
**注意事项**
**注意事項**
為什么我们需要在`models`之外使用数据库事务?以及如何使用?
某些操作在数据库记录插入/更新/删除失败时應該允许回滚。
因此,服务必須能够建立数据库事务。以下是一些示例:
為什麼我們需要在`models`之外使用資料庫事務?以及如何使用?
某些操作在資料庫記錄插入/更新/刪除失敗時應該允許回滾。
因此,服務必須能夠建立資料庫事務。以下是一些範例:
```go
// services/repository/repository.go
@@ -70,8 +70,8 @@ func CreateXXXX() error {
}
```
在`services`中**不應該**直接使用`db.GetEngine(ctx)`,而是應該在`models/`下编写一个函数。
如果該函数将在事务中使用,請将`context.Context`作為函数的第一个參數。
在`services`中**不應該**直接使用`db.GetEngine(ctx)`,而是應該在`models/`下編寫一個函數。
如果該函數將在事務中使用,請將`context.Context`作為函數的第一個參數。
```go
// models/issues/issue.go
@@ -84,27 +84,27 @@ func UpdateIssue(ctx context.Context, repoID int64) error {
### 包名稱
對於顶层包,請使用复数作為包名,例如`services`、`models`,對於子包,請使用單数,例如`services/user`、`models/repository`。
對於頂層包,請使用複數作為包名,例如`services`、`models`,對於子包,請使用單數,例如`services/user`、`models/repository`。
### 导入别名
### 導入別名
由于有一些使用相同包名的包,例如`modules/user`、`models/user`和`services/user`,当这些包在一个 Go 文件中被导入时,很难知道我们使用的是哪个包以及它是变量名還是导入名。因此,我们始终建议使用导入别名。為了与常见的驼峰命名法的包变量区分开,建议使用**snake_case**作為导入别名的命名規則。
由於有一些使用相同包名的包,例如`modules/user`、`models/user`和`services/user`,當這些包在一個 Go 文件中被導入時,很難知道我們使用的是哪個包以及它是變量名還是導入名。因此,我們始終建議使用導入別名。為了與常見的駝峰命名法的包變量區分開,建議使用**snake_case**作為導入別名的命名規則。
例如:`import user_service "code.gitea.io/gitea/services/user"`
### 重要注意事项
### 重要注意事項
- 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句:
- 这将导致表中的所有行都被使用 exemplar 的非零值進行更新,包括 ID。
- 通常應該写成`x.ID(id).Update(exemplar)`。
- 如果在迁移過程中使用`x.Insert(exemplar)`向表中插入记录,而 ID 是预设的:
- 對於 MSSQL 变體,你将需要執行`` SET IDENTITY_INSERT `table` ON ``(否则迁移将失败)
- 對於 PostgreSQL,你還需要更新 ID 序列,否则迁移将悄無声息地通過,但后续的插入将失败:
- 永遠不要寫成`x.Update(exemplar)`,而沒有明確的`WHERE`子句:
- 這將導致表中的所有行都被使用 exemplar 的非零值進行更新,包括 ID。
- 通常應該寫成`x.ID(id).Update(exemplar)`。
- 如果在遷移過程中使用`x.Insert(exemplar)`向表中插入記錄,而 ID 是預設的:
- 對於 MSSQL 變體,你將需要執行`` SET IDENTITY_INSERT `table` ON ``(否則遷移將失敗)
- 對於 PostgreSQL,你還需要更新 ID 序列,否則遷移將悄無聲息地通過,但後續的插入將失敗:
`` SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false) ``
### 未来的任务
### 未來的任務
目前,我们正在進行一些重构,以完成以下任务:
目前,我們正在進行一些重構,以完成以下任務:
- 纠正不符合規則的代码。
- `models`中的文件太多了,所以我们正在将其中的一些移动到子包`models/xxx`中。
- 由于它们依赖于`models`,因此應将某些`modules`子包移动到`services`中。
- 糾正不符合規則的程式碼。
- `models`中的文件太多了,所以我們正在將其中的一些移動到子包`models/xxx`中。
- 由於它們依賴於`models`,因此應將某些`modules`子包移動到`services`中。
@@ -6,114 +6,114 @@ aliases:
- /zh-tw/guidelines-frontend
---
# 前端开发指南
# 前端開發指南
## 背景
Gitea 在其前端中使用[Fomantic-UI](https://fomantic-ui.com/introduction/getting-started.html)(基于[jQuery](https://api.jquery.com))和 [Vue3](https://vuejs.org/)。
Gitea 在其前端中使用[Fomantic-UI](https://fomantic-ui.com/introduction/getting-started.html)(基於[jQuery](https://api.jquery.com))和 [Vue3](https://vuejs.org/)。
HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
HTML 頁面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
源文件可以在以下目錄中找到:
- **CSS 样式**: `web_src/css/`
- **CSS 樣式**: `web_src/css/`
- **JavaScript 文件**: `web_src/js/`
- **Vue 组件**: `web_src/js/components/`
- **Vue 元件**: `web_src/js/components/`
- **Go HTML 模板**: `templates/`
## 通用准则
## 通用準則
我们推荐使用[Google HTML/CSS Style Guide](https://google.github.io/styleguide/htmlcssguide.html)和[Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)。
我們推薦使用[Google HTML/CSS Style Guide](https://google.github.io/styleguide/htmlcssguide.html)和[Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)。
## Gitea 特定准则
## Gitea 特定準則
1. 每个功能(Fomantic-UI/jQuery 模組)應放在單独的文件/目錄中。
2. HTML 的 id 和 class 應使用 kebab-case,最好包含 2-3 个与功能相关的关键詞。
3. 在 JavaScript 中使用的 HTML 的 id 和 class 應在整个项目中是唯一的,並且應包含 2-3 个与功能相关的关键詞。建议在僅在 JavaScript 中使用的 class 中使用 `js-` 前缀。
4. 不應覆盖框架提供的 class 的 CSS 样式。始终使用具有 2-3 个与功能相关的关键詞的新 class 名稱来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。
5. 后端可以通過使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。
6. 简單页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。
7. 明确变量類型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)`。
8. 使用语义化元素,优先使用`<button class="ui button">`而不是`<div class="ui button">`。
9. 避免在 CSS 中使用不必要的`!important`,如果無法避免,添加注释解释為什么需要它。
10. 避免在一个事件监听器中混合不同的事件,优先為每个事件使用独立的事件监听器。
11. 推荐使用自定义事件名稱前缀`ce-`。
12. 建议使用 Tailwind CSS,它可以通過 `tw-` 前缀获得,例如 `tw-relative`. Gitea 自身的助手类 CSS 使用 `gt-` 前缀(`gt-ellipsis`),Gitea 自身的私有框架级 CSS 类使用 `g-` 前缀(`g-modal-confirm`)。
13. 尽量避免内联脚本和样式,建议将 JS 代码放入 JS 文件中並使用 CSS 类。如果内联脚本和样式不可避免,請解释無法避免的原因。
1. 每個功能(Fomantic-UI/jQuery 模組)應放在單獨的文件/目錄中。
2. HTML 的 id 和 class 應使用 kebab-case,最好包含 2-3 個與功能相關的關鍵詞。
3. 在 JavaScript 中使用的 HTML 的 id 和 class 應在整個專案中是唯一的,並且應包含 2-3 個與功能相關的關鍵詞。建議在僅在 JavaScript 中使用的 class 中使用 `js-` 前綴。
4. 不應覆蓋框架提供的 class 的 CSS 樣式。始終使用具有 2-3 個與功能相關的關鍵詞的新 class 名稱來覆蓋框架樣式。Gitea 中的幫助 CSS 類在 `helpers.less` 中。
5. 後端可以透過使用`ctx.PageData["myModuleData"] = map[]{}`將複雜資料傳遞給前端,但不要將整個模型暴露給前端,以避免泄露敏感資料。
6. 簡單頁面和與 SEO 相關的頁面使用 Go HTML 模板渲染生成靜態的 Fomantic-UI HTML 輸出。複雜頁面可以使用 Vue3。
7. 明確變量類型,優先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,優先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)`。
8. 使用語義化元素,優先使用`<button class="ui button">`而不是`<div class="ui button">`。
9. 避免在 CSS 中使用不必要的`!important`,如果無法避免,添加註釋解釋為什麼需要它。
10. 避免在一個事件監聽器中混合不同的事件,優先為每個事件使用獨立的事件監聽器。
11. 推薦使用自訂事件名稱前綴`ce-`。
12. 建議使用 Tailwind CSS,它可以透過 `tw-` 前綴獲得,例如 `tw-relative`. Gitea 自身的助手類 CSS 使用 `gt-` 前綴(`gt-ellipsis`),Gitea 自身的私有框架級 CSS 類使用 `g-` 前綴(`g-modal-confirm`)。
13. 儘量避免內聯腳本和樣式,建議將 JS 程式碼放入 JS 文件中並使用 CSS 類。如果內聯腳本和樣式不可避免,請解釋無法避免的原因。
### 可访问性 / ARIA
### 可訪問性 / ARIA
在历史上,Gitea 大量使用了可访问性不友好的框架 Fomantic UI。
Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`),
但仍然存在许多问题需要大量的工作和时间来修复。
在歷史上,Gitea 大量使用了可訪問性不友好的框架 Fomantic UI。
Gitea 使用一些補丁使 Fomantic UI 更具可訪問性(參見 `aria.md`),
但仍然存在許多問題需要大量的工作和時間來修復。
### 框架使用
不建议混合使用不同的框架,这会使代码难以维护。
一个 JavaScript 模組應遵循一个主要框架,並遵循該框架的最佳实践。
不建議混合使用不同的框架,這會使程式碼難以維護。
一個 JavaScript 模組應遵循一個主要框架,並遵循該框架的最佳實踐。
推荐的实現方式:
推薦的實現方式:
- Vue + Vanilla JS
- Fomantic-UI(jQuery)
- htmx (部分页面重新加载其他静态组件)
- htmx (部分頁面重新加載其他靜態元件)
- Vanilla JS
不推荐的实現方式:
不推薦的實現方式:
- Vue + Fomantic-UI(jQuery)
- jQuery + Vanilla JS
- htmx + 任何其他需要大量 JavaScript 代码或不必要的功能,如 htmx 脚本 (`hx-on`)
- htmx + 任何其他需要大量 JavaScript 程式碼或不必要的功能,如 htmx 腳本 (`hx-on`)
為了保持界面一致,Vue 组件可以使用 Fomantic-UI 的 CSS 类。
尽管不建议混合使用不同的框架,
我们使用 htmx 進行简單的交互。您可以在此 [PR](https://github.com/go-gitea/gitea/pull/28908) 中查看一个简單交互的示例,其中應使用 htmx。如果您需要更高级的反應性,請不要使用 htmx,請使用其他框架(Vue/Vanilla JS)。
但如果混合使用是必要的,並且代码设计良好且易于维护,也可以工作。
為了保持介面一致,Vue 元件可以使用 Fomantic-UI 的 CSS 類。
儘管不建議混合使用不同的框架,
我們使用 htmx 進行簡單的交互。您可以在此 [PR](https://github.com/go-gitea/gitea/pull/28908) 中查看一個簡單交互的範例,其中應使用 htmx。如果您需要更高級的反應性,請不要使用 htmx,請使用其他框架(Vue/Vanilla JS)。
但如果混合使用是必要的,並且程式碼設計良好且易於維護,也可以工作。
### `async` 函数
### `async` 函數
只有当函数内部存在`await`调用或返回`Promise`时,才将函数标记為`async`。
只有當函數內部存在`await`調用或返回`Promise`時,纔將函數標記為`async`。
不建议使用`async`事件监听器,这可能会导致问题。
原因是`await`后的代码在事件分发之外執行。
参考:https://github.com/github/eslint-plugin-github/blob/main/docs/rules/async-preventdefault.md
不建議使用`async`事件監聽器,這可能會導致問題。
原因是`await`後的程式碼在事件分發之外執行。
參考:https://github.com/github/eslint-plugin-github/blob/main/docs/rules/async-preventdefault.md
如果一个事件监听器必須是`async`,應在任何`await`之前使用`e.preventDefault()`,
建议将其放在函数的開頭。
如果一個事件監聽器必須是`async`,應在任何`await`之前使用`e.preventDefault()`,
建議將其放在函數的開頭。
如果我们想在非异步上下文中调用`async`函数,
建议使用`const _promise = asyncFoo()`来告诉读者
这是有意為之的,我们想调用异步函数並忽略 Promise。
一些 lint 規則和 IDE 也会在未处理返回的 Promise 时发出警告。
如果我們想在非異步上下文中調用`async`函數,
建議使用`const _promise = asyncFoo()`來告訴讀者
這是有意為之的,我們想調用異步函數並忽略 Promise。
一些 lint 規則和 IDE 也會在未處理返回的 Promise 時發出警告。
### 获取数据
### 獲取資料
要获取数据,請使用`modules/fetch.js`中的包装函数`GET`、`POST`等。他们
接受内容的`data`選项,将自动设置 CSRF 令牌並返回
要獲取資料,請使用`modules/fetch.js`中的包裝函數`GET`、`POST`等。他們
接受內容的`data`選項,將自動設定 CSRF 令牌並返回
[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response)。
### HTML 属性和 dataset
### HTML 屬性和 dataset
禁止使用`dataset`,它的驼峰命名行為使得搜索属性变得困难。
然而,仍然存在一些特殊情况,因此当前的准则是:
禁止使用`dataset`,它的駝峰命名行為使得搜索屬性變得困難。
然而,仍然存在一些特殊情況,因此當前的準則是:
- 對於旧代码:
- 對於舊程式碼:
- 應将`$.data()`重构為`$.attr()`。
- 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用。
- 應將`$.data()`重構為`$.attr()`。
- 在極少數情況下,可以使用`$.data()`將一些非字符串資料綁定到元素上,但強烈不推薦使用。
- 對於新代码:
- 對於新程式碼:
- 不應使用`node.dataset`,而應使用`node.getAttribute`。
- 不要将任何使用者数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
- 不要將任何使用者資料綁定到 DOM 節點上,使用合適的設計模式描述節點和資料之間的關係。
### 显示/隐藏元素
### 顯示/隱藏元素
- 推荐在 Vue 组件中使用`v-if`和`v-show`来显示/隐藏元素。
- Go 模板代码應使用 `.tw-hidden` 和 `showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,請参阅`.tw-hidden`的注释以获取更多详细信息。
- 推薦在 Vue 元件中使用`v-if`和`v-show`來顯示/隱藏元素。
- Go 模板程式碼應使用 `.tw-hidden` 和 `showElem()/hideElem()/toggleElem()` 來顯示/隱藏元素,請參閱`.tw-hidden`的註釋以獲取更多詳細資訊。
### Go HTML 模板中的样式和属性
### Go HTML 模板中的樣式和屬性
建议使用以下方式:
建議使用以下方式:
```html
<div
@@ -134,16 +134,16 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`)
></div>
```
以使代码更易读。
以使程式碼更易讀。
### 旧代码
### 舊程式碼
许多旧代码已经存在于本文撰写之前。建议重构旧代码以遵循指南。
許多舊程式碼已經存在於本文撰寫之前。建議重構舊程式碼以遵循指南。
### Vue3 和 JSX
Gitea 現在正在使用 Vue3。我们决定不引入 JSX,以保持 HTML 代码和 JavaScript 代码分离。
Gitea 現在正在使用 Vue3。我們決定不引入 JSX,以保持 HTML 程式碼和 JavaScript 程式碼分離。
### UI 示例
### UI 範例
Gitea 使用一些自制的 UI 元素並自定义其他元素,以将它们更好地集成到通用 UI 方法中。当在开发模式(`RUN_MODE=dev`)下运行 Gitea 时,在 `http(s)://your-gitea-url:port/devtest` 下会提供一个包含一些标准化 UI 示例的页面。
Gitea 使用一些自制的 UI 元素並自訂其他元素,以將它們更好地整合到通用 UI 方法中。當在開發模式(`RUN_MODE=dev`)下運行 Gitea 時,在 `http(s)://your-gitea-url:port/devtest` 下會提供一個包含一些標準化 UI 範例的頁面。
@@ -6,35 +6,35 @@ aliases:
- /zh-tw/guidelines-refactoring
---
# 重构指南
# 重構指南
## 背景
自 2014 年 2 月 12 日编写了第一行代码以来,Gitea 已经发展成為一个庞大的项目。
因此,代码库变得越来越大。代码库越大,维护就越困难。
存在许多過时的機制,许多框架混合在一起,一些遗留代码可能会导致错误並阻碍新功能的开发。
為了使代码库更易于维护,使 Gitea 变得更好,开发人员應牢记使用現代機制来重构旧代码。
自 2014 年 2 月 12 日編寫了第一行程式碼以來,Gitea 已經發展成為一個龐大的專案。
因此,程式碼庫變得越來越大。程式碼庫越大,維護就越困難。
存在許多過時的機制,許多框架混合在一起,一些遺留程式碼可能會導致錯誤並阻礙新功能的開發。
為了使程式碼庫更易於維護,使 Gitea 變得更好,開發人員應牢記使用現代機制來重構舊程式碼。
本文檔是关于重构代码库的指南集合。
本文件是關於重構程式碼庫的指南集合。
## 重构建议
## 重構建議
- 设计更多关于未来的内容,而不僅僅解决当前问题。
- 减少模糊性,减少冲突,提高可维护性。
- 描述重构,例如:
- 為什么需要重构。
- 如何解决旧问题。
- 重构的优点/缺点是什么。
- 只做必要的更改,尽量保留旧逻辑。
- 引入一些中间步骤,使重构更容易审查,完整的重构计划可以在几个 PR 中完成。
- 如果存在分歧,應該請 TOC(技术监督委员会)参与决策。
- 添加必要的测试以确保重构的正确性。
- 非错误重构优先在里程碑的开始时進行,这样可以更容易地在發佈之前发現问题。
- 設計更多關於未來的內容,而不僅僅解決當前問題。
- 減少模糊性,減少衝突,提高可維護性。
- 描述重構,例如:
- 為什麼需要重構。
- 如何解決舊問題。
- 重構的優點/缺點是什麼。
- 只做必要的更改,儘量保留舊邏輯。
- 引入一些中間步驟,使重構更容易審查,完整的重構計劃可以在幾個 PR 中完成。
- 如果存在分歧,應該請 TOC(技術監督委員會)參與決策。
- 添加必要的測試以確保重構的正確性。
- 非錯誤重構優先在里程碑的開始時進行,這樣可以更容易地在發佈之前發現問題。
## 审查和合並建议
## 審查和合併建議
- 重构的 PR 不應該长时间保持打开状态(通常為 7 天),應尽快進行审查。
- 重构的 PR 應尽快合並,不應被其他 PR 阻塞。
- 如果 TOC 没有异议,重构的 PR 可以在 7 天后由一名核心成员(非作者)批准后合並。
- 如果最终结果良好,容忍一些不完美/临时的步骤。
- 如果重构是必要的,容忍一些回归错误,並尽快修复错误。
- 重構的 PR 不應該長時間保持打開狀態(通常為 7 天),應儘快進行審查。
- 重構的 PR 應儘快合併,不應被其他 PR 阻塞。
- 如果 TOC 沒有異議,重構的 PR 可以在 7 天后由一名核心成員(非作者)批准後合併。
- 如果最終結果良好,容忍一些不完美/臨時的步驟。
- 如果重構是必要的,容忍一些迴歸錯誤,並儘快修復錯誤。
@@ -8,18 +8,18 @@ aliases:
# 本地化
Gitea 的本地化是通過我们的[Crowdin 项目](https://crowdin.com/project/gitea)進行的。
Gitea 的本地化是通過我們的[Crowdin 專案](https://crowdin.com/project/gitea)進行的。
對於对**英语翻译**的更改,可以发出 pull-request,来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。
對於對**英語翻譯**的更改,可以發出 pull-request,來更改[英語語言環境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合適的關鍵字。
有关对**非英语**翻译的更改,請参阅上面的 Crowdin 项目。
有關對**非英語**翻譯的更改,請參閱上面的 Crowdin 專案。
## 支持的语言
## 支援的語言
上述 Crowdin 项目中列出的任何语言一旦翻译了 25% 或更多都将得到支持。
上述 Crowdin 專案中列出的任何語言一旦翻譯了 25% 或更多都將得到支援。
翻译被接受后,它将在下一次 Crowdin 同步后反映在主存儲库中,这通常是在任何 PR 合並之后。
翻譯被接受後,它將在下一次 Crowdin 同步後反映在主儲存庫中,這通常是在任何 PR 合併之後。
在撰写本文时,这意味着更改后的翻译可能要到 Gitea 的下一个版本才会出現。
在撰寫本文時,這意味著更改後的翻譯可能要到 Gitea 的下一個版本纔會出現。
如果使用开发版本,则在同步更改内容后,它應該会在更新后立即显示。
如果使用開發版本,則在同步更改內容後,它應該會在更新後立即顯示。
@@ -8,34 +8,36 @@ aliases:
# API 使用指南
## 开启/配置 API 访问
## 開啟/設定 API 存取
通常情况下, `ENABLE_SWAGGER` 默认开启並且參數 `MAX_RESPONSE_ITEMS` 默认為 50。您可以从 [Config Cheat Sheet](../administration/config-cheat-sheet.md) 中获取更多配置相关信息。
通常情況下, `ENABLE_SWAGGER` 預設開啟並且參數 `MAX_RESPONSE_ITEMS` 預設為 50。您可以從 [Config Cheat Sheet](../administration/config-cheat-sheet.md) 中獲取更多設定相關資訊。
## 通過 API 認證
<a id="authentication"></a>
<a id="通過-api-認證"></a>
## 透過 API 認證
Gitea 支持以下几种 API 認證方式:
Gitea 支援以下幾種 API 認證方式:
- HTTP basic authentication 方式
- 通過指定 `token=...` URL 查询參數方式
- 通過指定 `access_token=...` URL 查询參數方式
- 通過指定 `Authorization: token ...` HTTP header 方式
- 透過指定 `token=...` URL 查詢參數方式
- 透過指定 `access_token=...` URL 查詢參數方式
- 透過指定 `Authorization: token ...` HTTP header 方式
以上提及的認證方法接受相同的 apiKey token 類型,您可以在编码时通過查阅代码更好地理解这一点。
Gitea 调用解析查询參數以及头部信息来获取 token 的代码可以在 [modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47) 中找到。
以上提及的認證方法接受相同的 apiKey token 類型,您可以在編碼時透過查閱程式碼更好地理解這一點。
Gitea 調用解析查詢參數以及頭部資訊來獲取 token 的程式碼可以在 [modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47) 中找到。
您可以通過您的 gitea web 界面来建立 apiKey token:
您可以透過您的 gitea Web 介面來建立 apiKey token:
`Settings | Applications | Generate New Token`.
### 关于 `Authorization:` header
### 關於 `Authorization:` header
由于一些历史原因,Gitea 需要在 header 的 apiKey token 里引入前缀 `token`,类似于如下形式:
由於一些歷史原因,Gitea 需要在 header 的 apiKey token 裡引入前綴 `token`,類似於如下形式:
```
Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675
```
以 `curl` 命令為例,它会以如下形式携带在請求中:
以 `curl` 命令為例,它會以如下形式攜帶在請求中:
```
curl "http://localhost:4000/api/v1/repos/test1/test1/issues" \
@@ -44,11 +46,11 @@ curl "http://localhost:4000/api/v1/repos/test1/test1/issues" \
-H "Content-Type: application/json" -d "{ \"body\": \"testing\", \"title\": \"test 20\"}" -i
```
正如上例所示,您也可以在 GET 請求中使用同一个 token 並以 `token=` 的查询參數形式携带 token 来進行認證。
正如上例所示,您也可以在 GET 請求中使用同一個 token 並以 `token=` 的查詢參數形式攜帶 token 來進行認證。
## 通過 API 列出您發佈的令牌
## 透過 API 列出您發佈的令牌
`/users/:name/tokens` 是一个特殊的接口,需要您使用 basic authentication 進行認證,具體原因在 issue 中
`/users/:name/tokens` 是一個特殊的介面,需要您使用 basic authentication 進行認證,具體原因在 issue 中
[#3842](https://github.com/go-gitea/gitea/issues/3842#issuecomment-397743346) 有所提及,使用方法如下所示:
### 使用 Basic authentication 認證
@@ -60,4 +62,4 @@ $ curl --url https://yourusername:[email protected]/api/v1/users/your
## 使用 Sudo 方式請求 API
此 API 允许管理员借用其他使用者身份進行 API 請求。只需在請求中指定查询參數 `sudo=` 或是指定 header 中的 `Sudo:` 為需要使用的使用者 username 即可。
此 API 允許管理員借用其他使用者身份進行 API 請求。只需在請求中指定查詢參數 `sudo=` 或是指定 header 中的 `Sudo:` 為需要使用的使用者 username 即可。
@@ -6,38 +6,38 @@ aliases:
- /zh-tw/hacking-on-gitea
---
# 玩转 Gitea
# 玩轉 Gitea
## 快速入门
## 快速入門
要获得快速工作的开发环境,您可以使用 Gitpod。
要獲得快速工作的開發環境,您可以使用 Gitpod。
[![在 Gitpod 中打开](/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/go-gitea/gitea)
[![在 Gitpod 中打開](/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/go-gitea/gitea)
## 安裝 Golang
您需要 [安裝 go](https://go.dev/doc/install) 並设置您的 go 环境。
您需要 [安裝 go](https://go.dev/doc/install) 並設定您的 go 環境。
接下来,[使用 npm 安裝 Node.js](https://nodejs.org/en/download/) ,这是构建
JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@
並且推荐使用最新的 LTS 版本。
接下來,[使用 npm 安裝 Node.js](https://nodejs.org/en/download/) ,這是構建
JavaScript 和 CSS 文件的必要工具。最低支援的 Node.js 版本是 @minNodeVersion@
並且推薦使用最新的 LTS 版本。
**注意** :当執行需要外部工具的 make 任务时,比如
`make watch-backend`,Gitea 会自动下载並构建这些必要的组件。為了能够使用这些,你必須
将 `"$GOPATH"/bin` 目錄加入到可執行路径上。如果你不把 go bin 目錄添加到可執行路径你必須手动
指定可執行程序路径。
**注意** :當執行需要外部工具的 make 任務時,比如
`make watch-backend`,Gitea 會自動下載並構建這些必要的元件。為了能夠使用這些,你必須
將 `"$GOPATH"/bin` 目錄加入到可執行路徑上。如果你不把 go bin 目錄添加到可執行路徑你必須手動
指定可執行程式路徑。
**注意 2** :Go 版本 @minGoVersion@ 或更高版本是必須的。Gitea 使用 `gofmt` 来
格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安裝我们持续集成使用
**注意 2** :Go 版本 @minGoVersion@ 或更高版本是必須的。Gitea 使用 `gofmt` 來
格式化源程式碼。然而,`gofmt` 的結果可能因 `go` 的版本而有差異。因此推薦安裝我們持續整合使用
的 Go 版本。截至上次更新,Go 版本應該是 @goVersion@。
## 安裝 Make
Gitea 大量使用 `Make` 来自动化任务和改進开发。本指南涵盖了如何安裝 Make。
Gitea 大量使用 `Make` 來自動化任務和改進開發。本指南涵蓋了如何安裝 Make。
### 在 Linux 上
使用包管理器安裝。
使用套件管理器安裝。
在 Ubuntu/Debian 上:
@@ -53,37 +53,37 @@ sudo yum install make
### 在 Windows 上
Make 的这三个发行版都可以在 Windows 上运行:
Make 的這三個發行版都可以在 Windows 上運行:
- [單个二進制构建](http://www.equation.com/servlet/equation.cmd?fa=make)。复制到某处並添加到 `PATH`。
- [單個二進制構建](http://www.equation.com/servlet/equation.cmd?fa=make)。複製到某處並添加到 `PATH`。
- [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe)
- [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe)
- [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)。
- MSYS2 是一个工具和库的集合,為您提供一个易于使用的环境来构建、安裝和运行本机 Windows 软件,它包括 MinGW-w64。
- 在 MingGW-w64 中,二進制文件稱為 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH`。
- 在 MSYS2 中,您可以直接使用 `make`。請参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。
- 要使用 CGO_ENABLED(例如:SQLite3)编译 Gitea,您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc,因為 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 \_beginthread 一样。
- [Chocolatey 包管理器](https://chocolatey.org/packages/make)。运行`choco install make`
- MSYS2 是一個工具和庫的集合,為您提供一個易於使用的環境來構建、安裝和運行本機 Windows 軟件,它包括 MinGW-w64。
- 在 MingGW-w64 中,二進制文件稱為 `mingw32-make.exe` 而不是 `make.exe`。將 `bin` 文件夾添加到 `PATH`。
- 在 MSYS2 中,您可以直接使用 `make`。請參閱 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。
- 要使用 CGO_ENABLED(例如:SQLite3)編譯 Gitea,您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc,因為 MSYS2 gcc 標頭缺少一些 Windows -只有 CRT 函數像 \_beginthread 一樣。
- [Chocolatey 套件管理器](https://chocolatey.org/packages/make)。運行`choco install make`
**注意** :如果您尝试在 Windows 命令提示符下使用 make 進行构建,您可能会遇到问题。建议使用上述提示(Git bash 或 MinGW),但是如果您只有命令提示符(或可能是 PowerShell),则可以使用 [set](https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`。
**注意** :如果您嘗試在 Windows 命令提示符下使用 make 進行構建,您可能會遇到問題。建議使用上述提示(Git bash 或 MinGW),但是如果您只有命令提示符(或可能是 PowerShell),則可以使用 [set](https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`。
## 下载並克隆 Gitea 源代码
## 下載並克隆 Gitea 源程式碼
获取源代码的推荐方法是使用 `git clone`。
獲取源程式碼的推薦方法是使用 `git clone`。
```bash
git clone https://github.com/go-gitea/gitea
```
(自从 go modules 出現后,不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。)
(自從 go modules 出現後,不再需要構建 go 專案從 `$GOPATH` 中獲取,因此不再推薦使用 `go get` 方法。)
## 派生 Gitea
如上所述下载主要的 Gitea 源代码。然后,派生 [Gitea 存放庫](https://github.com/go-gitea/gitea),
並為您的本地存放庫切换 git 远程源,或添加另一个远程源:
如上所述下載主要的 Gitea 源程式碼。然後,派生 [Gitea 存放庫](https://github.com/go-gitea/gitea),
並為您的本地存放庫切換 git 遠程源,或添加另一個遠程源:
```bash
# 将原来的 Gitea origin 重命名為 upstream
# 將原來的 Gitea origin 重命名為 upstream
git remote rename origin upstream
git remote add origin "git@github.com:$GITHUB_USERNAME/gitea.git"
git fetch --all --prune
@@ -92,86 +92,86 @@ git fetch --all --prune
或者:
```bash
# 為我们的 fork 添加新的远程
# 為我們的 fork 添加新的遠程
git remote add "$FORK_NAME" "git@github.com:$GITHUB_USERNAME/gitea.git"
git fetch --all --prune
```
為了能够建立合並請求,應将分叉存儲库添加為 Gitea 本地存放庫的远程,否则無法推送更改。
為了能夠建立合併請求,應將分叉儲存庫添加為 Gitea 本地存放庫的遠程,否則無法推送更改。
## 构建 Gitea(基本)
## 構建 Gitea(基本)
看看我们的
[说明](installation/from-source.md)
关于如何[从源代码构建](installation/from-source.md) 。
看看我們的
[說明](installation/from-source.md)
關於如何[從源程式碼構建](installation/from-source.md) 。
从源代码构建的最简單推荐方法是:
從源程式碼構建的最簡單推薦方法是:
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make build
```
`build` 目标将同时執行 `frontend` 和 `backend` 子目标。如果存在 `bindata` 標籤,资源文件将被编译成二進制文件。建议在進行前端开发时省略 `bindata` 標籤,以便实时反映更改。
`build` 目標將同時執行 `frontend` 和 `backend` 子目標。如果存在 `bindata` 標籤,資源文件將被編譯成二進制文件。建議在進行前端開發時省略 `bindata` 標籤,以便實時反映更改。
有关所有可用的 `make` 目标,請参阅 `make help`。另請参阅 [`.drone.yml`](https://github.com/go-gitea/gitea/blob/main/.drone.yml) 以了解我们的持续集成是如何工作的。
有關所有可用的 `make` 目標,請參閱 `make help`。另請參閱 [`.drone.yml`](https://github.com/go-gitea/gitea/blob/main/.drone.yml) 以瞭解我們的持續整合是如何工作的。
## 持续构建
## 持續構建
要在源文件更改时运行並持续构建:
要在源文件更改時運行並持續構建:
```bash
# 對於前端和后端
# 對於前端和後端
make watch
# 或者:只看前端文件(html/js/css)
make watch-frontend
# 或者:只看后端文件 (go)
# 或者:只看後端文件 (go)
make watch-backend
```
在 macOS 上,监视所有后端源文件可能会达到默认的打开文件限制,这可以通過当前 shell 的 `ulimit -n 12288` 或所有未来 shell 的 shell 启动文件来增加。
在 macOS 上,監視所有後端源文件可能會達到預設的打開文件限制,這可以透過當前 shell 的 `ulimit -n 12288` 或所有未來 shell 的 shell 啟動文件來增加。
### 格式化、代码分析和拼写检查
### 格式化、程式碼分析和拼寫檢查
我们的持续集成将拒绝未通過代码检查(包括格式检查、代码分析和拼写检查)的 PR。
我們的持續整合將拒絕未通過程式碼檢查(包括格式檢查、程式碼分析和拼寫檢查)的 PR。
你應該格式化你的代码:
你應該格式化你的程式碼:
```bash
make fmt
```
並检查源代码:
並檢查源程式碼:
```bash
# lint 前端和后端代码
# lint 前端和後端代碼
make lint
# 僅 lint 后端代码
# 僅 lint 後端代碼
make lint-backend
```
**注意** :`gofmt` 的结果取决于 `go` 的版本。您應該运行与持续集成相同的 go 版本。
**注意** :`gofmt` 的結果取決於 `go` 的版本。您應該運行與持續整合相同的 go 版本。
### 处理 JS 和 CSS
### 處理 JS 和 CSS
前端开发應遵循 [Guidelines for Frontend Development](contributing/guidelines-frontend.md)。
前端開發應遵循 [Guidelines for Frontend Development](contributing/guidelines-frontend.md)。
要使用前端资源构建,請使用上面提到的“watch-frontend”目标或只构建一次:
要使用前端資源構建,請使用上面提到的“watch-frontend”目標或只構建一次:
```bash
make build && ./gitea
```
在提交之前,确保 linters 通過:
在提交之前,確保 linters 通過:
```bash
make lint-frontend
```
### 配置本地 ElasticSearch 实例
### 設定本地 ElasticSearch 實例
使用 docker 启动本地 ElasticSearch 实例:
使用 docker 啟動本地 ElasticSearch 實例:
```sh
mkdir -p $(pwd) /data/elasticsearch
@@ -179,7 +179,7 @@ sudo chown -R 1000:1000 $(pwd) /data/elasticsearch
docker run --rm --memory= "4g" -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v "$(pwd)/data /elasticsearch:/usr/share/elasticsearch/data" docker.elastic.co/elasticsearch/elasticsearch:7.16.3
```
配置`app.ini`:
設定`app.ini`:
```ini
[indexer]
@@ -190,30 +190,30 @@ REPO_INDEXER_TYPE = elasticsearch
REPO_INDEXER_CONN_STR = http://elastic:changeme@localhost:9200
```
### 构建和添加 SVGs
### 構建和添加 SVGs
SVG 图标是使用 `make svg` 命令构建的,該命令将图标资源编译到输出目錄 `public/assets/img/svg` 中。可以在 `web_src/svg` 目錄中添加自定义图标。
SVG 圖標是使用 `make svg` 命令構建的,該命令將圖標資源編譯到輸出目錄 `public/assets/img/svg` 中。可以在 `web_src/svg` 目錄中添加自訂圖標。
### 构建 Logo
### 構建 Logo
Gitea Logo 的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从單个 SVG 源文件 assets/logo.svg 构建的。要运行它,Node.js 和 npm 必須可用。
Gitea Logo 的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目標從單個 SVG 源文件 assets/logo.svg 構建的。要運行它,Node.js 和 npm 必須可用。
通過更新 `assets/logo.svg` 並运行 `make generate-images`,同样的過程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译選项将僅更新使用者指定的 LOGO 文件。
通過更新 `assets/logo.svg` 並運行 `make generate-images`,同樣的過程也可用於從 SVG 源文件生成自訂 Logo PNG。忽略 gitea 編譯選項將僅更新使用者指定的 LOGO 文件。
### 更新 API
建立新的 API 路由或修改現有的 API 路由时,您**必須**
建立新的 API 路由或修改現有的 API 路由時,您**必須**
更新和/或建立 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
这些使用 [go-swagger](https://goswagger.io/) 评论的文檔。
[规范](https://goswagger.io/use/spec.html#annotation-syntax)中描述了这些注释的结构。
如果您想了解更多有关 Swagger 结构的信息,可以查看
[Swagger 2.0 文檔](https://swagger.io/docs/specification/2-0/basic-structure/)
或与添加新 API 端点的先前 PR 進行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
這些使用 [go-swagger](https://goswagger.io/) 評論的文件。
[規範](https://goswagger.io/use/spec.html#annotation-syntax)中描述了這些註釋的結構。
如果您想了解更多有關 Swagger 結構的資訊,可以查看
[Swagger 2.0 文件](https://swagger.io/docs/specification/2-0/basic-structure/)
或與添加新 API 端點的先前 PR 進行比較,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
您應該注意不要破坏下游使用者依赖的 API。在稳定的 API 上,一般来说添加是可以接受的,但删除
或对 API 進行根本性更改将会被拒绝。
您應該注意不要破壞下游使用者依賴的 API。在穩定的 API 上,一般來說添加是可以接受的,但刪除
或對 API 進行根本性更改將會被拒絕。
建立或更改 API 端点后,請用以下命令重新生成 Swagger 文檔:
建立或更改 API 端點後,請用以下命令重新生成 Swagger 文件:
```bash
make generate-swagger
@@ -225,77 +225,77 @@ make generate-swagger
make swagger-validate
```
您應該提交更改后的 swagger JSON 文件。持续集成服务器将使用以下方法检查是否已完成:
您應該提交更改後的 swagger JSON 文件。持續整合伺服器將使用以下方法檢查是否已完成:
```bash
make swagger-check
```
**注意** :請注意,您應該使用 Swagger 2.0 文檔,而不是 OpenAPI 3 文檔。
**注意** :請注意,您應該使用 Swagger 2.0 文件,而不是 OpenAPI 3 文件。
### 建立新的配置選项
### 建立新的設定選項
建立新的配置選项时,将它们添加到 `modules/setting` 的对應文件。您應該将信息添加到 `custom/conf/app.ini`
並到[配置备忘單](../administration/config-cheat-sheet.md)
建立新的設定選項時,將它們添加到 `modules/setting` 的對應文件。您應該將資訊添加到 `custom/conf/app.ini`
並到[設定備忘單](../administration/config-cheat-sheet.md)
在 `docs/content/doc/advanced/config-cheat-sheet.zh-tw.md` 中找到
### 更改 Logo
更改 Gitea Logo SVG 时,您将需要运行並提交结果的:
更改 Gitea Logo SVG 時,您將需要運行並提交結果的:
```bash
make generate-images
```
这将建立必要的 Gitea 图标和其他图标。
這將建立必要的 Gitea 圖標和其他圖標。
### 数据库迁移
### 資料庫遷移
如果您对数据库中的任何数据库持久结构進行重大更改
`models/` 目錄,您将需要進行新的迁移。可以找到这些
在 `models/migrations/` 中。您可以确保您的迁移适用于主要
数据库類型使用:
如果您對資料庫中的任何資料庫持久結構進行重大更改
`models/` 目錄,您將需要進行新的遷移。可以找到這些
在 `models/migrations/` 中。您可以確保您的遷移適用於主要
資料庫類型使用:
```bash
make test-sqlite-migration # 将 SQLite 切换為适当的数据库
make test-sqlite-migration # 將 SQLite 切換為適當的數據庫
```
## 测试
## 測試
Gitea 运行两种類型的测试:單元测试和集成测试。
Gitea 運行兩種類型的測試:單元測試和整合測試。
### 單元测试
### 單元測試
`go test` 系统中的`*_test.go` 涵盖了單元测试。
您可以设置环境变量 `GITEA_UNIT_TESTS_LOG_SQL=1` 以在详细模式下运行测试时显示所有 SQL 语句(即设置`GOTESTFLAGS=-v` 时)。
`go test` 系統中的`*_test.go` 涵蓋了單元測試。
您可以設定環境變量 `GITEA_UNIT_TESTS_LOG_SQL=1` 以在詳細模式下運行測試時顯示所有 SQL 語句(即設定`GOTESTFLAGS=-v` 時)。
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make test # Runs the unit tests
```
### 集成测试
### 整合測試
單元测试不会也不能完全單独测试 Gitea。因此,我们编写了集成测试;但是,这些依赖于数据库。
單元測試不會也不能完全單獨測試 Gitea。因此,我們編寫了整合測試;但是,這些依賴於資料庫。
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make build test-sqlite
```
将在 SQLite 环境中运行集成测试。集成测试需要安裝 `git lfs`。其他数据库测试可用,但
可能需要适應当地环境。
將在 SQLite 環境中運行整合測試。整合測試需要安裝 `git lfs`。其他資料庫測試可用,但
可能需要適應當地環境。
看看 [`tests/integration/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integration/README.md) 有关更多信息以及如何运行單个测试。
看看 [`tests/integration/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integration/README.md) 有關更多資訊以及如何運行單個測試。
### 测试 PR
### 測試 PR
我们的持续集成将测试代码是否通過了單元测试,並且所有支持的数据库都将在 Docker 环境中通過集成测试。
還将测试从几个最新版本的 Gitea 迁移。
我們的持續整合將測試程式碼是否通過了單元測試,並且所有支援的資料庫都將在 Docker 環境中通過整合測試。
還將測試從幾個最新版本的 Gitea 遷移。
請在 PR 中附带提交适当的單元测试和集成测试。
請在 PR 中附帶提交適當的單元測試和整合測試。
## 网站文檔
## 網站文件
該网站的文檔位于 `docs/` 中。如果你改变了文檔内容,你可以使用以下测试方法進行持续集成:
該網站的文件位於 `docs/` 中。如果你改變了文件內容,你可以使用以下測試方法進行持續整合:
```bash
make lint-md
@@ -304,31 +304,31 @@ make lint-md
## Visual Studio Code
`contrib/ide/vscode` 中為 Visual Studio Code 提供了 `launch.json` 和 `tasks.json`。查看
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/main/contrib/ide/README.md) 了解更多信息。
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/main/contrib/ide/README.md) 瞭解更多資訊。
## Goland
單擊 `/main.go` 中函数 `func main()` 上的 `Run Application` 箭头
可以快速启动一个可调试的 Gitea 实例。
單擊 `/main.go` 中函數 `func main()` 上的 `Run Application` 箭頭
可以快速啟動一個可調試的 Gitea 實例。
`Run/Debug Configuration` 中的 `Output Directory` 必須设置為
gitea 项目目錄(包含 `main.go` 和 `go.mod`),
否则,启动实例的工作目錄是 GoLand 的临时目錄
並防止 Gitea 在开发环境中加载动态资源(例如:模板)。
`Run/Debug Configuration` 中的 `Output Directory` 必須設定為
gitea 專案目錄(包含 `main.go` 和 `go.mod`),
否則,啟動實例的工作目錄是 GoLand 的臨時目錄
並防止 Gitea 在開發環境中加載動態資源(例如:模板)。
要在 GoLand 中使用 SQLite 运行單元测试,請设置 `-tags sqlite,sqlite_unlock_notify`
在 `运行/调试配置` 的 `Go 工具參數` 中。
要在 GoLand 中使用 SQLite 運行單元測試,請設定 `-tags sqlite,sqlite_unlock_notify`
在 `運行/調試配置` 的 `Go 工具參數` 中。
## 提交 PR
对更改感到满意后,将它们推送並打开拉取請求。它建议您允许 Gitea Managers 和 Owners 修改您的 PR
分支,因為我们需要在合並之前将其更新為 main 和/或可能是能够直接帮助解决问题。
對更改感到滿意後,將它們推送並打開拉取請求。它建議您允許 Gitea Managers 和 Owners 修改您的 PR
分支,因為我們需要在合併之前將其更新為 main 和/或可能是能夠直接幫助解決問題。
任何 PR 都需要 Gitea 维护者的两次批准,並且需要通過持续集成。看看我们的
任何 PR 都需要 Gitea 維護者的兩次批准,並且需要通過持續整合。看看我們的
[CONTRIBUTING.md](https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md)
文檔。
文件。
如果您需要更多帮助,請访问 [Discord](https://discord.gg/gitea) #Develop 频道
並在那里聊天。
如果您需要更多幫助,請前往 [Discord](https://discord.gg/gitea) #Develop 頻道
並在那裡聊天。
現在,您已准备好 Hacking Gitea。
現在,您已準備好 Hacking Gitea。
@@ -6,21 +6,21 @@ aliases:
- /zh-tw/integrations
---
# 集成
# 整合
Gitea 拥有一个出色的第三方集成社区,以及在其他各种项目中的一流支持。
Gitea 擁有一個出色的第三方整合社區,以及在其他各種專案中的一流支援。
我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成!
我們正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一個列表來跟蹤這些整合!
如果你正在寻找[CI/CD](https://gitea.com/gitea/awesome-gitea#user-content-devops),
一个[SDK](https://gitea.com/gitea/awesome-gitea#user-content-sdk),
甚至一些额外的[主题](https://gitea.com/gitea/awesome-gitea#user-content-themes),
你可以在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)中找到它们的列表!
如果你正在尋找[CI/CD](https://gitea.com/gitea/awesome-gitea#user-content-devops),
一個[SDK](https://gitea.com/gitea/awesome-gitea#user-content-sdk),
甚至一些額外的[主題](https://gitea.com/gitea/awesome-gitea#user-content-themes),
你可以在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)中找到它們的列表!
## 预填新文件名和内容
## 預填新文件名和內容
如果你想打开一个具有给定名稱和内容的新文件,
你可以使用查询參數来实現:
如果你想打開一個具有給定名稱和內容的新文件,
你可以使用查詢參數來實現:
```txt
GET /{{org}}/{{repo}}/_new/{{filepath}}
@@ -6,26 +6,26 @@ aliases:
- /zh-tw/migrations-interfaces
---
# 迁移接口
# 遷移介面
完整迁移功能在 Gitea 1.9.0 版本中引入。它定义了两个接口,用于支持从其他 Git 托管平台迁移存儲库数据到 Gitea,或者在将来将 Gitea 数据迁移到其他 Git 托管平台。
完整遷移功能在 Gitea 1.9.0 版本中引入。它定義了兩個介面,用於支援從其他 Git 託管平台遷移儲存庫資料到 Gitea,或者在將來將 Gitea 資料遷移到其他 Git 託管平台。
目前已实現了从 GitHub、GitLab 和其他 Gitea 实例的迁移。
目前已實現了從 GitHub、GitLab 和其他 Gitea 實例的遷移。
首先,Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository`、`Milestone`、`Release`、`ReleaseAsset`、`Label`、`Issue`、`Comment`、`PullRequest`、`Reaction`、`Review`、`ReviewComment`。
首先,Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定義了一些標準對象。它們是`Repository`、`Milestone`、`Release`、`ReleaseAsset`、`Label`、`Issue`、`Comment`、`PullRequest`、`Reaction`、`Review`、`ReviewComment`。
## 下载器接口
## 下載器介面
要从新的 Git 托管平台迁移,需要進行两个步骤的更新。
要從新的 Git 託管平台遷移,需要進行兩個步驟的更新。
- 您應該实現一个`Downloader`,用于获取存儲库信息。
- 您應該实現一个`DownloaderFactory`,用于检测 URL 是否匹配,並建立上述的`Downloader`。
- 您需要在`init()`中通過`RegisterDownloaderFactory`注册`DownloaderFactory`。
- 您應該實現一個`Downloader`,用於獲取儲存庫資訊。
- 您應該實現一個`DownloaderFactory`,用於檢測 URL 是否匹配,並建立上述的`Downloader`。
- 您需要在`init()`中通過`RegisterDownloaderFactory`註冊`DownloaderFactory`。
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到這些介面。
## 上传器接口
## 上傳器介面
目前,只实現了`GiteaLocalUploader`,因此我们只能通過此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
目前,只實現了`GiteaLocalUploader`,因此我們只能透過此 Uploader 將下載的資料保存到本地的 Gitea 實例。目前不支援其他上傳器。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到這些介面。
@@ -8,11 +8,11 @@ aliases:
# OAuth2 提供者
Gitea 支持作為 OAuth2 提供者,允许第三方應用程序在使用者同意的情况下访问其资源。此功能自 1.8.0 版起可用。
Gitea 支援作為 OAuth2 提供者,允許第三方應用程式在使用者同意的情況下訪問其資源。此功能自 1.8.0 版起可用。
## 端点
## 端點
| 端点 | URL |
| 端點 | URL |
| ------------------------ | ----------------------------------- |
| OpenID Connect Discovery | `/.well-known/openid-configuration` |
| Authorization Endpoint | `/login/oauth/authorize` |
@@ -20,81 +20,81 @@ Gitea 支持作為 OAuth2 提供者,允许第三方應用程序在使用者同
| OpenID Connect UserInfo | `/login/oauth/userinfo` |
| JSON Web Key Set | `/login/oauth/keys` |
## 支持的 OAuth2 授权
## 支援的 OAuth2 授權
目前 Gitea 僅支持 [**Authorization Code Grant**](https://tools.ietf.org/html/rfc6749#section-1.3.1) 标准,並额外支持以下扩展:
目前 Gitea 僅支援 [**Authorization Code Grant**](https://tools.ietf.org/html/rfc6749#section-1.3.1) 標準,並額外支援以下擴展:
- [Proof Key for Code Exchange (PKCE)](https://tools.ietf.org/html/rfc7636)
- [OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth)
要将 Authorization Code Grant 作為第三方應用程序,您需要通過在设置中添加一个新的 "應用程序" (`/user/settings/applications`)。
要將 Authorization Code Grant 作為第三方應用程式,您需要通過在設定中添加一個新的 "應用程式" (`/user/settings/applications`)。
## 范围
## 範圍
Gitea 支持以下令牌范围:
Gitea 支援以下令牌範圍:
| 名稱 | 介绍 |
| 名稱 | 介紹 |
| ---------------------------------------- | --------------------------------------------------------------- |
| **(no scope)** | 授予对公共使用者配置文件和公共存儲库的只读访问权限 |
| **repo** | 完全控制所有存儲库 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存儲库中提交状态的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **public_repo** | 僅授予对公共存儲库的读/写访问权限 |
| **admin:repo_hook** | 授予对所有存儲库的 Hooks 访问权限,該权限已包含在 `repo` 范围中 |
| &nbsp;&nbsp;&nbsp; **write:repo_hook** | 授予对存儲库 Hooks 的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:repo_hook** | 授予对存儲库 Hooks 的只读访问权限 |
| **admin:org** | 授予对組織设置的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:org** | 授予对組織设置的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:org** | 授予对組織设置的只读访问权限 |
| **admin:public_key** | 授予公钥管理的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:public_key** | 授予对公钥的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:public_key** | 授予对公钥的只读访问权限 |
| **admin:org_hook** | 授予对組織级别 Hooks 的完全访问权限 |
| **admin:user_hook** | 授予对使用者级别 Hooks 的完全访问权限 |
| **notification** | 授予对通知的完全访问权限 |
| **user** | 授予对使用者个人资料信息的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **read:user** | 授予对使用者个人资料的读取权限 |
| &nbsp;&nbsp;&nbsp; **user:email** | 授予对使用者电子邮件地址的读取权限 |
| &nbsp;&nbsp;&nbsp; **user:follow** | 授予访问权限以关注/取消关注使用者 |
| **delete_repo** | 授予删除存儲库的权限 |
| **package** | 授予对托管包的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:package** | 授予对包的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:package** | 授予对包的读取权限 |
| &nbsp;&nbsp;&nbsp; **delete:package** | 授予对包的删除权限 |
| **admin:gpg_key** | 授予 GPG 密钥管理的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:gpg_key** | 授予对 GPG 密钥的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:gpg_key** | 授予对 GPG 密钥的只读访问权限 |
| **admin:application** | 授予應用程序管理的完全访问权限 |
| &nbsp;&nbsp;&nbsp; **write:application** | 授予應用程序管理的读/写访问权限 |
| &nbsp;&nbsp;&nbsp; **read:application** | 授予應用程序管理的读取权限 |
| **sudo** | 允许以站点管理员身份執行操作 |
| **(no scope)** | 授予對公共使用者設定文件和公開儲存庫的只讀存取權限 |
| **repo** | 完全控制所有儲存庫 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予對所有儲存庫中提交狀態的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **public_repo** | 僅授予對公開儲存庫的讀/寫存取權限 |
| **admin:repo_hook** | 授予對所有儲存庫的 Hooks 存取權限,該權限已包含在 `repo` 範圍中 |
| &nbsp;&nbsp;&nbsp; **write:repo_hook** | 授予對儲存庫 Hooks 的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:repo_hook** | 授予對儲存庫 Hooks 的只讀存取權限 |
| **admin:org** | 授予對組織設定的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:org** | 授予對組織設定的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:org** | 授予對組織設定的只讀存取權限 |
| **admin:public_key** | 授予公鑰管理的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:public_key** | 授予對公鑰的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:public_key** | 授予對公鑰的只讀存取權限 |
| **admin:org_hook** | 授予對組織級別 Hooks 的完全存取權限 |
| **admin:user_hook** | 授予對使用者級別 Hooks 的完全存取權限 |
| **notification** | 授予對通知的完全存取權限 |
| **user** | 授予對使用者個人資料資訊的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **read:user** | 授予對使用者個人資料的讀取權限 |
| &nbsp;&nbsp;&nbsp; **user:email** | 授予對使用者電子電子郵件地址的讀取權限 |
| &nbsp;&nbsp;&nbsp; **user:follow** | 授予存取權限以關注/取消關注使用者 |
| **delete_repo** | 授予刪除儲存庫的權限 |
| **package** | 授予對託管包的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:package** | 授予對包的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:package** | 授予對包的讀取權限 |
| &nbsp;&nbsp;&nbsp; **delete:package** | 授予對包的刪除權限 |
| **admin:gpg_key** | 授予 GPG 密鑰管理的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:gpg_key** | 授予對 GPG 密鑰的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:gpg_key** | 授予對 GPG 密鑰的只讀存取權限 |
| **admin:application** | 授予應用程式管理的完全存取權限 |
| &nbsp;&nbsp;&nbsp; **write:application** | 授予應用程式管理的讀/寫存取權限 |
| &nbsp;&nbsp;&nbsp; **read:application** | 授予應用程式管理的讀取權限 |
| **sudo** | 允許以站點管理員身份執行操作 |
## 客户端類型
## 客戶端類型
Gitea 支持私密和公共客户端類型,[参见 RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1).
Gitea 支援私密和公共客戶端類型,[參見 RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1).
對於公共客户端, 允许在本地回环地址的重定向 URI 中使用任意端口,例如 `http://127.0.0.1/`。根据 [RFC 8252 的建议](https://datatracker.ietf.org/doc/html/rfc8252#section-8.3),請避免使用 `localhost`。
對於公共客戶端, 允許在本地迴環地址的重定向 URI 中使用任意端口,例如 `http://127.0.0.1/`。根據 [RFC 8252 的建議](https://datatracker.ietf.org/doc/html/rfc8252#section-8.3),請避免使用 `localhost`。
## 示例
## 範例
**注意:** 該示例中尚未使用 PKCE。
**注意:** 該範例中尚未使用 PKCE。
1. 将使用者重定向到授权端点,以获得他们的访问资源授权:
1. 將使用者重定向到授權端點,以獲得他們的訪問資源授權:
```curl
https://[YOUR-GITEA-URL]/login/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI& response_type=code&state=STATE
```
在设置中注册應用程序以获得 `CLIENT_ID`。`STATE` 是一个随机字符串,它将在获得使用者授权后发送回您的應用程序。`state` 參數是可選的,但您應該使用它来防止 CSRF 攻擊。
在設定中註冊應用程式以獲得 `CLIENT_ID`。`STATE` 是一個隨機字符串,它將在獲得使用者授權後發送回您的應用程式。`state` 參數是可選的,但您應該使用它來防止 CSRF 攻擊。
![Authorization Page](/authorize.png)
使用者将会被询问是否授权给您的應用程序。如果他们同意了授权,使用者将会被重定向到 `REDIRECT_URL`,例如:
使用者將會被詢問是否授權給您的應用程式。如果他們同意了授權,使用者將會被重定向到 `REDIRECT_URL`,例如:
```curl
https://[REDIRECT_URI]?code=RETURNED_CODE&state=STATE
```
2. 使用重定向提供的 `code`,您可以請求一个新的應用程序和 Refresh Token。Access Token Endpoint 接受 `application/json` 或 `application/x-www-form-urlencoded` 類型的 POST 請求,例如:
2. 使用重定向提供的 `code`,您可以請求一個新的應用程式和 Refresh Token。Access Token Endpoint 接受 `application/json` 或 `application/x-www-form-urlencoded` 類型的 POST 請求,例如:
```curl
POST https://[YOUR-GITEA-URL]/login/oauth/access_token
@@ -121,8 +121,8 @@ Gitea 支持私密和公共客户端類型,[参见 RFC 6749](https://datatrack
}
```
`CLIENT_SECRET` 是生成给應用程序的唯一密钥。請注意,該密钥只会在您使用 Gitea 建立/注册應用程序后出現一次。如果您丢失了密钥,您必須在應用程序设置中重新生成密钥。
`CLIENT_SECRET` 是生成給應用程式的唯一密鑰。請注意,該密鑰只會在您使用 Gitea 建立/註冊應用程式後出現一次。如果您丟失了密鑰,您必須在應用程式設定中重新生成密鑰。
`access_token` 請求中的 `REDIRECT_URI` 必須与 `authorize` 請求中的 `REDIRECT_URI` 相符。
`access_token` 請求中的 `REDIRECT_URI` 必須與 `authorize` 請求中的 `REDIRECT_URI` 相符。
3. 使用 `access_token` 来构造 [API 請求](development/api-usage.md#oauth2-provider) 以读写使用者的资源。
3. 使用 `access_token` 來構造 [API 請求](api-usage) 以讀寫使用者的資源。
File diff suppressed because it is too large. Load diff
@@ -6,64 +6,64 @@ aliases:
- /zh-tw/seek-help
---
# 支持選项
# 支援選項
- [付费商业支持](https://about.gitea.com/)
- [付費商業支援](https://about.gitea.com/)
- [Discord](https://discord.gg/Gitea)
- [论坛](https://forum.gitea.com/)
- [論壇](https://forum.gitea.com/)
- [Matrix](https://matrix.to/#/#gitea-space:matrix.org)
- 注意:大多数 Matrix 频道都与 Discord 中的对應频道桥接,可能在桥接過程中会出現一定程度的不稳定性。
- 中文支持
- [Discourse 中文分类](https://forum.gitea.com/c/5-category/5)
- 注意:大多數 Matrix 頻道都與 Discord 中的對應頻道橋接,可能在橋接過程中會出現一定程度的不穩定性。
- 中文支援
- [Discourse 中文分類](https://forum.gitea.com/c/5-category/5)
- QQ 群 328432459
# Bug 报告
# Bug 報告
如果您发現了 Bug,請在 GitHub 上 [建立一个问题](https://github.com/go-gitea/gitea/issues)。
如果您發現了 Bug,請在 GitHub 上 [建立一個問題](https://github.com/go-gitea/gitea/issues)。
**注意:** 在請求支持时,可能需要准备以下信息,以便帮助者获得所需的所有信息:
**注意:** 在請求支援時,可能需要準備以下資訊,以便幫助者獲得所需的所有資訊:
1. 您的 `app.ini`(将任何敏感数据進行必要的清除)。
2. 您看到的任何错误消息。
3. Gitea 日志以及与情况相关的所有其他日志。
- 收集 `trace` / `debug` 级别的日志更有用(参见下一节)。
- 在使用 systemd 时,使用 `journalctl --lines 1000 --unit gitea` 收集日志。
- 在使用 Docker 时,使用 `docker logs --tail 1000 <gitea-container>` 收集日志。
4. 可重現的步骤,以便他人能够更快速、更容易地重現和理解问题。
- [demo.gitea.com](https://demo.gitea.com) 可用于重現问题。
5. 如果遇到慢速/挂起/死锁等问题,請在出現问题时报告堆栈跟踪。
转到 "Site Admin" -> "Monitoring" -> "Stacktrace" -> "Download diagnosis report"。
1. 您的 `app.ini`(將任何敏感資料進行必要的清除)。
2. 您看到的任何錯誤消息。
3. Gitea 日誌以及與情況相關的所有其他日誌。
- 收集 `trace` / `debug` 級別的日誌更有用(參見下一節)。
- 在使用 systemd 時,使用 `journalctl --lines 1000 --unit gitea` 收集日誌。
- 在使用 Docker 時,使用 `docker logs --tail 1000 <gitea-container>` 收集日誌。
4. 可重現的步驟,以便他人能夠更快速、更容易地重現和理解問題。
- [demo.gitea.com](https://demo.gitea.com) 可用於重現問題。
5. 如果遇到慢速/掛起/死鎖等問題,請在出現問題時報告堆棧跟蹤。
轉到 "Site Admin" -> "Monitoring" -> "Stacktrace" -> "Download diagnosis report"。
# 高级 Bug 报告提示
# 高級 Bug 報告提示
## 更多日志的配置選项
## 更多日誌的設定選項
默认情况下,日志以 `info` 级别输出到控制台。
如果您需要设置日志级别和/或从文件中收集日志,
您只需将以下配置复制到您的 `app.ini` 中(删除所有其他 `[log]` 部分),
然后您将在 Gitea 的日志目錄中找到 `*.log` 文件(默认為 `%(GITEA_WORK_DIR)/log`)。
預設情況下,日誌以 `info` 級別輸出到控制檯。
如果您需要設定日誌級別和/或從文件中收集日誌,
您只需將以下設定複製到您的 `app.ini` 中(刪除所有其他 `[log]` 部分),
然後您將在 Gitea 的日誌目錄中找到 `*.log` 文件(預設為 `%(GITEA_WORK_DIR)/log`)。
```ini
; 要显示所有 SQL 日志,您還可以在 [database] 部分中设置 LOG_SQL=true
; 要顯示所有 SQL 日誌,您還可以在 [database] 部分中設置 LOG_SQL=true
[log]
LEVEL=debug
MODE=console,file
```
## 使用命令行收集堆栈跟踪
## 使用命令行收集堆棧跟蹤
Gitea 可以使用 Golang 的 pprof 处理程序和工具链来收集堆栈跟踪和其他运行时信息。
Gitea 可以使用 Golang 的 pprof 處理程式和工具鏈來收集堆棧跟蹤和其他運行時資訊。
如果 Web UI 停止工作,您可以尝试通過命令行收集堆栈跟踪:
如果 Web UI 停止工作,您可以嘗試通過命令行收集堆棧跟蹤:
1. 设置 app.ini:
1. 設定 app.ini:
```
[server]
ENABLE_PPROF = true
```
2. 重新启动 Gitea
2. 重新啟動 Gitea
3. 尝试触发 bug,当請求卡住一段时间,使用或浏览器访问:获取堆栈跟踪。
3. 嘗試觸發 bug,當請求卡住一段時間,使用或瀏覽器訪問:獲取堆棧跟蹤。
`curl http://127.0.0.1:6060/debug/pprof/goroutine?debug=1`
@@ -6,45 +6,45 @@ sidebar_position: 10
# 關於 Gitea
Gitea 是一個輕量級的 DevOps 平台軟體。從開發計劃到產品成型的整個軟體生命週期,他都能夠高效而輕鬆地幫助團隊和開發者。包括 Git 託管、代碼審查、團隊協作、軟體包註冊和 CI/CD。它與 GitHub、Bitbucket 和 GitLab 等比較類似。
Gitea 最初是從 [Gogs](http://gogs.io) 分支而來,幾乎所有代碼都已更改。對於我們 Fork 的原因可以看
Gitea 是一個輕量級的 DevOps 平台軟體。從開發計劃到產品成型的整個軟體生命週期,他都能夠高效而輕鬆地幫助團隊和開發者。包括 Git 託管、程式碼審查、團隊協作、套件註冊和 CI/CD。它與 GitHub、Bitbucket 和 GitLab 等比較類似。
Gitea 最初是從 [Gogs](http://gogs.io) 分支而來,幾乎所有程式碼都已更改。對於我們 Fork 的原因可以看
[這裡](https://blog.gitea.com/welcome-to-gitea/)。
## 目標
Gitea 的首要目標是創建一個極易安裝,運行非常快速,安裝和使用體驗良好的自建 Git 服務。
Gitea 的首要目標是建立一個極易安裝,運行非常快速,安裝和使用體驗良好的自建 Git 服務。
採用 Go 作為後端語言,只需生成一個可執行程序即可。
支持 Linux, macOS 和 Windows 等多平台,
支持主流的 x86,amd64、
採用 Go 作為後端語言,只需生成一個可執行程式即可。
支援 Linux, macOS 和 Windows 等多平台,
支援主流的 x86,amd64、
ARM 和 PowerPC 等架構。
## 功能特性
- 代碼託管:Gitea 支持創建和管理倉庫、瀏覽提交歷史和代碼文件、審查和合併代碼提交、管理協作者、管理分支等。它還支持許多常見的 Git 特性,例如標籤、Cherry-pick、hook、集成協作工具等。
- 輕量級和快速:Gitea 的設計目標之一就是輕量級和快速響應。它不像一些大型的代碼託管平台那樣臃腫,因此在性能方面表現出色,適用於資源有限的伺服器環境。由於其輕量級設計,Gitea 在資源消耗方面相對較低,可以在資源有限的環境下運行良好。
- 易於部署和維護:輕鬆地部署在各種伺服器上,不需要複雜的配置和依賴。這使得個人開發者或小團隊可以方便地設置和管理自己的 Git 服務。
- 安全性:Gitea 注重安全性,提供了用戶權限管理、訪問控制列表等功能,可以確保代碼和數據的安全性。
- 代碼評審:代碼評審同時支持 Pull Request workflow 和 AGit workflow。評審人可以在線瀏覽代碼,並提交評審意見或問題。提交者可以接收到評審意見,並在線回復或修改代碼。代碼評審可以幫助用戶和企業提高代碼質量。
- CI/CD:Gitea Actions 支持 CI/CD 功能,該功能兼容 GitHub Actions,用戶可以採用熟悉的 YAML 格式編寫 workflows,也可以重用大量的已有的 Actions 插件。Actions 插件支持從任意的 Git 網站中下載。
- 項目管理:Gitea 通過看板和工單來跟踪一個項目的需求,功能和 bug。工單支持分支,標籤、里程碑、指派、時間跟踪、到期時間、依賴關係等功能。
- 制品庫:Gitea 支持超過 20 種不同種類的公有或私有軟體包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, NuGet, Pub, PyPI, RubyGems, Vagrant 等
- 開源社區支持:Gitea 是一個基於 MIT 許可證的開源項目,Gitea 擁有一個活躍的開源社區,能夠持續地進行開發和改進,同時也積極接受社區貢獻,保持了平台的更新和創新。
- 多語言支持:Gitea 提供多種語言界面,適應全球範圍內的用戶,促進了國際化和本地化。
- 程式碼託管:Gitea 支援建立和管理儲存庫、瀏覽提交歷史和程式碼檔案、審查和合併程式碼提交、管理協作者、管理分支等。它還支援許多常見的 Git 特性,例如標籤、Cherry-pick、hook、整合協作工具等。
- 輕量級和快速:Gitea 的設計目標之一就是輕量級和快速響應。它不像一些大型的程式碼託管平台那樣臃腫,因此在性能方面表現出色,適用於資源有限的伺服器環境。由於其輕量級設計,Gitea 在資源消耗方面相對較低,可以在資源有限的環境下運行良好。
- 易於部署和維護:輕鬆地部署在各種伺服器上,不需要複雜的設定和依賴。這使得個人開發者或小團隊可以方便地設定和管理自己的 Git 服務。
- 安全性:Gitea 注重安全性,提供了使用者權限管理、存取控制清單等功能,可以確保程式碼和資料的安全性。
- 程式碼評審:程式碼評審同時支援 Pull Request workflow 和 AGit workflow。評審人可以在線瀏覽程式碼,並提交評審意見或問題。提交者可以接收到評審意見,並在線回復或修改程式碼。程式碼評審可以幫助使用者和企業提高程式碼質量。
- CI/CD:Gitea Actions 支援 CI/CD 功能,該功能相容 GitHub Actions,使用者可以採用熟悉的 YAML 格式編寫 workflows,也可以重用大量的已有的 Actions 外掛。Actions 外掛支援從任意的 Git 網站中下載。
- 專案管理:Gitea 透過看板和工單來跟蹤一個專案的需求,功能和 bug。工單支援分支,標籤、里程碑、指派、時間跟蹤、到期時間、依賴關係等功能。
- 製品庫:Gitea 支援超過 20 種不同種類的公有或私有套件管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, NuGet, Pub, PyPI, RubyGems, Vagrant 等
- 開源社區支援:Gitea 是一個基於 MIT 許可證的開源專案,Gitea 擁有一個活躍的開源社區,能夠持續地進行開發和改進,同時也積極接受社區貢獻,保持了平台的更新和創新。
- 多語言支援:Gitea 提供多種語言介面,適應全球範圍內的使用者,促進了國際化和本地化。
更多功能特性:詳見:https://docs.gitea.com/installation/comparison#general-features
## 系統要求
- 樹莓派 Pi3 功能強大,足以運行 Gitea 來處理小型工作負載。
- 對於小型團隊/項目而言,2 個 CPU 內核和 1GB 內存通常就足夠了。
- 在 UNIX 系統上,Gitea 應使用專用的非 root 系統賬戶運行。
- 注意:Gitea 管理 `~/.ssh/authorized_keys` 文件。以普通用戶身份運行 Gitea 可能會破壞該用戶的登錄能力。
- 對於小型團隊/專案而言,2 個 CPU 內核和 1GB 內存通常就足夠了。
- 在 UNIX 系統上,Gitea 應使用專用的非 root 系統帳號運行。
- 注意:Gitea 管理 `~/.ssh/authorized_keys` 文件。以普通使用者身份運行 Gitea 可能會破壞該使用者的登入能力。
- [Git](https://git-scm.com/) 需要 2.0.0 或更高版本。
- [Git Large File Storage](https://git-lfs.github.com/) 如果啟用,且 Git 版本大於等於 2.1.2,則該選項可用
- 如果 Git 版本大於等於 2.18,將自動啟用 Git 提交歷史圖形化展示功能
## 瀏覽器支持
## 瀏覽器支援
- 最後 2 個版本的 Chrome、Firefox、Safari 和 Edge
- Firefox ESR
@@ -57,17 +57,17 @@ ARM 和 PowerPC 等架構。
- [jQuery](https://jquery.com)
- [Fomantic UI](https://fomantic-ui.com)
- [Vue3](https://vuejs.org)
- 更多組件參見 package.json
- 更多元件參見 package.json
- 編輯器:
- [CodeMirror](https://codemirror.net)
- [EasyMDE](https://github.com/Ionaru/easy-markdown-editor)
- [Monaco Editor](https://microsoft.github.io/monaco-editor)
- 數據庫驅動:
- 資料庫驅動:
- [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql)
- [github.com/lib/pq](https://github.com/lib/pq)
- [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3)
- [github.com/denisenkom/go-mssqldb](https://github.com/denisenkom/go-mssqldb)
## 集成支持
## 整合支援
請訪問 [Awesome Gitea](https://gitea.com/gitea/awesome-gitea/) 獲得更多的第三方集成支持
請前往 [Awesome Gitea](https://gitea.com/gitea/awesome-gitea/) 獲得更多的第三方整合支援
@@ -6,99 +6,99 @@ aliases:
- /zh-tw/comparison
---
# 对比 Gitea 与其它 Git 托管工具
# 對比 Gitea 與其它 Git 託管工具
这里列出了 Gitea 与其它一些 Git 托管工具之间的异同,以便确认 Gitea 是否能够满足您的需求。
這裡列出了 Gitea 與其它一些 Git 託管工具之間的異同,以便確認 Gitea 是否能夠滿足您的需求。
請注意,此列表中的某些表项可能已经過时,因為我们並没有定期检查其它产品的功能是否有所更改。你可以前往 [Github issue](https://github.com/go-gitea/gitea/issues) 来帮助我们更新過时的内容,感谢!
請注意,此列表中的某些表項可能已經過時,因為我們並沒有定期檢查其它產品的功能是否有所更改。你可以前往 [Github issue](https://github.com/go-gitea/gitea/issues) 來幫助我們更新過時的內容,感謝!
_表格中的符号含义:_
_表格中的符號含義:_
- _✓ - 支持_
- _✓ - 支援_
- _⁄ - 部分支持_
- _⁄ - 部分支援_
- _✘ - 不支持_
- _✘ - 不支援_
- _⚙️ - 由第三方服务或插件支持_
- _⚙️ - 由第三方服務或外掛支援_
#### 主要特性
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
| -------------------------------- | --------------------------------------------------- | ---- | --------- | --------- | --------- | -------------- | ------------ |
| 开源免费 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
| 低资源开销 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
| 支持多种数据库 | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ |
| 支持多种操作系统 | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
| 升级简便 | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
| 可观测性 | **✘** | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
| 支持第三方渲染工具 | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
| 開源免費 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
| 低資源開銷 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
| 支援多種資料庫 | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ |
| 支援多種操作系統 | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
| 升級簡便 | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
| 可觀測性 | **✘** | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
| 支援第三方渲染工具 | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
| WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
| 扩展 API | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 内置軟體包/容器注册中心 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 擴展 API | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 內置套件/容器註冊中心 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 同步提交到外部存放庫 (push mirror) | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
| 同步外部存放庫的提交 (pull mirror) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ? |
| 浅色和深色主题 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ? |
| 自定义主题支持 | ✓ | ✓ | ✘ | ✘ | ✘ | ✓ | ✘ |
| 支持 Markdown | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 支持 CSV | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | ? |
| Git 驱动的静态 pages | [⚙️][gitea-pages-server], [⚙️][gitea-caddy-plugin] | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Git 驱动的集成化 wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ (cloud only) | ✘ |
| 淺色和深色主題 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ? |
| 自訂主題支援 | ✓ | ✓ | ✘ | ✘ | ✘ | ✓ | ✘ |
| 支援 Markdown | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 支援 CSV | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | ? |
| Git 驅動的靜態 pages | [⚙️][gitea-pages-server], [⚙️][gitea-caddy-plugin] | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Git 驅動的整合化 wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ (cloud only) | ✘ |
| 部署令牌 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 存放庫写权限令牌 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 存放庫寫權限令牌 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RSS Feeds | ✓ | ✘ | ✓ | ✘ | ✘ | ✘ | ✘ |
| 内置 CI/CD | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 子組織:組織内的組織 | [✘](https://github.com/go-gitea/gitea/issues/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
| 多实例交互 | [/](https://github.com/go-gitea/gitea/issues/18240) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
| Markdown 绘图 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Markdown 数学公式 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 內置 CI/CD | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 子組織:組織內的組織 | [✘](https://github.com/go-gitea/gitea/issues/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
| 多實例交互 | [/](https://github.com/go-gitea/gitea/issues/18240) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
| Markdown 繪圖 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Markdown 數學公式 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
#### 代码管理
#### 程式碼管理
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
| -------------------- | --------------------------------------------------- | ---- | --------- | --------- | --------- | --------- | ------------ |
| 存放庫主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 存放庫内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
| 存放庫主題描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 存放庫內程式碼搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 全域程式碼搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
| Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 組織里程碑 | [✘](https://github.com/go-gitea/gitea/issues/14622) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 细粒度使用者角色 | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 細粒度使用者角色 | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 提交人的身份驗證 | ⁄ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
| GPG 签名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| SSH 签名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ? |
| 拒绝未通過驗證的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 外部存放庫迁移 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 存放庫活跃度页面 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| GPG 簽名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| SSH 簽名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ? |
| 拒絕未通過驗證的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 外部存放庫遷移 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 存放庫活躍度頁面 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 分支管理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 建立新分支 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 在线代码编辑 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 提交的统计图表 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 在線程式碼編輯 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 提交的統計圖表 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 模板存放庫 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✘ |
| Git Blame | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 可视化镜像变化 | ✓ | ✘ | ✓ | ? | ? | ? | ? |
| 可視化鏡像變化 | ✓ | ✘ | ✓ | ? | ? | ? | ? |
#### 工單管理
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
| ------------------- | -------------------------------------------------- | --------------------------------------------- | --------- | ----------------------------------------------------------------------- | --------- | -------------- | ------------ |
| 工單跟踪 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ (cloud only) | ✘ |
| 工單跟蹤 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ (cloud only) | ✘ |
| 工單模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 標籤 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 时间跟踪 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 支持多个负责人 | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
| 关联的工單 | ✘ | ✘ | ⁄ | [✓](https://docs.gitlab.com/ce/user/project/issues/related_issues.html) | ✓ | ✘ | ✘ |
| 時間跟蹤 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 支援多個負責人 | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
| 關聯的工單 | ✘ | ✘ | ⁄ | [✓](https://docs.gitlab.com/ce/user/project/issues/related_issues.html) | ✓ | ✘ | ✘ |
| 私密工單 | [✘](https://github.com/go-gitea/gitea/issues/3217) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 评论反馈 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 锁定讨论 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 工單批处理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 評論反饋 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 鎖定討論 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 工單批處理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 工單看板 | [✓](https://github.com/go-gitea/gitea/pull/8346) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 从工單建立分支 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 从评论建立工單 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 從工單建立分支 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 從評論建立工單 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 工單搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 工單全局搜索 | [✘](https://github.com/go-gitea/gitea/issues/2434) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 工單依赖关系 | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
| 工單全域搜索 | [✘](https://github.com/go-gitea/gitea/issues/2434) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 工單依賴關係 | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
| 通過 Email 建立工單 | [✘](https://github.com/go-gitea/gitea/issues/6226) | [✘](https://github.com/gogs/gogs/issues/2602) | ✘ | ✓ | ✓ | ✓ | ✘ |
| 服务台 | [✘](https://github.com/go-gitea/gitea/issues/6219) | ✘ | ✘ | [✓](https://gitlab.com/groups/gitlab-org/-/epics/3103) | ✓ | ✘ | ✘ |
| 服務檯 | [✘](https://github.com/go-gitea/gitea/issues/6219) | ✘ | ✘ | [✓](https://gitlab.com/groups/gitlab-org/-/epics/3103) | ✓ | ✘ | ✘ |
#### Pull/Merge requests
@@ -107,34 +107,34 @@ _表格中的符号含义:_
| Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Squash merging | ✓ | ✘ | ✓ | [✓](https://docs.gitlab.com/ce/user/project/merge_requests/squash_and_merge.html) | ✓ | ✓ | ✓ |
| Rebase merging | ✓ | ✓ | ✓ | ✘ | ⁄ | ✘ | ✓ |
| 评论 Pull/Merge request 中的某行代码 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 指定 Pull/Merge request 的审核人 | ✓ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ |
| 解决 Merge 冲突 | [✘](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 限制某些使用者的 push 和 merge 权限 | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ |
| 評論 Pull/Merge request 中的某行程式碼 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 指定 Pull/Merge request 的審覈人 | ✓ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ |
| 解決 Merge 衝突 | [✘](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 限制某些使用者的 push 和 merge 權限 | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ |
| 回退某些 commits 或 merge request | [✓](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| Pull/Merge requests 模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 查看 Cherry-picking 的更改 | [✓](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
| 下载 Patch | ✓ | ✘ | ✓ | ✓ | ✓ | [/](https://jira.atlassian.com/plugins/servlet/mobile#issue/BCLOUD-8323) | ✘ |
| 下載 Patch | ✓ | ✘ | ✓ | ✓ | ✓ | [/](https://jira.atlassian.com/plugins/servlet/mobile#issue/BCLOUD-8323) | ✘ |
| Merge queues | ✘ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
#### 第三方集成
#### 第三方整合
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
| -------------------------- | -------------------------------------------------- | --------------------------------------------- | --------- | --------- | --------- | --------- | ------------ |
| 支持 Webhook | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 自定义 Git 钩子 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 集成 AD / LDAP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 支持多个 LDAP / AD 服务 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
| 支援 Webhook | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 自訂 Git 鉤子 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 整合 AD / LDAP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 支援多個 LDAP / AD 服務 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
| LDAP 使用者同步 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| SAML 2.0 service provider | [✘](https://github.com/go-gitea/gitea/issues/5512) | [✘](https://github.com/gogs/gogs/issues/1221) | ✓ | ✓ | ✓ | ✓ | ✘ |
| 支持 OpenId 连接 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
| 集成 OAuth 2.0(外部授权) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
| 支援 OpenId 連接 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
| 整合 OAuth 2.0(外部授權) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
| 作為 OAuth 2.0 provider | [✓](https://github.com/go-gitea/gitea/pull/5378) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 二次驗證 (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 集成 Mattermost/Slack | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ |
| 集成 Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 集成 Microsoft Teams | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 显示外部 CI/CD 的状态 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 整合 Mattermost/Slack | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ |
| 整合 Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 整合 Microsoft Teams | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
| 顯示外部 CI/CD 的狀態 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
[gitea-caddy-plugin]: https://github.com/42wim/caddy-gitea
[gitea-pages-server]: https://codeberg.org/Codeberg/pages-server
@@ -6,190 +6,190 @@ aliases:
- /zh-tw/database-prep
---
# 数据库准备
# 資料庫準備
在使用 Gitea 前,您需要准备一个数据库。Gitea 支持 PostgreSQL(>= 12)、MySQL(>= 8.0)、MariaDB(>= 10.4)、SQLite(内置) 和 MSSQL(>= 2012 SP4)这几种数据库。本页将指导您准备数据库。由于 PostgreSQL 和 MySQL 在生产环境中被广泛使用,因此本文檔将僅涵盖这两种数据库。如果您计划使用 SQLite,则可以忽略本章内容。
在使用 Gitea 前,您需要準備一個資料庫。Gitea 支援 PostgreSQL(>= 12)、MySQL(>= 8.0)、MariaDB(>= 10.4)、SQLite(內置) 和 MSSQL(>= 2012 SP4)這幾種資料庫。本頁將指導您準備資料庫。由於 PostgreSQL 和 MySQL 在生產環境中被廣泛使用,因此本文件將僅涵蓋這兩種資料庫。如果您計劃使用 SQLite,則可以忽略本章內容。
如果您使用不受支持的数据库版本,請通過 [联系我们](/help/support) 以获取有关我们的扩展支持的信息。我们可以為旧数据库提供测试和支持,並将这些修复集成到 Gitea 代码库中。
如果您使用不受支援的資料庫版本,請通過 [聯繫我們](/help/support) 以獲取有關我們的擴展支援的資訊。我們可以為舊資料庫提供測試和支援,並將這些修復整合到 Gitea 程式碼庫中。
数据库实例可以与 Gitea 实例在相同机器上(本地数据库),也可以与 Gitea 实例在不同机器上(远程数据库)。
資料庫實例可以與 Gitea 實例在相同機器上(本地資料庫),也可以與 Gitea 實例在不同機器上(遠程資料庫)。
注意:以下所有步骤要求您的選择的数据库引擎已安裝在您的系统上。對於远程数据库设置,請在数据库实例上安裝服务器應用程序,在 Gitea 服务器上安裝客户端程序。客户端程序用于测试 Gitea 服务器与数据库之间的连接,而 Gitea 本身使用 Go 提供的数据库驱动程序完成相同的任务。此外,請确保服务器和客户端使用相同的引擎版本,以使某些引擎功能正常工作。出于安全原因,請使用安全密碼保护 `root`(MySQL)或 `postgres`(PostgreSQL)数据库超级使用者。以下步骤假设您在数据库和 Gitea 服务器上都使用 Linux。
注意:以下所有步驟要求您的選擇的資料庫引擎已安裝在您的系統上。對於遠程資料庫設定,請在資料庫實例上安裝伺服器應用程式,在 Gitea 伺服器上安裝客戶端程式。客戶端程式用於測試 Gitea 伺服器與資料庫之間的連接,而 Gitea 本身使用 Go 提供的資料庫驅動程式完成相同的任務。此外,請確保伺服器和客戶端使用相同的引擎版本,以使某些引擎功能正常工作。出於安全原因,請使用安全密碼保護 `root`(MySQL)或 `postgres`(PostgreSQL)資料庫超級使用者。以下步驟假設您在資料庫和 Gitea 伺服器上都使用 Linux。
## MySQL/MariaDB
1. 對於远程数据库设置,您需要让 MySQL 监听您的 IP 地址。编辑数据库实例上的 `/etc/mysql/my.cnf` 文件中的 `bind-address` 選项為:
1. 對於遠程資料庫設定,您需要讓 MySQL 監聽您的 IP 地址。編輯資料庫實例上的 `/etc/mysql/my.cnf` 文件中的 `bind-address` 選項為:
```ini
bind-address = 203.0.113.3
```
2. 在数据库实例上,使用 `root` 使用者登入到数据库控制台:
2. 在資料庫實例上,使用 `root` 使用者登入到資料庫控制檯:
```
mysql -u root -p
```
按提示输入密碼。
按提示輸入密碼。
3. 建立一个将被 Gitea 使用的数据库使用者,並使用密碼進行身份驗證。以下示例中使用了 `'gitea'` 作為密碼。請為您的实例使用一个安全密碼。
3. 建立一個將被 Gitea 使用的資料庫使用者,並使用密碼進行身份驗證。以下範例中使用了 `'gitea'` 作為密碼。請為您的實例使用一個安全密碼。
對於本地数据库:
對於本地資料庫:
```sql
SET old_passwords=0;
CREATE USER 'gitea' IDENTIFIED BY 'gitea';
```
對於远程数据库:
對於遠程資料庫:
```sql
SET old_passwords=0;
CREATE USER 'gitea'@'192.0.2.10' IDENTIFIED BY 'gitea';
```
其中 `192.0.2.10` 是您的 Gitea 实例的 IP 地址。
其中 `192.0.2.10` 是您的 Gitea 實例的 IP 地址。
根据需要替换上述使用者名和密碼。
根據需要替換上述使用者名稱和密碼。
4. 使用 UTF-8 字符集和大小写敏感的排序規則建立数据库。
4. 使用 UTF-8 字符集和大小寫敏感的排序規則建立資料庫。
`utf8mb4_bin` 是 MySQL/MariaDB 的通用排序規則。
Gitea 启动后会尝试把数据库修改為更合适的字符集 (`utf8mb4_0900_as_cs` 或者 `uca1400_as_cs`) 並在可能的情况下更改数据库。
如果你想指定自己的字符集規則,可以在 `app.ini` 中设置 `[database].CHARSET_COLLATION`。
Gitea 啟動後會嘗試把資料庫修改為更合適的字符集 (`utf8mb4_0900_as_cs` 或者 `uca1400_as_cs`) 並在可能的情況下更改資料庫。
如果你想指定自己的字符集規則,可以在 `app.ini` 中設定 `[database].CHARSET_COLLATION`。
```sql
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
```
根据需要替换数据库名稱。
根據需要替換資料庫名稱。
5. 将数据库上的所有权限授予上述建立的数据库使用者。
5. 將資料庫上的所有權限授予上述建立的資料庫使用者。
對於本地数据库:
對於本地資料庫:
```sql
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea';
FLUSH PRIVILEGES;
```
對於远程数据库:
對於遠程資料庫:
```sql
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'192.0.2.10';
FLUSH PRIVILEGES;
```
6. 通過 `exit` 退出数据库控制台。
6. 通過 `exit` 退出資料庫控制檯。
7. 在您的 Gitea 服务器上,测试与数据库的连接:
7. 在您的 Gitea 伺服器上,測試與資料庫的連接:
```
mysql -u gitea -h 203.0.113.3 -p giteadb
```
其中 `gitea` 是数据库使用者名,`giteadb` 是数据库名稱,`203.0.113.3` 是数据库实例的 IP 地址。對於本地数据库,省略 `-h` 選项。
其中 `gitea` 是資料庫使用者名稱,`giteadb` 是資料庫名稱,`203.0.113.3` 是資料庫實例的 IP 地址。對於本地資料庫,省略 `-h` 選項。
到此您應該能够连接到数据库了。
到此您應該能夠連接到資料庫了。
## PostgreSQL
1. 對於远程数据库设置,通過编辑数据库实例上的 postgresql.conf 文件中的 `listen_addresses` 将 `PostgreSQL` 配置為监听您的 IP 地址:
1. 對於遠程資料庫設定,通過編輯資料庫實例上的 postgresql.conf 文件中的 `listen_addresses` 將 `PostgreSQL` 設定為監聽您的 IP 地址:
```ini
listen_addresses = 'localhost, 203.0.113.3'
```
2. PostgreSQL 默认使用 `md5` 质询-響應加密方案進行密碼身份驗證。現在这个方案不再被认為是安全的。改用 SCRAM-SHA-256 方案,通過编辑数据库服务器上的` postgresql.conf` 配置文件:
2. PostgreSQL 預設使用 `md5` 質詢-響應加密方案進行密碼身份驗證。現在這個方案不再被認為是安全的。改用 SCRAM-SHA-256 方案,通過編輯資料庫伺服器上的` postgresql.conf` 設定文件:
```ini
password_encryption = scram-sha-256
```
重启 PostgreSQL 以應用該设置。
重啟 PostgreSQL 以應用該設定。
3. 在数据库服务器上,以超级使用者身份登入到数据库控制台:
3. 在資料庫伺服器上,以超級使用者身份登入到資料庫控制檯:
```
su -c "psql" - postgres
```
4. 建立具有登入权限和密碼的数据库使用者(在 PostgreSQL 术语中稱為角色)。請使用安全的、强密碼,而不是下面的 `'gitea'`:
4. 建立具有登入權限和密碼的資料庫使用者(在 PostgreSQL 術語中稱為角色)。請使用安全的、強密碼,而不是下面的 `'gitea'`:
```sql
CREATE ROLE gitea WITH LOGIN PASSWORD 'gitea';
```
根据需要替换使用者名和密碼。
根據需要替換使用者名稱和密碼。
5. 使用 UTF-8 字符集建立数据库,並由之前建立的数据库使用者拥有。可以根据预期内容使用任何 `libc` 排序規則,使用 `LC_COLLATE` 和 `LC_CTYPE` 參數指定:
5. 使用 UTF-8 字符集建立資料庫,並由之前建立的資料庫使用者擁有。可以根據預期內容使用任何 `libc` 排序規則,使用 `LC_COLLATE` 和 `LC_CTYPE` 參數指定:
```sql
CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
```
根据需要替换数据库名稱。
根據需要替換資料庫名稱。
6. 通過将以下身份驗證規則添加到 `pg_hba.conf`,允许数据库使用者访问上面建立的数据库。
6. 通過將以下身份驗證規則添加到 `pg_hba.conf`,允許資料庫使用者訪問上面建立的資料庫。
對於本地数据库:
對於本地資料庫:
```ini
local giteadb gitea scram-sha-256
```
對於远程数据库:
對於遠程資料庫:
```ini
host giteadb gitea 192.0.2.10/32 scram-sha-256
```
根据您自己的数据库名稱、使用者和 Gitea 实例的 IP 地址進行替换。
根據您自己的資料庫名稱、使用者和 Gitea 實例的 IP 地址進行替換。
注意:`pg_hba.conf` 上的規則按顺序评估,也就是第一个匹配的規則将用于身份驗證。您的 PostgreSQL 安裝可能附带了适用于所有使用者和数据库的通用身份驗證規則。如果是这种情况,您可能需要将此处提供的規則放置在此类通用規則之上。
注意:`pg_hba.conf` 上的規則按順序評估,也就是第一個匹配的規則將用於身份驗證。您的 PostgreSQL 安裝可能附帶了適用於所有使用者和資料庫的通用身份驗證規則。如果是這種情況,您可能需要將此處提供的規則放置在此類通用規則之上。
重启 PostgreSQL 以應用新的身份驗證規則。
重啟 PostgreSQL 以應用新的身份驗證規則。
7. 在您的 Gitea 服务器上,测试与数据库的连接。
7. 在您的 Gitea 伺服器上,測試與資料庫的連接。
對於本地数据库:
對於本地資料庫:
```
psql -U gitea -d giteadb
```
對於远程数据库:
對於遠程資料庫:
```
psql "postgres://gitea@203.0.113.3/giteadb"
```
其中 `gitea` 是数据库使用者,`giteadb` 是数据库名稱,`203.0.113.3` 是您的数据库实例的 IP 地址。
其中 `gitea` 是資料庫使用者,`giteadb` 是資料庫名稱,`203.0.113.3` 是您的資料庫實例的 IP 地址。
您應該会被提示输入数据库使用者的密碼,並连接到数据库。
您應該會被提示輸入資料庫使用者的密碼,並連接到資料庫。
## 使用 TLS 進行数据库连接
## 使用 TLS 進行資料庫連接
如果 Gitea 和您的数据库实例之间的通信是通過私有网络進行的,或者如果 Gitea 和数据库运行在同一台服务器上,那么可以省略本节,因為 Gitea 和数据库实例之间的安全性不会受到严重威胁。但是,如果数据库实例位于公共网络上,請使用 TLS 对数据库连接進行加密,以防止第三方拦截流量数据。
如果 Gitea 和您的資料庫實例之間的通信是通過私有網路進行的,或者如果 Gitea 和資料庫運行在同一臺伺服器上,那麼可以省略本節,因為 Gitea 和資料庫實例之間的安全性不會受到嚴重威脅。但是,如果資料庫實例位於公共網路上,請使用 TLS 對資料庫連接進行加密,以防止第三方攔截流量資料。
### 先决条件
### 先決條件
- 您需要两个有效的 TLS 证书,一个用于数据库实例(数据库服务器),一个用于 Gitea 实例(数据库客户端)。两个证书都必須由受信任的 CA 签名。
- 数据库证书必須在 `X509v3 Extended Key Usage` 扩展属性中包含 `TLS Web Server Authentication`,而客户端证书则需要在相應的属性中包含 `TLS Web Client Authentication`。
- 在数据库服务器证书中,`Subject Alternative Name` 或 `Common Name` 条目之一必須是数据库实例的完全限定域名(FQDN)(例如 `db.example.com`)。在数据库客户端证书中,上述提到的条目之一必須包含 Gitea 将用于连接的数据库使用者名。
- 您需要将 Gitea 和数据库服务器的域名映射到它们各自的 IP 地址。可以為它们设置 DNS 记录,也可以在每个系统上的 `/etc/hosts`(Windows 中的 `%WINDIR%\System32\drivers\etc\hosts`)中添加本地映射。这样可以通過域名而不是 IP 地址進行数据库连接。有关详细信息,請参阅您系统的文檔。
- 您需要兩個有效的 TLS 證書,一個用於資料庫實例(資料庫伺服器),一個用於 Gitea 實例(資料庫客戶端)。兩個證書都必須由受信任的 CA 簽名。
- 資料庫證書必須在 `X509v3 Extended Key Usage` 擴展屬性中包含 `TLS Web Server Authentication`,而客戶端證書則需要在相應的屬性中包含 `TLS Web Client Authentication`。
- 在資料庫伺服器證書中,`Subject Alternative Name` 或 `Common Name` 條目之一必須是資料庫實例的完全限定域名(FQDN)(例如 `db.example.com`)。在資料庫客戶端證書中,上述提到的條目之一必須包含 Gitea 將用於連接的資料庫使用者名稱。
- 您需要將 Gitea 和資料庫伺服器的域名映射到它們各自的 IP 地址。可以為它們設定 DNS 記錄,也可以在每個系統上的 `/etc/hosts`(Windows 中的 `%WINDIR%\System32\drivers\etc\hosts`)中添加本地映射。這樣可以透過域名而不是 IP 地址進行資料庫連接。有關詳細資訊,請參閱您系統的文件。
### PostgreSQL TLS
Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,数据库客户端和服务器通過将各自的证书发送给对方進行驗證来相互認證。换句话说,服务器驗證客户端证书,客户端驗證服务器证书。
Gitea 使用的 PostgreSQL 驅動程式支援雙向 TLS。在雙向 TLS 中,資料庫客戶端和伺服器通過將各自的證書發送給對方進行驗證來相互認證。換句話說,伺服器驗證客戶端證書,客戶端驗證伺服器證書。
1. 在数据库实例所在的服务器上,放置以下凭据:
1. 在資料庫實例所在的伺服器上,放置以下憑據:
- `/path/to/postgresql.crt`: 数据库实例证书
- `/path/to/postgresql.key`: 数据库实例私钥
- `/path/to/root.crt`: 用于驗證客户端证书的 CA 证书链
- `/path/to/postgresql.crt`: 資料庫實例證書
- `/path/to/postgresql.key`: 資料庫實例私鑰
- `/path/to/root.crt`: 用於驗證客戶端證書的 CA 證書鏈
2. 在 `postgresql.conf` 中添加以下選项:
2. 在 `postgresql.conf` 中添加以下選項:
```ini
ssl = on
@@ -199,14 +199,14 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
ssl_min_protocol_version = 'TLSv1.2'
```
3. 根据 PostgreSQL 的要求,调整凭据的所有权和权限:
3. 根據 PostgreSQL 的要求,調整憑據的所有權和權限:
```
chown postgres:postgres /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key
chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key
```
4. 编辑 `pg_hba.conf` 規則,僅允许 Gitea 数据库使用者通過 SSL 连接,並要求客户端证书驗證。
4. 編輯 `pg_hba.conf` 規則,僅允許 Gitea 資料庫使用者通過 SSL 連接,並要求客戶端證書驗證。
對於 PostgreSQL 12:
@@ -220,46 +220,46 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1
```
根据需要替换数据库名稱、使用者和 Gitea 实例的 IP 地址。
根據需要替換資料庫名稱、使用者和 Gitea 實例的 IP 地址。
5. 重新启动 PostgreSQL 以應用上述配置。
5. 重新啟動 PostgreSQL 以應用上述設定。
6. 在运行 Gitea 实例的服务器上,将以下凭据放置在运行 Gitea 的使用者的主目錄下(例如 `git`):
6. 在運行 Gitea 實例的伺服器上,將以下憑據放置在運行 Gitea 的使用者的主目錄下(例如 `git`):
- `~/.postgresql/postgresql.crt`: 数据库客户端证书
- `~/.postgresql/postgresql.key`: 数据库客户端私钥
- `~/.postgresql/root.crt`: 用于驗證服务器证书的 CA 证书链
- `~/.postgresql/postgresql.crt`: 資料庫客戶端證書
- `~/.postgresql/postgresql.key`: 資料庫客戶端私鑰
- `~/.postgresql/root.crt`: 用於驗證伺服器證書的 CA 證書鏈
注意:上述文件名在 PostgreSQL 中是硬编码的,無法更改。
注意:上述文件名在 PostgreSQL 中是硬編碼的,無法更改。
7. 根据需要调整凭据、所有权和权限:
7. 根據需要調整憑據、所有權和權限:
```
chown git:git ~/.postgresql/postgresql.crt ~/.postgresql/postgresql.key ~/.postgresql/root.crt
chown 0600 ~/.postgresql/postgresql.crt ~/.postgresql/postgresql.key ~/.postgresql/root.crt
```
8. 测试与数据库的连接:
8. 測試與資料庫的連接:
```
psql "postgres://gitea@example.db/giteadb?sslmode=verify-full"
```
您将被提示输入数据库使用者的密碼,然后连接到数据库。
您將被提示輸入資料庫使用者的密碼,然後連接到資料庫。
### MySQL/MariaDB TLS
虽然 Gitea 使用的 MySQL 驱动程序也支持双向 TLS,但目前 Gitea 僅支持單向 TLS。有关详细信息,請参见工單#10828。
雖然 Gitea 使用的 MySQL 驅動程式也支援雙向 TLS,但目前 Gitea 僅支援單向 TLS。有關詳細資訊,請參見工單#10828。
在單向 TLS 中,数据库客户端在连接握手期间驗證服务器发送的证书,而服务器则假定连接的客户端是合法的,因為不進行客户端证书驗證。
在單向 TLS 中,資料庫客戶端在連接握手期間驗證伺服器發送的證書,而伺服器則假定連接的客戶端是合法的,因為不進行客戶端證書驗證。
1. 在数据库实例上放置以下凭据:
1. 在資料庫實例上放置以下憑據:
- `/path/to/mysql.crt`: 数据库实例证书
- `/path/to/mysql.key`: 数据库实例密钥
- `/path/to/ca.crt`: CA 证书链。在單向 TLS 中不使用此文件,但用于驗證双向 TLS 中的客户端证书。
- `/path/to/mysql.crt`: 資料庫實例證書
- `/path/to/mysql.key`: 資料庫實例密鑰
- `/path/to/ca.crt`: CA 證書鏈。在單向 TLS 中不使用此文件,但用於驗證雙向 TLS 中的客戶端證書。
2. 将以下選项添加到 `my.cnf`:
2. 將以下選項添加到 `my.cnf`:
```ini
[mysqld]
@@ -269,16 +269,16 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
tls-version = TLSv1.2,TLSv1.3
```
3. 调整凭据的所有权和权限:
3. 調整憑據的所有權和權限:
```
chown mysql:mysql /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key
chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key
```
4. 重新启动 MySQL 以應用设置。
4. 重新啟動 MySQL 以應用設定。
5. Gitea 的数据库使用者可能已经建立過,但只会对运行 Gitea 的服务器的 IP 地址進行身份驗證。要对其域名進行身份驗證,請重新建立使用者,並设置其需要通過 TLS 连接到数据库:
5. Gitea 的資料庫使用者可能已經建立過,但只會對運行 Gitea 的伺服器的 IP 地址進行身份驗證。要對其域名進行身份驗證,請重新建立使用者,並設定其需要通過 TLS 連接到資料庫:
```sql
DROP USER 'gitea'@'192.0.2.10';
@@ -287,14 +287,14 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
FLUSH PRIVILEGES;
```
根据需要替换数据库使用者名、密碼和 Gitea 实例域名。
根據需要替換資料庫使用者名稱、密碼和 Gitea 實例域名。
6. 确保用于驗證数据库服务器证书的 CA 证书链位于数据库和 Gitea 服务器的系统证书存儲中。請参考系统文檔中有关将 CA 证书添加到证书存儲的说明。
6. 確保用於驗證資料庫伺服器證書的 CA 證書鏈位於資料庫和 Gitea 伺服器的系統證書儲存中。請參考系統文件中有關將 CA 證書添加到證書儲存的說明。
7. 在运行 Gitea 的服务器上,测试与数据库的连接:
7. 在運行 Gitea 的伺服器上,測試與資料庫的連接:
```
mysql -u gitea -h example.db -p --ssl
```
至此應該成功连接到数据库了。
至此應該成功連接到資料庫了。
@@ -8,57 +8,57 @@ aliases:
# 使用二進制文件安裝
所有打包的二進制程序均包含 SQLite,MySQL 和 PostgreSQL 的数据库连接支持,同时网站的静态资源均已嵌入到可執行程序中,这一点和曾经的 Gogs 有所不同。
所有打包的二進製程式均包含 SQLite,MySQL 和 PostgreSQL 的資料庫連接支援,同時網站的靜態資源均已嵌入到可執行程式中,這一點和曾經的 Gogs 有所不同。
## 下载
## 下載
你可以从 [下载页面](https://dl.gitea.com/gitea/) 選择对應平台的二進制文件。
你可以從 [下載頁面](https://dl.gitea.com/gitea/) 選擇對應平台的二進制文件。
### 選择架构
### 選擇架構
- **對於 Linux**,`linux-amd64` 适用于 64-bit 的 Intel/AMD 平台。更多架构包含 `arm64` (Raspberry PI 4),`386` (32-bit),`arm-5` 以及 `arm-6`。
- **對於 Linux**,`linux-amd64` 適用於 64-bit 的 Intel/AMD 平台。更多架構包含 `arm64` (Raspberry PI 4),`386` (32-bit),`arm-5` 以及 `arm-6`。
- **對於 Windows**,`windows-4.0-amd64` 适用于 64-bit 的 Intel/AMD 平台,`386` 适用于 32-bit 的 Intel/AMD 平台。(提示:`gogit-windows` 版本内建了 gogit 可能缓解在旧的 Windows 平台上 Go 程序调用 git 子程序时面临的 [性能问题](https://github.com/go-gitea/gitea/pull/15482))
- **對於 Windows**,`windows-4.0-amd64` 適用於 64-bit 的 Intel/AMD 平台,`386` 適用於 32-bit 的 Intel/AMD 平台。(提示:`gogit-windows` 版本內建了 gogit 可能緩解在舊的 Windows 平台上 Go 程式調用 git 子程式時面臨的 [性能問題](https://github.com/go-gitea/gitea/pull/15482))
- **對於 macOS**,`darwin-arm64` 适用于 Apple Silicon 架构,`darwin-amd64` 适用于 Intel 架构.
- **對於 macOS**,`darwin-arm64` 適用於 Apple Silicon 架構,`darwin-amd64` 適用於 Intel 架構.
- **對於 FreeBSD**,`freebsd12-amd64` 适用于 64-bit 的 Intel/AMD 平台。
- **對於 FreeBSD**,`freebsd12-amd64` 適用於 64-bit 的 Intel/AMD 平台。
### 使用 wget 下载
### 使用 wget 下載
使用以下命令下载适用于 64-bit Linux 平台的二進制文件。
使用以下命令下載適用於 64-bit Linux 平台的二進制文件。
```sh
wget -O gitea https://dl.gitea.com/gitea/@version@/gitea-@version@-linux-amd64
chmod +x gitea
```
## 驗證 GPG 签名
## 驗證 GPG 簽名
Gitea 对打包的二進制文件使用 [GPG 密钥](https://keys.openpgp.org/search?q=teabot%40gitea.io) 签名以防止篡改。
請根据对應文件名 `.asc` 中包含的校验码检验文件的一致性。
Gitea 對打包的二進制文件使用 [GPG 密鑰](https://keys.openpgp.org/search?q=teabot%40gitea.io) 簽名以防止篡改。
請根據對應文件名 `.asc` 中包含的校驗碼檢驗文件的一致性。
```sh
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
```
校验正确时的信息為 `Good signature from "Teabot <[email protected]>"`。
校验错误时的信息為 `This key is not certified with a trusted signature!`。
校驗正確時的資訊為 `Good signature from "Teabot <[email protected]>"`。
校驗錯誤時的資訊為 `This key is not certified with a trusted signature!`。
## 服务器设置
## 伺服器設定
**提示:** `GITEA_WORK_DIR` 表示 Gitea 工作的路径。以下路径可以通過 [环境变量](../administration/environment-variables.md) 初始化。
**提示:** `GITEA_WORK_DIR` 表示 Gitea 工作的路徑。以下路徑可以透過 [環境變量](../administration/environment-variables.md) 初始化。
### 准备环境
### 準備環境
检查是否安裝 Git。要求 Git 版本 >= 2.0。
檢查是否安裝 Git。要求 Git 版本 >= 2.0。
```sh
git --version
```
建立使用者(推荐使用名稱 `git`)
建立使用者(推薦使用名稱 `git`)
```sh
# On Ubuntu/Debian:
@@ -83,7 +83,7 @@ adduser \
git
```
### 建立工作路径
### 建立工作路徑
```sh
mkdir -p /var/lib/gitea/{custom,data,log}
@@ -94,112 +94,112 @@ chown root:git /etc/gitea
chmod 770 /etc/gitea
```
> **注意:** 為了让 Web 安裝程序可以写入配置文件,我们临时為 `/etc/gitea` 路径授予了组外使用者 `git` 写入权限。建议在安裝结束后将配置文件的权限设置為只读。
> **注意:** 為了讓 Web 安裝程式可以寫入設定文件,我們臨時為 `/etc/gitea` 路徑授予了組外使用者 `git` 寫入權限。建議在安裝結束後將設定文件的權限設定為只讀。
>
> ```sh
> chmod 750 /etc/gitea
> chmod 640 /etc/gitea/app.ini
> ```
如果您不希望通過 Web 安裝程序建立配置文件,可以将配置文件设置為僅供 Gitea 使用者只读(owner/group `root:git`, mode `0640`)並手工建立配置文件:
如果您不希望通過 Web 安裝程式建立設定文件,可以將設定文件設定為僅供 Gitea 使用者只讀(owner/group `root:git`, mode `0640`)並手工建立設定文件:
- 设置 `INSTALL_LOCK=true` 关闭安裝界面
- 手动配置数据库连接參數
- 設定 `INSTALL_LOCK=true` 關閉安裝介面
- 手動設定資料庫連接參數
- 使用 `gitea generate secret` 建立 `SECRET_KEY` 和 `INTERNAL_TOKEN`
- 提供所有必要的密钥
- 提供所有必要的密鑰
详情参考 [命令行文檔](../administration/command-line.md) 中有关 `gitea generate secret` 的内容。
詳情參考 [命令行文件](../administration/command-line.md) 中有關 `gitea generate secret` 的內容。
### 配置 Gitea 工作路径
### 設定 Gitea 工作路徑
**提示:** 如果使用 Systemd 管理 Gitea 的 Linux 服务,你可以采用 `WorkingDirectory` 參數来配置工作路径。 否则,使用环境变量 `GITEA_WORK_DIR` 来明确指出程序工作和数据存放路径。
**提示:** 如果使用 Systemd 管理 Gitea 的 Linux 服務,你可以採用 `WorkingDirectory` 參數來設定工作路徑。 否則,使用環境變量 `GITEA_WORK_DIR` 來明確指出程式工作和資料存放路徑。
```sh
export GITEA_WORK_DIR=/var/lib/gitea/
```
### 复制二進制文件到全局位置
### 複製二進制文件到全域位置
```sh
cp gitea /usr/local/bin/gitea
```
### 添加 bash/zsh 自动补全(从 1.19 版本开始)
### 添加 bash/zsh 自動補全(從 1.19 版本開始)
可以在 [`contrib/autocompletion/bash_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete) 找到启用 bash 自动补全的脚本。可以将其复制到 `/usr/share/bash-completion/completions/gitea`,或在 `.bashrc` 中引用。
可以在 [`contrib/autocompletion/bash_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete) 找到啟用 bash 自動補全的腳本。可以將其複製到 `/usr/share/bash-completion/completions/gitea`,或在 `.bashrc` 中引用。
同样地,zsh 自动补全的脚本可以在 [`contrib/autocompletion/zsh_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/zsh_autocomplete) 找到。您可以将其复制到 `/usr/share/zsh/_gitea`,或在您的 `.zshrc` 中引用。
同樣地,zsh 自動補全的腳本可以在 [`contrib/autocompletion/zsh_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/zsh_autocomplete) 找到。您可以將其複製到 `/usr/share/zsh/_gitea`,或在您的 `.zshrc` 中引用。
具體情况可能会有所不同,这些脚本可能需要進一步的改進。
具體情況可能會有所不同,這些腳本可能需要進一步的改進。
## 运行 Gitea
## 運行 Gitea
完成以上步骤后,可以通過两种方式运行 Gitea:
完成以上步驟後,可以透過兩種方式運行 Gitea:
### 1. 建立服务自动启动 Gitea(推荐)
### 1. 建立服務自動啟動 Gitea(推薦)
学习建立 [Linux 服务](installation/run-as-service-in-ubuntu.md)
學習建立 [Linux 服務](installation/run-as-service-in-ubuntu.md)
### 2. 通過命令行终端运行
### 2. 通過命令行終端運行
```sh
GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
```
## 升级到最新版本
## 升級到最新版本
您可以通過停止程序,替换 `/usr/local/bin/gitea` 並重启来更新到新版本。直接替换可執行程序时不要更改或使用新的文件名稱,以避免数据出错。
您可以透過停止程式,替換 `/usr/local/bin/gitea` 並重啟來更新到新版本。直接替換可執行程式時不要更改或使用新的文件名稱,以避免資料出錯。
建议您在更新之前進行[备份](../administration/backup-and-restore.md)。
建議您在更新之前進行[備份](../administration/backup-and-restore.md)。
如果您按照上述描述執行了安裝步骤,二進制文件的通用名稱應為 gitea。請勿更改此名稱,即不要包含版本号。
如果您按照上述描述執行了安裝步驟,二進制文件的通用名稱應為 gitea。請勿更改此名稱,即不要包含版本號。
### 1. 使用 systemd 重新启动 Gitea(推荐)
### 1. 使用 systemd 重新啟動 Gitea(推薦)
我们建议使用 systemd 作為服务管理器,使用 `systemctl restart gitea` 安全地重启程序。
我們建議使用 systemd 作為服務管理器,使用 `systemctl restart gitea` 安全地重啟程式。
### 2. 非 systemd 重启方法
### 2. 非 systemd 重啟方法
使用 SIGHUP 信号关闭程序:查询到 Gitea 程序的 PID,使用 `kill -1 $GITEA_PID`,或者 `killall -1 gitea`。
使用 SIGHUP 信號關閉程式:查詢到 Gitea 程式的 PID,使用 `kill -1 $GITEA_PID`,或者 `killall -1 gitea`。
更优雅的停止指令可能包括 `kill $GITEA_PID` 或者 `killall gitea`。
更優雅的停止指令可能包括 `kill $GITEA_PID` 或者 `killall gitea`。
**提示:** 我们不建议使用 SIGKILL 信号(`-9`),这会强制停止 Gitea 程序,但不会正确关闭队列、索引器等任务。
**提示:** 我們不建議使用 SIGKILL 信號(`-9`),這會強制停止 Gitea 程式,但不會正確關閉隊列、索引器等任務。
請参阅下面的疑难解答说明,以在 Gitea 版本更新后修复损坏的存放庫。
請參閱下面的疑難解答說明,以在 Gitea 版本更新後修復損壞的存放庫。
## 排查故障
### 旧版 glibc
### 舊版 glibc
旧版 Linux 发行版(例如 Debian 7 和 CentOS 6)可能無法加载 Gitea 二進制文件,通常会产生类似于 `./gitea: /lib/x86_64-linux-gnu/libc.so.6:
version 'GLIBC\_2.14' not found (required by ./gitea)` 的错误。这是由于 dl.gitea.com 提供的二進制文件中集成了 SQLite 支持。在这种情况下,通常可以選择[从源代码安裝](installation/from-source.md),而不包括 SQLite 支持。
舊版 Linux 發行版(例如 Debian 7 和 CentOS 6)可能無法加載 Gitea 二進制文件,通常會產生類似於 `./gitea: /lib/x86_64-linux-gnu/libc.so.6:
version 'GLIBC\_2.14' not found (required by ./gitea)` 的錯誤。這是由於 dl.gitea.com 提供的二進制文件中整合了 SQLite 支援。在這種情況下,通常可以選擇[從源程式碼安裝](installation/from-source.md),而不包括 SQLite 支援。
### 在另一个端口上运行 Gitea
### 在另一個端口上運行 Gitea
對於出現类似于 `702 runWeb()] [E] Failed to start server: listen tcp 0.0.0.0:3000:
bind: address already in use` 的错误,需要将 Gitea 启动在另一个空闲端口上。您可以使用 `./gitea web -p $PORT` 来实現。可能已经有另一个 Gitea 实例在运行。
對於出現類似於 `702 runWeb()] [E] Failed to start server: listen tcp 0.0.0.0:3000:
bind: address already in use` 的錯誤,需要將 Gitea 啟動在另一個空閒端口上。您可以使用 `./gitea web -p $PORT` 來實現。可能已經有另一個 Gitea 實例在運行。
### 在 Raspbian 上运行 Gitea
### 在 Raspbian 上運行 Gitea
从 v1.8 版本开始,arm7 版本的 Gitea 存在问题,無法在树莓派和类似设备上运行。
從 v1.8 版本開始,arm7 版本的 Gitea 存在問題,無法在樹莓派和類似設備上運行。
建议切换到 arm6 版本,該版本经過测试並已被证明可以在树莓派和类似设备上运行。
建議切換到 arm6 版本,該版本經過測試並已被證明可以在樹莓派和類似設備上運行。
### 更新到新版本的 Gitea 后出現的 Git 错误
### 更新到新版本的 Gitea 後出現的 Git 錯誤
如果在更新過程中,二進制文件的名稱已更改為新版本的 Gitea,则現有存放庫中的 Git 钩子将不再起作用。在这种情况下,当推送到存放庫时,会显示 Git 错误。
如果在更新過程中,二進制文件的名稱已更改為新版本的 Gitea,則現有存放庫中的 Git 鉤子將不再起作用。在這種情況下,當推送到存放庫時,會顯示 Git 錯誤。
```
remote: ./hooks/pre-receive.d/gitea: line 2: [...]: No such file or directory
```
错误信息中的 `[...]` 部分将包含您先前 Gitea 二進制文件的路径。
錯誤資訊中的 `[...]` 部分將包含您先前 Gitea 二進制文件的路徑。
要解决此问题,請转到管理選项,並运行任务 `Resynchronize pre-receive, update and post-receive hooks of all repositories`,以将所有钩子更新為包含新的二進制文件路径。請注意,这将覆盖所有 Git 钩子,包括自定义的钩子。
要解決此問題,請轉到管理選項,並運行任務 `Resynchronize pre-receive, update and post-receive hooks of all repositories`,以將所有鉤子更新為包含新的二進制文件路徑。請注意,這將覆蓋所有 Git 鉤子,包括自訂的鉤子。
如果您没有使用 Gitea 内置的 SSH 服务器,您還需要通過在管理選项中运行任务 `Update the '.ssh/authorized_keys' file with Gitea SSH keys.` 来重新编写授权密钥文件。
如果您沒有使用 Gitea 內置的 SSH 伺服器,您還需要通過在管理選項中運行任務 `Update the '.ssh/authorized_keys' file with Gitea SSH keys.` 來重新編寫授權密鑰文件。
> 更多经验总结,請参考英文版 [Troubleshooting](https://docs.gitea.com/installation/install-from-binary#troubleshooting)
> 更多經驗總結,請參考英文版 [Troubleshooting](https://docs.gitea.com/installation/install-from-binary#troubleshooting)
如果从本页中没有找到你需要的内容,請访问 [帮助页面](help/support.md)
如果從本頁中沒有找到你需要的內容,請前往 [幫助頁面](help/support.md)
@@ -6,23 +6,23 @@ aliases:
- /zh-tw/install-from-package
---
# 包管理器安裝
# 套件管理器安裝
## 官方包管理器
## 官方套件管理器
### macOS
macOS 平台下当前我们僅支持通過 `brew` 来安裝。如果你没有安裝 [Homebrew](http://brew.sh/),你也可以查看 [从二進制安裝](installation/from-binary.md)。在你安裝了 `brew` 之后, 你可以執行以下命令:
macOS 平台下當前我們僅支援通過 `brew` 來安裝。如果你沒有安裝 [Homebrew](http://brew.sh/),你也可以查看 [從二進制安裝](installation/from-binary.md)。在你安裝了 `brew` 之後, 你可以執行以下命令:
```
brew install gitea
```
## 非官方包管理器
## 非官方套件管理器
### Alpine Linux
Gitea 已经包含在 Alpine Linux 的[社区存儲库](https://pkgs.alpinelinux.org/packages?name=gitea&branch=edge)中,版本与 Gitea 官方保持同步。
Gitea 已經包含在 Alpine Linux 的[社區儲存庫](https://pkgs.alpinelinux.org/packages?name=gitea&branch=edge)中,版本與 Gitea 官方保持同步。
```sh
apk add gitea
@@ -30,7 +30,7 @@ apk add gitea
### Arch Linux
Gitea 已经在滚动發佈发行版的官方[社区存儲库](https://www.archlinux.org/packages/community/x86_64/gitea/)中,版本与 Gitea 官方保持同步。
Gitea 已經在滾動發佈發行版的官方[社區儲存庫](https://www.archlinux.org/packages/community/x86_64/gitea/)中,版本與 Gitea 官方保持同步。
```sh
pacman -S gitea
@@ -38,7 +38,7 @@ pacman -S gitea
### Arch Linux ARM
官方支持 [aarch64](https://archlinuxarm.org/packages/aarch64/gitea), [armv7h](https://archlinuxarm.org/packages/armv7h/gitea) 和 [armv6h](https://archlinuxarm.org/packages/armv6h/gitea) 架构。
官方支援 [aarch64](https://archlinuxarm.org/packages/aarch64/gitea), [armv7h](https://archlinuxarm.org/packages/armv7h/gitea) 和 [armv6h](https://archlinuxarm.org/packages/armv6h/gitea) 架構。
```sh
pacman -S gitea
@@ -46,7 +46,7 @@ pacman -S gitea
### Gentoo Linux
滚动發佈的发行版在其官方社区软件存放庫中提供了 [Gitea](https://packages.gentoo.org/packages/www-apps/gitea),並且会随着新的 Gitea 發佈提供軟體包更新。
滾動發佈的發行版在其官方社區軟件存放庫中提供了 [Gitea](https://packages.gentoo.org/packages/www-apps/gitea),並且會隨著新的 Gitea 發佈提供套件更新。
```sh
emerge gitea -va
@@ -62,29 +62,29 @@ snap install gitea
### SUSE/openSUSE
OpenSUSE 构建服务為 [openSUSE 和 SLE](https://software.opensuse.org/download/package?package=gitea&project=devel%3Atools%3Ascm)
提供包,你可以在开发软件配置管理存儲库中找到它们。
OpenSUSE 構建服務為 [openSUSE 和 SLE](https://software.opensuse.org/download/package?package=gitea&project=devel%3Atools%3Ascm)
提供包,你可以在開發軟件設定管理儲存庫中找到它們。
### Windows
目前你可以通過 [Chocolatey](https://chocolatey.org/) 来安裝 [Gitea](https://chocolatey.org/packages/gitea)。
目前你可以透過 [Chocolatey](https://chocolatey.org/) 來安裝 [Gitea](https://chocolatey.org/packages/gitea)。
```sh
choco install gitea
```
你也可以 [从二進制安裝](installation/from-binary.md) 。
你也可以 [從二進制安裝](installation/from-binary.md) 。
### FreeBSD
可以使用 Gitea 的 FreeBSD port `www/gitea`。 請安裝预构建的二進制包:
可以使用 Gitea 的 FreeBSD port `www/gitea`。 請安裝預構建的二進制包:
```
pkg install gitea
```
對於最新版本,或使用自定义選项构建 port,請
[从 port 安裝](https://www.freebsd.org/doc/handbook/ports-using.html):
對於最新版本,或使用自訂選項構建 port,請
[從 port 安裝](https://www.freebsd.org/doc/handbook/ports-using.html):
```
su -
@@ -92,13 +92,13 @@ cd /usr/ports/www/gitea
make install clean
```
該 port 使用标准的 FreeBSD 文件系统布局:配置文件在 `/usr/local/etc/gitea` 目錄中,
模板、選项、插件和主题在 `/usr/local/share/gitea` 目錄中,启动脚本在 `/usr/local/etc/rc.d/gitea` 目錄中。
該 port 使用標準的 FreeBSD 文件系統佈局:設定文件在 `/usr/local/etc/gitea` 目錄中,
模板、選項、外掛和主題在 `/usr/local/share/gitea` 目錄中,啟動腳本在 `/usr/local/etc/rc.d/gitea` 目錄中。
要使 Gitea 作為服务运行,請运行 `sysrc gitea_enable=YES` 並使用 `service gitea start` 命令启动它。
要使 Gitea 作為服務運行,請運行 `sysrc gitea_enable=YES` 並使用 `service gitea start` 命令啟動它。
### 其它
如果这里没有找到你喜欢的包管理器,可以使用 Gitea 第三方軟體包。这里有一个完整的列表: [awesome-gitea](https://gitea.com/gitea/awesome-gitea/src/branch/master/README.md#user-content-packages)。
如果這裡沒有找到你喜歡的套件管理器,可以使用 Gitea 第三方套件。這裡有一個完整的列表: [awesome-gitea](https://gitea.com/gitea/awesome-gitea/src/branch/master/README.md#user-content-packages)。
如果你知道其他 Gitea 第三方軟體包,請发送 PR 来添加它。
如果你知道其他 Gitea 第三方套件,請發送 PR 來添加它。
@@ -6,40 +6,40 @@ aliases:
- /zh-tw/install-from-source
---
# 使用源代码安裝
# 使用源程式碼安裝
你需要 [安裝 Go](https://golang.google.cn/doc/install) 並正确设置 Go 环境。特别的,建议设置`$GOPATH`环境变量,並将 Go 的二進制目錄或目錄`${GOPATH//://bin:}/bin`添加到`$PATH`中。請参阅 Go 百科上关于 [GOPATH](https://github.com/golang/go/wiki/GOPATH) 的詞条。
你需要 [安裝 Go](https://golang.google.cn/doc/install) 並正確設定 Go 環境。特別的,建議設定`$GOPATH`環境變量,並將 Go 的二進制目錄或目錄`${GOPATH//://bin:}/bin`添加到`$PATH`中。請參閱 Go 百科上關於 [GOPATH](https://github.com/golang/go/wiki/GOPATH) 的詞條。
接下来,[安裝 Node.js 和 npm](https://nodejs.org/zh-tw/download/), 这是构建 JavaScript 和 CSS 文件所需的。最低支持的 Node.js 版本是 @minNodeVersion@,建议使用最新的 LTS 版本。
接下來,[安裝 Node.js 和 npm](https://nodejs.org/zh-tw/download/), 這是構建 JavaScript 和 CSS 文件所需的。最低支援的 Node.js 版本是 @minNodeVersion@,建議使用最新的 LTS 版本。
**注意**:需要 Go 版本 @minGoVersion@ 或更高版本。不過,建议获取与我们的持续集成(continuous integration, CI)相同的版本,請参阅在 [Hacking on Gitea](development/hacking-on-gitea.md) 中给出的建议。
**注意**:需要 Go 版本 @minGoVersion@ 或更高版本。不過,建議獲取與我們的持續整合(continuous integration, CI)相同的版本,請參閱在 [Hacking on Gitea](development/hacking-on-gitea.md) 中給出的建議。
## 下载
## 下載
首先,我们需要获取源码。由于引入了 Go 模組,最简單的方法是直接使用 Git,因為我们不再需要在 GOPATH 内构建 Gitea。
首先,我們需要獲取源碼。由於引入了 Go 模組,最簡單的方法是直接使用 Git,因為我們不再需要在 GOPATH 內構建 Gitea。
```bash
git clone https://github.com/go-gitea/gitea
```
(之前的版本中建议使用 `go get`,但現在不再需要。)
(之前的版本中建議使用 `go get`,但現在不再需要。)
你可以選择编译和安裝的版本,当前有多个選择。`main` 分支代表当前的开发版本。如果你想编译 `main` 版本,你可以直接跳到 [构建](#构建) 部分。
你可以選擇編譯和安裝的版本,當前有多個選擇。`main` 分支代表當前的開發版本。如果你想編譯 `main` 版本,你可以直接跳到 [構建](#構建) 部分。
如果你想编译带有標籤的发行版本,可以使用以下命令签出:
如果你想編譯帶有標籤的發行版本,可以使用以下命令簽出:
```bash
git branch -a
git checkout @sourceBranch@
```
要驗證一个拉取請求(Pull Request, PR),要先启用新的分支(其中 `xyz` 是 PR 的 ID;例如,對於 [#2663](https://github.com/go-gitea/gitea/pull/2663),ID 是 `2663 `):
要驗證一個拉取請求(Pull Request, PR),要先啟用新的分支(其中 `xyz` 是 PR 的 ID;例如,對於 [#2663](https://github.com/go-gitea/gitea/pull/2663),ID 是 `2663 `):
```bash
git fetch origin pull/xyz/head:pr-xyz
```
要以指定发行版本(如 @sourceVersion@ )的源代码来构建 Gitea,可執行以下命令列出可用的版本並選择某个版本签出。
要以指定發行版本(如 @sourceVersion@ )的源程式碼來構建 Gitea,可執行以下命令列出可用的版本並選擇某個版本簽出。
使用以下命令列出可用的版本:
```bash
@@ -47,115 +47,116 @@ git tag -l
git checkout @sourceVersion@ # or git checkout pr-xyz
```
## 构建
<a id="build"></a>
## 構建
要从源代码進行构建,系统必須预先安裝以下程序:
要從源程式碼進行構建,系統必須預先安裝以下程式:
- `go` @minGoVersion@ 或更高版本,請参阅 [这里](https://go.dev/dl/)
- `node` @minNodeVersion@ 或更高版本,並且安裝 `npm`, 請参阅 [这里](https://nodejs.org/zh-tw/download/)
- `make`, 請参阅 [这里](development/hacking-on-gitea.md)
- `go` @minGoVersion@ 或更高版本,請參閱 [這裡](https://go.dev/dl/)
- `node` @minNodeVersion@ 或更高版本,並且安裝 `npm`, 請參閱 [這裡](https://nodejs.org/zh-tw/download/)
- `make`, 請參閱 [這裡](development/hacking-on-gitea.md)
為了尽可能简化编译過程,提供了各种 [make 任务](https://github.com/go-gitea/gitea/blob/main/Makefile)。
為了儘可能簡化編譯過程,提供了各種 [make 任務](https://github.com/go-gitea/gitea/blob/main/Makefile)。
根据你的构建需求,以下 tags 可以使用:
根據你的構建需求,以下 tags 可以使用:
- `bindata`: 构建一个單一的整體二進制文件,包含所有资源。适用于构建生产环境版本。
- `sqlite sqlite_unlock_notify`: 启用对 [SQLite3](https://sqlite.org/) 数据库的支持。僅建议在少数人使用时使用这个模式。
- `pam`: 启用对 PAM( Linux 可插拔認證模組)的支持。可用于对本地使用者進行身份驗證或扩展身份驗證到 PAM 可用的方法。
- `gogit`:(实验性功能)使用 go-git 变體的 Git 命令。
- `bindata`: 構建一個單一的整體二進制文件,包含所有資源。適用於構建生產環境版本。
- `sqlite sqlite_unlock_notify`: 啟用對 [SQLite3](https://sqlite.org/) 資料庫的支援。僅建議在少數人使用時使用這個模式。
- `pam`: 啟用對 PAM( Linux 可插拔認證模組)的支援。可用於對本地使用者進行身份驗證或擴展身份驗證到 PAM 可用的方法。
- `gogit`:(實驗性功能)使用 go-git 變體的 Git 命令。
将所有资源(JS/CSS/模板等)打包到二進制文件中。在生产环境部署时,使用`bindata`构建標籤是必需的。在开发/测试 Gitea 或能够明确分离资源时,可以不用`bindata`。
將所有資源(JS/CSS/模板等)打包到二進制文件中。在生產環境部署時,使用`bindata`構建標籤是必需的。在開發/測試 Gitea 或能夠明確分離資源時,可以不用`bindata`。
要包含所有资源,請使用 `bindata` 標籤:
要包含所有資源,請使用 `bindata` 標籤:
```bash
TAGS="bindata" make build
```
在我们的持续集成系统的默认发行版中,构建標籤為:`TAGS="bindata sqlite sqlite_unlock_notify"`。因此,从源码构建的最简單、推荐方式是:
在我們的持續整合系統的預設發行版中,構建標籤為:`TAGS="bindata sqlite sqlite_unlock_notify"`。因此,從源碼構建的最簡單、推薦方式是:
```bash
TAGS="bindata sqlite sqlite_unlock_notify" make build
```
`build`目标分為两个子目标:
`build`目標分為兩個子目標:
- `make backend` 需要 [Go @minGoVersion@](https://golang.google.cn/doc/install) 或更高版本。
- `make frontend` 需要 [Node.js @minNodeVersion@](https://nodejs.org/zh-tw/download/) 或更高版本。
如果存在预构建的前端文件,可以僅构建后端:
如果存在預構建的前端文件,可以僅構建後端:
```bash
TAGS="bindata" make backend
```
## 测试
## 測試
按照上述步骤完成后,工作目錄中将会有一个`gitea`二進制文件。可以从該目錄進行测试,或将其移动到带有测试数据的目錄中。当手动从命令行启动 Gitea 时,可以通過按下`Ctrl + C`来停止程序。
按照上述步驟完成後,工作目錄中將會有一個`gitea`二進制文件。可以從該目錄進行測試,或將其移動到帶有測試資料的目錄中。當手動從命令行啟動 Gitea 時,可以透過按下`Ctrl + C`來停止程式。
```bash
./gitea web
```
## 更改默认路径
## 更改預設路徑
Gitea 将从`CustomPath`中查找许多信息。默认的,这会在运行 Gitea 时当前工作目錄下的`custom/`目錄中(译者案:即`$PATH_TO_YOUR_GITEA$/custom/`)。它還将在`$(CustomPath)/conf/app.ini`中查找其配置文件`CustomConf`,並将当前工作目錄用作一些可配置值的相对基本路径`AppWorkPath`。最后,静态文件将从默认為 `AppWorkPath`的`StaticRootPath`提供。
Gitea 將從`CustomPath`中查找許多資訊。預設的,這會在運行 Gitea 時當前工作目錄下的`custom/`目錄中(譯者案:即`$PATH_TO_YOUR_GITEA$/custom/`)。它還將在`$(CustomPath)/conf/app.ini`中查找其設定文件`CustomConf`,並將當前工作目錄用作一些可設定值的相對基本路徑`AppWorkPath`。最後,靜態文件將從預設為 `AppWorkPath`的`StaticRootPath`提供。
尽管在开发时这些值很有用,但可能与下游使用者的偏好冲突。
儘管在開發時這些值很有用,但可能與下游使用者的偏好衝突。
一种選择是使用脚本文件来隐藏`gitea`二進制文件,並在运行 Gitea 之前建立适当的环境。然而,在构建时,可以使用`make`的`LDFLAGS`环境变量来更改这些默认值。适当的设置如下:
一種選擇是使用腳本文件來隱藏`gitea`二進制文件,並在運行 Gitea 之前建立適當的環境。然而,在構建時,可以使用`make`的`LDFLAGS`環境變量來更改這些預設值。適當的設定如下:
- 要设置`CustomPath`,請使用`LDFLAGS="-X \"code.gitea.io/gitea/modules/setting.CustomPath=custom-path\""`
- 要設定`CustomPath`,請使用`LDFLAGS="-X \"code.gitea.io/gitea/modules/setting.CustomPath=custom-path\""`
- 對於`CustomConf`,應該使用`-X \"code.gitea.io/gitea/modules/setting.CustomConf=conf.ini\"`
- 對於`AppWorkPath`,應該使用`-X \"code.gitea.io/gitea/modules/setting.AppWorkPath=working-path\"`
- 對於`StaticRootPath`,應該使用`-X \"code.gitea.io/gitea/modules/setting.StaticRootPath=static-root-path\"`
- 要更改默认的 PID 文件位置,請使用`-X \"code.gitea.io/gitea/cmd.PIDFile=/run/gitea.pid\"`
- 要更改預設的 PID 文件位置,請使用`-X \"code.gitea.io/gitea/cmd.PIDFile=/run/gitea.pid\"`
将这些字符串与其前导的`-X`添加到`LDFLAGS`变量中,並像上面那样使用适当的`TAGS`运行`make build`。
將這些字符串與其前導的`-X`添加到`LDFLAGS`變量中,並像上面那樣使用適當的`TAGS`運行`make build`。
运行`gitea help`将允许您查看配置的`gitea`设置。
運行`gitea help`將允許您查看設定的`gitea`設定。
## 交叉编译
## 交叉編譯
`go`编译器工具链支持将代码交叉编译到不同的目标架构上。請参考[`GOOS`和`GOARCH`环境变量](https://go.dev/doc/install/source#environment) 以获取支持的目标列表。如果您想為性能较弱的系统(如树莓派)构建 Gitea,交叉编译非常有用。
`go`編譯器工具鏈支援將程式碼交叉編譯到不同的目標架構上。請參考[`GOOS`和`GOARCH`環境變量](https://go.dev/doc/install/source#environment) 以獲取支援的目標列表。如果您想為性能較弱的系統(如樹莓派)構建 Gitea,交叉編譯非常有用。
要使用构建標籤(`TAGS`)進行交叉编译 Gitea,您還需要一个 C 交叉编译器,該编译器的目标架构与`GOOS`和`GOARCH`变量選择的架构相同。例如,要為 Linux ARM64(`GOOS=linux`和`GOARCH=arm64`)進行交叉编译,您需要`aarch64-unknown-linux-gnu-gcc`交叉编译器。这是因為 Gitea 构建標籤使用了`cgo`的外部函数接口(FFI)。
要使用構建標籤(`TAGS`)進行交叉編譯 Gitea,您還需要一個 C 交叉編譯器,該編譯器的目標架構與`GOOS`和`GOARCH`變量選擇的架構相同。例如,要為 Linux ARM64(`GOOS=linux`和`GOARCH=arm64`)進行交叉編譯,您需要`aarch64-unknown-linux-gnu-gcc`交叉編譯器。這是因為 Gitea 構建標籤使用了`cgo`的外部函數介面(FFI)。
在没有任何標籤的情况下,交叉编译的 Gitea 為 Linux ARM64 版本:
在沒有任何標籤的情況下,交叉編譯的 Gitea 為 Linux ARM64 版本:
```
GOOS=linux GOARCH=arm64 make build
```
要交叉编译 Linux ARM64 下的 Gitea,这是推荐的构建標籤:
要交叉編譯 Linux ARM64 下的 Gitea,這是推薦的構建標籤:
```
CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 TAGS="bindata sqlite sqlite_unlock_notify" make build
```
根据您的目标架构,适当替换`CC`、`GOOS`和`GOARCH`。
根據您的目標架構,適當替換`CC`、`GOOS`和`GOARCH`。
有时您需要构建一个静态编译的镜像。為此,您需要添加以下内容:
有時您需要構建一個靜態編譯的鏡像。為此,您需要添加以下內容:
```
LDFLAGS="-linkmode external -extldflags '-static' $LDFLAGS" TAGS="netgo osusergo $TAGS" make build
```
这可以与上述的`CC`、`GOOS`和`GOARCH`结合使用。
這可以與上述的`CC`、`GOOS`和`GOARCH`結合使用。
### 添加 bash/zsh 自动补全(从 1.19 版本起)
### 添加 bash/zsh 自動補全(從 1.19 版本起)
在[`contrib/autocompletion/bash_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete)中可以找到一个启用 bash 自动补全的脚本。您可以根据需要進行修改,並在您的 `.bashrc` 中使用 `source` 命令加载該脚本,或者将其复制到 `/usr/share/bash-completion/completions/gitea`。
在[`contrib/autocompletion/bash_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete)中可以找到一個啟用 bash 自動補全的腳本。您可以根據需要進行修改,並在您的 `.bashrc` 中使用 `source` 命令加載該腳本,或者將其複製到 `/usr/share/bash-completion/completions/gitea`。
类似地,可以在[`contrib/autocompletion/zsh_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/zsh_autocomplete)中找到一个用于 zsh 自动补全的脚本。您可以将其复制到 `/usr/share/zsh/_gitea`,或者在您的 `.zshrc` 中使用 `source` 命令加载該脚本。
類似地,可以在[`contrib/autocompletion/zsh_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/zsh_autocomplete)中找到一個用於 zsh 自動補全的腳本。您可以將其複製到 `/usr/share/zsh/_gitea`,或者在您的 `.zshrc` 中使用 `source` 命令加載該腳本。
可能需要你根据具體情况進一步改進这些脚本。
可能需要你根據具體情況進一步改進這些腳本。
## 在 Linux 上使用 Zig 進行编译或交叉编译
## 在 Linux 上使用 Zig 進行編譯或交叉編譯
請按照 [Zig 的入门指南](https://ziglang.org/learn/getting-started/#installing-zig) 安裝 Zig。
請按照 [Zig 的入門指南](https://ziglang.org/learn/getting-started/#installing-zig) 安裝 Zig。
- 编译 (Linux ➝ Linux)
- 編譯 (Linux ➝ Linux)
```sh
CC="zig cc -target x86_64-linux-gnu" \
@@ -168,7 +169,7 @@ TAGS="bindata sqlite sqlite_unlock_notify" \
make build
```
- 交叉编译 (Linux ➝ Windows)
- 交叉編譯 (Linux ➝ Windows)
```sh
CC="zig cc -target x86_64-windows-gnu" \
@@ -180,11 +181,11 @@ TAGS="bindata sqlite sqlite_unlock_notify" \
make build
```
## 在 Windows 上使用 Zig 進行编译或交叉编译
## 在 Windows 上使用 Zig 進行編譯或交叉編譯
使用`GIT BASH`编译。
使用`GIT BASH`編譯。
- 编译 (Windows ➝ Windows)
- 編譯 (Windows ➝ Windows)
```sh
CC="zig cc -target x86_64-windows-gnu" \
@@ -196,7 +197,7 @@ TAGS="bindata sqlite sqlite_unlock_notify" \
make build
```
- 交叉编译 (Windows ➝ Linux)
- 交叉編譯 (Windows ➝ Linux)
```sh
CC="zig cc -target x86_64-linux-gnu" \
@@ -211,8 +212,8 @@ make build
## Source Map
默认情况下,gitea 会為前端文件生成精简的 Source Map 以节省空间。 这可以通過“ENABLE_SOURCEMAP”环境变量進行控制:
預設情況下,gitea 會為前端文件生成精簡的 Source Map 以節省空間。 這可以透過“ENABLE_SOURCEMAP”環境變量進行控制:
- `ENABLE_SOURCEMAP=true` 生成所有 Source Map,这是开发版本的默认设置
- `ENABLE_SOURCEMAP=reduced` 生成有限的 Source Map,这是生产版本的默认设置
- `ENABLE_SOURCEMAP=true` 生成所有 Source Map,這是開發版本的預設設定
- `ENABLE_SOURCEMAP=reduced` 生成有限的 Source Map,這是生產版本的預設設定
- `ENABLE_SOURCEMAP=false` 不生成 Source Map
@@ -6,37 +6,37 @@ aliases:
- /zh-tw/install-on-cloud-provider
---
# 在云服务器上安裝 Gitea
# 在雲伺服器上安裝 Gitea
## Cloudron
Gitea 可以在 [Cloudron](https://cloudron.io) 上進行一键安裝。
Cloudron 使得在您的服务器上运行 Gitea,並保持其更新和安全变得简單。
Gitea 可以在 [Cloudron](https://cloudron.io) 上進行一鍵安裝。
Cloudron 使得在您的伺服器上運行 Gitea,並保持其更新和安全變得簡單。
[![Install](/cloudron.svg)](https://cloudron.io/button.html?app=io.gitea.cloudronapp)
Gitea 軟體包的维护地址在[这里](https://git.cloudron.io/cloudron/gitea-app).
Gitea 套件的維護地址在[這裡](https://git.cloudron.io/cloudron/gitea-app).
这里有一个[demo 实例](https://my.demo.cloudron.io) (使用者名: cloudron 密碼: cloudron) 您可以在其中尝试运行 Gitea。
這裡有一個[demo 實例](https://my.demo.cloudron.io) (使用者名稱: cloudron 密碼: cloudron) 您可以在其中嘗試運行 Gitea。
## Linode
[Linode](https://www.linode.com/) 将 Gitea 作為其市场中的一个應用程序.
[Linode](https://www.linode.com/) 將 Gitea 作為其市場中的一個應用程式.
要将 Gitea 部署到 Linode, 請参考 [Linode Marketplace](https://www.linode.com/marketplace/apps/linode/gitea/).
要將 Gitea 部署到 Linode, 請參考 [Linode Marketplace](https://www.linode.com/marketplace/apps/linode/gitea/).
## alwaysdata
[alwaysdata](https://www.alwaysdata.com/) 将 Gitea 作為其市场中的一个 droplet.
[alwaysdata](https://www.alwaysdata.com/) 將 Gitea 作為其市場中的一個 droplet.
要将 Gitea 部署到 alwaysdata, 請参考 [alwaysdata Marketplace](https://www.alwaysdata.com/en/marketplace/gitea/).
要將 Gitea 部署到 alwaysdata, 請參考 [alwaysdata Marketplace](https://www.alwaysdata.com/en/marketplace/gitea/).
## Exoscale
[Exoscale](https://www.exoscale.com/) 在其市场中提供由 [Glasskube](https://glasskube.eu/) 管理的 Gitea。
[Exoscale](https://www.exoscale.com/) 在其市場中提供由 [Glasskube](https://glasskube.eu/) 管理的 Gitea。
Exoscale 是一家欧洲的云服务提供商。
Exoscale 是一家歐洲的雲服務提供商。
該軟體包通過开源的 [Glasskube Kubernetes Operator](https://github.com/glasskube/operator) 進行维护和更新。
該套件通過開源的 [Glasskube Kubernetes Operator](https://github.com/glasskube/operator) 進行維護和更新。
要在 Exoscale 上部署 Gitea,請参考 [Exoscale Marketplace](https://www.exoscale.com/marketplace/listing/glasskube-gitea/)。
要在 Exoscale 上部署 Gitea,請參考 [Exoscale Marketplace](https://www.exoscale.com/marketplace/listing/glasskube-gitea/)。
@@ -8,9 +8,9 @@ aliases:
# 在 Kubernetes 中安裝 Gitea
Gitea 已经提供了便于在 Kubernetes 云原生环境中安裝所需的 Helm Chart
Gitea 已經提供了便於在 Kubernetes 雲原生環境中安裝所需的 Helm Chart
默认安裝指令為:
預設安裝指令為:
```bash
helm repo add gitea https://dl.gitea.com/charts
@@ -18,21 +18,21 @@ helm repo update
helm install gitea gitea/gitea
```
如果采用默认安裝指令,Helm 会部署單实例的 Gitea, PostgreSQL, Memcached。若您想实現自定义安裝(包括配置 Gitea 集群、NGINX Ingress、MySQL、MariaDB、持久存儲等),請前往阅读:[Gitea Helm Chart](https://gitea.com/gitea/helm-chart/)
如果採用預設安裝指令,Helm 會部署單實例的 Gitea, PostgreSQL, Memcached。若您想實現自訂安裝(包括設定 Gitea 集群、NGINX Ingress、MySQL、MariaDB、持久儲存等),請前往閱讀:[Gitea Helm Chart](https://gitea.com/gitea/helm-chart/)
您也可以通過 `helm show` 命令导出 `README.md` 和配置文件 `values.yaml` 進行学习和编辑,例如:
您也可以透過 `helm show` 命令導出 `README.md` 和設定文件 `values.yaml` 進行學習和編輯,例如:
```bash
helm show values gitea/gitea > values.yaml
helm show readme gitea/gitea > README.md
# 使用自定义的配置文件 values.yaml
# 使用自定義的配置文件 values.yaml
helm install gitea -f values.yaml gitea/gitea
```
## 运行状况检查接口
## 運行狀況檢查介面
Gitea 附带了一个运行状况检查接口 `/api/healthz`,你可以像这样在 Kubernetes 中配置它:
Gitea 附帶了一個運行狀況檢查介面 `/api/healthz`,你可以像這樣在 Kubernetes 中設定它:
```yaml
livenessProbe:
@@ -46,7 +46,7 @@ livenessProbe:
failureThreshold: 10
```
成功的运行状况检查響應代码為 HTTP `200`,下面是示例:
成功的運行狀況檢查響應程式碼為 HTTP `200`,下面是範例:
```json
HTTP/1.1 200 OK
@@ -71,4 +71,4 @@ HTTP/1.1 200 OK
}
```
有关更多信息,請参考 Kubernetes 文檔 [配置存活、就绪和启动探测器](https://kubernetes.io/zh-tw/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
有關更多資訊,請參考 Kubernetes 文件 [設定存活、就緒和啟動探測器](https://kubernetes.io/zh-tw/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
@@ -6,9 +6,9 @@ aliases:
- /zh-tw/linux-service
---
# 在 Linux 中以 service 方式运行
# 在 Linux 中以 service 方式運行
## 在 Ubuntu 16.04 LTS 中以 service 方式运行
## 在 Ubuntu 16.04 LTS 中以 service 方式運行
### systemd 方式
@@ -18,11 +18,11 @@ aliases:
sudo vim /etc/systemd/system/gitea.service
```
接着拷贝示例代码 [gitea.service](https://github.com/go-gitea/gitea/blob/main/contrib/systemd/gitea.service) 並取消对任何需要运行在主机上的服务部分的注释,譬如 MySQL。
接著拷貝範例程式碼 [gitea.service](https://github.com/go-gitea/gitea/blob/main/contrib/systemd/gitea.service) 並取消對任何需要運行在主機上的服務部分的註釋,譬如 MySQL。
修改 user,home 目錄以及其他必須的初始化參數,如果使用自定义端口,则需修改 PORT 參數,反之如果使用默认端口则需删除 -p 标记。
修改 user,home 目錄以及其他必須的初始化參數,如果使用自訂端口,則需修改 PORT 參數,反之如果使用預設端口則需刪除 -p 標記。
激活 gitea 並将它作為系统自启动服务:
激活 gitea 並將它作為系統自啟動服務:
```
sudo systemctl enable gitea
@@ -37,25 +37,25 @@ sudo systemctl start gitea
sudo apt install supervisor
```
為 supervisor 配置日志路径:
為 supervisor 設定日誌路徑:
```
# assuming gitea is installed in /home/git/gitea/
mkdir /home/git/gitea/log/supervisor
```
在文件编辑器中打开 supervisor 的配置文件:
在文件編輯器中打開 supervisor 的設定文件:
```
sudo vim /etc/supervisor/supervisord.conf
```
增加如下示例配置
增加如下範例設定
[supervisord config](https://github.com/go-gitea/gitea/blob/main/contrib/supervisor/gitea)。
将 user(git) 和 home(/home/git) 设置為与上文部署中匹配的值。如果使用自定义端口,则需修改 PORT 參數,反之如果使用默认端口则需删除 -p 标记。
將 user(git) 和 home(/home/git) 設定為與上文部署中匹配的值。如果使用自訂端口,則需修改 PORT 參數,反之如果使用預設端口則需刪除 -p 標記。
最后激活 supervisor 並将它作為系统自启动服务:
最後激活 supervisor 並將它作為系統自啟動服務:
```
sudo systemctl enable supervisor
@@ -4,83 +4,83 @@ slug: "upgrade-from-gitea"
sidebar_position: 100
---
# 从旧版 Gitea 升级
# 從舊版 Gitea 升級
在升级之前,您需要做如下的准备工作。
在升級之前,您需要做如下的準備工作。
## 為重大变更检查更新日志
## 為重大變更檢查更新日誌
為了让 Gitea 变得更好,進行重大变更是不可避免的,尤其是一些里程碑更新的發佈。
在更新前,請 [在 Gitea 博客上阅读更新日志](https://blog.gitea.com/)
並检查重大变更是否会影響你的 Gitea 实例。
為了讓 Gitea 變得更好,進行重大變更是不可避免的,尤其是一些里程碑更新的發佈。
在更新前,請 [在 Gitea 部落格上閱讀更新日誌](https://blog.gitea.com/)
並檢查重大變更是否會影響你的 Gitea 實例。
## 在控制面板中检查過期的配置项
## 在控制面板中檢查過期的設定項
一些配置项可能会在后续版本中過期,你需要在控制面板中检查他们。如果不解决過期的配置项,
Gitea也许会在升级后無法重启。你可以访问 https://docs.gitea.com 获得要升级的版本
对應的文檔来修改你的配置文件。
一些設定項可能會在後續版本中過期,你需要在控制面板中檢查他們。如果不解決過期的設定項,
Gitea也許會在升級後無法重啟。你可以訪問 https://docs.gitea.com 獲得要升級的版本
對應的文件來修改你的設定文件。
## 降级前的备份
## 降級前的備份
Gitea 会保留首二位版本号相同的版本的兼容性 (`a.b.x` -> `a.b.y`),
这些版本拥有相同的数据库结构,可以自由升级或降级。
其他情况 (`a.b.?` -> `a.c.?`)下,
新版 Gitea 可能将会将数据库升级到与旧版数据库不同的结构。
Gitea 會保留首二位版本號相同的版本的相容性 (`a.b.x` -> `a.b.y`),
這些版本擁有相同的資料庫結構,可以自由升級或降級。
其他情況 (`a.b.?` -> `a.c.?`)下,
新版 Gitea 可能將會將資料庫升級到與舊版資料庫不同的結構。
举个例子:
舉個例子:
| 当前 | 目标 | 结果 |
| 當前 | 目標 | 結果 |
| --- | --- | --- |
| 1.4.0 | 1.4.1 | ✅ |
| 1.4.1 | 1.4.0 | ⚠️ 不建议,后果自负!尽管数据库结构可能不会变更,让它可以正常工作。我们强烈建议降级前進行完全的备份。 |
| 1.4.x | 1.5.y | ✅ 数据库会被自动升级。你可以直接从 1.4.x 升级到最新的 1.5.y。 |
| 1.5.y | 1.4.x | ❌ 数据库已被升级且無法用于旧版本Gitea,使用备份来進行降级。 |
| 1.4.1 | 1.4.0 | ⚠️ 不建議,後果自負!儘管資料庫結構可能不會變更,讓它可以正常工作。我們強烈建議降級前進行完全的備份。 |
| 1.4.x | 1.5.y | ✅ 資料庫會被自動升級。你可以直接從 1.4.x 升級到最新的 1.5.y。 |
| 1.5.y | 1.4.x | ❌ 資料庫已被升級且無法用於舊版本Gitea,使用備份來進行降級。 |
**因為你不能基于升级后的数据库运行旧版 Gitea,所以你應該在数据库升级前完成数据备份。**
**因為你不能基於升級後的資料庫運行舊版 Gitea,所以你應該在資料庫升級前完成資料備份。**
如果你在生产环境下使用 Gitea,你應該在升级前做好备份,哪怕只是小版本的补丁更新。
如果你在生產環境下使用 Gitea,你應該在升級前做好備份,哪怕只是小版本的補丁更新。
备份步骤:
備份步驟:
* 停止 Gitea 实例
* 备份数据库
* 备份 Gitea 配置文件
* 备份 Gitea 在 `APP_DATA_PATH` 中的数据文件
* 备份 Gitea 的外部存儲 (例如: S3/MinIO 或被使用的其他存儲)
* 停止 Gitea 實例
* 備份資料庫
* 備份 Gitea 設定文件
* 備份 Gitea 在 `APP_DATA_PATH` 中的資料文件
* 備份 Gitea 的外部儲存 (例如: S3/MinIO 或被使用的其他儲存)
如果你在使用云服务或拥有快照功能的文件系统,
最好对 Gitea 的数据盘及相关资料存儲進行一次快照。
如果你在使用雲服務或擁有快照功能的文件系統,
最好對 Gitea 的資料盤及相關資料儲存進行一次快照。
在所有上述步骤准备妥当之后,要升级 Gitea,只需要下载新版,停止运行旧版,進行数据备份,然后运行新版就好。
每次 Gitea 实例启动时,它都会检查是否要進行数据库迁移。
如果需要進行数据库迁移,Gitea 会花一些时间完成升级然后继续服务。
在所有上述步驟準備妥當之後,要升級 Gitea,只需要下載新版,停止運行舊版,進行資料備份,然後運行新版就好。
每次 Gitea 實例啟動時,它都會檢查是否要進行資料庫遷移。
如果需要進行資料庫遷移,Gitea 會花一些時間完成升級然後繼續服務。
## 从 Docker 升级
## 從 Docker 升級
* `docker pull` 拉取 Gitea 的最新發佈版。
* 停止运行中的实例,备份数据。
* 使用 `docker` 或 `docker-compose` 启动较新的 Gitea Docker 容器.
* 停止運行中的實例,備份資料。
* 使用 `docker` 或 `docker-compose` 啟動較新的 Gitea Docker 容器.
## 从包升级
## 從包升級
* 停止运行中的实例,备份数据。
* 使用你的包管理器更新 Gitea 到最新版本。
* 启动 Gitea 实例。
* 停止運行中的實例,備份資料。
* 使用你的套件管理器更新 Gitea 到最新版本。
* 啟動 Gitea 實例。
## 从二進制升级
## 從二進制升級
* 下载最新的 Gitea 二進制文件到临时文件夹中。
* 停止运行中的实例,备份数据。
* 将旧的 Gitea 二進制文件覆盖成新的。
* 启动 Gitea 实例。
* 下載最新的 Gitea 二進制文件到臨時文件夾中。
* 停止運行中的實例,備份資料。
* 將舊的 Gitea 二進制文件覆蓋成新的。
* 啟動 Gitea 實例。
在 Linux 系统上自动執行以上步骤的脚本可在 [Gitea 的 source tree 中找到 `contrib/upgrade.sh` 来获取](https://github.com/go-gitea/gitea/blob/main/contrib/upgrade.sh).
在 Linux 系統上自動執行以上步驟的腳本可在 [Gitea 的 source tree 中找到 `contrib/upgrade.sh` 來獲取](https://github.com/go-gitea/gitea/blob/main/contrib/upgrade.sh).
## 小心你的自定义模板
## 小心你的自訂模板
Gitea 的模板结构与变量可能会随着各个版本的發佈发生变化,如果你使用了自定义模板,
你得注意你的模板与你使用的 Gitea 版本的兼容性。
Gitea 的模板結構與變量可能會隨著各個版本的發佈發生變化,如果你使用了自訂模板,
你得注意你的模板與你使用的 Gitea 版本的相容性。
如果自定义模板与 Gitea 版本不兼容,你可能会遇到:
`50x` 服务器错误,页面元素丢失或故障,莫名其妙的页面布局,等等…
移除或更新不兼容的模板,Gitea Web 才可以正常工作。
如果自訂模板與 Gitea 版本不相容,你可能會遇到:
`50x` 伺服器錯誤,頁面元素丟失或故障,莫名其妙的頁面佈局,等等…
移除或更新不相容的模板,Gitea Web 纔可以正常工作。
@@ -6,9 +6,9 @@ aliases:
- /zh-tw/windows-service
---
# 注册為 Windows 服务
# 註冊為 Windows 服務
## 准备工作
## 準備工作
在 C:\gitea\custom\conf\app.ini 中進行了以下更改:
@@ -16,53 +16,53 @@ aliases:
RUN_USER = COMPUTERNAME$
```
将 Gitea 设置為以本地系统使用者运行。
將 Gitea 設定為以本地系統使用者運行。
COMPUTERNAME 是从命令行中运行 `echo %COMPUTERNAME%` 后得到的響應。如果響應是 `USER-PC`,那么 `RUN_USER = USER-PC$`。
COMPUTERNAME 是從命令行中運行 `echo %COMPUTERNAME%` 後得到的響應。如果響應是 `USER-PC`,那麼 `RUN_USER = USER-PC$`。
### 使用绝对路径
### 使用絕對路徑
如果您使用 SQLite3,請将 `PATH` 更改為包含完整路径:
如果您使用 SQLite3,請將 `PATH` 更改為包含完整路徑:
```ini title="app.ini"
[database]
PATH = c:/gitea/data/gitea.db
```
## 注册為 Windows 服务
## 註冊為 Windows 服務
要注册為 Windows 服务,首先以 Administrator 身份运行 `cmd`,然后執行以下命令:
要註冊為 Windows 服務,首先以 Administrator 身份運行 `cmd`,然後執行以下命令:
```
sc.exe create gitea start= auto binPath= "\"C:\gitea\gitea.exe\" web --config \"C:\gitea\custom\conf\app.ini\""
```
别忘了将 `C:\gitea` 替换成你的 Gitea 安裝目錄。
別忘了將 `C:\gitea` 替換成你的 Gitea 安裝目錄。
之后在控制面板打开 "Windows Services",搜索 "gitea",右键選择 "Run"。在浏览器打开 `http://localhost:3000` 就可以访问了。(如果你修改了端口,請访问对應的端口,3000 是默认端口)。
之後在控制面板打開 "Windows Services",搜索 "gitea",右鍵選擇 "Run"。在瀏覽器打開 `http://localhost:3000` 就可以訪問了。(如果你修改了端口,請前往對應的端口,3000 是預設端口)。
### 服务启动類型
### 服務啟動類型
据观察,在启动期间加载的系统上,Gitea 服务可能無法启动,並在 Windows 事件日志中记录超时。
在这种情况下,将启动類型更改為`Automatic-Delayed`。这可以在服务建立期间完成,或者通過运行配置命令来完成。
據觀察,在啟動期間加載的系統上,Gitea 服務可能無法啟動,並在 Windows 事件日誌中記錄超時。
在這種情況下,將啟動類型更改為`Automatic-Delayed`。這可以在服務建立期間完成,或者通過運行設定命令來完成。
```
sc.exe config gitea start= delayed-auto
```
### 添加启动依赖项
### 添加啟動依賴項
要将启动依赖项添加到 Gitea Windows 服务(例如 Mysql、Mariadb),作為管理员,然后运行以下命令:
要將啟動依賴項添加到 Gitea Windows 服務(例如 Mysql、Mariadb),作為管理員,然後運行以下命令:
```
sc.exe config gitea depend= mariadb
```
这将确保在 Windows 计算机重新启动时,将延迟自动启动 Gitea,直到数据库准备就绪,从而减少启动失败的情况。
這將確保在 Windows 計算機重新啟動時,將延遲自動啟動 Gitea,直到資料庫準備就緒,從而減少啟動失敗的情況。
## 从 Windows 服务中删除
## 從 Windows 服務中刪除
以 Administrator 身份运行 `cmd`,然后執行以下命令:
以 Administrator 身份運行 `cmd`,然後執行以下命令:
```
sc.exe delete gitea
@@ -8,17 +8,17 @@ aliases:
# 使用 Docker 安裝 (rootless)
Gitea 在其 Docker Hub 組織中提供自动更新的 Docker 镜像。您可以始终使用最新的稳定標籤,或使用其他处理 Docker 镜像更新的服务。
Gitea 在其 Docker Hub 組織中提供自動更新的 Docker 鏡像。您可以始終使用最新的穩定標籤,或使用其他處理 Docker 鏡像更新的服務。
rootless 镜像使用 Gitea 内部 SSH 功能来提供 Git 协议,但不支持 OpenSSH。
rootless 鏡像使用 Gitea 內部 SSH 功能來提供 Git 協議,但不支援 OpenSSH。
本参考设置指南将使用者引导通過基于 `docker-compose` 的设置。但是,`docker-compose` 的安裝超出了本文檔的范围。要安裝`docker-compose` 本身, 請按照官方的 [安裝说明](https://docs.docker.com/compose/install/)進行操作。
本參考設定指南將使用者引導通過基於 `docker-compose` 的設定。但是,`docker-compose` 的安裝超出了本文件的範圍。要安裝`docker-compose` 本身, 請按照官方的 [安裝說明](https://docs.docker.com/compose/install/)進行操作。
## 基础设置
## 基礎設定
最简單的设置只需建立一个卷和一个网络,並将 `docker.gitea.com/gitea:latest-rootless` 镜像作為服务启动。由于没有可用的数据库,可以使用 SQLite3 来初始化一个。
最簡單的設定只需建立一個卷和一個網路,並將 `docker.gitea.com/gitea:latest-rootless` 鏡像作為服務啟動。由於沒有可用的資料庫,可以使用 SQLite3 來初始化一個。
建立一个名為 `data` 和 `config`:
建立一個名為 `data` 和 `config`:
```sh
mkdir -p gitea/{data,config}
@@ -26,7 +26,7 @@ cd gitea
touch docker-compose.yml
```
然后将以下内容粘贴到名為 `docker-compose.yml` 的文件中:
然後將以下內容粘貼到名為 `docker-compose.yml` 的文件中:
```yaml
version: "2"
@@ -45,19 +45,19 @@ services:
- "2222:2222"
```
請注意,卷應由在配置文件中指定的 UID/GID 的使用者/组所有。默认情况下,Docker 中的 Gitea 将使用 uid:1000 gid:1000。如果需要,您可以使用以下命令设置这些文件夹的所有权:
請注意,卷應由在設定文件中指定的 UID/GID 的使用者/組所有。預設情況下,Docker 中的 Gitea 將使用 uid:1000 gid:1000。如果需要,您可以使用以下命令設定這些文件夾的所有權:
```sh
sudo chown 1000:1000 config/ data/
```
> 如果未為卷设置正确的权限,容器可能無法启动。
> 如果未為卷設定正確的權限,容器可能無法啟動。
對於稳定版本,您可以使用 `:latest-rootless`、`:1-rootless`,或指定特定的版本,如: `@dockerVersion@-rootless`。如果您想使用最新的开发版本,则可以使用 `:dev-rootless` 標籤。如果您想运行發佈分支的最新提交,可以使用 `:1.x-dev-rootless` 標籤,其中 x 是 Gitea 的次要版本号(例如:`1.16-dev-rootless`)。
對於穩定版本,您可以使用 `:latest-rootless`、`:1-rootless`,或指定特定的版本,如: `@dockerVersion@-rootless`。如果您想使用最新的開發版本,則可以使用 `:dev-rootless` 標籤。如果您想運行發佈分支的最新提交,可以使用 `:1.x-dev-rootless` 標籤,其中 x 是 Gitea 的次要版本號(例如:`1.16-dev-rootless`)。
## 自定义端口
## 自訂端口
要将集成的 SSH 和 Web 服务器绑定到不同的端口,請调整端口部分。通常只需更改主机端口並保持容器内的端口不变。
要將整合的 SSH 和 Web 伺服器綁定到不同的端口,請調整端口部分。通常只需更改主機端口並保持容器內的端口不變。
```diff
version: "2"
@@ -78,9 +78,9 @@ services:
+ - "22:2222"
```
## MySQL 数据库
## MySQL 資料庫
要将 Gitea 与 MySQL 数据库结合使用,請对上面建立的 `docker-compose.yml` 文件進行以下更改。
要將 Gitea 與 MySQL 資料庫結合使用,請對上面建立的 `docker-compose.yml` 文件進行以下更改。
```diff
version: "2"
@@ -118,9 +118,9 @@ services:
+ - ./mysql:/var/lib/mysql
```
## PostgreSQL 数据库
## PostgreSQL 資料庫
要将 Gitea 与 PostgreSQL 数据库结合使用,請对上面建立的 `docker-compose.yml` 文件進行以下更改。
要將 Gitea 與 PostgreSQL 資料庫結合使用,請對上面建立的 `docker-compose.yml` 文件進行以下更改。
```diff
version: "2"
@@ -159,7 +159,7 @@ services:
## 命名卷 (Named Volumes)
要使用命名卷 (Named Volumes) 而不是主机卷 (Host Volumes),請在 `docker-compose.yml` 配置中定义和使用命名卷。这样的更改将自动建立所需的卷。您不需要担心权限问题,Docker 会自动处理。
要使用命名卷 (Named Volumes) 而不是主機卷 (Host Volumes),請在 `docker-compose.yml` 設定中定義和使用命名卷。這樣的更改將自動建立所需的卷。您不需要擔心權限問題,Docker 會自動處理。
```diff
version: "2"
@@ -186,13 +186,13 @@ services:
- "2222:2222"
```
MySQL 或 PostgreSQL 容器需要單独建立。
MySQL 或 PostgreSQL 容器需要單獨建立。
## 自定义使用者
## 自訂使用者
你可以選择使用自定义使用者 (遵循 --user 标志定义 https://docs.docker.com/engine/reference/run/#user)。
例如,要克隆主机使用者 `git` 的定义,請使用命令 `id -u git` 並将其添加到 `docker-compose.yml` 文件中:
請确使用者对保挂载的文件夹具有写权限。
你可以選擇使用自訂使用者 (遵循 --user 標誌定義 https://docs.docker.com/engine/reference/run/#user)。
例如,要克隆主機使用者 `git` 的定義,請使用命令 `id -u git` 並將其添加到 `docker-compose.yml` 文件中:
請確使用者對保掛載的文件夾具有寫權限。
```diff
version: "2"
@@ -212,53 +212,53 @@ services:
- "2222:2222"
```
## 启动
## 啟動
要启动基于 `docker-compose` 的这个设置,請執行 `docker-compose up -d`,以在后台启动 Gitea。使用 `docker-compose ps` 命令可以查看 Gitea 是否正确启动。可以使用 `docker-compose logs` 命令查看日志。
要啟動基於 `docker-compose` 的這個設定,請執行 `docker-compose up -d`,以在後臺啟動 Gitea。使用 `docker-compose ps` 命令可以查看 Gitea 是否正確啟動。可以使用 `docker-compose logs` 命令查看日誌。
要关闭设置,請執行 `docker-compose down` 命令。这将停止和终止容器,但卷仍将存在。
要關閉設定,請執行 `docker-compose down` 命令。這將停止和終止容器,但卷仍將存在。
注意:如果在 HTTP 上使用的是非 3000 端口,請将 app.ini 更改為匹配 `LOCAL_ROOT_URL = http://localhost:3000/`。
注意:如果在 HTTP 上使用的是非 3000 端口,請將 app.ini 更改為匹配 `LOCAL_ROOT_URL = http://localhost:3000/`。
## 安裝
在通過 `docker-compose` 启动 Docker 设置后,可以使用喜爱的浏览器访问 Gitea,完成安裝過程。访问 `http://<服务器-IP>:3000` 並按照安裝向导進行操作。如果数据库是使用上述文檔中的 `docker-compose` 设置启动的,請注意必須使用 `db` 作為数据库主机名。
在通過 `docker-compose` 啟動 Docker 設定後,可以使用喜愛的瀏覽器訪問 Gitea,完成安裝過程。訪問 `http://<服務器-IP>:3000` 並按照安裝嚮導進行操作。如果資料庫是使用上述文件中的 `docker-compose` 設定啟動的,請注意必須使用 `db` 作為資料庫主機名。
## 自定义
## 自訂
自定义文件的位置位于 `/var/lib/gitea/custom` 目錄中,可以在这里找到有关自定义的文件说明。如果使用主机卷(host volumes),很容易访问这些文件;如果使用命名卷(named volumes),则可以通過另一个容器或直接访问 `/var/lib/docker/volumes/gitea_gitea/_/var_lib_gitea` 来進行访问。在安裝后,配置文件将保存在 `/etc/gitea/app.ini` 中。
自訂文件的位置位於 `/var/lib/gitea/custom` 目錄中,可以在這裡找到有關自訂的文件說明。如果使用主機卷(host volumes),很容易訪問這些文件;如果使用命名卷(named volumes),則可以透過另一個容器或直接訪問 `/var/lib/docker/volumes/gitea_gitea/_/var_lib_gitea` 來進行訪問。在安裝後,設定文件將保存在 `/etc/gitea/app.ini` 中。
## 升级
## 升級
:::warning
:exclamation::exclamation: **确保您已将数据卷迁移到 Docker 容器之外的其他位置** :exclamation::exclamation:
:exclamation::exclamation: **確保您已將資料卷遷移到 Docker 容器之外的其他位置** :exclamation::exclamation:
:::
要将安裝升级到最新版本,請按照以下步骤操作:
要將安裝升級到最新版本,請按照以下步驟操作:
```bash
# 如果在 docker-compose.yml 中指定了版本,請编辑該文件以更新版本
# 拉取新的镜像
# 如果在 docker-compose.yml 中指定了版本,請編輯該文件以更新版本
# 拉取新的鏡像
docker-compose pull
# 启动一个新的容器,自动移除旧的容器
# 啟動一個新的容器,自動移除舊的容器
docker-compose up -d
```
## 从标准镜像升级
## 從標準鏡像升級
- 备份您的设置
- 将卷挂载点从 `/data` 更改為 `/var/lib/gitea`
- 如果使用了自定义的 `app.ini`,請将其移动到新的挂载到 `/etc/gitea` 的卷中
- 将卷中的文件夹(gitea)重命名為 custom
- 如果需要,编辑 `app.ini`
- 设置 `START_SSH_SERVER = true`
- 使用镜像 ` docker.gitea.com/gitea:@dockerVersion@-rootless`
- 備份您的設定
- 將卷掛載點從 `/data` 更改為 `/var/lib/gitea`
- 如果使用了自訂的 `app.ini`,請將其移動到新的掛載到 `/etc/gitea` 的卷中
- 將卷中的文件夾(gitea)重命名為 custom
- 如果需要,編輯 `app.ini`
- 設定 `START_SSH_SERVER = true`
- 使用鏡像 ` docker.gitea.com/gitea:@dockerVersion@-rootless`
## 使用环境变量管理部署
## 使用環境變量管理部署
除了上述的环境变量外,`app.ini` 中的任何设置都可以通過形式為 `GITEA__SECTION_NAME__KEY_NAME` 的环境变量進行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息請参考[这里](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini).
除了上述的環境變量外,`app.ini` 中的任何設定都可以透過形式為 `GITEA__SECTION_NAME__KEY_NAME` 的環境變量進行設定或覆蓋。這些設定在每次 Docker 容器啟動時都會生效。完整資訊請參考[這裡](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini).
这些环境变量可以在 `docker-compose.yml` 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEA**mailer**FROM、GITEA**mailer**HOST、GITEA**mailer**PASSWD,或者在与 `docker-compose.yml` 相同目錄中的 `.env` 文件中设置了这些环境变量:
這些環境變量可以在 `docker-compose.yml` 中傳遞給 Docker 容器。以下範例將啟用 SMTP 郵件伺服器,如果主機上設定了所需的環境變量 GITEA**mailer**FROM、GITEA**mailer**HOST、GITEA**mailer**PASSWD,或者在與 `docker-compose.yml` 相同目錄中的 `.env` 文件中設定了這些環境變量:
```bash
...
@@ -274,36 +274,36 @@ services:
- GITEA__mailer__PASSWD="""${GITEA__mailer__PASSWD:?GITEA__mailer__PASSWD not set}"""
```
要设置所需的 TOKEN 和 SECRET 值,可以使用 Gitea 的内置[生成使用函数](../administration/command-line.md#generate).
要設定所需的 TOKEN 和 SECRET 值,可以使用 Gitea 的內置[生成使用函數](../administration/command-line.md#generate).
# SSH 容器透传
# SSH 容器透傳
由于 SSH 在容器内运行,如果需要 SSH 支持,需要将 SSH 从主机透传到容器。一种選择是在容器内运行 SSH,並使用非标准端口(或将主机端口移动到非标准端口)。另一种可能更直接的選择是将主机上的 SSH 命令转发到容器。下面解释了这种设置。
由於 SSH 在容器內運行,如果需要 SSH 支援,需要將 SSH 從主機透傳到容器。一種選擇是在容器內運行 SSH,並使用非標準端口(或將主機端口移動到非標準端口)。另一種可能更直接的選擇是將主機上的 SSH 命令轉發到容器。下面解釋了這種設定。
本指南假设您已在主机上建立了一个名為 `git` 的使用者,並具有运行 `docker exec` 的权限,並且 Gitea 容器的名稱為 `gitea`。您需要修改該使用者的 shell,以将命令转发到容器内的 `sh` 可執行文件,使用 `docker exec`。
本指南假設您已在主機上建立了一個名為 `git` 的使用者,並具有運行 `docker exec` 的權限,並且 Gitea 容器的名稱為 `gitea`。您需要修改該使用者的 shell,以將命令轉發到容器內的 `sh` 可執行文件,使用 `docker exec`。
首先,在主机上建立文件 `/usr/local/bin/gitea-shell`,並填入以下内容:
首先,在主機上建立文件 `/usr/local/bin/gitea-shell`,並填入以下內容:
```bash
#!/bin/sh
/usr/bin/docker exec -i --env SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" gitea sh "$@"
```
注意上述 docker 命令中的 `gitea` 是容器的名稱。如果您的容器名稱不同,請记得更改。
注意上述 docker 命令中的 `gitea` 是容器的名稱。如果您的容器名稱不同,請記得更改。
還應确保正确设置了 shell 包装器的权限:
還應確保正確設定了 shell 包裝器的權限:
```bash
sudo chmod +x /usr/local/bin/gitea-shell
```
一旦包装器就位,您可以将其设置為 `git` 使用者的 shell:
一旦包裝器就位,您可以將其設定為 `git` 使用者的 shell:
```bash
sudo usermod -s /usr/local/bin/gitea-shell git
```
現在,所有的 SSH 命令都会被转发到容器,您需要在主机上设置 SSH 認證。这可以通過利用 [SSH AuthorizedKeysCommand](../administration/command-line.md#keys) 来匹配 Gitea 接受的密钥。在主机的 `/etc/ssh/sshd_config` 文件中添加以下代码块:
現在,所有的 SSH 命令都會被轉發到容器,您需要在主機上設定 SSH 認證。這可以透過利用 [SSH AuthorizedKeysCommand](../administration/command-line.md#keys) 來匹配 Gitea 接受的密鑰。在主機的 `/etc/ssh/sshd_config` 文件中添加以下程式碼塊:
```bash
Match User git
@@ -311,9 +311,9 @@ Match User git
AuthorizedKeysCommand /usr/bin/docker exec -i gitea /usr/local/bin/gitea keys -c /etc/gitea/app.ini -e git -u %u -t %t -k %k
```
(从 1.16.0 开始,您将不需要设置 `-c /etc/gitea/app.ini` 選项。)
(從 1.16.0 開始,您將不需要設定 `-c /etc/gitea/app.ini` 選項。)
剩下的就是重新启动 SSH 服务器:
剩下的就是重新啟動 SSH 伺服器:
```bash
sudo systemctl restart sshd
@@ -321,5 +321,5 @@ sudo systemctl restart sshd
**注意**
这实际上並没有使用 Docker 的 SSH,而是僅僅使用了围绕它的命令。
从理论上讲,您可以不运行内部的 SSH 服务器。
這實際上並沒有使用 Docker 的 SSH,而是僅僅使用了圍繞它的命令。
從理論上講,您可以不運行內部的 SSH 伺服器。
@@ -8,13 +8,13 @@ aliases:
# 使用 Docker 安裝
Gitea 在其 Docker Hub 組織内提供自动更新的 Docker 镜像。可以始终使用最新的稳定標籤或使用其他服务来更新 Docker 镜像。
Gitea 在其 Docker Hub 組織內提供自動更新的 Docker 鏡像。可以始終使用最新的穩定標籤或使用其他服務來更新 Docker 鏡像。
該参考设置指导使用者完成基于 `docker-compose` 的设置,但是 `docker-compose` 的安裝不在本文檔的范围之内。要安裝 `docker-compose` 本身,請遵循官方[安裝说明](https://docs.docker.com/compose/install/)。
該參考設定指導使用者完成基於 `docker-compose` 的設定,但是 `docker-compose` 的安裝不在本文件的範圍之內。要安裝 `docker-compose` 本身,請遵循官方[安裝說明](https://docs.docker.com/compose/install/)。
## 基本
最简單的设置只是建立一个卷和一个网络,然后将 `docker.gitea.com/gitea:latest` 镜像作為服务启动。由于没有可用的数据库,因此可以使用 SQLite3 初始化数据库。建立一个类似 `gitea` 的目錄,並将以下内容粘贴到名為 `docker-compose.yml` 的文件中。請注意,該卷應由配置文件中指定的 UID/GID 的使用者/组拥有。如果您不授予卷正确的权限,则容器可能無法启动。另請注意,標籤 `:latest` 将安裝当前的开发版本。對於稳定的发行版,您可以使用 `:1` 或指定某个发行版,例如 `@dockerVersion@`。
最簡單的設定只是建立一個卷和一個網路,然後將 `docker.gitea.com/gitea:latest` 鏡像作為服務啟動。由於沒有可用的資料庫,因此可以使用 SQLite3 初始化資料庫。建立一個類似 `gitea` 的目錄,並將以下內容粘貼到名為 `docker-compose.yml` 的文件中。請注意,該卷應由設定文件中指定的 UID/GID 的使用者/組擁有。如果您不授予卷正確的權限,則容器可能無法啟動。另請注意,標籤 `:latest` 將安裝當前的開發版本。對於穩定的發行版,您可以使用 `:1` 或指定某個發行版,例如 `@dockerVersion@`。
```yaml
version: "3"
@@ -44,7 +44,7 @@ services:
## 端口
要将集成的 openSSH 守护進程和 Web 服务器绑定到其他端口,請调整端口部分。通常,只需更改主机端口,容器内的端口保持原样即可。
要將整合的 openSSH 守護進程和 Web 伺服器綁定到其他端口,請調整端口部分。通常,只需更改主機端口,容器內的端口保持原樣即可。
```diff
version: "3"
@@ -74,11 +74,11 @@ services:
+ - "2221:22"
```
## 数据库
## 資料庫
### MySQL 数据库
### MySQL 資料庫
要将 Gitea 与 MySQL 数据库结合使用,請将这些更改應用于上面建立的 `docker-compose.yml` 文件。
要將 Gitea 與 MySQL 資料庫結合使用,請將這些更改應用於上面建立的 `docker-compose.yml` 文件。
```diff
version: "3"
@@ -126,9 +126,9 @@ services:
+ - ./mysql:/var/lib/mysql
```
### PostgreSQL 数据库
### PostgreSQL 資料庫
要将 Gitea 与 PostgreSQL 数据库结合使用,請将这些更改應用于上面建立的 `docker-compose.yml` 文件。
要將 Gitea 與 PostgreSQL 資料庫結合使用,請將這些更改應用於上面建立的 `docker-compose.yml` 文件。
```diff
version: "3"
@@ -177,7 +177,7 @@ services:
## 命名卷
要使用命名卷而不是主机卷,請在 `docker-compose.yml` 配置中定义並使用命名卷。此更改将自动建立所需的卷。您無需担心命名卷的权限;Docker 将自动处理該问题。
要使用命名卷而不是主機卷,請在 `docker-compose.yml` 設定中定義並使用命名卷。此更改將自動建立所需的卷。您無需擔心命名卷的權限;Docker 將自動處理該問題。
```diff
version: "3"
@@ -207,59 +207,59 @@ services:
- "222:22"
```
MySQL 或 PostgreSQL 容器将需要分别建立。
MySQL 或 PostgreSQL 容器將需要分別建立。
## 启动
## 啟動
要基于 `docker-compose` 启动此设置,請執行 `docker-compose up -d`,以在后台启动 Gitea。使用 `docker-compose ps` 将显示 Gitea 是否正确启动。可以使用 `docker-compose logs` 查看日志。
要基於 `docker-compose` 啟動此設定,請執行 `docker-compose up -d`,以在後臺啟動 Gitea。使用 `docker-compose ps` 將顯示 Gitea 是否正確啟動。可以使用 `docker-compose logs` 查看日誌。
要关闭设置,請執行 `docker-compose down`。这将停止並杀死容器。这些卷将仍然存在。
要關閉設定,請執行 `docker-compose down`。這將停止並殺死容器。這些卷將仍然存在。
注意:如果在 http 上使用非 3000 端口,請更改 app.ini 以匹配 `LOCAL_ROOT_URL = http://localhost:3000/`。
## 安裝
通過 `docker-compose` 启动 Docker 安裝后,應該可以使用喜欢的浏览器访问 Gitea,以完成安裝。访问 http://server-ip:3000 並遵循安裝向导。如果数据库是通過上述 `docker-compose` 设置启动的,請注意,必須将 `db` 用作数据库主机名。
通過 `docker-compose` 啟動 Docker 安裝後,應該可以使用喜歡的瀏覽器訪問 Gitea,以完成安裝。訪問 http://server-ip:3000 並遵循安裝嚮導。如果資料庫是通過上述 `docker-compose` 設定啟動的,請注意,必須將 `db` 用作資料庫主機名。
## 环境变量
## 環境變量
您可以通過环境变量配置 Gitea 的一些设置:
您可以透過環境變量設定 Gitea 的一些設定:
(默认值以**粗體**显示)
(預設值以**粗體**顯示)
- `APP_NAME`:**“Gitea: Git with a cup of tea”**:應用程序名稱,在页面标题中使用。
- `RUN_MODE`:**prod**:應用程序运行模式,会影響性能和调试。"dev","prod"或"test"。
- `DOMAIN`:**localhost**:此服务器的域名,用于 Gitea UI 中显示的 http 克隆 URL。
- `SSH_DOMAIN`:**localhost**:該服务器的域名,用于 Gitea UI 中显示的 ssh 克隆 URL。如果启用了安裝页面,则 SSH 域服务器将采用以下形式的 DOMAIN 值(保存时将覆盖此设置)。
- `SSH_PORT`:**22**:克隆 URL 中显示的 SSH 端口。
- `SSH_LISTEN_PORT`:**%(SSH_PORT)s**:内置 SSH 服务器的端口。
- `DISABLE_SSH`:**false**:如果不可用,請禁用 SSH 功能。如果要禁用 SSH 功能,则在安裝 Gitea 时應将 SSH 端口设置為 `0`。
- `HTTP_PORT`:**3000**:HTTP 监听端口。
- `ROOT_URL`:**""**:覆盖自动生成的公共 URL。如果内部 URL 和外部 URL 不匹配(例如在 Docker 中),这很有用。
- `LFS_START_SERVER`:**false**:启用 git-lfs 支持。
- `DB_TYPE`:**sqlite3**:正在使用的数据库類型[mysql,postgres,mssql,sqlite3]。
- `DB_HOST`:**localhost:3306**:数据库主机地址和端口。
- `DB_NAME`:**gitea**:数据库名稱。
- `DB_USER`:**root**:数据库使用者名。
- `DB_PASSWD`:**"_empty_"** :数据库使用者密碼。如果您在密碼中使用特殊字符,請使用“您的密碼”進行引用。
- `INSTALL_LOCK`:**false**:禁止访问安裝页面。
- `SECRET_KEY`:**""** :全局密钥。这應該更改。如果它具有一个值並且 `INSTALL_LOCK` 為空,则 `INSTALL_LOCK` 将自动设置為 `true`。
- `DISABLE_REGISTRATION`:**false**:禁用注册,之后只有管理员才能為使用者建立帳戶。
- `REQUIRE_SIGNIN_VIEW`:**false**:启用此選项可强制使用者登入以查看任何页面。
- `USER_UID`:**1000**:在容器内运行 Gitea 的使用者的 UID(Unix 使用者 ID)。如果使用主机卷,则将其与 `/data` 卷的所有者的 UID 匹配(對於命名卷,则不需要这样做)。
- `USER_GID`:**1000**:在容器内运行 Gitea 的使用者的 GID(Unix 组 ID)。如果使用主机卷,则将其与 `/data` 卷的所有者的 GID 匹配(對於命名卷,则不需要这样做)。
- `APP_NAME`:**“Gitea: Git with a cup of tea”**:應用程式名稱,在頁面標題中使用。
- `RUN_MODE`:**prod**:應用程式運行模式,會影響性能和調試。"dev","prod"或"test"。
- `DOMAIN`:**localhost**:此伺服器的域名,用於 Gitea UI 中顯示的 http 克隆 URL。
- `SSH_DOMAIN`:**localhost**:該伺服器的域名,用於 Gitea UI 中顯示的 ssh 克隆 URL。如果啟用了安裝頁面,則 SSH 域伺服器將採用以下形式的 DOMAIN 值(保存時將覆蓋此設定)。
- `SSH_PORT`:**22**:克隆 URL 中顯示的 SSH 端口。
- `SSH_LISTEN_PORT`:**%(SSH_PORT)s**:內置 SSH 伺服器的端口。
- `DISABLE_SSH`:**false**:如果不可用,請禁用 SSH 功能。如果要禁用 SSH 功能,則在安裝 Gitea 時應將 SSH 端口設定為 `0`。
- `HTTP_PORT`:**3000**:HTTP 監聽端口。
- `ROOT_URL`:**""**:覆蓋自動生成的公共 URL。如果內部 URL 和外部 URL 不匹配(例如在 Docker 中),這很有用。
- `LFS_START_SERVER`:**false**:啟用 git-lfs 支援。
- `DB_TYPE`:**sqlite3**:正在使用的資料庫類型[mysql,postgres,mssql,sqlite3]。
- `DB_HOST`:**localhost:3306**:資料庫主機地址和端口。
- `DB_NAME`:**gitea**:資料庫名稱。
- `DB_USER`:**root**:資料庫使用者名稱。
- `DB_PASSWD`:**"_empty_"** :資料庫使用者密碼。如果您在密碼中使用特殊字符,請使用“您的密碼”進行引用。
- `INSTALL_LOCK`:**false**:禁止訪問安裝頁面。
- `SECRET_KEY`:**""** :全域密鑰。這應該更改。如果它具有一個值並且 `INSTALL_LOCK` 為空,則 `INSTALL_LOCK` 將自動設定為 `true`。
- `DISABLE_REGISTRATION`:**false**:禁用註冊,之後只有管理員才能為使用者建立帳戶。
- `REQUIRE_SIGNIN_VIEW`:**false**:啟用此選項可強制使用者登入以查看任何頁面。
- `USER_UID`:**1000**:在容器內運行 Gitea 的使用者的 UID(Unix 使用者 ID)。如果使用主機卷,則將其與 `/data` 卷的所有者的 UID 匹配(對於命名卷,則不需要這樣做)。
- `USER_GID`:**1000**:在容器內運行 Gitea 的使用者的 GID(Unix 組 ID)。如果使用主機卷,則將其與 `/data` 卷的所有者的 GID 匹配(對於命名卷,則不需要這樣做)。
## 自定义
## 自訂
[此处](../administration/customizing-gitea.md)描述的定制文件應放在 `/data/gitea` 目錄中。如果使用主机卷,则访问这些文件非常容易;對於命名卷,可以通過另一个容器或通過直接访问 `/var/lib/docker/volumes/gitea_gitea/_data` 来完成。安裝后,配置文件将保存在 `/data/gitea/conf/app.ini` 中。
[此處](../administration/customizing-gitea.md)描述的定製文件應放在 `/data/gitea` 目錄中。如果使用主機卷,則訪問這些文件非常容易;對於命名卷,可以透過另一個容器或通過直接訪問 `/var/lib/docker/volumes/gitea_gitea/_data` 來完成。安裝後,設定文件將保存在 `/data/gitea/conf/app.ini` 中。
## 升级
## 升級
:::warning
:exclamation::exclamation: **确保已将数据卷到 Docker 容器外部的某个位置** :exclamation::exclamation:
:exclamation::exclamation: **確保已將資料捲到 Docker 容器外部的某個位置** :exclamation::exclamation:
:::
要将安裝升级到最新版本:
要將安裝升級到最新版本:
```bash
# Edit `docker-compose.yml` to update the version, if you have one specified
@@ -269,9 +269,9 @@ docker-compose pull
docker-compose up -d
```
## 使用环境变量管理部署
## 使用環境變量管理部署
除了上面的环境变量之外,`app.ini` 中的任何设置都可以使用以下形式的环境变量進行设置或覆盖:`GITEA__SECTION_NAME__KEY_NAME`。 每次 docker 容器启动时都会應用这些设置。 完整信息在[这里](https://github.com/go-gitea/gitea/tree/master/contrib/environment-to-ini)。
除了上面的環境變量之外,`app.ini` 中的任何設定都可以使用以下形式的環境變量進行設定或覆蓋:`GITEA__SECTION_NAME__KEY_NAME`。 每次 docker 容器啟動時都會應用這些設定。 完整資訊在[這裡](https://github.com/go-gitea/gitea/tree/master/contrib/environment-to-ini)。
```bash
...
@@ -286,9 +286,9 @@ services:
- GITEA__mailer__PASSWD="""${GITEA__mailer__PASSWD:?GITEA__mailer__PASSWD not set}"""
```
Gitea 将為每次新安裝自动生成新的 `SECRET_KEY` 並将它们写入 `app.ini`。 如果您想手动设置 `SECRET_KEY`,您可以使用以下 docker 命令来使用 Gitea 内置的[方法](../administration/command-line.md#generate)生成 `SECRET_KEY`。 安裝后請妥善保管您的 `SECRET_KEY`,如若丢失则無法解密已加密的数据。
Gitea 將為每次新安裝自動生成新的 `SECRET_KEY` 並將它們寫入 `app.ini`。 如果您想手動設定 `SECRET_KEY`,您可以使用以下 docker 命令來使用 Gitea 內置的[方法](../administration/command-line.md#generate)生成 `SECRET_KEY`。 安裝後請妥善保管您的 `SECRET_KEY`,如若丟失則無法解密已加密的資料。
以下命令将向 `stdout` 输出一个新的 `SECRET_KEY` 和 `INTERNAL_TOKEN`,然后您可以将其放入环境变量中。
以下命令將向 `stdout` 輸出一個新的 `SECRET_KEY` 和 `INTERNAL_TOKEN`,然後您可以將其放入環境變量中。
```bash
docker run -it --rm docker.gitea.com/gitea:1 gitea generate secret SECRET_KEY
@@ -307,9 +307,9 @@ services:
## SSH 容器直通
由于 SSH 在容器内运行,因此,如果需要 SSH 支持,则需要将 SSH 从主机传递到容器。一种選择是在非标准端口上运行容器 SSH(或将主机端口移至非标准端口)。另一个可能更直接的選择是将 SSH 连接从主机转发到容器。下面将说明此设置。
由於 SSH 在容器內運行,因此,如果需要 SSH 支援,則需要將 SSH 從主機傳遞到容器。一種選擇是在非標準端口上運行容器 SSH(或將主機端口移至非標準端口)。另一個可能更直接的選擇是將 SSH 連接從主機轉發到容器。下面將說明此設定。
本指南假定您已经在名為 `git` 的主机上建立了一个使用者,該使用者与容器值 `USER_UID`/`USER_GID` 共享相同的 `UID`/`GID`。这些值可以在 `docker-compose.yml` 中设置為环境变量:
本指南假定您已經在名為 `git` 的主機上建立了一個使用者,該使用者與容器值 `USER_UID`/`USER_GID` 共享相同的 `UID`/`GID`。這些值可以在 `docker-compose.yml` 中設定為環境變量:
```bash
environment:
@@ -317,26 +317,26 @@ environment:
- USER_GID=1000
```
接下来将主机的 `/home/git/.ssh` 装入容器。否则,SSH 身份驗證将無法在容器内运行。
接下來將主機的 `/home/git/.ssh` 裝入容器。否則,SSH 身份驗證將無法在容器內運行。
```bash
volumes:
- /home/git/.ssh/:/data/git/.ssh
```
現在,需要在主机上建立 SSH 密钥对。該密钥对将用于向主机驗證主机上的 `git` 使用者。
現在,需要在主機上建立 SSH 密鑰對。該密鑰對將用於向主機驗證主機上的 `git` 使用者。
```bash
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
```
在下一步中,需要在主机上建立一个名為 `/usr/local/bin/gitea` 的文件(具有可執行权限)。該文件将发出从主机到容器的 SSH 转发。将以下内容添加到 `/usr/local/bin/gitea`:
在下一步中,需要在主機上建立一個名為 `/usr/local/bin/gitea` 的文件(具有可執行權限)。該文件將發出從主機到容器的 SSH 轉發。將以下內容添加到 `/usr/local/bin/gitea`:
```bash
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
```
為了使转发正常工作,需要将容器(22)的 SSH 端口映射到 `docker-compose.yml` 中的主机端口 2222。由于此端口不需要暴露给外界,因此可以将其映射到主机的 `localhost`:
為了使轉發正常工作,需要將容器(22)的 SSH 端口映射到 `docker-compose.yml` 中的主機端口 2222。由於此端口不需要暴露給外界,因此可以將其映射到主機的 `localhost`:
```bash
ports:
@@ -344,9 +344,9 @@ ports:
- "127.0.0.1:2222:22"
```
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式進行操作。因此,将您在上面建立的密钥(“Gitea 主机密钥”)的公共密钥添加到 `/home/git/.ssh/authorized_keys`。这可以通過 `echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys` 完成。重要提示:来自 `git` 使用者的公钥需要“按原样”添加,而通過 Gitea 网络界面添加的所有其他公钥将以 `command="/app [...]` 作為前缀。
另外,主機上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以與 Gitea 容器內的 `authorized_keys` 相同的方式進行操作。因此,將您在上面建立的密鑰(“Gitea 主機密鑰”)的公共密鑰添加到 `/home/git/.ssh/authorized_keys`。這可以透過 `echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys` 完成。重要提示:來自 `git` 使用者的公鑰需要“按原樣”添加,而通過 Gitea 網路介面添加的所有其他公鑰將以 `command="/app [...]` 作為前綴。
該文件應該看起来像:
該文件應該看起來像:
```bash
# SSH pubkey from git user
@@ -356,19 +356,19 @@ ssh-rsa <Gitea Host Key>
command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty <user pubkey>
```
这是详细的说明,当发出 SSH 請求时会发生什么:
這是詳細的說明,當發出 SSH 請求時會發生什麼:
1. 使用 `git` 使用者向主机发出 SSH 請求,例如 `git clone git@domain:user/repo.git`。
2. 在 `/home/git/.ssh/authorized_keys` 中,該命令執行 `/usr/local/bin/gitea` 脚本。
3. `/usr/local/bin/gitea` 将 SSH 請求转发到端口 2222,該端口已映射到容器的 SSH 端口(22)。
4. 由于 `/home/git/.ssh/authorized_keys` 中存在 `git` 使用者的公钥,因此身份驗證主机 → 容器成功,並且 SSH 請求转发到在 docker 容器中运行的 Gitea。
1. 使用 `git` 使用者向主機發出 SSH 請求,例如 `git clone git@domain:user/repo.git`。
2. 在 `/home/git/.ssh/authorized_keys` 中,該命令執行 `/usr/local/bin/gitea` 腳本。
3. `/usr/local/bin/gitea` 將 SSH 請求轉發到端口 2222,該端口已映射到容器的 SSH 端口(22)。
4. 由於 `/home/git/.ssh/authorized_keys` 中存在 `git` 使用者的公鑰,因此身份驗證主機 → 容器成功,並且 SSH 請求轉發到在 docker 容器中運行的 Gitea。
如果在 Gitea Web 界面中添加了新的 SSH 密钥,它将以与現有密钥相同的方式附加到 `.ssh/authorized_keys` 中。
如果在 Gitea Web 介面中添加了新的 SSH 密鑰,它將以與現有密鑰相同的方式附加到 `.ssh/authorized_keys` 中。
**注意**
SSH 容器直通僅在以下情况下有效
SSH 容器直通僅在以下情況下有效
- 在容器中使用 `opensshd`
- 如果未将 `AuthorizedKeysCommand` 与 `SSH_CREATE_AUTHORIZED_KEYS_FILE = false` 结合使用以禁用授权文件密钥生成
- `LOCAL_ROOT_URL` 不变
- 如果未將 `AuthorizedKeysCommand` 與 `SSH_CREATE_AUTHORIZED_KEYS_FILE = false` 結合使用以禁用授權文件密鑰生成
- `LOCAL_ROOT_URL` 不變
@@ -6,111 +6,111 @@ sidebar_position: 20
# Act Runner
本页面将详细介绍[Act Runner](https://gitea.com/gitea/act_runner),这是Gitea Actions的Runner。
本頁面將詳細介紹[Act Runner](https://gitea.com/gitea/act_runner),這是Gitea Actions的Runner。
## 要求
建议在Docker容器中运行Job,因此您需要首先安裝Docker。
並确保Docker守护進程正在运行。
建議在Docker容器中運行Job,因此您需要首先安裝Docker。
並確保Docker守護進程正在運行。
其他与Docker API兼容的OCI容器引擎也應該可以正常工作,但尚未经過测试。
其他與Docker API相容的OCI容器引擎也應該可以正常工作,但尚未經過測試。
但是,如果您确定要直接在主机上运行Job,则不需要Docker。
但是,如果您確定要直接在主機上運行Job,則不需要Docker。
## 安裝
有多种安裝Act Runner的方法。
有多種安裝Act Runner的方法。
### 下载二進制文件
### 下載二進制文件
您可以从[發佈页面](https://gitea.com/gitea/act_runner/releases)下载二進制文件。
然而,如果您想使用最新的夜间构建版本,可以从[下载页面](https://dl.gitea.com/act_runner/)下载。
您可以從[發佈頁面](https://gitea.com/gitea/act_runner/releases)下載二進制文件。
然而,如果您想使用最新的夜間構建版本,可以從[下載頁面](https://dl.gitea.com/act_runner/)下載。
下载二進制文件时,請确保您已经下载了适用于您的平台的正确版本。
您可以通過运行以下命令進行检查:
下載二進制文件時,請確保您已經下載了適用於您的平台的正確版本。
您可以透過運行以下命令進行檢查:
```bash
chmod +x act_runner
./act_runner --version
```
如果看到版本信息,则表示您已经下载了正确的二進制文件。
如果看到版本資訊,則表示您已經下載了正確的二進制文件。
### 使用 Docker 镜像
### 使用 Docker 鏡像
您可以使用[docker hub](https://hub.docker.com/r/gitea/act_runner/tags)上的Docker镜像。
与二進制文件类似,您可以使用`nightly`標籤使用最新的夜间构建版本,而`latest`標籤是最新的稳定版本。
您可以使用[docker hub](https://hub.docker.com/r/gitea/act_runner/tags)上的Docker鏡像。
與二進制文件類似,您可以使用`nightly`標籤使用最新的夜間構建版本,而`latest`標籤是最新的穩定版本。
```bash
docker pull docker.io/gitea/act_runner:latest # for the latest stable release
docker pull docker.io/gitea/act_runner:nightly # for the latest nightly build
```
## 配置
## 設定
配置通過配置文件進行。它是可選的,当没有指定配置文件时,将使用默认配置。
設定通過設定文件進行。它是可選的,當沒有指定設定文件時,將使用預設設定。
您可以通過运行以下命令生成配置文件:
您可以透過運行以下命令生成設定文件:
```bash
./act_runner generate-config
```
默认配置是安全的,可以直接使用。
預設設定是安全的,可以直接使用。
```bash
./act_runner generate-config > config.yaml
./act_runner --config config.yaml [command]
```
您亦可以如下使用 docker 建立配置文件:
您亦可以如下使用 docker 建立設定文件:
```bash
docker run --entrypoint="" --rm -it docker.io/gitea/act_runner:latest act_runner generate-config > config.yaml
```
当使用Docker镜像时,可以使用`CONFIG_FILE`环境变量指定配置文件。确保将文件作為卷挂载到容器中:
當使用Docker鏡像時,可以使用`CONFIG_FILE`環境變量指定設定文件。確保將文件作為卷掛載到容器中:
```bash
docker run -v $(pwd)/config.yaml:/config.yaml -e CONFIG_FILE=/config.yaml ...
```
您可能注意到上面的命令都是不完整的,因為現在還不是运行Act Runner的时候。
在运行Act Runner之前,我们需要首先将其注册到您的Gitea实例中。
您可能注意到上面的命令都是不完整的,因為現在還不是運行Act Runner的時候。
在運行Act Runner之前,我們需要首先將其註冊到您的Gitea實例中。
## 注册
## 註冊
在运行Act Runner之前,需要進行注册,因為Runner需要知道从哪里获取Job,並且對於Gitea实例来说,识别Runner也很重要。
在運行Act Runner之前,需要進行註冊,因為Runner需要知道從哪裡獲取Job,並且對於Gitea實例來說,識別Runner也很重要。
### Runner级别
### Runner級別
您可以在不同级别上注册Runner,它可以是:
您可以在不同級別上註冊Runner,它可以是:
- 实例级别:Runner将為实例中的所有存儲库运行Job。
- 組織级别:Runner将為組織中的所有存儲库运行Job。
- 存儲库级别:Runner将為其所属的存儲库运行Job。
- 實例級別:Runner將為實例中的所有儲存庫運行Job。
- 組織級別:Runner將為組織中的所有儲存庫運行Job。
- 儲存庫級別:Runner將為其所屬的儲存庫運行Job。
請注意,即使存儲库具有自己的存儲库级别Runner,它仍然可以使用实例级别或組織级别Runner。未来的版本可能提供更多对此進行更好控制的選项。
請注意,即使儲存庫具有自己的儲存庫級別Runner,它仍然可以使用實例級別或組織級別Runner。未來的版本可能提供更多對此進行更好控制的選項。
### 获取注册令牌
### 獲取註冊令牌
Runner级别决定了从哪里获取注册令牌。
Runner級別決定了從哪裡獲取註冊令牌。
- 实例级别:管理员设置页面,例如 `<your_gitea.com>/admin/actions/runners`。
- 組織级别:組織设置页面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 存儲库级别:存儲库设置页面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
- 實例級別:管理員設定頁面,例如 `<your_gitea.com>/admin/actions/runners`。
- 組織級別:組織設定頁面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 儲存庫級別:儲存庫設定頁面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
如果您無法看到设置页面,請确保您具有正确的权限並且已启用 Actions。
如果您無法看到設定頁面,請確保您具有正確的權限並且已啟用 Actions。
注册令牌的格式是一个随机字符串 `D0gvfu2iHfUjNqCYVljVyRV14fISpJxxxxxxxxxx`。
註冊令牌的格式是一個隨機字符串 `D0gvfu2iHfUjNqCYVljVyRV14fISpJxxxxxxxxxx`。
注册令牌也可以通過 Gitea 的 [命令行](../../administration/command-line.md#actions-generate-runner-token) 获得:
註冊令牌也可以透過 Gitea 的 [命令行](/administration/command-line#actions-generate-runner-token) 獲得:
```
gitea --config /etc/gitea/app.ini actions generate-runner-token
```
使用者也可以使用 `GITEA_RUNNER_REGISTRATION_TOKEN` 或 `GITEA_RUNNER_REGISTRATION_TOKEN_FILE` 环境变量以在 Gitea 启动时设置全局的注册令牌,例如:
使用者也可以使用 `GITEA_RUNNER_REGISTRATION_TOKEN` 或 `GITEA_RUNNER_REGISTRATION_TOKEN_FILE` 環境變量以在 Gitea 啟動時設定全域的註冊令牌,例如:
```
openssl rand -hex 24 > /some-dir/runner-token
@@ -118,48 +118,48 @@ export GITEA_RUNNER_REGISTRATION_TOKEN_FILE=/some-dir/runner-token
./gitea --config ...
```
来自环境变量的令牌在通過 Web 界面或 API 重置(重新建立新令牌)前将一直有效。
來自環境變量的令牌在通過 Web 介面或 API 重置(重新建立新令牌)前將一直有效。
令牌可用于注册多个 Runner,直到使用 Web 界面中的令牌重置链接将其撤销並替换為新令牌。
令牌可用於註冊多個 Runner,直到使用 Web 介面中的令牌重置鏈接將其撤銷並替換為新令牌。
### 注册Runner
### 註冊Runner
可以通過运行以下命令来注册Act Runner:
可以透過運行以下命令來註冊Act Runner:
```bash
./act_runner register
```
或者,您可以使用 `--config` 選项来指定前面部分提到的配置文件。
或者,您可以使用 `--config` 選項來指定前面部分提到的設定文件。
```bash
./act_runner --config config.yaml register
```
您将逐步输入注册信息,包括:
您將逐步輸入註冊資訊,包括:
- Gitea 实例的 URL,例如 `https://gitea.com/` 或 `http://192.168.8.8:3000/`。
- 注册令牌。
- Runner名稱(可選)。如果留空,将使用主机名。
- Runner標籤(可選)。如果留空,将使用默认標籤。
- Gitea 實例的 URL,例如 `https://gitea.com/` 或 `http://192.168.8.8:3000/`。
- 註冊令牌。
- Runner名稱(可選)。如果留空,將使用主機名。
- Runner標籤(可選)。如果留空,將使用預設標籤。
您可能对Runner標籤感到困惑,稍后将对其進行解释。
您可能對Runner標籤感到困惑,稍後將對其進行解釋。
如果您想以非交互方式注册Runner,可以使用參數執行以下操作。
如果您想以非交互方式註冊Runner,可以使用參數執行以下操作。
```bash
./act_runner register --no-interactive --instance <instance_url> --token <registration_token> --name <runner_name> --labels <runner_labels>
```
注册Runner后,您可以在当前目錄中找到一个名為 `.runner` 的新文件。該文件存儲注册信息。
請不要手动编辑該文件。
如果此文件丢失或损坏,可以直接删除它並重新注册。
註冊Runner後,您可以在當前目錄中找到一個名為 `.runner` 的新文件。該文件儲存註冊資訊。
請不要手動編輯該文件。
如果此文件丟失或損壞,可以直接刪除它並重新註冊。
如果您想将注册信息存儲在其他位置,請在配置文件中指定,並不要忘记指定 `--config` 選项。
如果您想將註冊資訊儲存在其他位置,請在設定文件中指定,並不要忘記指定 `--config` 選項。
### 使用Docker注册Runner
### 使用Docker註冊Runner
如果您使用的是Docker镜像,注册行為会略有不同。在这种情况下,注册和运行合並為一步,因此您需要在运行Act Runner时指定注册信息。
如果您使用的是Docker鏡像,註冊行為會略有不同。在這種情況下,註冊和運行合併為一步,因此您需要在運行Act Runner時指定註冊資訊。
```bash
docker run \
@@ -175,12 +175,12 @@ docker run \
-d gitea/act_runner:nightly
```
您可能注意到我们已将`/var/run/docker.sock`挂载到容器中。
这是因為Act Runner将在Docker容器中运行Job,因此它需要与Docker守护進程進行通信。
如前所述,如果要在主机上直接运行Job,可以将其移除。
需要明确的是,这里的 "主机" 实际上指的是当前运行 Act Runner的容器,而不是主机机器本身。
您可能注意到我們已將`/var/run/docker.sock`掛載到容器中。
這是因為Act Runner將在Docker容器中運行Job,因此它需要與Docker守護進程進行通信。
如前所述,如果要在主機上直接運行Job,可以將其移除。
需要明確的是,這裡的 "主機" 實際上指的是當前運行 Act Runner的容器,而不是主機機器本身。
### 使用 Docker compose 运行 Runner
### 使用 Docker compose 運行 Runner
您亦可使用如下的 `docker-compose.yml`:
@@ -201,31 +201,31 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
```
### 当您使用 Docker 镜像启动 Runner,如何配置 Cache
### 當您使用 Docker 鏡像啟動 Runner,如何設定 Cache
如果你不打算在工作流中使用 `actions/cache`,你可以忽略本段。
如果您在使用 `actions/cache` 时没有進行额外的配置,将会返回以下错误信息:
如果您在使用 `actions/cache` 時沒有進行額外的設定,將會返回以下錯誤資訊:
> Failed to restore: getCacheEntry failed: connect ETIMEDOUT IP:PORT
这个错误的原因是 runner 容器和作业容器位于不同的网络中,因此作业容器無法访问 runner 容器。
因此,配置 cache 动作以确保其正常运行是非常重要的。請按照以下步骤操作:
這個錯誤的原因是 runner 容器和作業容器位於不同的網路中,因此作業容器無法訪問 runner 容器。
因此,設定 cache 動作以確保其正常運行是非常重要的。請按照以下步驟操作:
- 1.获取 Runner 容器所在主机的 LAN(本地局域网) IP 地址。
- 2.获取一个 Runner 容器所在主机的空闲端口号。
- 3.在配置文件中如下配置:
- 1.獲取 Runner 容器所在主機的 LAN(本地局域網) IP 地址。
- 2.獲取一個 Runner 容器所在主機的空閒端口號。
- 3.在設定文件中如下設定:
```yaml
cache:
enabled: true
dir: ""
# 使用步骤 1. 获取的 LAN IP
# 使用步驟 1. 獲取的 LAN IP
host: "192.168.8.17"
# 使用步骤 2. 获取的端口号
# 使用步驟 2. 獲取的端口號
port: 8088
```
- 4.启动容器时, 将 Cache 端口映射至主机。
- 4.啟動容器時, 將 Cache 端口映射至主機。
```bash
docker run \
@@ -236,25 +236,25 @@ docker run \
### 標籤
Runner的標籤用于确定Runner可以运行哪些Job以及如何运行它们。
Runner的標籤用於確定Runner可以運行哪些Job以及如何運行它們。
默认標籤為`ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://node:16-bullseye,ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster`。
它们是逗号分隔的列表,每个项目都是一个標籤。
預設標籤為`ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://node:16-bullseye,ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster`。
它們是逗號分隔的列表,每個專案都是一個標籤。
让我们以 `ubuntu-22.04:docker://node:16-bullseye` 為例。
它意味着Runner可以运行带有`runs-on: ubuntu-22.04`的Job,並且該Job将在使用`node:16-bullseye`镜像的Docker容器中运行。
讓我們以 `ubuntu-22.04:docker://node:16-bullseye` 為例。
它意味著Runner可以運行帶有`runs-on: ubuntu-22.04`的Job,並且該Job將在使用`node:16-bullseye`鏡像的Docker容器中運行。
如果默认镜像無法满足您的需求,並且您有足够的硬碟空间可以使用更好、更大的镜像,您可以将其更改為`ubuntu-22.04:docker://<您喜欢的镜像>`。
您可以在[act 镜像](https://github.com/nektos/act/blob/master/IMAGES.md)上找到更多有用的镜像。
如果預設鏡像無法滿足您的需求,並且您有足夠的硬碟空間可以使用更好、更大的鏡像,您可以將其更改為`ubuntu-22.04:docker://<您喜歡的鏡像>`。
您可以在[act 鏡像](https://github.com/nektos/act/blob/master/IMAGES.md)上找到更多有用的鏡像。
如果您想直接在主机上运行Job,您可以将其更改為`ubuntu-22.04:host`或僅`ubuntu-22.04`,`:host`是可選的。
然而,我们建议您使用类似`linux_amd64:host`或`windows:host`的特殊名稱,以避免误用。
如果您想直接在主機上運行Job,您可以將其更改為`ubuntu-22.04:host`或僅`ubuntu-22.04`,`:host`是可選的。
然而,我們建議您使用類似`linux_amd64:host`或`windows:host`的特殊名稱,以避免誤用。
从 Gitea 1.21 开始,您可以通過修改 runner 的配置文件中的 `container.labels` 来更改標籤(如果没有配置文件,請参考 [配置教程](#配置)),通過執行 `./act_runner daemon --config config.yaml` 命令重启 runner 之后,这些新定义的標籤就会生效。
從 Gitea 1.21 開始,您可以透過修改 runner 的設定文件中的 `container.labels` 來更改標籤(如果沒有設定文件,請參考 [設定教學](#設定)),透過執行 `./act_runner daemon --config config.yaml` 命令重啟 runner 之後,這些新定義的標籤就會生效。
## 运行
## 運行
注册完Runner后,您可以通過运行以下命令来运行它:
註冊完Runner後,您可以透過運行以下命令來運行它:
```bash
./act_runner daemon
@@ -262,6 +262,6 @@ Runner的標籤用于确定Runner可以运行哪些Job以及如何运行它们
./act_runner daemon --config config.yaml
```
Runner将从Gitea实例获取Job並自动运行它们。
Runner將從Gitea實例獲取Job並自動運行它們。
由于Act Runner仍处于开发中,建议定期检查最新版本並進行升级。
由於Act Runner仍處於開發中,建議定期檢查最新版本並進行升級。
@@ -4,122 +4,122 @@ slug: "comparison"
sidebar_position: 15
---
# 与GitHub Actions的对比
# 與GitHub Actions的對比
尽管Gitea Actions旨在与GitHub Actions兼容,但它们之间存在一些差异。
儘管Gitea Actions旨在與GitHub Actions相容,但它們之間存在一些差異。
## 额外功能
## 額外功能
### Action URL绝对路径
### Action URL絕對路徑
Gitea Actions支持通過URL绝对路径定义actions,这意味着您可以使用来自任何Git存儲库的Actions。
Gitea Actions支援通過URL絕對路徑定義actions,這意味著您可以使用來自任何Git儲存庫的Actions。
例如,`uses: https://github.com/actions/checkout@v4`或`uses: http://your_gitea.com/owner/repo@branch`。
### 使用Go编写Actions
### 使用Go編寫Actions
Gitea Actions支持使用Go编写Actions。
請参阅[建立Go Actions](https://blog.gitea.com/creating-go-actions/)。
Gitea Actions支援使用Go編寫Actions。
請參閱[建立Go Actions](https://blog.gitea.com/creating-go-actions/)。
### 支持非标准的调度语法 @yearly, @monthly, @weekly, @daily, @hourly
### 支援非標準的調度語法 @yearly, @monthly, @weekly, @daily, @hourly
Github Actions 不支持这些语法,详见: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
Github Actions 不支援這些語法,詳見: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
## 不支持的工作流语法
## 不支援的工作流語法
### `concurrency`
这是用于一次运行一个Job。
請参阅[使用並发](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。
這是用於一次運行一個Job。
請參閱[使用並發](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `run-name`
这是工作流生成的工作流运行的名稱。
請参阅[GitHub Actions 的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#run-name)。
這是工作流生成的工作流運行的名稱。
請參閱[GitHub Actions 的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#run-name)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `permissions`和`jobs.<job_id>.permissions`
請参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#permissions)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#permissions)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `jobs.<job_id>.timeout-minutes`
請参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `jobs.<job_id>.continue-on-error`
請参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### `jobs.<job_id>.environment`
請参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)。
Gitea Actions 目前不支持此功能。
Gitea Actions 目前不支援此功能。
### 复杂的`runs-on`
### 複雜的`runs-on`
請参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
Gitea Actions目前只支持`runs-on: xyz`或`runs-on: [xyz]`。
Gitea Actions目前只支援`runs-on: xyz`或`runs-on: [xyz]`。
### `hashFiles`表达式
### `hashFiles`表達式
請参阅[表达式](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles)。
請參閱[表達式](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles)。
Gitea Actions目前不支持此功能,如果使用它,结果将始终為空字符串。
Gitea Actions目前不支援此功能,如果使用它,結果將始終為空字符串。
作為解决方法,您可以使用[go-hashfiles](https://gitea.com/actions/go-hashfiles)。
作為解決方法,您可以使用[go-hashfiles](https://gitea.com/actions/go-hashfiles)。
## 缺失的功能
### 问题匹配器
### 問題匹配器
问题匹配器是一种掃描Actions输出以查找指定正则表达式模式並在使用者界面中突出显示該信息的方法。
請参阅[问题匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)。
問題匹配器是一種掃描Actions輸出以查找指定正則表達式模式並在使用者介面中突出顯示該資訊的方法。
請參閱[問題匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### 為错误建立注释
### 為錯誤建立註釋
請参阅[為错误建立注释](https://docs.github.com/zh/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)。
請參閱[為錯誤建立註釋](https://docs.github.com/zh/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)。
Gitea Actions目前不支持此功能。
Gitea Actions目前不支援此功能。
### 表达式
### 表達式
對於 [表达式](https://docs.github.com/en/actions/learn-github-actions/expressions), 当前僅 [`always()`](https://docs.github.com/en/actions/learn-github-actions/expressions#always) 被支持。
對於 [表達式](https://docs.github.com/en/actions/learn-github-actions/expressions), 當前僅 [`always()`](https://docs.github.com/en/actions/learn-github-actions/expressions#always) 被支援。
## 缺失的UI功能
### 预处理和后处理步骤
### 預處理和後處理步驟
预处理和后处理步骤在Job日志使用者界面中没有自己的使用者界面。
預處理和後處理步驟在Job日誌使用者介面中沒有自己的使用者介面。
### 服务步骤
### 服務步驟
服务步骤在Job日志使用者界面中没有自己的使用者界面。
服務步驟在Job日誌使用者介面中沒有自己的使用者介面。
## 不一样的行為
## 不一樣的行為
### 下载Actions
### 下載Actions
当 `[actions].DEFAULT_ACTIONS_URL` 保持默认值為 `github` 时,Gitea将会从 https://github.com 下载相对路径的actions。比如:
如果你使用 `uses: actions/checkout@v4`,Gitea将会从 https://github.com/actions/checkout.git 下载这个 actions 项目。
如果你想要从另外一个 Git服务下载actions,你只需要使用绝对URL `uses: https://gitea.com/actions/checkout@v4` 来下载。
當 `[actions].DEFAULT_ACTIONS_URL` 保持預設值為 `github` 時,Gitea將會從 https://github.com 下載相對路徑的actions。比如:
如果你使用 `uses: actions/checkout@v4`,Gitea將會從 https://github.com/actions/checkout.git 下載這個 actions 專案。
如果你想要從另外一個 Git服務下載actions,你只需要使用絕對URL `uses: https://gitea.com/actions/checkout@v4` 來下載。
如果你的 Gitea 实例是部署在一个互联网限制的网络中,也可以使用绝对地址来下载 actions。你也可以将配置项修改為 `[actions].DEFAULT_ACTIONS_URL = self`。这样所有的相对路径的actions引用,将不再会从 github.com 去下载,而会从这个 Gitea 实例自己的存放庫中去下载。例如: `uses: actions/checkout@v4` 将会从 `[server].ROOT_URL`/actions/checkout.git 这个地址去下载 actions。
如果你的 Gitea 實例是部署在一個互聯網限制的網路中,也可以使用絕對地址來下載 actions。你也可以將設定項修改為 `[actions].DEFAULT_ACTIONS_URL = self`。這樣所有的相對路徑的actions引用,將不再會從 github.com 去下載,而會從這個 Gitea 實例自己的存放庫中去下載。例如: `uses: actions/checkout@v4` 將會從 `[server].ROOT_URL`/actions/checkout.git 這個地址去下載 actions。
设置`[actions].DEFAULT_ACTIONS_URL`進行配置。請参阅[配置备忘單](../../administration/config-cheat-sheet.md#actions-actions)。
設定`[actions].DEFAULT_ACTIONS_URL`進行設定。請參閱[設定備忘單](../../administration/config-cheat-sheet.md#actions-actions)。
### 上下文可用性
不检查上下文可用性,因此您可以在更多地方使用env上下文。
請参阅[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。
不檢查上下文可用性,因此您可以在更多地方使用env上下文。
請參閱[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。
@@ -4,121 +4,121 @@ slug: "design"
sidebar_position: 40
---
# Gitea Actions设计
# Gitea Actions設計
Gitea Actions由多个组件组成。本文檔将对它们進行逐个描述。
Gitea Actions由多個元件組成。本文件將對它們進行逐個描述。
## Act
[nektos/act](https://github.com/nektos/act) 项目是一个优秀的工具,允许你在本地运行GitHub Actions。
我们受到了它的启发,並思考它是否可能為Gitea运行Actions。
[nektos/act](https://github.com/nektos/act) 專案是一個優秀的工具,允許你在本地運行GitHub Actions。
我們受到了它的啟發,並思考它是否可能為Gitea運行Actions。
然而,尽管[nektos/act](https://github.com/nektos/act)被设计為一个命令行工具,但我们实际上需要的是一个专為Gitea修改的Go库。
因此,我们在[gitea/act](https://gitea.com/gitea/act)基础上進行了分叉。
然而,儘管[nektos/act](https://github.com/nektos/act)被設計為一個命令行工具,但我們實際上需要的是一個專為Gitea修改的Go庫。
因此,我們在[gitea/act](https://gitea.com/gitea/act)基礎上進行了分叉。
这是一个软分叉,将定期跟進上游。
虽然添加了一些自定义提交,但我们会尽力避免对原始代码進行太多更改。
這是一個軟分叉,將定期跟進上游。
雖然添加了一些自訂提交,但我們會盡力避免對原始程式碼進行太多更改。
分叉的 act 只是Gitea特定用途的桥接或适配器。
還添加了一些额外的提交,例如:
分叉的 act 只是Gitea特定用途的橋接或適配器。
還添加了一些額外的提交,例如:
- 将執行日志输出到日志记录器钩子,以便报告给Gitea
- 禁用 GraphQL URL,因為Gitea不支持它
- 每个Job启动一个新的容器,而不是重复使用,以确保隔离性。
- 將執行日誌輸出到日誌記錄器鉤子,以便報告給Gitea
- 禁用 GraphQL URL,因為Gitea不支援它
- 每個Job啟動一個新的容器,而不是重複使用,以確保隔離性。
这些修改没有理由合並到上游。
如果使用者只想在本地运行可信的Actions,它们是没有意义的。
這些修改沒有理由合併到上游。
如果使用者只想在本地運行可信的Actions,它們是沒有意義的。
然而,将来可能会出現重叠,例如两个项目都需要的必要错误修复或新功能。
在这些情况下,我们将向上游存放庫贡献变更。
然而,將來可能會出現重疊,例如兩個專案都需要的必要錯誤修復或新功能。
在這些情況下,我們將向上遊存放庫貢獻變更。
## act runner
Gitea的Runner被稱為act runner,因為它基于act。
Gitea的Runner被稱為act runner,因為它基於act。
与其他CIRunner一样,我们将其设计為Gitea的外部部分,这意味着它應該在与Gitea不同的服务器上运行。
與其他CIRunner一樣,我們將其設計為Gitea的外部部分,這意味著它應該在與Gitea不同的伺服器上運行。
為了确保Runner连接到正确的Gitea实例,我们需要使用令牌注册它。
此外,Runner通過声明自己的標籤向Gitea报告它可以运行的Job類型。
為了確保Runner連接到正確的Gitea實例,我們需要使用令牌註冊它。
此外,Runner通過聲明自己的標籤向Gitea報告它可以運行的Job類型。
之前,我们提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job将在具有`ubuntu-latest`標籤的Runner上运行。
但是,Runner如何知道要运行 `ubuntu-latest`?答案在于将標籤映射到环境。
这就是為什么在注册過程中添加自定义標籤时,需要输入一些复杂内容,比如`my_custom_label:docker://centos:7`。
这意味着Runner可以接受需要在`my_custom_label`上运行的Job,並通過使用`centos:7`镜像的Docker容器来运行它。
之前,我們提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job將在具有`ubuntu-latest`標籤的Runner上運行。
但是,Runner如何知道要運行 `ubuntu-latest`?答案在於將標籤映射到環境。
這就是為什麼在註冊過程中添加自訂標籤時,需要輸入一些複雜內容,比如`my_custom_label:docker://centos:7`。
這意味著Runner可以接受需要在`my_custom_label`上運行的Job,並通過使用`centos:7`鏡像的Docker容器來運行它。
然而,Docker不是唯一的選择。
act 也支持直接在主机上运行Job。
这是通過像`linux_arm:host`这样的標籤实現的。
这个標籤表示Runner可以接受需要在`linux_arm`上运行的Job,並直接在主机上运行它们。
然而,Docker不是唯一的選擇。
act 也支援直接在主機上運行Job。
這是通過像`linux_arm:host`這樣的標籤實現的。
這個標籤表示Runner可以接受需要在`linux_arm`上運行的Job,並直接在主機上運行它們。
標籤的设计遵循格式`label[:schema[:args]]`。
如果省略了schema,则默认為`host`。
標籤的設計遵循格式`label[:schema[:args]]`。
如果省略了schema,則預設為`host`。
因此,
- `my_custom_label:docker://node:18`:使用`node:18 Docker`镜像运行带有`my_custom_label`標籤的Job。
- `my_custom_label:host`:在主机上直接运行带有`my_custom_label`標籤的Job。
- `my_custom_label`:等同于`my_custom_label:host`。
- `my_custom_label:vm:ubuntu-latest`:(僅為示例,未实現)使用带有`ubuntu-latest` ISO的虚拟机运行带有`my_custom_label`標籤的Job。
- `my_custom_label:docker://node:18`:使用`node:18 Docker`鏡像運行帶有`my_custom_label`標籤的Job。
- `my_custom_label:host`:在主機上直接運行帶有`my_custom_label`標籤的Job。
- `my_custom_label`:等同於`my_custom_label:host`。
- `my_custom_label:vm:ubuntu-latest`:(僅為範例,未實現)使用帶有`ubuntu-latest` ISO的虛擬機運行帶有`my_custom_label`標籤的Job。
## 通信协议
## 通信協議
由于act runner是Gitea的独立部分,我们需要一种协议让Runner与Gitea实例進行通信。
然而,我们不认為让Gitea监听一个新端口是个好主意。
相反,我们希望重用HTTP端口,这意味着我们需要一个与HTTP兼容的协议。
因此,我们選择使用基于HTTP的gRPC。
由於act runner是Gitea的獨立部分,我們需要一種協議讓Runner與Gitea實例進行通信。
然而,我們不認為讓Gitea監聽一個新端口是個好主意。
相反,我們希望重用HTTP端口,這意味著我們需要一個與HTTP相容的協議。
因此,我們選擇使用基於HTTP的gRPC。
我们使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 進行连接。
有关 gRPC 的更多信息,請访问[其官方网站](https://grpc.io/)。
我們使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 進行連接。
有關 gRPC 的更多資訊,請前往[其官方網站](https://grpc.io/)。
## 网络架构
## 網路架構
让我们来看一下整體的网络架构。
这将帮助您解决一些问题,並解释為什么使用回环地址注册Runner是个不好的主意。
讓我們來看一下整體的網路架構。
這將幫助您解決一些問題,並解釋為什麼使用迴環地址註冊Runner是個不好的主意。
![network](/images/usage/actions/network.png)
图片中标记了四个网络连接,並且箭头的方向表示建立连接的方向。
圖片中標記了四個網路連接,並且箭頭的方向表示建立連接的方向。
### 连接 1,act runner到Gitea实例
### 連接 1,act runner到Gitea實例
act runner 必須能够连接到Gitea以接收任务並发送執行结果回来。
act runner 必須能夠連接到Gitea以接收任務並發送執行結果回來。
### 连接 2,Job容器到Gitea实例
### 連接 2,Job容器到Gitea實例
即使Job容器位于同一台机器上,它们的网络命名空间与Runner不同。
举个例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要连接到Gitea来获取代码。
获取代码並不总是运行某些Job所必需的,但在大多数情况下是必需的。
即使Job容器位於同一臺機器上,它們的網路命名空間與Runner不同。
舉個例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要連接到Gitea來獲取程式碼。
獲取程式碼並不總是運行某些Job所必需的,但在大多數情況下是必需的。
如果您使用回环地址注册Runner,当Runner与Gitea在同一台机器上时,Runner可以连接到Gitea。
然而,如果Job容器尝试从本地主机获取代码,它将失败,因為Gitea不在同一个容器中。
如果您使用迴環地址註冊Runner,當Runner與Gitea在同一臺機器上時,Runner可以連接到Gitea。
然而,如果Job容器嘗試從本地主機獲取程式碼,它將失敗,因為Gitea不在同一個容器中。
### 连接 3,act runner到互联网
### 連接 3,act runner到互聯網
当您使用诸如 `actions/checkout@v4` 的一些Actions时,act runner下载的是脚本,而不是Job容器。
默认情况下,它从[github.com](http://github.com/)下载,因此需要访问互联网。如果您设置的是 self,
那么默认将从您的当前Gitea实例下载,那么此步骤不需要连接到互联网。
它還默认从Docker Hub下载一些Docker镜像,这也需要互联网访问。
當您使用諸如 `actions/checkout@v4` 的一些Actions時,act runner下載的是腳本,而不是Job容器。
預設情況下,它從[github.com](http://github.com/)下載,因此需要訪問互聯網。如果您設定的是 self,
那麼預設將從您的當前Gitea實例下載,那麼此步驟不需要連接到互聯網。
它還預設從Docker Hub下載一些Docker鏡像,這也需要互聯網訪問。
然而,互联网访问並不是绝对必需的。
您可以配置您的Gitea实例从您的内部网络设施中获取 Actions 或镜像。
然而,互聯網訪問並不是絕對必需的。
您可以設定您的Gitea實例從您的內部網路設施中獲取 Actions 或鏡像。
实际上,您的Gitea实例可以同时充当 Actions 市场和镜像註冊表。
您可以将GitHub上的Actions存放庫镜像到您的Gitea实例,並将其用作普通Actions。
而 [Gitea 容器註冊表](usage/packages/container.md) 可用作Docker镜像註冊表。
實際上,您的Gitea實例可以同時充當 Actions 市場和鏡像註冊表。
您可以將GitHub上的Actions存放庫鏡像到您的Gitea實例,並將其用作普通Actions。
而 [Gitea 容器註冊表](usage/packages/container.md) 可用作Docker鏡像註冊表。
### 连接 4,Job容器到互联网
### 連接 4,Job容器到互聯網
当使用诸如`actions/setup-go@v5`的Actions时,可能需要从互联网下载资源,以设置Job容器中的Go语言环境。
因此,成功完成这些Actions需要访问互联网。
當使用諸如`actions/setup-go@v5`的Actions時,可能需要從互聯網下載資源,以設定Job容器中的Go語言環境。
因此,成功完成這些Actions需要訪問互聯網。
然而,这也是可選的。
您可以使用自定义的Actions来避免依赖互联网访问,或者可以使用已安裝所有依赖项的打包的Docker镜像来运行Job。
然而,這也是可選的。
您可以使用自訂的Actions來避免依賴互聯網訪問,或者可以使用已安裝所有依賴項的打包的Docker鏡像來運行Job。
## 总结
## 總結
使用Gitea Actions只需要确保Runner能够连接到Gitea实例。
互联网访问是可選的,但如果没有互联网访问,将需要额外的工作。
换句话说:当Runner能够自行查询互联网时,它的工作效果最好,但您不需要将其暴露给互联网(無论是單向還是双向)。
使用Gitea Actions只需要確保Runner能夠連接到Gitea實例。
互聯網訪問是可選的,但如果沒有互聯網訪問,將需要額外的工作。
換句話說:當Runner能夠自行查詢互聯網時,它的工作效果最好,但您不需要將其暴露給互聯網(無論是單向還是雙向)。
如果您在使用Gitea Actions时遇到任何网络问题,希望上面的图片能够帮助您進行故障排除。
如果您在使用Gitea Actions時遇到任何網路問題,希望上面的圖片能夠幫助您進行故障排除。
@@ -4,84 +4,84 @@ slug: "faq"
sidebar_position: 100
---
# Gitea Actions常见问题解答
# Gitea Actions常見問題解答
本页面包含一些关于Gitea Actions的常见问题和答案。
本頁面包含一些關於Gitea Actions的常見問題和答案。
## 是否可以在我的实例中默认禁用新存放庫的Actions?
## 是否可以在我的實例中預設禁用新存放庫的Actions?
是的,当您為实例启用Actions时,您可以選择默认启用actions單元以适用于所有新存放庫。
是的,當您為實例啟用Actions時,您可以選擇預設啟用actions單元以適用於所有新存放庫。
```ini
[repository]
; 去掉 repo.actions 将不会為新存放庫自动启用actions
; 去掉 repo.actions 將不會為新存放庫自動啟用actions
DEFAULT_REPO_UNITS = ...,repo.actions
```
## 在工作流文件中應該使用`${{ github.xyz }}`還是`${{ gitea.xyz }}`?
您可以使用`github.xyz`,Gitea将正常工作。
如前所述,Gitea Actions的设计是与GitHub Actions兼容的。
然而,我们建议在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出現不同類型的密钥(因為您在Gitea上使用此工作流,而不是GitHub)。
不過,这完全是可選的,因為目前这两个選项的效果是相同的。
您可以使用`github.xyz`,Gitea將正常工作。
如前所述,Gitea Actions的設計是與GitHub Actions相容的。
然而,我們建議在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出現不同類型的密鑰(因為您在Gitea上使用此工作流,而不是GitHub)。
不過,這完全是可選的,因為目前這兩個選項的效果是相同的。
## 使用`actions/checkout@v4`等Actions时,Job容器会从何处下载脚本?
## 使用`actions/checkout@v4`等Actions時,Job容器會從何處下載腳本?
GitHub 上有成千上万个 [Actions 脚本](https://github.com/marketplace?type=actions)。
当您编写 `uses: actions/checkout@v4` 时,它默认会从 [github.com/actions/checkout](https://github.com/actions/checkout) 下载脚本。
那如果您想使用一些托管在其它平台上的脚本呢,比如在 gitea.com 上的?
GitHub 上有成千上萬個 [Actions 腳本](https://github.com/marketplace?type=actions)。
當您編寫 `uses: actions/checkout@v4` 時,它預設會從 [github.com/actions/checkout](https://github.com/actions/checkout) 下載腳本。
那如果您想使用一些託管在其它平台上的腳本呢,比如在 gitea.com 上的?
好消息是,您可以指定要从任何位置使用Actions的URL前缀。
这是Gitea Actions中的额外语法。
好消息是,您可以指定要從任何位置使用Actions的URL前綴。
這是Gitea Actions中的額外語法。
例如:
- `uses: https://gitea.com/xxx/xxx@xxx`
- `uses: https://github.com/xxx/xxx@xxx`
- `uses: http://your_gitea_instance.com/xxx@xxx`
注意,`https://`或`http://`前缀是必需的!
注意,`https://`或`http://`前綴是必需的!
这是与 GitHub Actions 的一个区别,GitHub Actions 只允许使用托管在 GitHub 上的 actions 脚本。
但使用者理應拥有权利去灵活决定如何运行 Actions。
這是與 GitHub Actions 的一個區別,GitHub Actions 只允許使用託管在 GitHub 上的 actions 腳本。
但使用者理應擁有權利去靈活決定如何運行 Actions。
另外,如果您希望您的 Runner 默认从您自己的 Gitea 实例下载 Actions,可以通過设置 `[actions].DEFAULT_ACTIONS_URL`進行配置。
参见[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
另外,如果您希望您的 Runner 預設從您自己的 Gitea 實例下載 Actions,可以透過設定 `[actions].DEFAULT_ACTIONS_URL`進行設定。
參見[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
## 如何限制Runner的权限?
## 如何限制Runner的權限?
Runner僅具有连接到您的Gitea实例的权限。
当任何Runner接收到要运行的Job时,它将临时获得与Job关联的存放庫的有限权限。
如果您想為Runner提供更多权限,允许它访问更多私有存放庫或外部系统,您可以向其传递[密钥](usage/actions/secrets.md)。
Runner僅具有連接到您的Gitea實例的權限。
當任何Runner接收到要運行的Job時,它將臨時獲得與Job關聯的存放庫的有限權限。
如果您想為Runner提供更多權限,允許它訪問更多私有存放庫或外部系統,您可以向其傳遞[密鑰](usage/actions/secrets.md)。
對於 Actions 的细粒度权限控制是一项复杂的工作。
在未来,我们将添加更多選项以使Gitea更可配置,例如允许对存放庫進行更多写访问或对同一組織中的所有存放庫進行读访问。
對於 Actions 的細粒度權限控制是一項複雜的工作。
在未來,我們將添加更多選項以使Gitea更可設定,例如允許對存放庫進行更多寫訪問或對同一組織中的所有存放庫進行讀訪問。
## 如何避免被黑客攻擊?
有两种可能的攻擊類型:未知的Runner窃取您的存放庫中的代码或密钥,或恶意脚本控制您的Runner。
有兩種可能的攻擊類型:未知的Runner竊取您的存放庫中的程式碼或密鑰,或惡意腳本控制您的Runner。
避免前者意味着不允许您不认识的人為您的存放庫、組織或实例注册Runner。
避免前者意味著不允許您不認識的人為您的存放庫、組織或實例註冊Runner。
后者要复杂一些。
如果您為公司使用私有的Gitea实例,您可能不需要担心安全问题,因為您信任您的同事,並且可以追究他们的责任。
後者要複雜一些。
如果您為公司使用私有的Gitea實例,您可能不需要擔心安全問題,因為您信任您的同事,並且可以追究他們的責任。
對於公共实例,情况略有不同。
以下是我们在 [gitea.com](http://gitea.com/)上的做法:
對於公共實例,情況略有不同。
以下是我們在 [gitea.com](http://gitea.com/)上的做法:
- 我们僅為 "gitea" 組織注册Runner,因此我们的Runner不会執行来自其他存放庫的Job。
- 我们的Runner始终在隔离容器中运行Job。虽然可以直接在主机上進行这样的操作,但出于安全考虑,我们選择不这样做。
- 對於 fork 的拉取請求,需要获得批准才能运行Actions。参见[#22803](https://github.com/go-gitea/gitea/pull/22803)。
- 如果有人在[gitea.com](http://gitea.com/)為其存放庫或組織注册自己的Runner,我们不会反对,只是不会在我们的組織中使用它。然而,他们應該注意确保該Runner不被他们不认识的其他使用者使用。
- 我們僅為 "gitea" 組織註冊Runner,因此我們的Runner不會執行來自其他存放庫的Job。
- 我們的Runner始終在隔離容器中運行Job。雖然可以直接在主機上進行這樣的操作,但出於安全考慮,我們選擇不這樣做。
- 對於 fork 的拉取請求,需要獲得批准才能運行Actions。參見[#22803](https://github.com/go-gitea/gitea/pull/22803)。
- 如果有人在[gitea.com](http://gitea.com/)為其存放庫或組織註冊自己的Runner,我們不會反對,只是不會在我們的組織中使用它。然而,他們應該注意確保該Runner不被他們不認識的其他使用者使用。
## act runner支持哪些操作系统?
## act runner支援哪些操作系統?
它在Linux、macOS和Windows上运行良好。
虽然理论上支持其他操作系统,但需要進一步测试。
它在Linux、macOS和Windows上運行良好。
雖然理論上支援其他操作系統,但需要進一步測試。
需要注意的一点是,如果選择直接在主机上运行Job而不是在Job容器中运行,操作系统之间的环境差异可能会导致意外的失败。
需要注意的一點是,如果選擇直接在主機上運行Job而不是在Job容器中運行,操作系統之間的環境差異可能會導致意外的失敗。
例如,在大多数情况下,Windows上没有可用的bash,而act尝试默认使用bash运行脚本。
因此,您需要在工作流文件中将默认shell指定為`powershell`,参考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。
例如,在大多數情況下,Windows上沒有可用的bash,而act嘗試預設使用bash運行腳本。
因此,您需要在工作流文件中將預設shell指定為`powershell`,參考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。
```yaml
defaults:
@@ -89,72 +89,72 @@ defaults:
shell: powershell
```
## 為什么選择GitHub Actions?為什么不選择与GitLab CI/CD兼容的工具?
## 為什麼選擇GitHub Actions?為什麼不選擇與GitLab CI/CD相容的工具?
[@lunny](https://gitea.com/lunny)在实現Actions的[问题](https://github.com/go-gitea/gitea/issues/13539)中已经解释過这个问题。
此外,Actions不僅是一个CI/CD 系统,還是一个自动化工具。
[@lunny](https://gitea.com/lunny)在實現Actions的[問題](https://github.com/go-gitea/gitea/issues/13539)中已經解釋過這個問題。
此外,Actions不僅是一個CI/CD 系統,還是一個自動化工具。
在开源世界中,已经有许多[市场上的Actions](https://github.com/marketplace?type=actions)实現了。
能够重用它们是令人兴奋的。
在開源世界中,已經有許多[市場上的Actions](https://github.com/marketplace?type=actions)實現了。
能夠重用它們是令人興奮的。
## 如果它在多个標籤上运行,例如 `runs-on: [label_a, label_b]`,会发生什么?
## 如果它在多個標籤上運行,例如 `runs-on: [label_a, label_b]`,會發生什麼?
这是有效的语法。
它意味着它應該在具有`label_a` **和** `label_b`標籤的Runner上运行,参考[GitHub Actions的工作流语法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
不幸的是,act runner 並不支持这种方式。
如上所述,我们将標籤映射到环境:
這是有效的語法。
它意味著它應該在具有`label_a` **和** `label_b`標籤的Runner上運行,參考[GitHub Actions的工作流語法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。
不幸的是,act runner 並不支援這種方式。
如上所述,我們將標籤映射到環境:
- `ubuntu` → `ubuntu:22.04`
- `centos` → `centos:8`
但我们需要将標籤组映射到环境,例如:
但我們需要將標籤組映射到環境,例如:
- `[ubuntu]` → `ubuntu:22.04`
- `[with-gpu]` → `linux:with-gpu`
- `[ubuntu, with-gpu]` → `ubuntu:22.04_with-gpu`
我们還需要重新设计任务分配给Runner的方式。
我們還需要重新設計任務分配給Runner的方式。
具有`ubuntu`、`centos`或`with-gpu`的Runner並不一定表示它可以接受`[centos, with-gpu]`的Job。
因此,Runner應該通知Gitea实例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。
这不是一个技术问题,只是在早期设计中被忽视了。
参见[runtime.go#L65](https://gitea.com/gitea/act_runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65)。
因此,Runner應該通知Gitea實例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。
這不是一個技術問題,只是在早期設計中被忽視了。
參見[runtime.go#L65](https://gitea.com/gitea/act_runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65)。
目前,act runner尝试匹配標籤中的每一个,並使用找到的第一个匹配项。
目前,act runner嘗試匹配標籤中的每一個,並使用找到的第一個匹配項。
## 代理標籤和自定义標籤對於Runner有什么区别?
## 代理標籤和自訂標籤對於Runner有什麼區別?
![labels](/images/usage/actions/labels.png)
代理標籤是由Runner在注册過程中向Gitea实例报告的。
而自定义標籤则是由Gitea的管理员或組織或存放庫的所有者手动添加的(取决于Runner所属的级别)。
代理標籤是由Runner在註冊過程中向Gitea實例報告的。
而自訂標籤則是由Gitea的管理員或組織或存放庫的所有者手動添加的(取決於Runner所屬的級別)。
然而,目前这方面的设计還有待改進,因為它目前存在一些不完善之处。
您可以向已注册的Runner添加自定义標籤,比如 `centos`,这意味着該Runner将接收具有`runs-on: centos`的Job。
然而,Runner可能不知道要使用哪个环境来執行該標籤,导致它使用默认镜像或导致逻辑死胡同。
这个默认值可能与使用者的期望不符。
参见[runtime.go#L71](https://gitea.com/gitea/act_runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71)。
然而,目前這方面的設計還有待改進,因為它目前存在一些不完善之處。
您可以向已註冊的Runner添加自訂標籤,比如 `centos`,這意味著該Runner將接收具有`runs-on: centos`的Job。
然而,Runner可能不知道要使用哪個環境來執行該標籤,導致它使用預設鏡像或導致邏輯死衚衕。
這個預設值可能與使用者的期望不符。
參見[runtime.go#L71](https://gitea.com/gitea/act_runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71)。
与此同时,如果您想更改Runner的標籤,我们建议您重新注册Runner。
與此同時,如果您想更改Runner的標籤,我們建議您重新註冊Runner。
## Gitea Actions runner会有更多的实現吗?
## Gitea Actions runner會有更多的實現嗎?
虽然我们希望提供更多的選择,但由于我们有限的人力资源,act runner将是唯一受支持的官方Runner。
然而,無论您如何决定,Gitea 和act runner都是完全开源的,所以任何人都可以建立一个新的/更好的实現。
我们支持您的選择,無论您如何决定。
如果您選择分支act runner来建立自己的版本,請在您认為您的更改对其他人也有帮助的情况下贡献这些更改。
雖然我們希望提供更多的選擇,但由於我們有限的人力資源,act runner將是唯一受支援的官方Runner。
然而,無論您如何決定,Gitea 和act runner都是完全開源的,所以任何人都可以建立一個新的/更好的實現。
我們支援您的選擇,無論您如何決定。
如果您選擇分支act runner來建立自己的版本,請在您認為您的更改對其他人也有幫助的情況下貢獻這些更改。
## Gitea 支持哪些工作流触发事件?
## Gitea 支援哪些工作流觸發事件?
表格中列出的所有事件都是支持的,並且与 GitHub 兼容。
對於僅 GitHub 支持的事件,請参阅 GitHub 的[文檔](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows)。
表格中列出的所有事件都是支援的,並且與 GitHub 相容。
對於僅 GitHub 支援的事件,請參閱 GitHub 的[文件](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows)。
| 触发事件 | 活动類型 |
| 觸發事件 | 活動類型 |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------|
| create | 不适用 |
| delete | 不适用 |
| fork | 不适用 |
| gollum | 不适用 |
| push | 不适用 |
| create | 不適用 |
| delete | 不適用 |
| fork | 不適用 |
| gollum | 不適用 |
| push | 不適用 |
| issues | `opened`, `edited`, `closed`, `reopened`, `assigned`, `unassigned`, `milestoned`, `demilestoned`, `labeled`, `unlabeled` |
| issue_comment | `created`, `edited`, `deleted` |
| pull_request | `opened`, `edited`, `closed`, `reopened`, `assigned`, `unassigned`, `synchronize`, `labeled`, `unlabeled` |
@@ -163,5 +163,5 @@ defaults:
| release | `published`, `edited` |
| registry_package | `published` |
> 對於 `pull_request` 事件,在 [GitHub Actions](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 中 `ref` 是 `refs/pull/:prNumber/merge`,它指向这个拉取請求合並提交的一个预览。但是 Gitea 没有这种 reference。
> 因此,Gitea Actions 中 `ref` 是 `refs/pull/:prNumber/head`,它指向这个拉取請求的头分支而不是合並提交的预览。
> 對於 `pull_request` 事件,在 [GitHub Actions](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 中 `ref` 是 `refs/pull/:prNumber/merge`,它指向這個拉取請求合併提交的一個預覽。但是 Gitea 沒有這種 reference。
> 因此,Gitea Actions 中 `ref` 是 `refs/pull/:prNumber/head`,它指向這個拉取請求的頭分支而不是合併提交的預覽。
@@ -6,37 +6,37 @@ sidebar_position: 1
# Overview
从Gitea **1.19**版本开始,Gitea Actions成為了内置的CI/CD解决方案。
從Gitea **1.19**版本開始,Gitea Actions成為了內置的CI/CD解決方案。
## 名稱
Gitea Actions与[GitHub Actions](https://github.com/features/actions)相似且兼容,它的名稱也受到了它的启发。
為了避免混淆,在这里我们明确了拼写方式:
Gitea Actions與[GitHub Actions](https://github.com/features/actions)相似且相容,它的名稱也受到了它的啟發。
為了避免混淆,在這裡我們明確了拼寫方式:
- "Gitea Actions"(两个單詞都大写且带有"s")是Gitea功能的名稱。
- "Gitea Actions"(兩個單詞都大寫且帶有"s")是Gitea功能的名稱。
- "GitHub Actions"是GitHub功能的名稱。
- "Actions"根据上下文的不同可以指代以上任意一个。在本文檔中指代的是"Gitea Actions"。
- "action"或"actions"指代一些要使用的脚本/插件,比如"actions/checkout@v4"或"actions/cache@v3"。
- "Actions"根據上下文的不同可以指代以上任意一個。在本文件中指代的是"Gitea Actions"。
- "action"或"actions"指代一些要使用的腳本/外掛,比如"actions/checkout@v4"或"actions/cache@v3"。
## Runner
和其他CI/CD解决方案一样,Gitea不会自己运行Job,而是将Job委托给Runner。
Gitea Actions的Runner被稱為[act runner](https://gitea.com/gitea/act_runner),它是一个独立的程序,也是用Go语言编写的。
它是基于[nektos/act](http://github.com/nektos/act)的一个[分支](https://gitea.com/gitea/act) 。
和其他CI/CD解決方案一樣,Gitea不會自己運行Job,而是將Job委託給Runner。
Gitea Actions的Runner被稱為[act runner](https://gitea.com/gitea/act_runner),它是一個獨立的程式,也是用Go語言編寫的。
它是基於[nektos/act](http://github.com/nektos/act)的一個[分支](https://gitea.com/gitea/act) 。
由于Runner是独立部署的,可能存在潜在的安全问题。
為了避免这些问题,請遵循两个简單的規則:
由於Runner是獨立部署的,可能存在潛在的安全問題。
為了避免這些問題,請遵循兩個簡單的規則:
- 不要為你的存放庫、組織或实例使用你不信任的Runner。
- 不要為你不信任的存放庫、組織或实例提供Runner。
- 不要為你的存放庫、組織或實例使用你不信任的Runner。
- 不要為你不信任的存放庫、組織或實例提供Runner。
對於内部使用的Gitea实例,比如企业或个人使用的实例,这两个規則不是问题,它们自然而然就是如此。
然而,對於公共的Gitea实例,比如[gitea.com](https://gitea.com),在添加或使用Runner时應当牢记这两个規則。
對於內部使用的Gitea實例,比如企業或個人使用的實例,這兩個規則不是問題,它們自然而然就是如此。
然而,對於公共的Gitea實例,比如[gitea.com](https://gitea.com),在添加或使用Runner時應當牢記這兩個規則。
## 状态
## 狀態
Gitea Actions仍然在开发中,因此可能存在一些错误和缺失的功能。
並且在稳定版本(v1.20或更高版本)之前可能会進行一些重大的更改。
Gitea Actions仍然在開發中,因此可能存在一些錯誤和缺失的功能。
並且在穩定版本(v1.20或更高版本)之前可能會進行一些重大的更改。
如果情况发生变化,我们将在此处進行更新。
因此,請在其他地方找到過时文章时参考此处的内容。
如果情況發生變化,我們將在此處進行更新。
因此,請在其他地方找到過時文章時參考此處的內容。
@@ -4,91 +4,91 @@ slug: "quickstart"
sidebar_position: 10
---
# 快速入门
# 快速入門
本页面将指导您使用Gitea Actions的過程。
本頁面將指導您使用Gitea Actions的過程。
## 设置Gitea
## 設定Gitea
首先,您需要一个Gitea实例。
您可以按照[文檔](installation/from-package.md) 来设置一个新实例或升级現有实例。
無论您如何安裝或运行Gitea,只要版本号是1.19.0或更高即可。
首先,您需要一個Gitea實例。
您可以按照[文件](installation/from-package.md) 來設定一個新實例或升級現有實例。
無論您如何安裝或運行Gitea,只要版本號是1.19.0或更高即可。
从1.21.0开始,默认情况下,Actions是启用的。如果您正在使用1.21.0之前的版本,您需要将以下内容添加到配置文件中以启用它:
從1.21.0開始,預設情況下,Actions是啟用的。如果您正在使用1.21.0之前的版本,您需要將以下內容添加到設定文件中以啟用它:
```ini
[actions]
ENABLED=true
```
如果您想了解更多信息或在配置過程中遇到任何问题,請参考[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
如果您想了解更多資訊或在設定過程中遇到任何問題,請參考[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
### 设置Runner
### 設定Runner
Gitea Actions需要[act runner](https://gitea.com/gitea/act_runner) 来运行Job。
為了避免消耗過多资源並影響Gitea实例,建议您在与Gitea实例分开的机器上启动Runner。
Gitea Actions需要[act runner](https://gitea.com/gitea/act_runner) 來運行Job。
為了避免消耗過多資源並影響Gitea實例,建議您在與Gitea實例分開的機器上啟動Runner。
您可以使用[预构建的二進制文件](http://dl.gitea.com/act_runner)或[容器镜像](https://hub.docker.com/r/gitea/act_runner/tags)来设置Runner。
您可以使用[預構建的二進制文件](http://dl.gitea.com/act_runner)或[容器鏡像](https://hub.docker.com/r/gitea/act_runner/tags)來設定Runner。
在進一步操作之前,建议您先使用预构建的二進制文件以命令行方式运行它,以确保它与您的环境兼容,尤其是如果您在本地主机上运行Runner。
如果出現问题,这样调试起来会更容易。
在進一步操作之前,建議您先使用預構建的二進制文件以命令行方式運行它,以確保它與您的環境相容,尤其是如果您在本地主機上運行Runner。
如果出現問題,這樣調試起來會更容易。
該Runner可以在隔离的Docker容器中运行Job,因此您需要确保已安裝Docker並且Docker守护進程正在运行。
虽然这不是严格必需的,因為Runner也可以直接在主机上运行Job,这取决于您的配置方式。
然而,建议使用Docker运行Job,因為它更安全且更易于管理。
該Runner可以在隔離的Docker容器中運行Job,因此您需要確保已安裝Docker並且Docker守護進程正在運行。
雖然這不是嚴格必需的,因為Runner也可以直接在主機上運行Job,這取決於您的設定方式。
然而,建議使用Docker運行Job,因為它更安全且更易於管理。
在运行Runner之前,您需要使用以下命令将其注册到Gitea实例中:
在運行Runner之前,您需要使用以下命令將其註冊到Gitea實例中:
```bash
./act_runner register --no-interactive --instance <instance> --token <token>
```
需要两个必需的參數:`instance` 和 `token`。
需要兩個必需的參數:`instance` 和 `token`。
`instance`是您的Gitea实例的地址,如`http://192.168.8.8:3000`或`https://gitea.com`。
Runner和Job容器(由Runner启动以執行Job)将连接到此地址。
这意味着它可能与用于Web访问的`ROOT_URL`不同。
使用回环地址(例如 `127.0.0.1` 或 `localhost`)是一个不好的選择。
如果不确定使用哪个地址,通常選择局域网地址即可。
`instance`是您的Gitea實例的地址,如`http://192.168.8.8:3000`或`https://gitea.com`。
Runner和Job容器(由Runner啟動以執行Job)將連接到此地址。
這意味著它可能與用於Web訪問的`ROOT_URL`不同。
使用迴環地址(例如 `127.0.0.1` 或 `localhost`)是一個不好的選擇。
如果不確定使用哪個地址,通常選擇局域網地址即可。
`token` 用于身份驗證和标识,例如 `P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23`。
它只能使用一次,並且不能用于注册多个Runner。
您可以从以下位置获取不同级别的`token`,从而建立出相應级别的`runner`
`token` 用於身份驗證和標識,例如 `P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23`。
它只能使用一次,並且不能用於註冊多個Runner。
您可以從以下位置獲取不同級別的`token`,從而建立出相應級別的`runner`
- 实例级别:管理员设置页面,例如 `<your_gitea.com>/admin/actions/runners`。
- 組織级别:組織设置页面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 存儲库级别:存儲库设置页面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
- 實例級別:管理員設定頁面,例如 `<your_gitea.com>/admin/actions/runners`。
- 組織級別:組織設定頁面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
- 儲存庫級別:儲存庫設定頁面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
![register runner](/images/usage/actions/register-runner.png)
注册后,当前目錄中将出現一个名為 `.runner` 的新文件,該文件存儲了注册信息。
請不要手动编辑該文件。
如果該文件丢失或损坏,只需删除它然后重新注册即可。
註冊後,當前目錄中將出現一個名為 `.runner` 的新文件,該文件儲存了註冊資訊。
請不要手動編輯該文件。
如果該文件丟失或損壞,只需刪除它然後重新註冊即可。
最后,是时候启动Runner了:
最後,是時候啟動Runner了:
```bash
./act_runner daemon
```
您可以在管理页面上看到新的Runner:
您可以在管理頁面上看到新的Runner:
![view runner](/images/usage/actions/view-runner.png)
您可以通過访问[act runner](usage/actions/act-runner.md) 获取更多信息。
您可以透過訪問[act runner](usage/actions/act-runner.md) 獲取更多資訊。
### 使用Actions
即使對於启用了Gitea实例的Actions,存儲库仍默认禁用Actions。
即使對於啟用了Gitea實例的Actions,儲存庫仍預設禁用Actions。
要启用它,請转到存儲库的设置页面,例如`your_gitea.com/<owner>/repo/settings`,然后启用`Enable Repository Actions`。
要啟用它,請轉到儲存庫的設定頁面,例如`your_gitea.com/<owner>/repo/settings`,然後啟用`Enable Repository Actions`。
![enable actions](/images/usage/actions/enable-actions.png)
接下来的步骤可能相当复杂。
您需要学习Actions的[工作流语法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions),並编写您想要的工作流文件。
接下來的步驟可能相當複雜。
您需要學習Actions的[工作流語法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions),並編寫您想要的工作流文件。
不過,我们可以从一个简單的演示开始:
不過,我們可以從一個簡單的演示開始:
```yaml
name: Gitea Actions Demo
@@ -112,20 +112,20 @@ jobs:
- run: echo "🍏 This job's status is ${{ job.status }}."
```
您可以将上述示例上传為一个以`.yaml`扩展名的文件,放在存儲库的`.gitea/workflows/`目錄中,例如`.gitea/workflows/demo.yaml`。
您可能会注意到,这与[GitHub Actions的快速入门](https://docs.github.com/en/actions/quickstart)非常相似。
这是因為Gitea Actions在尽可能兼容GitHub Actions的基础上進行设计。
您可以將上述範例上傳為一個以`.yaml`擴展名的文件,放在儲存庫的`.gitea/workflows/`目錄中,例如`.gitea/workflows/demo.yaml`。
您可能會注意到,這與[GitHub Actions的快速入門](https://docs.github.com/en/actions/quickstart)非常相似。
這是因為Gitea Actions在儘可能相容GitHub Actions的基礎上進行設計。
請注意,演示文件中包含一些表情符号。
請确保您的数据库支持它们,特别是在使用MySQL时。
如果字符集不是`utf8mb4`,将出現错误,例如`Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1`。
有关更多信息,請参阅[数据库准备工作](../../installation/database-preparation.md#mysqlmariadb)。
請注意,演示文件中包含一些表情符號。
請確保您的資料庫支援它們,特別是在使用MySQL時。
如果字符集不是`utf8mb4`,將出現錯誤,例如`Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1`。
有關更多資訊,請參閱[資料庫準備工作](../../installation/database-preparation.md#mysqlmariadb)。
或者,您可以从演示文件中删除所有表情符号,然后再尝试一次。
或者,您可以從演示文件中刪除所有表情符號,然後再嘗試一次。
`on: [push]` 这一行表示当您向該存儲库推送提交时,工作流将被触发。
然而,当您上传 YAML 文件时,它也会推送一个提交,所以您應該在"Actions"標籤中看到一个新的任务。
`on: [push]` 這一行表示當您向該儲存庫推送提交時,工作流將被觸發。
然而,當您上傳 YAML 文件時,它也會推送一個提交,所以您應該在"Actions"標籤中看到一個新的任務。
![view job](/images/usage/actions/view-job.png)
做得好!您已成功开始使用Actions。
做得好!您已成功開始使用Actions。
@@ -4,25 +4,25 @@ slug: "secrets"
sidebar_position: 50
---
# 密钥管理
# 密鑰管理
密钥管理允许您在使用者、組織或存放庫中存儲敏感信息。
密钥管理在 Gitea 1.19+ 版本中可用。
密鑰管理允許您在使用者、組織或存放庫中儲存敏感資訊。
密鑰管理在 Gitea 1.19+ 版本中可用。
## 设置密钥名稱
## 設定密鑰名稱
以下規則适用于密钥名稱:
以下規則適用於密鑰名稱:
- 密钥名稱只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
- 密鑰名稱只能包含字母數字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下劃線 (`_`)。不允許使用空格。
- 密钥名稱不能以 `GITHUB_` 和 `GITEA_` 前缀開頭。
- 密鑰名稱不能以 `GITHUB_` 和 `GITEA_` 前綴開頭。
- 密钥名稱不能以数字開頭。
- 密鑰名稱不能以數字開頭。
- 密钥名稱不区分大小写。
- 密鑰名稱不區分大小寫。
- 密钥名稱在建立它们的级别上必須是唯一的。
- 密鑰名稱在建立它們的級別上必須是唯一的。
例如,對於在存放庫级别建立的密钥,它在該存放庫中必須具有唯一的名稱;對於在組織级别建立的密钥,它在該级别上必須具有唯一的名稱。
例如,對於在存放庫級別建立的密鑰,它在該存放庫中必須具有唯一的名稱;對於在組織級別建立的密鑰,它在該級別上必須具有唯一的名稱。
如果在多个级别上存在具有相同名稱的密钥,则最低级别的密钥优先生效。例如,如果組織级别的密钥与存放庫级别的密钥具有相同的名稱,则存放庫级别的密钥将优先生效。
如果在多個級別上存在具有相同名稱的密鑰,則最低級別的密鑰優先生效。例如,如果組織級別的密鑰與存放庫級別的密鑰具有相同的名稱,則存放庫級別的密鑰將優先生效。
Loaded 50 of 652 files, more files were not shown because too many files have changed in this diff. Show more