$$`
+ - 默认值为:
+ - `argon2`:`argon2$2$65536$8$50`
+ - `bcrypt`:`bcrypt$10`
+ - `pbkdf2`:`pbkdf2$50000$50`
+ - `pbkdf2_v1`:`pbkdf2$10000$50`
+ - `pbkdf2_v2`:`pbkdf2$50000$50`
+ - `pbkdf2_hi`:`pbkdf2$320000$50`
+ - `scrypt`:`scrypt$65536$16$2$50`
+ - 使用此功能调整算法参数存在一定风险。
+- `CSRF_COOKIE_HTTP_ONLY`: **true**: 设置为 false 以允许 JavaScript 读取 CSRF cookie。
+- `MIN_PASSWORD_LENGTH`: **6**: 新用户的最小密码长度。
+- `PASSWORD_COMPLEXITY`: **off**: 要求通过最小复杂性的字符类别的逗号分隔列表。如果留空或没有指定有效值,则禁用检查(off):
+ - lower - 使用一个或多个小写拉丁字符
+ - upper - 使用一个或多个大写拉丁字符
+ - digit - 使用一个或多个数字
+ - spec - 使用一个或多个特殊字符,如 `` !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ``
+ - off - 不检查密码复杂性
+- `PASSWORD_CHECK_PWN`: **false**: 检查密码是否在 [HaveIBeenPwned](https://haveibeenpwned.com/Passwords) 中曝光。
+- `SUCCESSFUL_TOKENS_CACHE_SIZE`: **20**: 缓存成功的令牌哈希。API 令牌在数据库中存储为 pbkdf2 哈希,但这意味着在存在多个 API 操作时可能会有显着的哈希负载。此缓存将在 LRU 缓存中存储成功的哈希令牌,以在性能和安全性之间保持平衡。
+
+## Camo (`camo`)
+
+- `ENABLED`: **false**: 启用媒体代理,目前仅支持图像。
+- `SERVER_URL`: **_empty_**: Camo 服务器的 URL,如果启用 camo,则**必填**。
+- `HMAC_KEY`: **_empty_**: 为 URL 编码提供 HMAC 密钥,如果启用 camo,则**必填**。
+- `ALWAYS`: **false**: 设置为 true 以在 HTTP 和 HTTPS 内容上使用 camo,否则仅代理非 HTTPS URL。`ALLWAYS` 已经过期,并且会在未来版本中删除。
+
+## OpenID (`openid`)
+
+- `ENABLE_OPENID_SIGNIN`: **true**: 允许通过 OpenID 进行身份验证。
+- `ENABLE_OPENID_SIGNUP`: **! DISABLE_REGISTRATION**: 允许通过 OpenID 进行注册。
+- `WHITELISTED_URIS`: **_empty_**: 如果非空,是一组匹配 OpenID URI 的 POSIX 正则表达式模式,用于允许访问。
+- `BLACKLISTED_URIS`: **_empty_**: 如果非空,是一组匹配 OpenID URI 的 POSIX 正则表达式模式,用于阻止访问。
+
+## OAuth2 Client (`oauth2_client`)
+
+- `REGISTER_EMAIL_CONFIRM`: _[service]_ **REGISTER_EMAIL_CONFIRM**: 设置此项以启用或禁用 OAuth2 自动注册的电子邮件确认。(覆盖`[service]`部分的`REGISTER\_EMAIL\_CONFIRM`设置)
+- `OPENID_CONNECT_SCOPES`: **_empty_**: 附加的 OpenID 连接范围的列表。(`openid`已隐式添加)
+- `ENABLE_AUTO_REGISTRATION`: **false**: 为新的 OAuth2 用户自动创建用户帐户。
+- `USERNAME`: **nickname**: 新 OAuth2 帐户的用户名来源:
+ - userid - 使用 userid / sub 属性
+ - nickname - 使用 nickname 属性
+ - email - 使用 email 属性的用户名部分
+- `UPDATE_AVATAR`: **false**: 如果 OAuth2 提供程序中有可用的头像,则进行头像更新。更新将在每次登录时执行。
+- `ACCOUNT_LINKING`: **login**: 如果帐户/电子邮件已存在,如何处理:
+ - disabled - 显示错误
+ - login - 显示帐户链接登录
+ - auto - 自动与帐户链接(请注意,这将因为提供相同的用户名或电子邮件而自动授予现有帐户的访问权限。您必须确保这不会导致身份验证提供程序出现问题。)
+
+## Service (`service`)
+
+- `ACTIVE_CODE_LIVE_MINUTES`: **180**: 确认帐户/电子邮件注册的时间限制(分钟)。
+- `RESET_PASSWD_CODE_LIVE_MINUTES`: **180**: 确认忘记密码重置流程的时间限制(分钟)。
+- `REGISTER_EMAIL_CONFIRM`: **false**: 启用此项以要求通过邮件确认注册。需要启用`Mailer`。
+- `REGISTER_MANUAL_CONFIRM`: **false**: 启用此项以手动确认新的注册。需要禁用`REGISTER_EMAIL_CONFIRM`。
+- `DISABLE_REGISTRATION`: **false**: 禁用注册,之后只有管理员可以为用户创建帐户。
+- `REQUIRE_EXTERNAL_REGISTRATION_PASSWORD`: **false**: 启用此项以强制通过外部方式创建的帐户(通过 GitHub、OpenID Connect 等)创建密码。警告:启用此项将降低安全性,因此只有在您知道自己在做什么时才应启用它。
+- `REQUIRE_SIGNIN_VIEW`: **false**: 启用此项以强制用户登录以查看任何页面或使用 API。
+- `ENABLE_NOTIFY_MAIL`: **false**: 启用此项以在发生某些情况(如创建问题)时向存储库的观察者发送电子邮件。需要启用`Mailer`。
+- `ENABLE_BASIC_AUTHENTICATION`: **true**: 禁用此项以禁止使用 HTTP BASIC 和用户的密码进行身份验证。请注意,如果禁用此项,您将无法使用密码访问令牌 API 端点。此外,这仅会禁用使用密码的 BASIC 身份验证,而不会禁用令牌或 OAuth Basic。
+- `ENABLE_REVERSE_PROXY_AUTHENTICATION`: **false**: 启用此项以允许反向代理身份验证。
+- `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: **false**: 启用此项以允许反向身份验证的自动注册。
+- `ENABLE_REVERSE_PROXY_EMAIL`: **false**: 启用此项以允许使用提供的电子邮件而不是生成的电子邮件进行自动注册。
+- `ENABLE_REVERSE_PROXY_FULL_NAME`: **false**: 启用此项以允许使用提供的全名进行自动注册。
+- `ENABLE_CAPTCHA`: **false**: 启用此项以对注册使用验证码验证。
+- `REQUIRE_CAPTCHA_FOR_LOGIN`: **false**: 启用此项以要求登录使用验证码验证。您还必须启用`ENABLE_CAPTCHA`。
+- `REQUIRE_EXTERNAL_REGISTRATION_CAPTCHA`: **false**: 启用此项以强制对外部帐户(即 GitHub、OpenID Connect 等)使用验证码验证。您还必须启用`ENABLE_CAPTCHA`。
+- `CAPTCHA_TYPE`: **image**: \[image、recaptcha、hcaptcha、mcaptcha、cfturnstile\]
+- `RECAPTCHA_SECRET`: **""**: 访问 https://www.google.com/recaptcha/admin 以获取 recaptcha 的密钥。
+- `RECAPTCHA_SITEKEY`: **""**: 访问 https://www.google.com/recaptcha/admin 以获取 recaptcha 的站点密钥。
+- `RECAPTCHA_URL`: **https://www.google.com/recaptcha/** :设置 recaptcha 网址,允许使用 recaptcha net。
+- `HCAPTCHA_SECRET`: **""**: 注册 https://www.hcaptcha.com/ 以获取 hcaptcha 的密钥。
+- `HCAPTCHA_SITEKEY`: **""**: 注册 https://www.hcaptcha.com/ 以获取 hcaptcha 的站点密钥。
+- `MCAPTCHA_SECRET`: **""**: 访问您的 mCaptcha 实例以获取 mCaptcha 的密钥。
+- `MCAPTCHA_SITEKEY`: **""**: 访问您的 mCaptcha 实例以获取 mCaptcha 的站点密钥。
+- `MCAPTCHA_URL` **https://demo.mcaptcha.org/** :设置 mCaptcha 的 URL。
+- `CF_TURNSTILE_SECRET` **""**: 访问 https://dash.cloudflare.com/?to=/:account/turnstile 以获取 cloudflare turnstile 的密钥。
+- `CF_TURNSTILE_SITEKEY` **""**: 访问 https://dash.cloudflare.com/?to=/:account/turnstile 以获取 cloudflare turnstile 的站点密钥。
+- `DEFAULT_KEEP_EMAIL_PRIVATE`: **false**: 默认情况下,将用户设置为保持其电子邮件地址私有。
+- `DEFAULT_ALLOW_CREATE_ORGANIZATION`: **true**: 默认情况下,允许新用户创建组织。
+- `DEFAULT_USER_IS_RESTRICTED`: **false**: 默认情况下,为新用户分配受限权限。
+- `DEFAULT_ENABLE_DEPENDENCIES`: **true**: 启用此项以默认启用依赖项。
+- `ALLOW_CROSS_REPOSITORY_DEPENDENCIES` : **true** 启用此项以允许从用户被授予访问权限的任何存储库上进行依赖项操作。
+- `USER_LOCATION_MAP_URL`: **""**: 一个显示用户在地图上位置的地图服务 URL。位置将作为转义的查询参数附加到 URL 中。
+- `ENABLE_USER_HEATMAP`: **true**: 启用此项以在用户个人资料上显示热图。
+- `ENABLE_TIMETRACKING`: **true**: 启用时间跟踪功能。
+- `DEFAULT_ENABLE_TIMETRACKING`: **true**: 默认情况下,允许存储库默认使用时间跟踪。
+- `DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME`: **true**: 仅允许具有写权限的用户跟踪时间。
+- `EMAIL_DOMAIN_ALLOWLIST`: **_empty_**: 如果非空,逗号分隔的域名列表,只能用于在此实例上注册,支持通配符。
+- `EMAIL_DOMAIN_BLOCKLIST`: **_empty_**: 如果非空,逗号分隔的域名列表,不能用于在此实例上注册,支持通配符。
+- `SHOW_REGISTRATION_BUTTON`: **! DISABLE_REGISTRATION**: 显示注册按钮
+- `SHOW_MILESTONES_DASHBOARD_PAGE`: **true** 启用此项以显示里程碑仪表板页面 - 查看所有用户的里程碑
+- `AUTO_WATCH_NEW_REPOS`: **true** 启用此项以在创建新存储库时让所有组织用户观看新存储库
+- `AUTO_WATCH_ON_CHANGES`: **false** 启用此项以在首次提交后使用户观看存储库
+- `DEFAULT_USER_VISIBILITY`: **public**: 为用户设置默认的可见性模式,可以是"public"、"limited"或"private"。
+- `ALLOWED_USER_VISIBILITY_MODES`: **public,limited,private**: 设置用户可以具有的可见性模式
+- `DEFAULT_ORG_VISIBILITY`: **public**: 为组织设置默认的可见性模式,可以是"public"、"limited"或"private"。
+- `DEFAULT_ORG_MEMBER_VISIBLE`: **false**: 如果添加到组织时将用户的成员身份可见,设置为 True。
+- `ALLOW_ONLY_INTERNAL_REGISTRATION`: **false**: 设置为 True 以强制仅通过 Gitea 进行注册。
+- `ALLOW_ONLY_EXTERNAL_REGISTRATION`: **false**: 设置为 True 以强制仅使用第三方服务进行注册。
+- `NO_REPLY_ADDRESS`: **noreply.DOMAIN**: 如果用户将 KeepEmailPrivate 设置为 True,则在 Git 日志中的用户电子邮件地址的域部分的值。DOMAIN 解析为 server.DOMAIN 中的值。
+ 用户的电子邮件将被替换为小写的用户名、"@"和 NO_REPLY_ADDRESS 的连接。
+- `USER_DELETE_WITH_COMMENTS_MAX_TIME`: **0**: 用户删除后,评论将保留的最短时间。
+- `VALID_SITE_URL_SCHEMES`: **http, https**: 用户个人资料的有效站点 URL 方案
+
+### Service - Explore (`service.explore`)
+
+- `REQUIRE_SIGNIN_VIEW`: **false**: 仅允许已登录的用户查看探索页面。
+- `DISABLE_USERS_PAGE`: **false**: 禁用用户探索页面。
+- `DISABLE_ORGANIZATIONS_PAGE`: **false**: 禁用组织探索页面。
+- `DISABLE_CODE_PAGE`: **false**: 禁用代码探索页面。
+
+## SSH Minimum Key Sizes (`ssh.minimum_key_sizes`)
+
+定义允许的算法及其最小密钥长度(使用-1 来禁用某个类型):
+
+- `ED25519`:**256**
+- `ECDSA`:**256**
+- `RSA`:**3071**: 我们在这里设置为 2047,因为一个其他方面有效的 3072 RSA 密钥可能被报告为 3071 长度。
+- `DSA`:**-1**: 默认情况下禁用 DSA。设置为**1024**以重新启用,但请注意可能需要重新配置您的 SSHD 提供者
+
+## Webhook (`webhook`)
+
+- `QUEUE_LENGTH`: **1000**: 钩子任务队列长度。编辑此值时要小心。
+- `DELIVER_TIMEOUT`: **5**: 发送 Webhook 的交付超时时间(秒)。
+- `ALLOWED_HOST_LIST`: **external**: 出于安全原因,Webhook 仅能调用允许的主机。以逗号分隔的列表。
+ - 内置网络:
+ - `loopback`:IPv4 的 127.0.0.0/8 和 IPv6 的 ::1/128,包括 localhost。
+ - `private`:RFC 1918(10.0.0.0/8,172.16.0.0/12,192.168.0.0/16)和 RFC 4193(FC00::/7)。也称为 LAN/Intranet。
+ - `external`:一个有效的非私有单播 IP,您可以访问公共互联网上的所有主机。
+ - `*`:允许所有主机。
+ - CIDR 列表:IPv4 的 `1.2.3.0/8` 和 IPv6 的 `2001:db8::/32`
+ - 通配符主机:`*.mydomain.com`,`192.168.100.*`
+- `SKIP_TLS_VERIFY`: **false**: 允许不安全的证书。
+- `PAGING_NUM`: **10**: 一页中显示的 Webhook 历史事件数量。
+- `PROXY_URL`: **_empty_**: 代理服务器 URL,支持 http://、https://、socks://,留空将遵循环境的 http_proxy/https_proxy 设置。如果未提供,将使用全局代理设置。
+- `PROXY_HOSTS`: **_empty_**: 需要代理的主机名的逗号分隔列表。支持通配符模式 (\*);使用 \*\* 来匹配所有主机。如果未提供,将使用全局代理设置。
+
+## 邮件 (`mailer`)
+
+⚠️ 此部分适用于 Gitea 1.18 及更高版本。如果您使用的是 Gitea 1.17 或更早版本,请阅读以下链接获取更多信息:
+[Gitea 1.17 app.ini 示例](https://github.com/go-gitea/gitea/blob/release/v1.17/custom/conf/app.example.ini)
+和
+[Gitea 1.17 配置文档](https://github.com/go-gitea/gitea/blob/release/v1.17/docs/content/doc/advanced/config-cheat-sheet.en-us.md)
+
+- `ENABLED`: **false**: 是否启用邮件服务。
+- `PROTOCOL`: **_empty_**: 邮件服务协议,可选择 "smtp"、"smtps"、"smtp+starttls"、"smtp+unix"、"sendmail"、"dummy"。在 Gitea 1.18 之前,邮件服务协议由 `MAILER_TYPE` 和 `IS_TLS_ENABLED` 两个配置共同决定。
+ - SMTP 类族,如果您的提供者没有明确说明使用的是哪个协议,但提供了一个端口,您可以设置 SMTP_PORT,它将被推断出来。
+ - **sendmail** 使用操作系统的 `sendmail` 命令,而不是 SMTP。这在 Linux 系统上很常见。
+ - **dummy** 将邮件消息发送到日志,作为测试阶段。
+ - 请注意,启用 sendmail 将忽略所有其他 `mailer` 设置,除了 `ENABLED`、`FROM`、`SUBJECT_PREFIX` 和 `SENDMAIL_PATH`。
+ - 启用 dummy 将忽略所有设置,除了 `ENABLED`、`SUBJECT_PREFIX` 和 `FROM`。
+- `SMTP_ADDR`: **_empty_**: 邮件服务器地址,例如 smtp.gmail.com。对于 smtp+unix,这应该是一个到 unix socket 的路径。在 1.18 之前,此设置与 `SMTP_PORT` 合并,名称为 `HOST`。
+- `SMTP_PORT`: **_empty_**: 邮件服务器端口。如果未指定协议,将通过此设置进行推断。常用端口如下。在 1.18 之前,此设置与 `SMTP_ADDR` 合并,名称为 `HOST`。
+ - 25:不安全的简单邮件传输协议(insecure SMTP)
+ - 465:安全的简单邮件传输协议(SMTP Secure)
+ - 587:StartTLS
+- `USE_CLIENT_CERT`: **false**: 使用客户端证书进行 TLS/SSL 加密。
+- `CLIENT_CERT_FILE`: **custom/mailer/cert.pem**: 客户端证书文件。
+- `CLIENT_KEY_FILE`: **custom/mailer/key.pem**: 客户端密钥文件。
+- `FORCE_TRUST_SERVER_CERT`: **false**: 如果设置为 `true`,将完全忽略服务器证书验证错误。此选项不安全。考虑将证书添加到系统信任存储中。
+- `USER`: **_empty_**: 邮件用户的用户名(通常是发件人的电子邮件地址)。
+- `PASSWD`: **_empty_**: 邮件用户的密码。如果密码中使用了特殊字符,请使用 \`your password\` 进行引用。
+ - 请注意:只有在 SMTP 服务器通信通过 TLS 加密(可以通过 `STARTTLS` 实现)或 SMTP 主机是 localhost 时,才支持身份验证。有关更多信息,请参阅 [邮件设置](../administration/email-setup.md)。
+- `ENABLE_HELO`: **true**: 启用 HELO 操作。
+- `HELO_HOSTNAME`: **(从系统检索)**: HELO 主机名。
+- `FROM`: **_empty_**: 邮件的发件人地址,符合 RFC 5322。这可以是一个电子邮件地址,也可以是 "Name" \ 格式。
+- `ENVELOPE_FROM`: **_empty_**: 在 SMTP 邮件信封上设置的地址作为发件地址。设置为 `<>` 以发送一个空地址。
+- `SUBJECT_PREFIX`: **_empty_**: 放置在电子邮件主题行之前的前缀。
+- `SENDMAIL_PATH`: **sendmail**: 操作系统上 `sendmail` 的位置(可以是命令或完整路径)。
+- `SENDMAIL_ARGS`: **_empty_**: 指定任何额外的 sendmail 参数。(注意:您应该知道电子邮件地址可能看起来像选项 - 如果您的 `sendmail` 命令带有选项,您必须设置选项终止符 `--`)
+- `SENDMAIL_TIMEOUT`: **5m**: 通过 sendmail 发送电子邮件的默认超时时间。
+- `SENDMAIL_CONVERT_CRLF`: **true**: 大多数版本的 sendmail 偏好使用 LF 换行符,而不是 CRLF 换行符。如果您的 sendmail 版本需要 CRLF 换行符,请将此设置为 false。
+- `SEND_BUFFER_LEN`: **100**: 邮件队列的缓冲区长度。**已弃用**,请在 `[queue.mailer]` 中使用 `LENGTH`。
+- `SEND_AS_PLAIN_TEXT`: **false**: 仅以纯文本形式发送邮件,不包括 HTML 备选方案。
+
+## 入站邮件 (`email.incoming`)
+
+- `ENABLED`: **false**: 启用处理入站邮件。
+- `REPLY_TO_ADDRESS`: **_empty_**: 包括 `%{token}` 占位符的电子邮件地址,该占位符将根据用户/操作进行替换。示例:`incoming+%{token}@example.com`。占位符必须出现在地址的用户部分(在 `@` 之前)。
+- `HOST`: **_empty_**: IMAP 服务器主机。
+- `PORT`: **_empty_**: IMAP 服务器端口。
+- `USERNAME`: **_empty_**: 接收帐户的用户名。
+- `PASSWORD`: **_empty_**: 接收帐户的密码。
+- `USE_TLS`: **false**: IMAP 服务器是否使用 TLS。
+- `SKIP_TLS_VERIFY`: **false**: 如果设置为 `true`,将完全忽略服务器证书验证错误。此选项不安全。
+- `MAILBOX`: **INBOX**: 入站邮件将到达的邮箱名称。
+- `DELETE_HANDLED_MESSAGE`: **true**: 是否应从邮箱中删除已处理的消息。
+- `MAXIMUM_MESSAGE_SIZE`: **10485760**: 要处理的消息的最大大小。忽略更大的消息。将其设置为 0 以允许每种大小。
+
+## 缓存 (`cache`)
+
+- `ADAPTER`: **memory**: 缓存引擎,可以为 `memory`, `redis`, `redis-cluster`, `twoqueue` 和 `memcache`. (`twoqueue` 代表缓冲区固定的 LRU 缓存)
+- `INTERVAL`: **60**: 垃圾回收间隔(秒),只对`memory`和`towqueue`有效。
+- `HOST`: **_empty_**: 缓存配置。`redis`, `redis-cluster`,`memcache`配置连接字符串;`twoqueue` 设置队列参数
+ - Redis: `redis://:macaron@127.0.0.1:6379/0?pool_size=100&idle_timeout=180s`
+ - Redis-cluster `redis+cluster://:macaron@127.0.0.1:6379/0?pool_size=100&idle_timeout=180s`
+ - Memcache: `127.0.0.1:9090;127.0.0.1:9091`
+ - TwoQueue LRU cache: `{"size":50000,"recent_ratio":0.25,"ghost_ratio":0.5}` 或者 `50000`,代表缓冲区的缓存对象容量
+- `ITEM_TTL`: **16h**: 缓存项目失效时间,设置为 -1 则禁用缓存
+
+### 缓存 - 最后提交缓存设置 (`cache.last_commit`)
+
+- `ITEM_TTL`: **8760h**: 如果未使用,保持缓存中的项目的时间,将其设置为 -1 会禁用缓存。
+- `COMMITS_COUNT`: **1000**: 仅在存储库的提交计数大于时启用缓存。
+
+## 会话 (`session`)
+
+- `PROVIDER`: **memory**: 会话存储引擎 \[memory, file, redis, redis-cluster, db, mysql, couchbase, memcache, postgres\]。设置为 `db` 将会重用 `[database]` 的配置信息。
+- `PROVIDER_CONFIG`: **data/sessions**: 对于文件,为根路径;对于 db,为空(将使用数据库配置);对于其他引擎,为连接字符串。相对路径将根据 _`AppWorkPath`_ 绝对化。
+- `COOKIE_SECURE`: **_empty_**: `true` 或 `false`。启用此选项以强制在所有会话访问中使用 HTTPS。如果没有设置,当 ROOT_URL 是 https 链接的时候默认设置为 true。
+- `COOKIE_NAME`: **i_like_gitea**: 用于会话 ID 的 cookie 名称。
+- `GC_INTERVAL_TIME`: **86400**: GC 间隔时间,以秒为单位。
+- `SESSION_LIFE_TIME`: **86400**: 会话生命周期,以秒为单位,默认为 86400(1 天)。
+- `DOMAIN`: **_empty_**: 设置 cookie 的域。
+- `SAME_SITE`: **lax** \[strict, lax, none\]:为 cookie 设置 SameSite 属性。
+
+## 图像 (`picture`)
+
+- `GRAVATAR_SOURCE`: **gravatar**: 头像来源,可以是 gravatar、duoshuo 或类似 http://cn.gravatar.com/avatar/ 的来源。
+ `http://cn.gravatar.com/avatar/`。
+- `DISABLE_GRAVATAR`: **false**: 启用后,只使用内部头像。**已弃用 [v1.18+]** 该配置已迁移到数据库中保存,通过管理员面板进行配置。
+- `ENABLE_FEDERATED_AVATAR`: **false**: 启用头像联盟支持(参见
+ [http://www.libravatar.org](http://www.libravatar.org))。**已弃用 [v1.18+]** 该配置已迁移到数据库中保存,通过管理员面板进行配置。
+
+- `AVATAR_STORAGE_TYPE`: **default**: 在 `[storage.xxx]` 中定义的存储类型。默认为 `default`,如果没有 `[storage]` 部分,则将读取 `[storage]`,如果没有则将是 `local` 类型。
+- `AVATAR_UPLOAD_PATH`: **data/avatars**: 存储用户头像图像文件的路径。
+- `AVATAR_MAX_WIDTH`: **4096**: 头像的最大宽度,以像素为单位。
+- `AVATAR_MAX_HEIGHT`: **4096**: 头像的最大高度,以像素为单位。
+- `AVATAR_MAX_FILE_SIZE`: **1048576**(1MiB):头像的最大大小。
+- `AVATAR_MAX_ORIGIN_SIZE`: **262144**(256KiB):如果上传的文件不大于此字节大小,则图像将原样使用,无需调整大小/转换。
+- `AVATAR_RENDERED_SIZE_FACTOR`: **2**: 渲染的头像图像的乘法因子。较大的值在 HiDPI 设备上会产生更细腻的渲染。
+
+- `REPOSITORY_AVATAR_STORAGE_TYPE`: **default**: 在 `[storage.xxx]` 中定义的存储类型。默认为 `default`,如果没有 `[storage]` 部分,则将读取 `[storage]`,如果没有则将是 `local` 类型。
+- `REPOSITORY_AVATAR_UPLOAD_PATH`: **data/repo-avatars**: 存储仓库头像图像文件的路径。
+- `REPOSITORY_AVATAR_FALLBACK`: **none**: Gitea 处理缺少仓库头像的方式
+ - none = 不显示任何头像
+ - random = 生成随机头像
+ - image = 使用默认图像(在 `REPOSITORY_AVATAR_FALLBACK_IMAGE` 中设置),如果设置为 image 并且未上传任何图像。
+- `REPOSITORY_AVATAR_FALLBACK_IMAGE`: **/img/repo_default.png**: 作为默认仓库头像的图像(如果将 `REPOSITORY_AVATAR_FALLBACK` 设置为 image 并且没有上传图像)。
+
+## 项目 (`project`)
+
+默认项目看板的模板:
+
+- `PROJECT_BOARD_BASIC_KANBAN_TYPE`: **待办,进行中,已完成**
+- `PROJECT_BOARD_BUG_TRIAGE_TYPE`: **待分析,高优先级,低优先级,已关闭**
+
+## 工单和合并请求的附件 (`attachment`)
+
+- `ENABLED`: **true**: 是否允许用户上传附件。
+- `ALLOWED_TYPES`: **.avif,.cpuprofile,.csv,.dmp,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.json,.jsonc,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.webp,.xls,.xlsx,.zip**: 允许的文件扩展名(`.zip`)、mime 类型(`text/plain`)或通配符类型(`image/*`、`audio/*`、`video/*`)的逗号分隔列表。空值或 `*/*` 允许所有类型。
+- `MAX_SIZE`: **2048**: 附件的最大限制(MB)。
+- `MAX_FILES`: **5**: 一次最多上传的附件数量。
+- `STORAGE_TYPE`: **local**: 附件的存储类型,`local` 表示本地磁盘,`minio` 表示兼容 S3 的对象存储服务,如果未设置将使用默认值 `local` 或其他在 `[storage.xxx]` 中定义的名称。
+- `SERVE_DIRECT`: **false**: 允许存储驱动器重定向到经过身份验证的 URL 以直接提供文件。目前,只支持 Minio/S3 通过签名 URL 提供支持,local 不会执行任何操作。
+- `PATH`: **attachments**: 存储附件的路径,仅当 STORAGE_TYPE 为 `local` 时可用。如果是相对路径,将会被解析为 `{AppDataPath}/{attachment.PATH}`.
+- `MINIO_ENDPOINT`: **localhost:9000**: Minio 端点以连接,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_ACCESS_KEY_ID`: Minio accessKeyID 以连接,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_SECRET_ACCESS_KEY`: Minio secretAccessKey 以连接,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_BUCKET`: **gitea**: Minio 存储附件的存储桶,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_LOCATION`: **us-east-1**: Minio 存储桶的位置以创建,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_BASE_PATH`: **attachments/**: Minio 存储桶上的基本路径,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_USE_SSL`: **false**: Minio 启用 SSL,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_INSECURE_SKIP_VERIFY`: **false**: Minio 跳过 SSL 验证,仅当 STORAGE_TYPE 为 `minio` 时可用。
+- `MINIO_CHECKSUM_ALGORITHM`: **default**: Minio 校验算法:`default`(适用于 MinIO 或 AWS S3)或 `md5`(适用于 Cloudflare 或 Backblaze)
+- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Minio 的 bucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE`为`minio`时可用。
+
+## 日志 (`log`)
+
+- `ROOT_PATH`: **_empty_**: 日志文件的根目录。
+- `MODE`: **console**: 日志模式。对于多个模式,请使用逗号分隔。您可以在每个模式的日志子部分中配置每个模式。 `\[log.writer-mode-name\]`.
+- `LEVEL`: **Info**: 日志级别。可选值:\[Trace, Debug, Info, Warn, Error, Critical, Fatal, None\]
+- `STACKTRACE_LEVEL`: **None**: 记录创建堆栈跟踪的默认日志级别(很少有用,不要设置它)。可选值:\[Trace, Debug, Info, Warn, Error, Critical, Fatal, None\]
+- `ENABLE_SSH_LOG`: **false**: 将 SSH 日志保存到日志文件中。
+- `logger.access.MODE`: **_empty_**: "access" 记录器
+- `logger.router.MODE`: **,**: "router" 记录器,单个逗号表示它将使用上述默认 MODE
+- `logger.xorm.MODE`: **,**: "xorm" 记录器
+
+### 访问日志 (`log`)
+
+- `ACCESS_LOG_TEMPLATE`: **`{{.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`: 请求的开始时间。
+ - `ResponseWriter`: 请求的 responseWriter。
+ - `RequestID`: 与 REQUEST_ID_HEADERS 相匹配的值(默认:如果不匹配则为 `-`)。
+ - 您必须非常小心,确保此模板不会引发错误或 panic,因为此模板在 panic/recovery 脚本之外运行。
+- `REQUEST_ID_HEADERS`: **_empty_**: 您可以在这里配置由逗号分隔的多个值。它将按照配置的顺序进行匹配,最终将在访问日志中打印第一个匹配的值。
+ - 例如:
+ - 在请求头中:X-Request-ID: **test-id-123**
+ - 在 app.ini 中的配置:REQUEST_ID_HEADERS = X-Request-ID
+ - 在日志中打印:127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "**test-id-123**" ...
+
+### 日志子部分 (`log.`)
+
+- `MODE`: **name**: 设置此日志记录器的模式 - 默认为提供的子部分名称。这允许您在不同级别上具有两个不同的文件日志记录器。
+- `LEVEL`: **log.LEVEL**: 设置此日志记录器的日志级别。默认为全局 `[log]` 部分中设置的 `LEVEL`。
+- `STACKTRACE_LEVEL`: **log.STACKTRACE_LEVEL**: 设置记录堆栈跟踪的日志级别。
+- `EXPRESSION`: **""**: 用于匹配函数名称、文件或消息的正则表达式。默认为空。只有匹配表达式的日志消息才会保存在记录器中。
+- `FLAGS`: **stdflags**: 逗号分隔的字符串,表示日志标志。默认为 `stdflags`,表示前缀:`2009/01/23 01:23:23 ...a/b/c/d.go:23:runtime.Caller() [I]: message`。`none` 表示不要在日志行前缀中添加任何内容。有关更多信息,请参见 `modules/log/flags.go`。
+- `PREFIX`: **""**: 该记录器中每个日志行的附加前缀。默认为空。
+- `COLORIZE`: **false**: 是否为日志行添加颜色
+
+### 控制台日志模式 (`log.console` 或 `MODE=console`)
+
+- 对于控制台记录器,如果不在 Windows 上或终端被确定为能够着色,则 `COLORIZE` 默认为 `true`。
+- `STDERR`: **false**: 使用 Stderr 而不是 Stdout。
+
+### 文件日志模式 (`log.file` 或 `MODE=file`)
+
+- `FILE_NAME`: 设置此记录器的文件名。默认为 `gitea.log`(例外:访问日志默认为 `access.log`)。如果是相对路径,将相对于 `ROOT_PATH`。
+- `LOG_ROTATE`: **true**: 旋转日志文件。
+- `MAX_SIZE_SHIFT`: **28**: 单个文件的最大大小移位,28 表示 256Mb。
+- `DAILY_ROTATE`: **true**: 每天旋转日志。
+- `MAX_DAYS`: **7**: 在 n 天后删除日志文件
+- `COMPRESS`: **true**: 默认使用 gzip 压缩旧的日志文件
+- `COMPRESSION_LEVEL`: **-1**: 压缩级别
+
+### 连接日志模式 (`log.conn` 或 `MODE=conn`)
+
+- `RECONNECT_ON_MSG`: **false**: 对每个单独的消息重新连接主机。
+- `RECONNECT`: **false**: 当连接丢失时尝试重新连接。
+- `PROTOCOL`: **tcp**: 设置协议,可以是 "tcp"、"unix" 或 "udp"。
+- `ADDR`: **:7020**: 设置要连接到的地址。
+
+## 定时任务 (`cron`)
+
+- `ENABLED`: **false**: 是否在后台运行定期任务。
+- `RUN_AT_START`: **false**: 在应用程序启动时运行定时任务。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 时,任务成功完成时将进行通知。
+
+- `SCHEDULE` 接受的格式:
+ - 完整的 crontab 语法规范, e.g. `* * * * * ?`
+ - 描述符 e.g. `@midnight`, `@every 1h30m` ...
+ - 更多详见: [cron documentation](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14)
+
+### 基本定时任务 - 默认开启
+
+#### 定时任务 - 删除旧的仓库存档 (`cron.archive_cleanup`)
+
+- `ENABLED`: **true**: 是否启用该定时任务。
+- `RUN_AT_START`: **true**: 设置在服务启动时运行。
+- `SCHEDULE`: **@midnight**: 使用 Cron 语法的定时任务触发配置,例如 `@every 1h`。
+- `OLDER_THAN`: **24h**: 超过`OLDER_THAN`时间的存档将被删除,例如 `12h`。
+
+#### 定时任务 - 更新镜像仓库 (`cron.update_mirrors`)
+
+- `SCHEDULE`: **@every 10m**: 使用 Cron 语法的定时任务触发配置,例如 `@every 3h`。
+- `PULL_LIMIT`: **50**: 将要添加到队列的镜像数量限制为此数字(负值表示无限制,0 将导致不会将镜像加入队列,从而有效地禁用镜像更新)。
+- `PUSH_LIMIT`: **50**: 将要添加到队列的镜像数量限制为此数字(负值表示无限制,0 将导致不会将镜像加入队列,从而有效地禁用镜像更新)。
+
+#### 定时任务 - 健康检查所有仓库 (`cron.repo_health_check`)
+
+- `SCHEDULE`: **@midnight**: Cron 语法,用于安排仓库健康检查。
+- `TIMEOUT`: **60s**: 用于健康检查执行超时的时间持续语法。
+- `ARGS`: **_empty_**: `git fsck` 命令的参数,例如 `--unreachable --tags`。在 http://git-scm.com/docs/git-fsck 上了解更多。
+
+#### 定时任务 - 检查所有仓库统计 (`cron.check_repo_stats`)
+
+- `RUN_AT_START`: **true**: 在启动时运行仓库统计检查。
+- `SCHEDULE`: **@midnight**: Cron 语法,用于安排仓库统计检查。
+
+#### 定时任务 - 清理 hook_task 表 (`cron.cleanup_hook_task_table`)
+
+- `ENABLED`: **true**: 启用清理 hook_task 任务。
+- `RUN_AT_START`: **false**: 在启动时运行清理 hook_task(如果启用)。
+- `SCHEDULE`: **@midnight**: Cron 语法,用于清理 hook_task 表。
+- `CLEANUP_TYPE` **OlderThan** OlderThan 或 PerWebhook 方法来清理 hook_task,可以按年龄(即 hook_task 记录传递多久)或按每个 Webhook 保留的数量(即每个 Webhook 保留最新的 x 个传递)来清理。
+- `OLDER_THAN`: **168h**: 如果 CLEANUP_TYPE 设置为 OlderThan,则早于此表达式的任何传递的 hook_task 记录将被删除。
+- `NUMBER_TO_KEEP`: **10**: 如果 CLEANUP_TYPE 设置为 PerWebhook,则 Webhook 的此数量 hook_task 记录将被保留(即保留最新的 x 个传递)。
+
+#### Cron - 清理过期的包 (`cron.cleanup_packages`)
+
+- `ENABLED`: **true**: 启用清理过期包任务。
+- `RUN_AT_START`: **true**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 每次运行此任务时都会通知。
+- `SCHEDULE`: **@midnight**: Cron 语法,用于任务。
+- `OLDER_THAN`: **24h**: 未引用的包数据创建超过 OLDER_THAN 时间的包将被删除。
+
+#### Cron - 更新迁移海报 ID (`cron.update_migration_poster_id`)
+
+- `SCHEDULE`: **@midnight** : 同步之间的间隔作为持续时间,每次实例启动时都会尝试同步。
+
+#### Cron - 同步外部用户 (`cron.sync_external_users`)
+
+- `SCHEDULE`: **@midnight** : 同步之间的间隔作为持续时间,每次实例启动时都会尝试同步。
+- `UPDATE_EXISTING`: **true**: 创建新用户,更新现有用户数据,并禁用不再在外部源中的用户(默认设置)或仅在 UPDATE_EXISTING 设置为 false 时创建新用户。
+
+### 扩展的定时任务(默认未启用)
+
+#### Cron - 垃圾收集所有仓库 (`cron.git_gc_repos`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`。
+- `TIMEOUT`: **60s**: 用于垃圾收集执行超时的时间持续语法。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `ARGS`: **_empty_**: `git gc` 命令的参数,例如 `--aggressive --auto`。默认值与 [git] -> GC_ARGS 相同。
+
+#### Cron - 使用 Gitea SSH 密钥更新 '.ssh/authorized_keys' 文件 (`cron.resync_all_sshkeys`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`。
+
+#### Cron - 重新同步所有仓库的 pre-receive、update 和 post-receive 钩子 (`cron.resync_all_hooks`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`。
+
+#### Cron - 重新初始化所有缺失的 Git 仓库,但记录已存在 (`cron.reinit_missing_repos`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`。
+
+#### Cron - 删除所有缺少 Git 文件的仓库 (`cron.delete_missing_repos`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`。
+
+#### Cron - 删除生成的仓库头像 (`cron.delete_generated_repository_avatars`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`。
+
+#### Cron - 从数据库中删除所有旧的操作 (`cron.delete_old_actions`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
+- `SCHEDULE`: **@every 168h**: Cron 语法,用于设置多长时间进行检查。
+- `OLDER_THAN`: **8760h**: 早于此表达式的任何操作都将从数据库中删除,建议使用 `8760h`(1 年),因为这是热力图的最大长度。
+
+#### Cron - 从数据库中删除所有旧的系统通知 (`cron.delete_old_system_notices`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `NO_SUCCESS_NOTICE`: **false**: 设置为 true 以关闭成功通知。
+- `SCHEDULE`: **@every 168h**: Cron 语法,用于设置多长时间进行检查。
+- `OLDER_THAN`: **8760h**: 早于此表达式的任何系统通知都将从数据库中删除。
+
+#### Cron - 在仓库中回收 LFS 指针 (`cron.gc_lfs`)
+
+- `ENABLED`: **false**: 启用服务。
+- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
+- `SCHEDULE`: **@every 24h**: Cron 语法,用于设置多长时间进行检查。
+- `OLDER_THAN`: **168h**: 只会尝试回收早于此时间(默认 7 天)的 LFSMetaObject。
+- `LAST_UPDATED_MORE_THAN_AGO`: **72h**: 只会尝试回收超过此时间(默认 3 天)没有尝试过回收的 LFSMetaObject。
+- `NUMBER_TO_CHECK_PER_REPO`: **100**: 每个仓库要检查的过期 LFSMetaObject 的最小数量。设置为 `0` 以始终检查所有。
+
+## Git (`git`)
+
+- `PATH`: **""**: Git 可执行文件的路径。如果为空,Gitea 将在 PATH 环境中搜索。
+- `HOME_PATH`: **`{APP_DATA_PATH}/home`**: Git 的 HOME 目录。
+ 此目录将用于包含 Gitea 的 git 调用将使用的`.gitconfig`和可能的`.gnupg`目录。如果您可以确认 Gitea 是在此环境中唯一运行的应用程序,您可以将其设置为 Gitea 用户的正常主目录。
+- `DISABLE_DIFF_HIGHLIGHT`: **false**: 禁用已添加和已删除更改的高亮显示。
+- `MAX_GIT_DIFF_LINES`: **1000**: 在 diff 视图中允许单个文件的最大行数。
+- `MAX_GIT_DIFF_LINE_CHARACTERS`: **5000**: 在 diff 视图中每行的最大字符数。
+- `MAX_GIT_DIFF_FILES`: **100**: 在 diff 视图中显示的最大文件数。
+- `COMMITS_RANGE_SIZE`: **50**: 设置默认的提交范围大小
+- `BRANCHES_RANGE_SIZE`: **20**: 设置默认的分支范围大小
+- `GC_ARGS`: **_empty_**: 命令`git gc`的参数,例如`--aggressive --auto`。更多信息请参见http://git-scm.com/docs/git-gc/
+- `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: 如果使用 Git 版本 >= 2.18 时使用 Git wire 协议版本 2,默认为 true,当您始终希望使用 Git wire 协议版本 1 时设置为 false。
+ 要在使用 OpenSSH 服务器的情况下为通过 SSH 的 Git 启用此功能,请将`AcceptEnv GIT_PROTOCOL`添加到您的 sshd_config 文件中。
+- `PULL_REQUEST_PUSH_MESSAGE`: **true**: 对于推送到非默认分支的响应,使用 URL 创建拉取请求(如果启用了该存储库的拉取请求)
+- `VERBOSE_PUSH`: **true**: 在处理推送时打印有关推送状态的信息。
+- `VERBOSE_PUSH_DELAY`: **5s**: 仅在推送时间超过此延迟时才打印详细信息。
+- `LARGE_OBJECT_THRESHOLD`: **1048576**: (仅限于 Go-Git),不要在内存中缓存大于此大小的对象。(设置为 0 以禁用。)
+- `DISABLE_CORE_PROTECT_NTFS`: **false** 将`core.protectNTFS`强制设置为 false。
+- `DISABLE_PARTIAL_CLONE`: **false** 禁用使用部分克隆进行 git。
+
+### Git - 超时设置 (`git.timeout`)
+
+- `DEFAULT`: **360**: Git 操作的默认超时时间,单位秒
+- `MIGRATE`: **600**: 在迁移外部存储库时的超时时间,单位秒
+- `MIRROR`: **300**: 在镜像外部存储库时的超时时间,单位秒
+- `CLONE`: **300**: 在存储库之间进行内部克隆的超时时间,单位秒
+- `PULL`: **300**: 在存储库之间进行内部拉取的超时时间,单位秒
+- `GC`: **60**: git 存储库 GC 的超时时间,单位秒
+
+### Git - 配置选项 (`git.config`)
+
+此部分中的键/值对将用作 git 配置。
+此部分仅执行“设置”配置,从此部分中删除的配置键不会自动从 git 配置中删除。格式为`some.configKey = value`。
+
+- `diff.algorithm`: **histogram**
+- `core.logAllRefUpdates`: **true**
+- `gc.reflogExpire`: **90**
+
+## 指标 (`metrics`)
+
+- `ENABLED`: **false**: 启用/prometheus 的 metrics 端点。
+- `ENABLED_ISSUE_BY_LABEL`: **false**: 启用按标签统计问题,格式为`gitea_issues_by_label{label="bug"} 2`。
+- `ENABLED_ISSUE_BY_REPOSITORY`: **false**: 启用按存储库统计问题,格式为`gitea_issues_by_repository{repository="org/repo"} 5`。
+- `TOKEN`: **_empty_**: 如果要在授权中包含指标,则需要指定令牌。相同的令牌需要在 prometheus 参数`bearer_token`或`bearer_token_file`中使用。
+
+## API (`api`)
+
+- `ENABLE_SWAGGER`: **true**: 启用 API 文档接口 (`/api/swagger`, `/api/v1/swagger`, …). True or false。
+- `MAX_RESPONSE_ITEMS`: **50**: API 分页的最大单页项目数。
+- `DEFAULT_PAGING_NUM`: **30**: API 分页的默认分页数。
+- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: Git trees API 的默认单页项目数。
+- `DEFAULT_MAX_BLOB_SIZE`: **10485760** (10MiB): blobs API 的默认最大文件大小。
+
+## OAuth2 (`oauth2`)
+
+- `ENABLED`: **true**: 启用 OAuth2 提供者。
+- `ACCESS_TOKEN_EXPIRATION_TIME`:**3600**: OAuth2 访问令牌的生命周期,以秒为单位。
+- `REFRESH_TOKEN_EXPIRATION_TIME`:**730**: OAuth2 刷新令牌的生命周期,以小时为单位。
+- `INVALIDATE_REFRESH_TOKENS`:**false**: 检查刷新令牌是否已被使用。
+- `JWT_SIGNING_ALGORITHM`:**RS256**: 用于签署 OAuth2 令牌的算法。有效值:[`HS256`,`HS384`,`HS512`,`RS256`,`RS384`,`RS512`,`ES256`,`ES384`,`ES512`]。
+- `JWT_SECRET`:**_empty_**: OAuth2 访问和刷新令牌的身份验证密钥,请将其更改为唯一的字符串。仅当`JWT_SIGNING_ALGORITHM`设置为`HS256`,`HS384`或`HS512`时才需要此设置。
+- `JWT_SECRET_URI`:**_empty_**: 可以使用此配置选项,而不是在配置中定义`JWT_SECRET`,以向 Gitea 提供包含密钥的文件的路径(示例值:`file:/etc/gitea/oauth2_jwt_secret`)。
+- `JWT_SIGNING_PRIVATE_KEY_FILE`:**jwt/private.pem**: 用于签署 OAuth2 令牌的私钥文件路径。路径相对于`APP_DATA_PATH`。仅当`JWT_SIGNING_ALGORITHM`设置为`RS256`,`RS384`,`RS512`,`ES256`,`ES384`或`ES512`时才需要此设置。文件必须包含 PKCS8 格式的 RSA 或 ECDSA 私钥。如果不存在密钥,则将为您创建一个 4096 位密钥。
+- `MAX_TOKEN_LENGTH`:**32767**: 从 OAuth2 提供者接受的令牌/cookie 的最大长度。
+- `DEFAULT_APPLICATIONS`:**git-credential-oauth,git-credential-manager, tea**: 在启动时预注册用于某些服务的 OAuth 应用程序。有关可用选项列表,请参阅[OAuth2 文档](/development/oauth2-provider.md)。
+
+## i18n (`i18n`)
+
+- `LANGS`: **en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN**:
+ 在语言选择器中显示的区域设置列表。如果用户浏览器的语言与列表中的任何区域设置不匹配,则将使用第一个区域设置作为默认值。
+
+- `NAMES`:**English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,Français,Nederlands,Latviešu,Русский,Українська,日本語,Español,Português do Brasil,Português de Portugal,Polski,Български,Italiano,Suomi,Türkçe,Čeština,Српски,Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv,Bahasa Indonesia,മലയാളം**:
+ 对应于各区域设置的可见名称。
+
+## Markup (`markup`)
+
+- `MERMAID_MAX_SOURCE_CHARACTERS`: **5000**: 设置 Mermaid 源的最大大小。(设为-1 代表禁止)
+
+gitea 支持外部渲染工具,你可以配置你熟悉的文档渲染工具. 比如一下将新增一个名字为 asciidoc 的渲染工具。
+
+```ini
+[markup.asciidoc]
+ENABLED = true
+NEED_POSTPROCESS = true
+FILE_EXTENSIONS = .adoc,.asciidoc
+RENDER_COMMAND = "asciidoctor --embedded --safe-mode=secure --out-file=- -"
+IS_INPUT_FILE = false
+```
+
+- ENABLED:**false** 设置是否启动渲染器
+- NEED_POSTPROCESS:**true** 设置为**true**以替换链接/SHA1 等。
+- FILE*EXTENSIONS:\*\*\_empty*\*\* 要由外部命令渲染的文件扩展名列表。多个扩展名需要用逗号分隔。
+- RENDER_COMMAND:用于渲染所有匹配的扩展名的外部命令。
+- IS_INPUT_FILE:**false** 输入不是标准输入,而是一个在`RENDER_COMMAND`之后带有文件参数的文件。
+- RENDER_CONTENT_MODE:**sanitized** 内容将如何呈现。
+ - sanitized:对内容进行清理,并在当前页面内呈现,默认仅允许一些 HTML 标签和属性。可以在`[markup.sanitizer.*]`中定义自定义的清理规则。
+ - no-sanitizer:禁用清理程序,在当前页面内呈现内容。这是**不安全**的,如果内容包含恶意代码,可能会导致 XSS 攻击。
+ - iframe:在单独的独立页面中呈现内容,并通过 iframe 嵌入到当前页面中。iframe 处于禁用同源策略的沙箱模式,并且 JS 代码与父页面安全隔离。
+
+两个特殊的环境变量会传递给渲染命令:
+
+- `GITEA_PREFIX_SRC`,其中包含`src`路径树中的当前 URL 前缀。用作链接的前缀。
+- `GITEA_PREFIX_RAW`,其中包含`raw`路径树中的当前 URL 前缀。用作图像路径的前缀。
+
+如果`RENDER_CONTENT_MODE`为`sanitized`,Gitea 支持自定义用于呈现的 HTML 的清理策略。下面的示例将支持来自 pandoc 的 KaTeX 输出。
+
+```ini
+[markup.sanitizer.TeX]
+; Pandoc renders TeX segments as s with the "math" class, optionally
+; with "inline" or "display" classes depending on context.
+ELEMENT = span
+ALLOW_ATTR = class
+REGEXP = ^\s*((math(\s+|$)|inline(\s+|$)|display(\s+|$)))+
+ALLOW_DATA_URI_IMAGES = true
+```
+
+- `ELEMENT`:此策略适用于的元素。必须非空。
+- `ALLOW_ATTR`:此策略允许的属性。必须非空。
+- `REGEXP`:用于匹配属性内容的正则表达式。必须存在,但可以为空,以无条件允许此属性的白名单。
+- `ALLOW_DATA_URI_IMAGES`:**false** 允许数据 URI 图像(`
`)。
+
+可以通过添加唯一的子节来定义多个清理规则,例如`[markup.sanitizer.TeX-2]`。
+要仅为指定的外部渲染器应用清理规则,它们必须使用渲染器名称,例如`[markup.sanitizer.asciidoc.rule-1]`。
+如果规则在渲染器 ini 节之上定义,或者名称与渲染器不匹配,则应用于每个渲染器。
+
+## 代码高亮映射 (`highlight.mapping`)
+
+- `file_extension 比如 .toml`: **language 比如 ini**。文件扩展名到语言的映射覆盖。
+
+- Gitea 将使用 `.gitattributes` 文件中的 `linguist-language` 或 `gitlab-language` 属性来对文件进行高亮显示,如果可用。
+ 如果未设置此属性或语言不可用,则将查找文件扩展名在此映射中或使用启发式方法来确定文件类型。
+
+## 时间 (`time`)
+
+- `DEFAULT_UI_LOCATION`:在 UI 上的默认时间位置,以便我们可以在 UI 上显示正确的用户时间。例如:Asia/Shanghai
+
+## 迁移 (`migrations`)
+
+- `MAX_ATTEMPTS`:**3**: 每次 http/https 请求的最大尝试次数(用于迁移)。
+- `RETRY_BACKOFF`:**3**: 每次 http/https 请求重试的退避时间(秒)。
+- `ALLOWED_DOMAINS`:**_empty_**: 允许迁移仓库的域名允许列表,默认为空。这意味着允许外部网址。多个域名可以用逗号分隔。支持通配符:`github.com, *.github.com`。
+- `BLOCKED_DOMAINS`:**_empty_**: 阻止迁移仓库的域名阻止列表,默认为空。多个域名可以用逗号分隔。当 `ALLOWED_DOMAINS` 不为空时,此选项优先级较高,用于拒绝域名。支持通配符。
+- `ALLOW_LOCALNETWORKS`:**false**: 允许 RFC 1918、RFC 1122、RFC 4632 和 RFC 4291 中定义的私有地址。如果域名被 `ALLOWED_DOMAINS` 允许,此选项将被忽略。
+- `SKIP_TLS_VERIFY`:**false**: 允许跳过 TLS 验证。
+
+## 联邦(`federation`)
+
+- `ENABLED`:**false**: 启用/禁用联邦功能。
+- `SHARE_USER_STATISTICS`:**true**: 如果启用联邦,则启用/禁用节点信息的用户统计信息。
+- `MAX_SIZE`:**4**: 联邦请求和响应的最大大小(MB)。
+
+警告:更改以下设置可能会破坏联邦功能。
+
+- `ALGORITHMS`:**rsa-sha256, rsa-sha512, ed25519**: HTTP 签名算法。
+- `DIGEST_ALGORITHM`:**SHA-256**: HTTP 签名摘要算法。
+- `GET_HEADERS`:**(request-target), Date**: 用于联邦请求的 GET 头部。
+- `POST_HEADERS`:**(request-target), Date, Digest**: 用于联邦请求的 POST 头部。
+
+## 包(`packages`)
+
+- `ENABLED`:**true**: 启用/禁用包注册表功能。
+- `CHUNKED_UPLOAD_PATH`:**tmp/package-upload**: 分块上传的路径。默认为 `APP_DATA_PATH` + `tmp/package-upload`。
+- `LIMIT_TOTAL_OWNER_COUNT`:**-1**: 单个所有者可以拥有的包版本的最大数量(`-1` 表示无限制)。
+- `LIMIT_TOTAL_OWNER_SIZE`:**-1**: 单个所有者可以使用的包的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_ALPINE`:**-1**: Alpine 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_CARGO`:**-1**: Cargo 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_CHEF`:**-1**: Chef 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_COMPOSER`:**-1**: Composer 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_CONAN`:**-1**: Conan 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_CONDA`:**-1**: Conda 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_CONTAINER`:**-1**: Container 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_CRAN`:**-1**: CRAN 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_DEBIAN`:**-1**: Debian 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_GENERIC`:**-1**: 通用上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_GO`:**-1**: Go 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_HELM`:**-1**: Helm 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_MAVEN`:**-1**: Maven 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_NPM`:**-1**: npm 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_NUGET`:**-1**: NuGet 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_PUB`:**-1**: Pub 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_PYPI`:**-1**: PyPI 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_RPM`:**-1**: RPM 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_RUBYGEMS`:**-1**: RubyGems 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_SWIFT`:**-1**: Swift 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+- `LIMIT_SIZE_VAGRANT`:**-1**: Vagrant 上传的最大大小(`-1` 表示无限制,格式为 `1000`、`1 MB`、`1 GiB`)。
+
+## 镜像(`mirror`)
+
+- `ENABLED`:**true**: 启用镜像功能。设置为 **false** 以禁用所有镜像。预先存在的镜像保持有效,但不会更新;可以转换为常规仓库。
+- `DISABLE_NEW_PULL`:**false**: 禁用创建**新的**拉取镜像。预先存在的镜像保持有效。如果 `mirror.ENABLED` 为 `false`,将被忽略。
+- `DISABLE_NEW_PUSH`:**false**: 禁用创建**新的**推送镜像。预先存在的镜像保持有效。如果 `mirror.ENABLED` 为 `false`,将被忽略。
+- `DEFAULT_INTERVAL`:**8h**: 每次检查之间的默认间隔。
+- `MIN_INTERVAL`:**10m**: 检查的最小间隔。(必须大于 1 分钟)。
+
+## LFS (`lfs`)
+
+用于 lfs 数据的存储配置。当将 `STORAGE_TYPE` 设置为 `xxx` 时,它将从默认的 `[storage]` 或 `[storage.xxx]` 派生。
+当派生时,`PATH` 的默认值是 `data/lfs`,`MINIO_BASE_PATH` 的默认值是 `lfs/`。
+
+- `STORAGE_TYPE`:**local**: lfs 的存储类型,`local` 表示本地磁盘,`minio` 表示 S3 兼容对象存储服务,或者使用 `[storage.xxx]` 中定义的其他名称。
+- `SERVE_DIRECT`:**false**: 允许存储驱动程序重定向到经过身份验证的 URL 以直接提供文件。目前,仅支持通过签名的 URL 提供 Minio/S3,本地不执行任何操作。
+- `PATH`:**./data/lfs**: 存储 LFS 文件的位置,仅在 `STORAGE_TYPE` 为 `local` 时可用。如果未设置,则回退到 `[server]` 部分中已弃用的 `LFS_CONTENT_PATH` 值。
+- `MINIO_ENDPOINT`:**localhost:9000**: 连接的 Minio 终端点,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_ACCESS_KEY_ID`:Minio 的 accessKeyID,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_SECRET_ACCESS_KEY`:Minio 的 secretAccessKey,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_BUCKET`:**gitea**: 用于存储 lfs 的 Minio 桶,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_LOCATION`:**us-east-1**: 创建桶的 Minio 位置,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_BASE_PATH`:**lfs/**: 桶上的 Minio 基本路径,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_USE_SSL`:**false**: Minio 启用 ssl,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_INSECURE_SKIP_VERIFY`:**false**: Minio 跳过 SSL 验证,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Minio 的 bucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE`为`minio`时可用。
+
+## 存储 (`storage`)
+
+默认的附件、lfs、头像、仓库头像、仓库归档、软件包、操作日志、artifacts 的存储配置。推荐仅仅配置此 section 并让其它的 section 从此配置项继承。
+
+- `STORAGE_TYPE`:**local**: 存储类型,`local` 表示本地磁盘,`minio` 表示 S3,`azureblob` 表示 azure 对象存储。
+- `SERVE_DIRECT`:**false**: 允许存储驱动程序重定向到经过身份验证的 URL 以直接提供文件。目前,仅支持通过签名的 URL 提供 Minio/S3,本地不执行任何操作。
+- `MINIO_ENDPOINT`:**localhost:9000**: 连接的 Minio 终端点,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_ACCESS_KEY_ID`:Minio 的 accessKeyID,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_SECRET_ACCESS_KEY`:Minio 的 secretAccessKey,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_BUCKET`:**gitea**: 用于存储数据的 Minio 桶,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_LOCATION`:**us-east-1**: 创建桶的 Minio 位置,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_USE_SSL`:**false**: Minio 启用 ssl,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_INSECURE_SKIP_VERIFY`:**false**: Minio 跳过 SSL 验证,仅在 `STORAGE_TYPE` 为 `minio` 时可用。
+- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Minio 的 bucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE`为`minio`时可用。
+
+- `AZURE_BLOB_ENDPOINT`: **_empty_**: Azure Blob 终端点,仅在 `STORAGE_TYPE` 为 `azureblob` 时可用。例如:https://accountname.blob.core.windows.net 或 http://127.0.0.1:10000/devstoreaccount1
+- `AZURE_BLOB_ACCOUNT_NAME`: **_empty_**: Azure Blob 账号名,仅在 `STORAGE_TYPE` 为 `azureblob` 时可用。
+- `AZURE_BLOB_ACCOUNT_KEY`: **_empty_**: Azure Blob 访问密钥,仅在 `STORAGE_TYPE` 为 `azureblob` 时可用。
+- `AZURE_BLOB_CONTAINER`: **gitea**: 用于存储数据的 Azure Blob 容器名,仅在 `STORAGE_TYPE` 为 `azureblob` 时可用。
+
+建议的 minio 存储配置如下:
+
+```ini
+[storage]
+STORAGE_TYPE = minio
+; Minio endpoint to connect only available when STORAGE_TYPE is `minio`
+MINIO_ENDPOINT = localhost:9000
+; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`
+MINIO_ACCESS_KEY_ID =
+; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio`
+MINIO_SECRET_ACCESS_KEY =
+; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio`
+MINIO_BUCKET = gitea
+; Minio location to create bucket only available when STORAGE_TYPE is `minio`
+MINIO_LOCATION = us-east-1
+; Minio enabled ssl only available when STORAGE_TYPE is `minio`
+MINIO_USE_SSL = false
+; Minio skip SSL verification available when STORAGE_TYPE is `minio`
+MINIO_INSECURE_SKIP_VERIFY = false
+SERVE_DIRECT = true
+; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio`
+MINIO_BUCKET_LOOKUP_TYPE = auto
+```
+
+默认情况下,每个存储都有其默认的基本路径,如下所示:
+
+| storage | default base path |
+| ----------------- | ------------------ |
+| attachments | attachments/ |
+| lfs | lfs/ |
+| avatars | avatars/ |
+| repo-avatars | repo-avatars/ |
+| repo-archive | repo-archive/ |
+| packages | packages/ |
+| actions_log | actions_log/ |
+| actions_artifacts | actions_artifacts/ |
+
+并且桶(bucket)、基本路径或`SERVE_DIRECT`可以是特殊的或被覆盖的,如果您想要使用不同的设置,您可以:
+
+```ini
+[storage.actions_log]
+MINIO_BUCKET = gitea_actions_log
+SERVE_DIRECT = true
+MINIO_BASE_PATH = my_actions_log/ ; default is actions_log/ if blank
+```
+
+如果您想为' lfs '自定义一个不同的存储,如果上面定义了默认存储
+
+```ini
+[lfs]
+STORAGE_TYPE = my_minio
+
+[storage.my_minio]
+STORAGE_TYPE = minio
+; Minio endpoint to connect only available when STORAGE_TYPE is `minio`
+MINIO_ENDPOINT = localhost:9000
+; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`
+MINIO_ACCESS_KEY_ID =
+; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio`
+MINIO_SECRET_ACCESS_KEY =
+; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio`
+MINIO_BUCKET = gitea
+; Minio location to create bucket only available when STORAGE_TYPE is `minio`
+MINIO_LOCATION = us-east-1
+; Minio enabled ssl only available when STORAGE_TYPE is `minio`
+MINIO_USE_SSL = false
+; Minio skip SSL verification available when STORAGE_TYPE is `minio`
+MINIO_INSECURE_SKIP_VERIFY = false
+; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio`
+MINIO_BUCKET_LOOKUP_TYPE = auto
+```
+
+### 存储库归档存储 (`storage.repo-archive`)
+
+存储库归档存储的配置。当将`STORAGE_TYPE`设置为`xxx`时,它将继承默认的 `[storage]` 或 `[storage.xxx]` 配置。`PATH`的默认值是`data/repo-archive`,`MINIO_BASE_PATH`的默认值是`repo-archive/`。
+
+- `STORAGE_TYPE`: **local**: 存储类型,`local`表示本地磁盘,`minio`表示与 S3 兼容的对象存储服务,或者使用定义为`[storage.xxx]`的其他名称。
+- `SERVE_DIRECT`: **false**: 允许存储驱动程序重定向到经过身份验证的 URL 以直接提供文件。目前,只有 Minio/S3 支持通过签名 URL,本地不执行任何操作。
+- `PATH`: **./data/repo-archive**: 用于存储归档文件的位置,仅在`STORAGE_TYPE`为`local`时可用。
+- `MINIO_ENDPOINT`: **localhost:9000**: Minio 端点,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_ACCESS_KEY_ID`: Minio 的 accessKeyID,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_SECRET_ACCESS_KEY`: Minio 的 secretAccessKey,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_BUCKET`: **gitea**: 用于存储归档的 Minio 存储桶,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_LOCATION`: **us-east-1**: 用于创建存储桶的 Minio 位置,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_BASE_PATH`: **repo-archive/**: 存储桶上的 Minio 基本路径,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_USE_SSL`: **false**: 启用 Minio 的 SSL,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_INSECURE_SKIP_VERIFY`: **false**: 跳过 Minio 的 SSL 验证,仅在`STORAGE_TYPE`为`minio`时可用。
+- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Minio 的 bucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE`为`minio`时可用。
+
+### 存储库归档 (`repo-archive`)
+
+- `STORAGE_TYPE`: **local**: 存储类型,用于操作日志,`local`表示本地磁盘,`minio`表示与 S3 兼容的对象存储服务,默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。
+- `MINIO_BASE_PATH`: **repo-archive/**: Minio 存储桶上的基本路径,仅在`STORAGE_TYPE`为`minio`时可用。
+
+## 代理 (`proxy`)
+
+- `PROXY_ENABLED`: **false**: 启用代理,如果为 true,所有通过 HTTP 向外部的请求都将受到影响,如果为 false,即使环境设置了 http_proxy/https_proxy 也不会使用
+- `PROXY_URL`: **_empty_**: 代理服务器地址,支持 http://, https//, socks://,为空则不启用代理而使用环境变量中的 http_proxy/https_proxy
+- `PROXY_HOSTS`: **_empty_**: 逗号分隔的多个需要代理的网址,支持 \* 号匹配符号, \*\* 表示匹配所有网站
+
+i.e.
+
+```ini
+PROXY_ENABLED = true
+PROXY_URL = socks://127.0.0.1:1080
+PROXY_HOSTS = *.github.com
+```
+
+## Actions (`actions`)
+
+- `ENABLED`: **true**: 启用/禁用操作功能
+- `DEFAULT_ACTIONS_URL`: **github**: 获取操作插件的默认平台,`github`表示`https://github.com`,`self`表示当前的 Gitea 实例。
+- `STORAGE_TYPE`: **local**: 用于操作日志的存储类型,`local`表示本地磁盘,`minio`表示与 S3 兼容的对象存储服务,默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。
+- `MINIO_BASE_PATH`: **actions_log/**: Minio 存储桶上的基本路径,仅在`STORAGE_TYPE`为`minio`时可用。
+- `LOG_RETENTION_DAYS`: **365**: 日志保留时间(天)。此期限后将删除旧日志。
+- `LOG_COMPRESSION`: **zstd**: 日志压缩方式,`none`表示不压缩,`zstd`表示 zstd 压缩。
+ 其它的压缩方式如`gzip`是不支持的,因为查看日志需要可寻址流。
+ 如果 CPU 或内存不是瓶颈,建议在使用本地磁盘作为日志存储时总是使用压缩。
+ 对于像 S3 这样的会对请求次数计费的对象存储服务,每次查看日志会导致额外的 2 次获取请求。
+ 但它将节省存储空间和网络带宽,因此仍然建议使用压缩。
+- `ARTIFACT_RETENTION_DAYS`: **90**: 保留 artifacts 的默认天数。可以通过在`actions/upload-artifact`步骤中设置`retention-days`选项来指定 artifacts 的保留期。
+- `ZOMBIE_TASK_TIMEOUT`: **10m**: 僵尸任务超时时间,指具有运行状态但长时间未更新的任务。
+- `ENDLESS_TASK_TIMEOUT`: **3h**: 无尽任务超时时间,指具有运行状态并持续更新,但长时间未结束的任务。
+- `ABANDONED_JOB_TIMEOUT`: **24h**: 被遗弃的作业超时时间,指具有等待状态但长时间未被 runner 选中并执行的作业。
+- `SKIP_WORKFLOW_STRINGS`: **[skip ci],[ci skip],[no ci],[skip actions],[actions skip]**: 提交者可以在提交消息或 PR 标题中放置的字符串,以跳过执行相应的工作流。
+
+`DEFAULT_ACTIONS_URL` 指示 Gitea 操作运行程序应该在哪里找到带有相对路径的操作。
+例如,`uses: actions/checkout@v4` 表示 `https://github.com/actions/checkout@v4`,因为 `DEFAULT_ACTIONS_URL` 的值为 `github`。
+它可以更改为 `self`,以使其成为 `root_url_of_your_gitea/actions/checkout@v4`。
+
+请注意,对于大多数情况,不建议使用 `self`,因为它可能使名称在全局范围内产生歧义。
+此外,它要求您将所有所需的操作镜像到您的 Gitea 实例,这可能不值得。
+因此,请仅在您了解自己在做什么的情况下使用 `self`。
+
+在早期版本(`<= 1.19`)中,`DEFAULT_ACTIONS_URL` 可以设置为任何自定义 URL,例如 `https://gitea.com` 或 `http://your-git-server,https://gitea.com`,默认值为 `https://gitea.com`。
+然而,后来的更新删除了这些选项,现在唯一的选项是 `github` 和 `self`,默认值为 `github`。
+但是,如果您想要使用其他 Git 服务器中的操作,您可以在 `uses` 字段中使用完整的 URL,Gitea 支持此功能(GitHub 不支持)。
+例如 `uses: https://gitea.com/actions/checkout@v4` 或 `uses: http://your-git-server/actions/checkout@v4`。
+
+## 其他 (`other`)
+
+- `SHOW_FOOTER_VERSION`: **true**: 在页面底部显示 Gitea 的版本。
+- `SHOW_FOOTER_TEMPLATE_LOAD_TIME`: **true**: 在页脚显示模板执行的时间。
+- `SHOW_FOOTER_POWERED_BY`: **true**: 在页脚显示“由...提供动力”的文本。
+- `ENABLE_SITEMAP`: **true**: 生成 sitemap.
+- `ENABLE_FEED`: **true**: 是否启用 RSS/Atom
diff --git a/docs/document/administration/customizing-gitea.md b/docs/document/administration/customizing-gitea.md
new file mode 100644
index 0000000..ed09004
--- /dev/null
+++ b/docs/document/administration/customizing-gitea.md
@@ -0,0 +1,83 @@
+---
+date: "2017-04-15T14:56:00+02:00"
+slug: "customizing-gitea"
+sidebar_position: 100
+
+aliases:
+ - /zh-cn/customizing-gitea
+---
+
+# 自定义 Gitea 配置
+
+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)
+
+如果您在 binary 同目录下无法找到 `custom` 文件夹,请检查您的 `GITEA_CUSTOM`
+环境变量配置, 因为它可能被配置到了其他地方(可能被一些启动脚本设置指定了目录)。
+
+- [环境变量清单](../administration/environment-variables.md)
+
+**注:** 必须完全重启 Gitea 以使配置生效。
+
+## 使用自定义 /robots.txt
+
+将 [想要展示的内容](http://www.robotstxt.org/) 存放在 `custom` 目录中的
+`robots.txt` 文件来让 Gitea 使用自定义的`/robots.txt` (默认:空 404)。
+
+## 使用自定义的公共文件
+
+将自定义的公共文件(比如页面和图片)作为 webroot 放在 `custom/public/` 中来让 Gitea 提供这些自定义内容(符号链接将被追踪)。
+
+举例说明:`image.png` 存放在 `custom/public/assets/`中,那么它可以通过链接 http://gitea.domain.tld/assets/image.png 访问。
+
+## 修改默认头像
+
+替换以下目录中的 png 图片: `custom/public/assets/img/avatar\_default.png`
+
+## 自定义 Gitea 页面
+
+您可以改变 Gitea `custom/templates` 的每个单页面。您可以在 Gitea 源码的 `templates` 目录中找到用于覆盖的模板文件,应用将根据
+`custom/templates` 目录下的路径结构进行匹配和覆盖。
+
+包含在 `{{` 和 `}}` 中的任何语句都是 Gitea 的模板语法,如果您不完全理解这些组件,不建议您对它们进行修改。
+
+### 添加链接和页签
+
+如果您只是想添加额外的链接到顶部导航栏或额外的选项卡到存储库视图,您可以将它们放在您 `custom/templates/custom/` 目录下的 `extra_links.tmpl` 和 `extra_tabs.tmpl` 文件中。
+
+举例说明:假设您需要在网站放置一个静态的“关于”页面,您只需将该页面放在您的
+"custom/public/"目录下(比如 `custom/public/impressum.html`)并且将它与 `custom/templates/custom/extra_links.tmpl` 链接起来即可。
+
+这个链接应当使用一个名为“item”的 class 来匹配当前样式,您可以使用 `{{AppSubUrl}}` 来获取 base URL:
+`Impressum`
+
+同理,您可以将页签添加到 `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`,在 `` 标记结束之前的模板,例如添加自定义 CSS 文件
+- `body_outer_pre.tmpl`,在 `` 标记开始处的模板
+- `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 ``
+- `body_inner_post.tmpl`,在主 container 结束处的模板
+- `body_outer_post.tmpl`,在底部 `