mirror of
https://gitea.com/gitea/docs.git
synced 2026-06-13 13:41:27 +00:00
Compare commits
55 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5eac4f23d | ||
|
|
f954c6e7b8 | ||
|
|
cf9b8dce28 | ||
|
|
12293b604e | ||
|
|
bb7b7fe5bf | ||
|
|
b6af199508 | ||
|
|
dedfbf1f27 | ||
|
|
f9ff323873 | ||
|
|
1046625638 | ||
|
|
200479a1a3 | ||
|
|
bd38456e4b | ||
|
|
3578007c38 | ||
|
|
c586a396b8 | ||
|
|
de6d4374b0 | ||
|
|
c9bf137a23 | ||
|
|
83da675c59 | ||
|
|
135f34d09a | ||
|
|
3eda094305 | ||
|
|
312cbc2a6e | ||
|
|
4164f4df06 | ||
|
|
cb462089e9 | ||
|
|
908a27589d | ||
|
|
6b64b97e3b | ||
|
|
90ab1c20c2 | ||
|
|
d61eaecbb1 | ||
|
|
b30993162c | ||
|
|
004bebe6b4 | ||
|
|
ed59125e25 | ||
|
|
c699d12a55 | ||
|
|
4d5fd1f6fb | ||
|
|
c13d82ccc3 | ||
|
|
0552f4523c | ||
|
|
03c98878cf | ||
|
|
cf33eee47f | ||
|
|
201f0f3ef8 | ||
|
|
e8a6c4281d | ||
|
|
641977c93a | ||
|
|
fbd73fd263 | ||
|
|
a6fc8044b0 | ||
|
|
fa11851d67 | ||
|
|
f9ff184ee3 | ||
|
|
cbbf31f1d5 | ||
|
|
47594bba97 | ||
|
|
63c75a97c6 | ||
|
|
50aad0431b | ||
|
|
164f1c837f | ||
|
|
870f30e886 | ||
|
|
33ec7a49df | ||
|
|
bc606bd422 | ||
|
|
3a82ab51f3 | ||
|
|
c8ebd4e896 | ||
|
|
a320f53087 | ||
|
|
95544e7847 | ||
|
|
af373024a0 | ||
|
|
57ed041528 |
@@ -10,8 +10,8 @@ jobs:
|
||||
build-docs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
run: |
|
||||
make build
|
||||
- name: aws credential configure
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@v5
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
|
||||
@@ -7,8 +7,8 @@ jobs:
|
||||
build-docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
|
||||
@@ -9,14 +9,14 @@ jobs:
|
||||
update-swagger:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- run: |
|
||||
wget https://raw.githubusercontent.com/go-gitea/gitea/refs/heads/main/templates/swagger/v1_json.tmpl
|
||||
sed -i "$@" 's\"version": "{{AppVer | JSEscape}}"\"version": "dev"\' v1_json.tmpl
|
||||
sed -i "$@" 's\"basePath": "{{AppSubUrl | JSEscape}}/api/v1"\"basePath": "https://gitea.com/api/v1"\' v1_json.tmpl
|
||||
mv v1_json.tmpl static/swagger-latest.json
|
||||
|
||||
for ver in '1.24.0-rc0' '1.23.8' '1.22.6' '1.21.11' '1.20.6' '1.19.4'; do
|
||||
for ver in '1.24.7' '1.23.8' '1.22.6' '1.21.11' '1.20.6' '1.19.4'; do
|
||||
wget https://raw.githubusercontent.com/go-gitea/gitea/refs/tags/v${ver}/templates/swagger/v1_json.tmpl
|
||||
sed -i "$@" "s|\"version\": \"{{AppVer \| JSEscape}}\"|\"version\": \"${ver}\"|" v1_json.tmpl
|
||||
sed -i "$@" 's\"basePath": "{{AppSubUrl | JSEscape}}/api/v1"\"basePath": "https://gitea.com/api/v1"\' v1_json.tmpl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
date: "2016-12-26T16:00:00+02:00"
|
||||
date: "2025-10-26T00:00:00+00:00"
|
||||
slug: "config-cheat-sheet"
|
||||
sidebar_position: 30
|
||||
aliases:
|
||||
@@ -99,7 +99,7 @@ In addition, there is _`StaticRootPath`_ which can be set as a built-in at build
|
||||
default is not to present.
|
||||
|
||||
:::warning
|
||||
This maybe harmful to you website if you do not give it a right value.
|
||||
This maybe harmful to your website if you do not give it a right value.
|
||||
:::
|
||||
|
||||
- `DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH`: **false**: Close an issue if a commit on a non default branch marks it as closed.
|
||||
@@ -234,6 +234,7 @@ The following configuration set `Content-Type: application/vnd.android.package-a
|
||||
- `CUSTOM_EMOJIS`: **gitea, codeberg, gitlab, git, github, gogs**: Additional Emojis not defined in the utf8 standard.
|
||||
By default, we support Gitea (:gitea:), to add more copy them to public/assets/img/emoji/emoji_name.png and
|
||||
add it to this config.
|
||||
- `ENABLED_EMOJIS`: **_empty_**: Comma separated list of enabled emojis, for example: "smile, thumbsup, thumbsdown". Leave it empty to enable all emojis.
|
||||
- `DEFAULT_SHOW_FULL_NAME`: **false**: Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used.
|
||||
- `SEARCH_REPO_DESCRIPTION`: **true**: Whether to search within description at repository search on explore page.
|
||||
- `ONLY_SHOW_RELEVANT_REPOS`: **false**: Whether to only show relevant repos on the explore page when no keyword is specified and default sorting is used.
|
||||
@@ -626,6 +627,7 @@ And the following unique queues:
|
||||
- `PASSWORD_CHECK_PWN`: **false**: Check [HaveIBeenPwned](https://haveibeenpwned.com/Passwords) to see if a password has been exposed.
|
||||
- `SUCCESSFUL_TOKENS_CACHE_SIZE`: **20**: Cache successful token hashes. API tokens are stored in the DB as pbkdf2 hashes however, this means that there is a potentially significant hashing load when there are multiple API operations. This cache will store the successfully hashed tokens in a LRU cache as a balance between performance and security.
|
||||
- `DISABLE_QUERY_AUTH_TOKEN`: **false**: Reject API tokens sent in URL query string (Accept Header-based API tokens only). This setting will default to `true` in Gitea 1.23 and be deprecated in Gitea 1.24.
|
||||
- `TWO_FACTOR_AUTH`: **_empty_**: set to enforced to enforce two factor authentication. Only available in Gitea 1.24 and later.
|
||||
|
||||
## Camo (`camo`)
|
||||
|
||||
@@ -1258,6 +1260,8 @@ This section only does "set" config, a removed config key from this section won'
|
||||
|
||||
- `MERMAID_MAX_SOURCE_CHARACTERS`: **50000**: Set the maximum size of a Mermaid source. (Set to -1 to disable)
|
||||
|
||||
## Markup External Render (`markup.external-render-name`)
|
||||
|
||||
Gitea can support Markup using external tools. The example below will add a markup named `asciidoc`.
|
||||
|
||||
```ini
|
||||
@@ -1270,7 +1274,6 @@ IS_INPUT_FILE = false
|
||||
```
|
||||
|
||||
- ENABLED: **false** Enable markup support; set to **true** to enable this renderer.
|
||||
- NEED\_POSTPROCESS: **true** set to **true** to replace links / sha1 and etc.
|
||||
- FILE\_EXTENSIONS: **_empty_** List of file extensions that should be rendered by an external
|
||||
command. Multiple extensions needs a comma as splitter.
|
||||
- RENDER\_COMMAND: External command to render all matching extensions.
|
||||
@@ -1279,6 +1282,10 @@ IS_INPUT_FILE = false
|
||||
- sanitized: Sanitize the content and render it inside current page, default to only allow a few HTML tags and attributes. Customized sanitizer rules can be defined in `[markup.sanitizer.*]`.
|
||||
- no-sanitizer: Disable the sanitizer and render the content inside current page. It's **insecure** and may lead to XSS attack if the content contains malicious code.
|
||||
- iframe: Render the content in a separate standalone page and embed it into current page by iframe. The iframe is in sandbox mode with same-origin disabled, and the JS code are safely isolated from parent page.
|
||||
- RENDER_CONTENT_SANDBOX: **_empty_** The sandbox applied to the iframe and Content-Security-Policy header when RENDER_CONTENT_MODE is `iframe`. It defaults to a safe set of "allow-*" restrictions (space separated). You can also set it by your requirements or use "disabled" to disable the sandbox completely. When set it, make sure there is no security risk:
|
||||
- PDF-only content: generally safe to use "disabled", and it needs to be "disabled" because PDF only renders with no sandbox.
|
||||
- HTML content with JS: if the "RENDER_COMMAND" can guarantee there is no XSS, then it is safe, otherwise, you need to fine tune the "allow-*" restrictions.
|
||||
- NEED_POST_PROCESS: **false** Whether post-process the rendered HTML content, including: resolve relative links and image sources, recognizing issue/commit references, escaping invisible characters, mentioning users, rendering permlink code blocks, replacing emoji shorthands, etc. By default, this is true when RENDER_CONTENT_MODE is `sanitized`, otherwise false.
|
||||
|
||||
Two special environment variables are passed to the render command:
|
||||
|
||||
|
||||
@@ -180,9 +180,13 @@ In $GITEA_CUSTOM we need to add our template.
|
||||
This template needs to be saved in "$GITEA_CUSTOM/templates/custom/".
|
||||
Here create file "footer.tmpl" and add following text into it:
|
||||
|
||||
```
|
||||
nano $GITEA_CUSTOM/templates/custom/footer.tmpl
|
||||
```
|
||||
|
||||
```html
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
function onPageChange() {
|
||||
// Supported 3D file types
|
||||
const fileTypes = ['3dm', '3ds', '3mf', 'amf', 'bim', 'brep', 'dae', 'fbx', 'fcstd', 'glb', 'gltf', 'ifc', 'igs', 'iges', 'stp', 'step', 'stl', 'obj', 'off', 'ply', 'wrl'];
|
||||
|
||||
@@ -193,47 +197,112 @@ Here create file "footer.tmpl" and add following text into it:
|
||||
return href.includes('/raw/') && fileTypes.some(ext => href.endsWith(`.${ext}`));
|
||||
});
|
||||
|
||||
if (link3D) {
|
||||
const script = document.createElement('script');
|
||||
script.onload = () => {
|
||||
const fileUrl = link3D.getAttribute('href');
|
||||
|
||||
// Prepare the container for the viewer
|
||||
const fileView = document.querySelector('.file-view');
|
||||
if (fileView) {
|
||||
fileView.setAttribute('id', 'view-3d');
|
||||
fileView.style.padding = '0';
|
||||
fileView.style.margin = '0';
|
||||
fileView.style.height = '400px';
|
||||
fileView.style.width = '100%';
|
||||
fileView.innerHTML = '';
|
||||
}
|
||||
|
||||
// Initialize viewer
|
||||
const parentDiv = document.getElementById('view-3d');
|
||||
if (parentDiv) {
|
||||
const viewer = new OV.EmbeddedViewer(parentDiv, {
|
||||
backgroundColor: new OV.RGBAColor(59, 68, 76, 0), // Transparent
|
||||
defaultColor: new OV.RGBColor(200, 200, 200),
|
||||
edgeSettings: new OV.EdgeSettings(false, new OV.RGBColor(0, 0, 0), 1),
|
||||
environmentSettings: new OV.EnvironmentSettings([
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/negx.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/posx.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/posy.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/negy.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/posz.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/negz.jpg'
|
||||
], false)
|
||||
});
|
||||
|
||||
// Load the model
|
||||
viewer.LoadModelFromUrlList([fileUrl]);
|
||||
}
|
||||
};
|
||||
|
||||
script.src = '/assets/o3dv/o3dv.min.js';
|
||||
document.head.appendChild(script);
|
||||
if (link3D) {
|
||||
const existingScript = document.querySelector('script[src="/assets/o3dv/o3dv.min.js"]');
|
||||
|
||||
const initializeViewer = () => {
|
||||
const fileUrl = link3D.getAttribute('href');
|
||||
|
||||
const fileView = document.querySelector('.file-view');
|
||||
|
||||
if (!fileView) return;
|
||||
|
||||
// Remove only the old viewer container if it exists
|
||||
const oldView3D = document.getElementById('view-3d');
|
||||
if (oldView3D) {
|
||||
oldView3D.remove(); // safely remove old viewer container div
|
||||
} else {
|
||||
// No #view-3d, so remove all children inside .file-view
|
||||
while (fileView.firstChild) {
|
||||
fileView.removeChild(fileView.firstChild);
|
||||
}
|
||||
}
|
||||
|
||||
// Create a new container for the viewer
|
||||
const newView3D = document.createElement('div');
|
||||
newView3D.id = 'view-3d';
|
||||
newView3D.style.padding = '0';
|
||||
newView3D.style.margin = '0';
|
||||
newView3D.style.flexGrow = '1';
|
||||
newView3D.style.minHeight = '0';
|
||||
newView3D.style.width = '100%';
|
||||
|
||||
const header = document.querySelector('header');
|
||||
const headerHeight = header ? header.offsetHeight : 0;
|
||||
|
||||
newView3D.style.height = `calc(100vh - ${headerHeight}px)`;
|
||||
|
||||
// Append the new container inside fileView
|
||||
fileView.appendChild(newView3D);
|
||||
|
||||
const parentDiv = document.getElementById('view-3d');
|
||||
if (parentDiv) {
|
||||
const viewer = new OV.EmbeddedViewer(parentDiv, {
|
||||
backgroundColor: new OV.RGBAColor(59, 68, 76, 0),
|
||||
defaultColor: new OV.RGBColor(200, 200, 200),
|
||||
edgeSettings: new OV.EdgeSettings(false, new OV.RGBColor(0, 0, 0), 1),
|
||||
environmentSettings: new OV.EnvironmentSettings([
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/negx.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/posx.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/posy.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/negy.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/posz.jpg',
|
||||
'/assets/o3dv/envmaps/fishermans_bastion/negz.jpg'
|
||||
], false)
|
||||
});
|
||||
|
||||
viewer.LoadModelFromUrlList([fileUrl]);
|
||||
}
|
||||
};
|
||||
|
||||
if (typeof OV === 'undefined') {
|
||||
if (!existingScript) {
|
||||
const script = document.createElement('script');
|
||||
script.onload = initializeViewer;
|
||||
script.src = '/assets/o3dv/o3dv.min.js';
|
||||
document.head.appendChild(script);
|
||||
} else {
|
||||
// Script is loading but OV not yet ready — wait for it
|
||||
existingScript.addEventListener('load', initializeViewer);
|
||||
}
|
||||
} else {
|
||||
// OV already loaded
|
||||
initializeViewer();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Run when the page is fully loaded
|
||||
document.addEventListener('DOMContentLoaded', onPageChange);
|
||||
|
||||
const targetSelector = 'a.ui.mini.basic.button[href*="/raw/"]';
|
||||
let lastHref = null;
|
||||
let timeoutId = null;
|
||||
|
||||
const checkAndRun = () => {
|
||||
const rawLink = document.querySelector(targetSelector);
|
||||
if (!rawLink) return;
|
||||
|
||||
const currentHref = rawLink.getAttribute('href');
|
||||
if (currentHref !== lastHref) {
|
||||
lastHref = currentHref;
|
||||
|
||||
const fileName = currentHref.split('/').pop();
|
||||
console.log('New Raw file link detected after delay:', fileName);
|
||||
|
||||
onPageChange();
|
||||
}
|
||||
};
|
||||
|
||||
const observer = new MutationObserver(() => {
|
||||
// Delay execution by 300ms after last mutation
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(checkAndRun, 300);
|
||||
});
|
||||
|
||||
observer.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
});
|
||||
</script>
|
||||
```
|
||||
@@ -248,11 +317,11 @@ mkdir o3dv
|
||||
cd o3dv
|
||||
```
|
||||
|
||||
Copy latest release zip link from [`GitHub`](https://github.com/kovacsv/Online3DViewer/releases) (v0.15.0 as of now).
|
||||
Copy latest release zip link from [`GitHub`](https://github.com/kovacsv/Online3DViewer/releases) (v0.16.0 as of now).
|
||||
Here use e.g. wget to download the file:
|
||||
|
||||
```
|
||||
wget https://github.com/kovacsv/Online3DViewer/releases/download/0.15.0/o3dv.zip
|
||||
wget https://github.com/kovacsv/Online3DViewer/releases/download/0.16.0/o3dv.zip
|
||||
```
|
||||
|
||||
Use e.g. unzip to unzip the archive:
|
||||
@@ -262,20 +331,14 @@ unzip o3dv.zip
|
||||
|
||||
#### Part 3: Folder permissions
|
||||
|
||||
Now the last thing. Change permissions on the "footer.tmpl":
|
||||
```
|
||||
chown git:git $GITEA_CUSTOM/templates/custom/footer.tmpl
|
||||
chmod 770 $GITEA_CUSTOM/templates/custom/footer.tmpl
|
||||
```
|
||||
|
||||
And on the public folder:
|
||||
Now the last thing. Change permissions on the public folder:
|
||||
```
|
||||
chown -R git:git $GITEA_CUSTOM/public
|
||||
```
|
||||
|
||||
Now we have everything ready! Restart your gitea instance to apply these changes and test it in your browser.
|
||||
|
||||
You should end-up with a folder structure similar to this:
|
||||
Sanity check. You should end-up with a folder structure similar to this:
|
||||
|
||||
```
|
||||
$GITEA_CUSTOM/templates
|
||||
|
||||
@@ -10,6 +10,10 @@ aliases:
|
||||
|
||||
Gitea has mailer functionality for sending transactional emails (such as registration confirmation). It can be configured to either use Sendmail (or compatible MTAs like Postfix and msmtp) or directly use SMTP server.
|
||||
|
||||
:::note
|
||||
Be sure to set ENABLE_NOTIFY_MAIL=true to allow Gitea to send email notifications. Check the [Config Cheat Sheet](../administration/config-cheat-sheet.md#service-service) for details.
|
||||
:::
|
||||
|
||||
## Using Sendmail
|
||||
|
||||
Use `sendmail` command as mailer.
|
||||
@@ -56,7 +60,7 @@ For the full list of options check the [Config Cheat Sheet](../administration/co
|
||||
Authentication is only supported when the SMTP server communication is encrypted with TLS or `HOST=localhost`. TLS encryption can be through:
|
||||
:::
|
||||
|
||||
- STARTTLS (also known as Opportunistic TLS) via port 587. Initial connection is done over cleartext, but then be upgraded over TLS if the server supports it.
|
||||
- STARTTLS (also known as Opportunistic TLS) via port 587 with `PROTOCOL=smtp+starttls`. Initial connection is done over cleartext, but then be upgraded over TLS if the server supports it.
|
||||
- SMTPS connection (SMTP over TLS) via the default port 465. Connection to the server use TLS from the beginning.
|
||||
- Forced SMTPS connection with `PROTOCOL=smtps`. (These are both known as Implicit TLS.)
|
||||
This is due to protections imposed by the Go internal libraries against STRIPTLS attacks.
|
||||
|
||||
@@ -14,6 +14,7 @@ aliases:
|
||||
2. Make the reverse-proxy pass `https://git.example.com/foo` to `http://gitea:3000/foo`.
|
||||
3. Make sure the reverse-proxy does not decode the URI. The request `https://git.example.com/a%2Fb` should be passed as `http://gitea:3000/a%2Fb`.
|
||||
4. Make sure `Host` and `X-Fowarded-Proto` headers are correctly passed to Gitea to make Gitea see the real URL being visited.
|
||||
5. Make sure your webserver has a certificate, including all intermediate and RootCA certificates, for `git clone` and `git pull` to work.
|
||||
|
||||
### Use a sub-path
|
||||
|
||||
@@ -149,6 +150,20 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
## Nginx Proxy Manager
|
||||
|
||||
If you are using Nginx Proxy Manager to serve your Gitea instance it differs slighly from the raw Nginx.
|
||||
|
||||
It is [adding some directives](https://github.com/NginxProxyManager/nginx-proxy-manager/blob/master/docker/rootfs/etc/nginx/conf.d/include/proxy.conf) for a custom location by default, so you have to skip these from the above mentioned Nginx config. Otherwise Nginx will produce `400 bad request` error due to duplicated directives (`proxy_set_header Host $host` is the particularly problematic one).
|
||||
|
||||
So while creating the `/` Custom location, just add the following lines to it's configuration:
|
||||
|
||||
```nginx
|
||||
client_max_body_size 512M;
|
||||
proxy_set_header Connection $http_connection;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
```
|
||||
|
||||
## Apache HTTPD
|
||||
|
||||
If you want Apache HTTPD to serve your Gitea instance, you can add the following to your Apache HTTPD configuration (usually located at `/etc/apache2/httpd.conf` in Ubuntu):
|
||||
|
||||
@@ -6,12 +6,14 @@ aliases:
|
||||
- /en-us/signing
|
||||
---
|
||||
|
||||
# GPG Commit Signatures
|
||||
# GPG/SSH Commit Signatures
|
||||
|
||||
Gitea will verify GPG commit signatures in the provided tree by
|
||||
Gitea will verify gpg/ssh commit signatures in the provided tree by
|
||||
checking if the commits are signed by a key within the Gitea database,
|
||||
or if the commit matches the default key for Git.
|
||||
|
||||
Additionally Gitea will verify commits signed by ssh keys, which public keys are part of [`TRUSTED_SSH_KEYS`](#general-configuration).
|
||||
|
||||
Keys are not checked to determine if they have expired or revoked.
|
||||
Keys are also not checked with keyservers.
|
||||
|
||||
@@ -46,6 +48,11 @@ for GPG - in particular it is probably advisable to only install a
|
||||
signing secret subkey without the master signing and certifying secret
|
||||
key.
|
||||
|
||||
## Installing and generating a SSH key for Gitea
|
||||
|
||||
You can run `ssh-keygen -t ed25519 -f gitea-signing-key` to generate the private/public keypair for commit signing without any password. Usually you would store the key next to the gitea configuration, then point `SIGNING_KEY` to the generated public key `/path/to/gitea-signing-key.pub`. Gitea generates all its commits using the server `git` command at present - and therefore the server `ssh-keygen` will be used for
|
||||
signing (if configured.)
|
||||
|
||||
## General Configuration
|
||||
|
||||
Gitea's configuration for signing can be found with the
|
||||
@@ -65,16 +72,41 @@ MERGES = pubkey, twofa, basesigned, commitssigned
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
For SSH commit signing, you need to specify the `SIGNING_FORMAT` to `ssh` instead of the default `openpgp`. `SIGNING_NAME` and `SIGNING_EMAIL` are required for verifing the signatures.
|
||||
|
||||
This looks like this:
|
||||
|
||||
```ini
|
||||
...
|
||||
[repository.signing]
|
||||
SIGNING_KEY = /path/to/gitea-signing-key.pub
|
||||
SIGNING_NAME =
|
||||
SIGNING_EMAIL =
|
||||
SIGNING_FORMAT = ssh
|
||||
INITIAL_COMMIT = always
|
||||
CRUD_ACTIONS = pubkey, twofa, parentsigned
|
||||
WIKI = never
|
||||
MERGES = pubkey, twofa, basesigned, commitssigned
|
||||
...
|
||||
```
|
||||
|
||||
- `/path/to/gitea-signing-key` is expected to be the private key for `/path/to/gitea-signing-key.pub` [see here how to generate a new ssh keypair](#installing-and-generating-a-ssh-key-for-gitea).
|
||||
- `TRUSTED_SSH_KEYS = ssh-<algorithm> <key>` or `TRUSTED_SSH_KEYS = ssh-<algorithm> <key1>, ssh-<algorithm> <key2>` can be used for rotating the global ssh signing key to continue verifying commits signed by the previous keys.
|
||||
|
||||
### `SIGNING_KEY`
|
||||
|
||||
The first option to discuss is the `SIGNING_KEY`. There are three main
|
||||
options:
|
||||
|
||||
- `none` - this prevents Gitea from signing any commits
|
||||
- `default` - Gitea will default to the key configured within `git config`
|
||||
- `default` - Gitea will default to the gpg key configured within `git config`
|
||||
- `KEYID` - Gitea will sign commits with the gpg key with the ID
|
||||
`KEYID`. In this case you should provide a `SIGNING_NAME` and
|
||||
`SIGNING_EMAIL` to be displayed for this key.
|
||||
- `/path/to/gitea-signing-key.pub` - Gitea will sign commits with the ssh key without the `.pub` suffix `/path/to/gitea-signing-key`. In this case you should provide a `SIGNING_NAME` and
|
||||
`SIGNING_EMAIL` to be displayed for this key and set `SIGNING_FORMAT` to `ssh`.
|
||||
|
||||
The `default` option will interrogate `git config` for
|
||||
`commit.gpgsign` option - if this is set, then it will use the results
|
||||
@@ -97,6 +129,10 @@ Related home files for git command (like `.gnupg`) should also be put in Gitea's
|
||||
If you like to keep the `.gnupg` directory outside of `{[git].HOME_PATH}/`, consider setting the `$GNUPGHOME` environment variable to your preferred location, otherwise Gitea will use the gpg keys only under `{[git].HOME_PATH}/.gnupg`.
|
||||
:::
|
||||
|
||||
:::warning
|
||||
The default option and repository specific signing keys are not supported for ssh keys
|
||||
:::
|
||||
|
||||
### `INITIAL_COMMIT`
|
||||
|
||||
This option determines whether Gitea should sign the initial commit
|
||||
@@ -168,3 +204,9 @@ In cases where there is a repository specific key this can be obtained from:
|
||||
```sh
|
||||
/api/v1/repos/:username/:reponame/signing-key.gpg
|
||||
```
|
||||
|
||||
For ssh commit signing the default ssh public key can be obtained via the API at:
|
||||
|
||||
```sh
|
||||
/api/v1/signing-key.pub
|
||||
```
|
||||
|
||||
@@ -35,7 +35,8 @@ Note that `/users/:name/tokens` is a special endpoint and requires you
|
||||
to authenticate using `BasicAuth` and a password, as follows:
|
||||
|
||||
```sh
|
||||
$ curl -H "Content-Type: application/json" -d '{"name":test_token","scopes":["read:activitypub","read:issue", "write:misc", "read:notification", "read:organization", "read:package", "read:repository", "read:user"]}'
|
||||
$ curl -H "Content-Type: application/json" \
|
||||
-d '{"name":"test_token","scopes":["read:activitypub","read:issue", "write:misc", "read:notification", "read:organization", "read:package", "read:repository", "read:user"]}' \
|
||||
-u 'username:password' "https://gitea.your.host/api/v1/users/{username}/tokens"
|
||||
{"id":1,"name":"test_token","sha1":"9fcb1158165773dd010fca5f0cf7174316c3e37d","token_last_eight":"16c3e37d"}
|
||||
```
|
||||
|
||||
@@ -13,7 +13,7 @@ Gitea was originally forked from [Gogs](https://gogs.io) and almost all the code
|
||||
|
||||
:::warning
|
||||
|
||||
Gitea does not sent or cherry-picked commits from upstream, so there is no guarantee it will work if you upgrade from Gogs to Gitea. The recommended method is to migrate repositories from Gogs to Gitea.
|
||||
Gitea does not send commits to upstream or cherry-pick commits from it, so there is no guarantee it will work if you upgrade from Gogs to Gitea. The recommended method is to migrate repositories from Gogs to Gitea.
|
||||
|
||||
:::
|
||||
|
||||
@@ -31,11 +31,11 @@ You can try it out using [the online demo](https://demo.gitea.com).
|
||||
|
||||
- **Code Hosting**
|
||||
|
||||
Gitea supports creating and managing repositories, browsing commit history and code files, reviewing and merging code submissions, managing collaborators, handling branches, and more. It also supports many common Git features such as tags, Cherry-pick, hooks, integrated collaboration tools, and more.
|
||||
Gitea supports creating and managing repositories, browsing commit history and code files, reviewing and merging code submissions, managing collaborators, handling branches, and more. It also supports many common Git features such as tags, cherry-picking, hooks, integrated collaboration tools, and more.
|
||||
|
||||
- **Lightweight and Fast**
|
||||
|
||||
One of Gitea's design goals is to be lightweight and fast in response. Unlike some large code hosting platforms, it remains lean, performs well in terms of speed, and is suitable for resource-limited server environments. Due to its lightweight design, Gitea has relatively low resource consumption and performs well in resource-constrained environments.
|
||||
One of Gitea's design goals is to be lightweight and fast in response. Unlike some large code hosting platforms, it remains lean, performs well in terms of speed, and is suitable for resource-limited server environments.
|
||||
|
||||
- **Easy Deployment and Maintenance**
|
||||
|
||||
@@ -105,6 +105,6 @@ For more detailed information, please refer to: https://docs.gitea.com/installat
|
||||
- [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3)
|
||||
- [github.com/denisenkom/go-mssqldb](https://github.com/denisenkom/go-mssqldb)
|
||||
|
||||
## Integrated support
|
||||
## Integrated Support
|
||||
|
||||
Please visit [Awesome Gitea](https://gitea.com/gitea/awesome-gitea/) to get more third-party integrated support
|
||||
|
||||
@@ -46,7 +46,7 @@ Gitea signs all binaries with a [GPG key](https://keys.openpgp.org/search?q=teab
|
||||
To validate the binary, download the signature file which ends in `.asc` for the binary you downloaded and use the GPG command line tool.
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -386,7 +386,7 @@ In this option, the idea is that the host simply uses the `authorized_keys` that
|
||||
|
||||
- Please note depending on the local version of ssh you may want to consider using `-t ecdsa` here.
|
||||
|
||||
- `/home/git/.ssh/authorized_keys` on the host now needs to be modified. It needs to act in the same way as `authorized_keys` within the Gitea container. Therefore add the public key of the key you created above ("Gitea Host Key") to `~/git/.ssh/authorized_keys`. As an administrative user on the host run:
|
||||
- `/home/git/.ssh/authorized_keys` on the host now needs to be modified. It needs to act in the same way as `authorized_keys` within the Gitea container. Therefore add the public key of the key you created above ("Gitea Host Key") to `/home/git/.ssh/authorized_keys`. As an administrative user on the host run:
|
||||
|
||||
```bash
|
||||
sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys
|
||||
|
||||
@@ -128,6 +128,30 @@ If this file is missing or corrupted, you can simply remove it and register agai
|
||||
If you want to store the registration information in another place, you can specify it in the configuration file,
|
||||
and don't forget to specify the `--config` option.
|
||||
|
||||
#### Ephemeral Runners
|
||||
|
||||
Ephemeral runners provide a security hardening mechanism for enabling organization- or instance-wide runners without requiring full user trust. Once a job is assigned within a spot VM or container, the runner's exposed credentials are automatically revoked—blocking it from polling further jobs before any untrusted code runs, while still allowing it to report progress until completion by either Gitea or the runner.
|
||||
|
||||
act_runner **0.2.12+** required.
|
||||
|
||||
The updated commands for registering the runner as ephemeral are listed below. Refer to the previous section for detailed information on registering the act_runner.
|
||||
|
||||
```bash
|
||||
./act_runner register --ephemeral
|
||||
```
|
||||
|
||||
```bash
|
||||
./act_runner --config config.yaml register --ephemeral
|
||||
```
|
||||
|
||||
```bash
|
||||
./act_runner register --no-interactive --ephemeral --instance <instance_url> --token <registration_token> --name <runner_name> --labels <runner_labels>
|
||||
```
|
||||
|
||||
The runner must be registered each time it is intended to receive a job. After completing the single job it is designed to execute, the runner terminates.
|
||||
|
||||
To automate the registration and startup of new runners when a job is queued, use the `workflow_job` webhook.
|
||||
|
||||
### Start the runner in command line
|
||||
|
||||
After you have registered the runner, you can run it by running the following command:
|
||||
@@ -297,6 +321,36 @@ It is because the act runner will run jobs in docker containers, so it needs to
|
||||
As mentioned, you can remove it if you want to run jobs in the host directly.
|
||||
To be clear, the "host" actually means the container which is running the act runner now, instead of the host machine.
|
||||
|
||||
---
|
||||
|
||||
To enable ephemeral runners, set the environment variable `GITEA_RUNNER_EPHEMERAL=1` in the runner image. This setup doesn't use a `/data` volume because the credentials are single-use and not intended to be reused. You can find more details about this mode under [Ephemeral runners](#ephemeral-runners).
|
||||
|
||||
```bash
|
||||
docker run \
|
||||
-e GITEA_INSTANCE_URL=<instance_url> \
|
||||
-e GITEA_RUNNER_REGISTRATION_TOKEN=<registration_token> \
|
||||
-e GITEA_RUNNER_EPHEMERAL=1 \
|
||||
-e GITEA_RUNNER_NAME=<runner_name> \
|
||||
--name my_runner \
|
||||
-d docker.io/gitea/act_runner:nightly
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run \
|
||||
-v $PWD/config.yaml:/config.yaml \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-e CONFIG_FILE=/config.yaml \
|
||||
-e GITEA_INSTANCE_URL=<instance_url> \
|
||||
-e GITEA_RUNNER_REGISTRATION_TOKEN=<registration_token> \
|
||||
-e GITEA_RUNNER_EPHEMERAL=1 \
|
||||
-e GITEA_RUNNER_NAME=<runner_name> \
|
||||
-e GITEA_RUNNER_LABELS=<runner_labels> \
|
||||
--name my_runner \
|
||||
-d docker.io/gitea/act_runner:nightly
|
||||
```
|
||||
|
||||
Mounting the host's Docker socket using `/var/run/docker.sock:/var/run/docker.sock` introduces a potential security vulnerability. If a job can access this socket, the reusable `GITEA_RUNNER_REGISTRATION_TOKEN` could be exposed through Docker inspect data.
|
||||
|
||||
### Start the runner using docker compose
|
||||
|
||||
You could also set up the runner using the following `docker-compose.yml`:
|
||||
@@ -320,6 +374,29 @@ services:
|
||||
|
||||
When using docker, there is no requirement to enter the container and manually run `./act_runner daemon` command as shown below. Once the container has been started successfully, it will show up as an active runner in your Gitea instance.
|
||||
|
||||
---
|
||||
|
||||
To enable ephemeral runners, set the environment variable `GITEA_RUNNER_EPHEMERAL=1` in the runner image. This setup doesn't use a `/data` volume because the credentials are single-use and not intended to be reused. You can find more details about this mode under [Ephemeral runners](#ephemeral-runners).
|
||||
|
||||
```yml
|
||||
version: "3.8"
|
||||
services:
|
||||
runner:
|
||||
image: docker.io/gitea/act_runner:nightly
|
||||
environment:
|
||||
CONFIG_FILE: /config.yaml
|
||||
GITEA_INSTANCE_URL: "${INSTANCE_URL}"
|
||||
GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}"
|
||||
GITEA_RUNNER_NAME: "${RUNNER_NAME}"
|
||||
GITEA_RUNNER_LABELS: "${RUNNER_LABELS}"
|
||||
GITEA_RUNNER_EPHEMERAL: "1"
|
||||
volumes:
|
||||
- ./config.yaml:/config.yaml
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
```
|
||||
|
||||
Mounting the host's Docker socket using `/var/run/docker.sock:/var/run/docker.sock` introduces a potential security vulnerability. If a job can access this socket, the reusable `GITEA_RUNNER_REGISTRATION_TOKEN` could be exposed through Docker inspect data.
|
||||
|
||||
## Advanced Configurations
|
||||
|
||||
### Configuring cache when starting a Runner using docker image
|
||||
|
||||
@@ -163,6 +163,8 @@ For events supported only by GitHub, see GitHub's [documentation](https://docs.g
|
||||
| pull_request_review_comment | `created`, `edited` |
|
||||
| release | `published`, `edited` |
|
||||
| registry_package | `published` |
|
||||
| workflow_dispatch | not applicable |
|
||||
| workflow_run | `requested`, `completed` |
|
||||
|
||||
> For `pull_request` events, in [GitHub Actions](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request), the `ref` is `refs/pull/:prNumber/merge`, which is a reference to the merge commit preview. However, Gitea has no such reference.
|
||||
> Therefore, the `ref` in Gitea Actions is `refs/pull/:prNumber/head`, which points to the head of pull request rather than the preview of the merge commit.
|
||||
|
||||
@@ -100,3 +100,26 @@ Using code-block with language:
|
||||
\alpha
|
||||
```
|
||||
````
|
||||
|
||||
## Frontmatter
|
||||
|
||||
Gitea supports frontmatter and Table of Contents (TOC) rendering. By default, frontmatter rendering is enabled, and TOC rendering is disabled.
|
||||
|
||||
### Enabling TOC rendering
|
||||
|
||||
To enable TOC rendering for a markdown file, add `include_toc: true` to its frontmatter section.
|
||||
|
||||
### Disabling frontmatter
|
||||
|
||||
To disable frontmatter rendering for a markdown file, add `gitea: none` to its frontmatter section.
|
||||
|
||||
### Example
|
||||
|
||||
```yaml
|
||||
---
|
||||
include_toc: true
|
||||
gitea: none
|
||||
---
|
||||
```
|
||||
|
||||
Then, when you preview this markdown file in Gitea, the frontmatter section will not be rendered, and a Table of Contents will be generated at the top of the content.
|
||||
|
||||
@@ -29,7 +29,7 @@ const apiConfig = [
|
||||
},
|
||||
{
|
||||
route: "/api/",
|
||||
spec: "static/swagger-23.json",
|
||||
spec: "static/swagger-24.json",
|
||||
},
|
||||
{
|
||||
route: "/api/1.24/",
|
||||
@@ -73,9 +73,9 @@ const pageConfig = renderApiSSR
|
||||
|
||||
const globalVariables = {
|
||||
current: {
|
||||
goVersion: "1.23",
|
||||
minGoVersion: "1.23",
|
||||
minNodeVersion: "18",
|
||||
goVersion: "1.24",
|
||||
minGoVersion: "1.24",
|
||||
minNodeVersion: "22",
|
||||
version: "main-nightly",
|
||||
sourceVersion: "main",
|
||||
sourceBranch: "main",
|
||||
@@ -84,20 +84,20 @@ const globalVariables = {
|
||||
},
|
||||
1.24: {
|
||||
goVersion: "1.24",
|
||||
minGoVersion: "1.23",
|
||||
minNodeVersion: "18",
|
||||
version: "1.24.0-rc0",
|
||||
sourceVersion: "v1.24.0-rc0",
|
||||
minGoVersion: "1.24",
|
||||
minNodeVersion: "22",
|
||||
version: "1.24.7",
|
||||
sourceVersion: "v1.24.0",
|
||||
sourceBranch: "release/v1.24",
|
||||
dockerVersion: "1.24.0-rc0",
|
||||
displayVersion: "1.24.0-rc0",
|
||||
dockerVersion: "1.24.7",
|
||||
displayVersion: "1.24.7",
|
||||
},
|
||||
1.23: {
|
||||
goVersion: "1.23",
|
||||
minGoVersion: "1.22",
|
||||
minNodeVersion: "18",
|
||||
version: "1.23.8",
|
||||
sourceVersion: "v1.23.0",
|
||||
sourceVersion: "v1.23.8",
|
||||
sourceBranch: "release/v1.23",
|
||||
dockerVersion: "1.23.8",
|
||||
displayVersion: "1.23.8",
|
||||
@@ -180,6 +180,7 @@ const config = {
|
||||
favicon: "img/favicon.png",
|
||||
future: {
|
||||
experimental_faster: true,
|
||||
v4: true
|
||||
},
|
||||
plugins: [
|
||||
[
|
||||
@@ -283,7 +284,7 @@ const config = {
|
||||
}/${docPath}`;
|
||||
},
|
||||
versions: versions,
|
||||
lastVersion: "1.23",
|
||||
lastVersion: "1.24",
|
||||
async sidebarItemsGenerator({
|
||||
defaultSidebarItemsGenerator,
|
||||
...args
|
||||
@@ -390,7 +391,7 @@ const config = {
|
||||
label: "Docs",
|
||||
},
|
||||
{
|
||||
to: "/api/1.23/",
|
||||
to: "/api/1.24/",
|
||||
label: "API",
|
||||
position: "left",
|
||||
activeBaseRegex: "api/(1.19|1.20|1.21|1.22|1.23|1.24|next)/",
|
||||
@@ -427,7 +428,7 @@ const config = {
|
||||
position: "right",
|
||||
items: [
|
||||
{ to: "/api/next/", label: "1.25-dev" },
|
||||
{ to: "/api/1.24/", label: "1.24.0-rc0" },
|
||||
{ to: "/api/1.24/", label: "1.24.7" },
|
||||
{ to: "/api/1.23/", label: "1.23.8" },
|
||||
{ to: "/api/1.22/", label: "1.22.6" },
|
||||
{ to: "/api/1.21/", label: "1.21.11" },
|
||||
@@ -481,10 +482,6 @@ const config = {
|
||||
label: "Discord",
|
||||
href: "https://discord.gg/gitea",
|
||||
},
|
||||
{
|
||||
label: "Matrix",
|
||||
href: "https://matrix.to/#/#gitea-space:matrix.org",
|
||||
},
|
||||
{
|
||||
label: "Forum",
|
||||
href: "https://forum.gitea.com/",
|
||||
@@ -497,6 +494,10 @@ const config = {
|
||||
label: "Mastodon",
|
||||
href: "https://social.gitea.io/@gitea",
|
||||
},
|
||||
{
|
||||
label: "Bluesky",
|
||||
href: "https://bsky.app/profile/gitea.com",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -47,7 +47,7 @@ Gitea 包括数据库、文件和 Git 仓库,当它被使用时所有这些都
|
||||
|
||||
```sh
|
||||
# mysql
|
||||
mysqldump -u$USER -p$PASS --database $DATABASE > gitea-db.sql
|
||||
mysqldump -u$USER -p$PASS --databases $DATABASE > gitea-db.sql
|
||||
# postgres
|
||||
pg_dump -U $USER $DATABASE > gitea-db.sql
|
||||
```
|
||||
|
||||
@@ -39,7 +39,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -343,7 +343,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ Gitea 对打包的二进制文件使用 [GPG密钥](https://keys.openpgp.org/sea
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -342,7 +342,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -343,7 +343,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -345,7 +345,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -345,7 +345,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -343,7 +343,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -343,7 +343,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -344,7 +344,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -342,7 +342,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -344,7 +344,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -346,7 +346,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/se
|
||||
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -346,7 +346,7 @@ ports:
|
||||
- "127.0.0.1:2222:22"
|
||||
```
|
||||
|
||||
另外,主机上的 `/home/git/.ssh/authorized_keys` 需要修改。它需要以与 Gitea 容器内的 `authorized_keys` 相同的方式进行操作。因此,将您在上面创建的密钥(“Gitea 主机密钥”)的公共密钥添加到 `~/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 [...]` 作为前缀。
|
||||
|
||||
该文件应该看起来像:
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ Gitea 使用 [GPG 密鑰](https://keys.openpgp.org/search?q=teabot%40gitea.io)
|
||||
要驗證二進制文件,請下載您下載的二進制文件的簽名文件,該文件以 `.asc` 結尾,並使用 GPG 命令行工具。
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
@@ -194,7 +194,7 @@ Gitea signs all binaries with a [GPG key](https://keys.openpgp.org/search?q=teab
|
||||
To validate the binary, download the signature file which ends in `.asc` for the binary you downloaded and use the GPG command line tool.
|
||||
|
||||
```sh
|
||||
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
|
||||
@@ -6,208 +6,208 @@ aliases:
|
||||
- /zh-tw/authentication
|
||||
---
|
||||
|
||||
# 认证
|
||||
# 認證
|
||||
|
||||
## 轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)
|
||||
## 轻量级目錄访问协议(Lightweight Directory Access Protocol,LDAP)
|
||||
|
||||
通过 BindDN 的 LDAP 和简单认证方式 LDAP 共享以下字段:
|
||||
通過 BindDN 的 LDAP 和简單認證方式 LDAP 共享以下字段:
|
||||
|
||||
- 认证名称 **(必选)**
|
||||
- 認證名稱 **(必選)**
|
||||
|
||||
- 分配给新授权方法的名称。
|
||||
- 分配给新授权方法的名稱。
|
||||
|
||||
- 主机名 **(必选)**
|
||||
- 主机名 **(必選)**
|
||||
|
||||
- LDAP 服务的主机地址.
|
||||
- 例如:`mydomain.com`
|
||||
|
||||
- 端口号 **(必选)**
|
||||
- 端口号 **(必選)**
|
||||
|
||||
- LDAP 服务的端口号.
|
||||
- 例如: LDAP `389`/ LDAPs `636`
|
||||
|
||||
- 安全协议 (可选)
|
||||
- 安全协议 (可選)
|
||||
|
||||
- 连接 LDAP 服务器时是否使用 TLS 协议。
|
||||
|
||||
- 管理员过滤规则 (可选)
|
||||
- 管理员過滤規則 (可選)
|
||||
|
||||
- 一个 LDAP 过滤器,用于指定哪些用户应该被赋予管理员特权。如果用户帐户符合过滤器条件,则该用户将被授予管理员权限。
|
||||
- 一个 LDAP 過滤器,用于指定哪些使用者應該被赋予管理员特权。如果使用者帳戶符合過滤器条件,则該使用者将被授予管理员权限。
|
||||
- 示例:`(objectClass=adminAccount)`
|
||||
- 适用于 Microsoft Active Directory(AD)的示例:`memberOf=CN=admin-group,OU=example,DC=example,DC=org`
|
||||
|
||||
- 用户名属性(可选)
|
||||
- 使用者名属性(可選)
|
||||
|
||||
- 用户 LDAP 记录中包含用户名称的属性。在第一次成功登录后,将使用指定的属性值作为新的 Gitea 账户用户名。若留空,则使用登录表单上提供的用户名。
|
||||
- 当提供的登录名与多个属性匹配时,这一选项非常有用,但是只有一个特定属性应该用于 Gitea 账户名称,请参阅"用户过滤器"。
|
||||
- 使用者 LDAP 记录中包含使用者名稱的属性。在第一次成功登入后,将使用指定的属性值作為新的 Gitea 账户使用者名。若留空,则使用登入表單上提供的使用者名。
|
||||
- 当提供的登入名与多个属性匹配时,这一選项非常有用,但是只有一个特定属性應該用于 Gitea 账户名稱,請参阅"使用者過滤器"。
|
||||
- 示例:uid
|
||||
- 适用于 Microsoft Active Directory(AD)的示例:`sAMAccountName`
|
||||
|
||||
- 名字属性(可选)
|
||||
- 名字属性(可選)
|
||||
|
||||
- 用户 LDAP 记录中包含用户名字的属性。将用于填充他们的账户信息。
|
||||
- 使用者 LDAP 记录中包含使用者名字的属性。将用于填充他们的账户信息。
|
||||
- 示例:givenName
|
||||
|
||||
- 姓氏属性(可选)
|
||||
- 姓氏属性(可選)
|
||||
|
||||
- 用户 LDAP 记录中包含用户姓氏的属性。将用于填充他们的账户信息。
|
||||
- 使用者 LDAP 记录中包含使用者姓氏的属性。将用于填充他们的账户信息。
|
||||
- 示例:`sn`
|
||||
|
||||
- 电子邮件属性 **(必选)**
|
||||
- 用户 LDAP 记录中包含用户电子邮件地址的属性。将用于填充他们的账户信息。
|
||||
- 电子邮件属性 **(必選)**
|
||||
- 使用者 LDAP 记录中包含使用者电子邮件地址的属性。将用于填充他们的账户信息。
|
||||
- 示例:`mail`
|
||||
|
||||
### LDAP(via BindDN)
|
||||
|
||||
需要额外设置以下字段:
|
||||
|
||||
- 绑定 DN (可选)
|
||||
- 绑定 DN (可選)
|
||||
|
||||
- 搜索用户时绑定到 LDAP 服务器的 DN。这可以留空以执行匿名搜索。
|
||||
- 搜索使用者时绑定到 LDAP 服务器的 DN。这可以留空以執行匿名搜索。
|
||||
- 示例: `cn=Search,dc=mydomain,dc=com`
|
||||
|
||||
- 绑定密码 (可选)
|
||||
- 绑定密碼 (可選)
|
||||
|
||||
- 上述指定的 Bind DN(绑定区别名)的密码,如果有的话。注意:该密码在服务器上使用 SECRET_KEY 进行加密存储。仍然建议确保 Bind DN 具有尽可能少的权限。
|
||||
- 上述指定的 Bind DN(绑定区别名)的密碼,如果有的话。注意:該密碼在服务器上使用 SECRET_KEY 進行加密存儲。仍然建议确保 Bind DN 具有尽可能少的权限。
|
||||
|
||||
- 用户搜索基准 **(必选)**
|
||||
- 使用者搜索基准 **(必選)**
|
||||
|
||||
- 这是用于搜索用户帐户的 LDAP 基础路径.
|
||||
- 这是用于搜索使用者帳戶的 LDAP 基础路径.
|
||||
- 示例: `ou=Users,dc=mydomain,dc=com`
|
||||
|
||||
- 用户过滤规则 **(必选)**
|
||||
- LDAP 过滤器声明如何查找试图进行身份验证的用户记录
|
||||
`%[1]s`匹配参数将替换为登录表单中给出的登录名
|
||||
- 使用者過滤規則 **(必選)**
|
||||
- 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`,例如在将提供的登录名与多个属性(如用户标识符、电子邮件甚至电话号码)进行匹配时。
|
||||
- 如需多次替换,應使用 `%[1]s`,例如在将提供的登入名与多个属性(如使用者标识符、电子邮件甚至电话号码)進行匹配时。
|
||||
- 示例: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))`
|
||||
- 启用用户同步
|
||||
- 这个选项启用了一个周期性任务,用于将 Gitea 用户与 LDAP 服务器进行同步。默认的同步周期是每 24 小时,
|
||||
但您可以在 app.ini 文件中进行更改。
|
||||
有关此部分的详细说明,请参阅[sample
|
||||
- 启用使用者同步
|
||||
- 这个選项启用了一个周期性任务,用于将 Gitea 使用者与 LDAP 服务器進行同步。默认的同步周期是每 24 小时,
|
||||
但您可以在 app.ini 文件中進行更改。
|
||||
有关此部分的详细说明,請参阅[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 目录时需要小心。
|
||||
设置将限制哪些使用者可以使用 Gitea 以及哪些使用者将被同步。
|
||||
在初始运行任务时,将根据给定的设置建立所有与 LDAP 匹配的使用者,因此在使用大型企业 LDAP 目錄时需要小心。
|
||||
|
||||
### LDAP(simple auth)
|
||||
|
||||
需要额外设置以下字段:
|
||||
|
||||
- 用户 DN **(必选)**
|
||||
- 使用者 DN **(必選)**
|
||||
|
||||
- 用作用户 DN 的模板。匹配参数 `%s` 将替换为登录表单中的登录名。
|
||||
- 用作使用者 DN 的模板。匹配參數 `%s` 将替换為登入表單中的登入名。
|
||||
- 示例: `cn=%s,ou=Users,dc=mydomain,dc=com`
|
||||
- 示例: `uid=%s,ou=Users,dc=mydomain,dc=com`
|
||||
|
||||
- 用户搜索基准 (可选)
|
||||
- 使用者搜索基准 (可選)
|
||||
|
||||
- 用户搜索基准声明哪些用户帐户将被搜索.
|
||||
- 使用者搜索基准声明哪些使用者帳戶将被搜索.
|
||||
- 示例: `ou=Users,dc=mydomain,dc=com`
|
||||
|
||||
- 用户过滤规则 **(必选)**
|
||||
- LDAP 过滤器声明何时允许用户登录
|
||||
`%[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 中查找有效组。
|
||||
- LDAP 過滤器,声明如何在上述 DN 中查找有效组。
|
||||
- 示例: `(|(cn=gitea_users)(cn=admins))`
|
||||
|
||||
- 组中的用户属性 (可选)
|
||||
- 组中的使用者属性 (可選)
|
||||
|
||||
- 组中列出了哪个用户的 LDAP 属性。
|
||||
- 组中列出了哪个使用者的 LDAP 属性。
|
||||
- 示例: `uid`
|
||||
|
||||
- 用户组属性 (可选)
|
||||
- 哪个组的 LDAP 属性包含一个高于用户属性名称的数组。
|
||||
- 使用者组属性 (可選)
|
||||
- 哪个组的 LDAP 属性包含一个高于使用者属性名稱的数组。
|
||||
- 示例: `memberUid`
|
||||
|
||||
## 可插拔式认证模块(Pluggable Authentication Module,PAM)
|
||||
## 可插拔式認證模組(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. 一旦数据库已初始化完成,使用新创建的管理员账户登录.
|
||||
1. 导航至用户设置(右上角的图标),然后选择
|
||||
`Site Administration` -> `Authentication Sources`, 并选择
|
||||
1. 一旦数据库已初始化完成,使用新建立的管理员账户登入.
|
||||
1. 导航至使用者设置(右上角的图标),然后選择
|
||||
`Site Administration` -> `Authentication Sources`, 並選择
|
||||
`Add Authentication Source`.
|
||||
1. 填写字段如下:
|
||||
- 认证类型:`PAM`。
|
||||
- 名称:任何有效的值都可以,如果您愿意,可以使用"System Authentication"。
|
||||
- PAM 服务名称:从/etc/pam.d/目录下选择适用于所需认证的正确文件[^1]。
|
||||
- PAM 电子邮件域:用户认证时要附加的电子邮件后缀。例如,如果登录系统期望一个名为 gituse 的用户,
|
||||
并且将此字段设置为 mail.com,那么 Gitea 在验证一个 GIT 实例的用户时将期望 user emai 字段为gituser@mail.com[^2]。
|
||||
- 認證類型:`PAM`。
|
||||
- 名稱:任何有效的值都可以,如果您愿意,可以使用"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#build)添加,
|
||||
而官方提供的二進制文件通常不会默认启用此功能。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`而不是`gituser@mail.com`登录到 Gitea 的 Web 界面。
|
||||
[^2]: **PAM 的必選项** 請注意:在上面的示例中,使用者将作為`gituser`而不是`gituser@mail.com`登入到 Gitea 的 Web 界面。
|
||||
|
||||
## 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
|
||||
## 简單邮件传输协议(Simple Mail Transfer Protocol,SMTP)
|
||||
|
||||
此选项允许 Gitea 以 Gitea 用户身份登录 SMTP 主机。请设置以下字段:
|
||||
此選项允许 Gitea 以 Gitea 使用者身份登入 SMTP 主机。請设置以下字段:
|
||||
|
||||
- 身份验证名称 **(必选)**
|
||||
- 身份驗證名稱 **(必選)**
|
||||
|
||||
- 分配给新授权方法的名称
|
||||
- 分配给新授权方法的名稱
|
||||
|
||||
- SMTP 验证类型 **(必选)**
|
||||
- SMTP 驗證類型 **(必選)**
|
||||
|
||||
- 用于连接 SMTP 主机的验证类型,plain 或 login
|
||||
- 用于连接 SMTP 主机的驗證類型,plain 或 login
|
||||
|
||||
- 主机名 **(必选)**
|
||||
- 主机名 **(必選)**
|
||||
|
||||
- SMTP 服务的主机地址
|
||||
- 例如:`smtp.mydomain.com`
|
||||
|
||||
- 端口号 **(必选)**
|
||||
- 端口号 **(必選)**
|
||||
|
||||
- SMTP 服务的端口号
|
||||
- 例如: `587`
|
||||
|
||||
- 允许的域名
|
||||
|
||||
- 如果使用公共 SMTP 主机或有多个域的 SMTP 主机,限制哪些域可以登录
|
||||
限制哪些域可以登录。
|
||||
- 如果使用公共 SMTP 主机或有多个域的 SMTP 主机,限制哪些域可以登入
|
||||
限制哪些域可以登入。
|
||||
- 示例: `gitea.com,mydomain.com,mydomain2.com`
|
||||
|
||||
- 强制使用 SMTPS
|
||||
- 默认情况下将使用 SMTPS 连接到端口 465.如果您希望将 smtp 用于其他端口,自行设置
|
||||
- 否则,如果服务器提供' STARTTLS '扩展名,则将使用此扩展名
|
||||
- 跳过 TLS 验证
|
||||
- 禁用 TLS 验证身份.
|
||||
- 该认证源处于激活状态
|
||||
- 启用或禁用此身份验证源
|
||||
- 跳過 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`)。
|
||||
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选项 -> 安全 -> 本地站点 -> 站点`)。
|
||||
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。
|
||||
8. 在控制面板中點擊“Sign In”按钮,然后選择 SSPI,将会自动使用当前登入到计算机的使用者進行登入。
|
||||
9. 如果無法正常工作,請确保:
|
||||
- 您不是在运行`gitea.exe`的同一台服务器上运行 Web 浏览器。應該在与服务器不同的域加入计算机(客户端)上运行 Web 浏览器。如果客户端和服务器都在同一台计算机上运行,则 NTLM 将优先于 Kerberos。
|
||||
- 主机上只有一个`HTTP/...`的 SPN。
|
||||
- SPN 中只包含主机名,不包含端口号。
|
||||
- 将 Web 应用程序的 URL 添加到"本地站点"。
|
||||
- 服务器和客户端的时钟差异不超过 5 分钟(取决于组策略)。
|
||||
- 在 Internet Explorer 中启用了"集成 Windows 身份验证"(在"高级设置"下)。
|
||||
- 将 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]
|
||||
|
||||
@@ -9,17 +9,17 @@ aliases:
|
||||
|
||||
# 备份与恢复
|
||||
|
||||
Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一个 zip 压缩文件。该压缩文件可以被用来进行数据恢复。
|
||||
Gitea 已经实現了 `dump` 命令可以用来备份所有需要的文件到一个 zip 压缩文件。該压缩文件可以被用来進行数据恢复。
|
||||
|
||||
## 备份一致性
|
||||
|
||||
为了确保 Gitea 实例的一致性,在备份期间必须关闭它。
|
||||
為了确保 Gitea 实例的一致性,在备份期间必須关闭它。
|
||||
|
||||
Gitea 包括数据库、文件和 Git 仓库,当它被使用时所有这些都会发生变化。例如,当迁移正在进行时,在数据库中创建一个事务,而 Git 仓库正在被复制。如果备份发生在迁移的中间,Git 仓库可能是不完整的,尽管数据库声称它是完整的,因为它是在之后被转储的。避免这种竞争条件的唯一方法是在备份期间停止 Gitea 实例。
|
||||
Gitea 包括数据库、文件和 Git 存放庫,当它被使用时所有这些都会发生变化。例如,当迁移正在進行时,在数据库中建立一个事务,而 Git 存放庫正在被复制。如果备份发生在迁移的中间,Git 存放庫可能是不完整的,尽管数据库声稱它是完整的,因為它是在之后被转儲的。避免这种竞争条件的唯一方法是在备份期间停止 Gitea 实例。
|
||||
|
||||
## 备份命令 (`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
|
||||
@@ -32,18 +32,18 @@ Gitea 包括数据库、文件和 Git 仓库,当它被使用时所有这些都
|
||||
|
||||
最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容:
|
||||
|
||||
- `app.ini` - 如果原先存储在默认的 custom/ 目录之外,则是配置文件的可选副本
|
||||
- `custom/` - 所有保存在 `custom/` 目录下的配置和自定义的文件。
|
||||
- `data/` - 数据目录(APP_DATA_PATH),如果使用文件会话,则不包括会话。该目录包括 `attachments`、`avatars`、`lfs`、`indexers`、如果使用 SQLite 则包括 SQLite 文件。
|
||||
- `repos/` - 仓库目录的完整副本。
|
||||
- `app.ini` - 如果原先存儲在默认的 custom/ 目錄之外,则是配置文件的可選副本
|
||||
- `custom/` - 所有保存在 `custom/` 目錄下的配置和自定义的文件。
|
||||
- `data/` - 数据目錄(APP_DATA_PATH),如果使用文件会话,则不包括会话。該目錄包括 `attachments`、`avatars`、`lfs`、`indexers`、如果使用 SQLite 则包括 SQLite 文件。
|
||||
- `repos/` - 存放庫目錄的完整副本。
|
||||
- `gitea-db.sql` - 数据库 dump 出来的 SQL。
|
||||
- `log/` - Logs 文件,如果用作迁移不是必须的。
|
||||
- `log/` - Logs 文件,如果用作迁移不是必須的。
|
||||
|
||||
中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 `--tempdir` 参数,或者用 `TMPDIR` 环境变量。
|
||||
中间备份文件将会在临时目錄進行建立,如果您要重新指定临时目錄,可以用 `--tempdir` 參數,或者用 `TMPDIR` 环境变量。
|
||||
|
||||
## 备份数据库
|
||||
|
||||
`gitea dump` 创建的 SQL 转储使用 XORM,Gitea 管理员可能更喜欢使用本地的 MySQL 和 PostgreSQL 转储工具。使用 XORM 转储数据库时仍然存在一些问题,可能会导致在尝试恢复时出现问题。
|
||||
`gitea dump` 建立的 SQL 转儲使用 XORM,Gitea 管理员可能更喜欢使用本地的 MySQL 和 PostgreSQL 转儲工具。使用 XORM 转儲数据库时仍然存在一些问题,可能会导致在尝试恢复时出現问题。
|
||||
|
||||
```sh
|
||||
# mysql
|
||||
@@ -56,7 +56,7 @@ pg_dump -U $USER $DATABASE > gitea-db.sql
|
||||
|
||||
在使用 Docker 时,使用 `dump` 命令有一些注意事项。
|
||||
|
||||
必须以 `gitea/conf/app.ini` 中指定的 `RUN_USER = <OS_USERNAME>` 执行该命令;并且,为了让备份文件夹的压缩过程能够顺利执行,`docker exec` 命令必须在 `--tempdir` 内部执行。
|
||||
必須以 `gitea/conf/app.ini` 中指定的 `RUN_USER = <OS_USERNAME>` 執行該命令;並且,為了让备份文件夹的压缩過程能够顺利執行,`docker exec` 命令必須在 `--tempdir` 内部執行。
|
||||
|
||||
示例:
|
||||
|
||||
@@ -64,13 +64,13 @@ pg_dump -U $USER $DATABASE > gitea-db.sql
|
||||
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`)
|
||||
|
||||
当前还没有恢复命令,恢复需要人工进行。主要是把文件和数据库进行恢复。
|
||||
当前還没有恢复命令,恢复需要人工進行。主要是把文件和数据库進行恢复。
|
||||
|
||||
例如:
|
||||
|
||||
@@ -93,15 +93,15 @@ 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 实例中,也没有恢复命令的支持。恢复過程与前面描述的步骤相同,但路径不同。
|
||||
|
||||
示例:
|
||||
|
||||
@@ -113,7 +113,7 @@ unzip gitea-dump-1610949662.zip
|
||||
cd gitea-dump-1610949662
|
||||
# 恢复 Gitea 数据
|
||||
mv data/* /data/gitea
|
||||
# 恢复仓库本身
|
||||
# 恢复存放庫本身
|
||||
mv repos/* /data/git/gitea-repositories/
|
||||
# 调整文件权限
|
||||
chown -R git:git /data
|
||||
@@ -121,11 +121,11 @@ chown -R git:git /data
|
||||
/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 会话
|
||||
@@ -137,7 +137,7 @@ cd gitea-dump-1610949662
|
||||
mv data/conf/app.ini /etc/gitea/app.ini
|
||||
# 恢复 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
|
||||
|
||||
@@ -9,29 +9,29 @@ aliases:
|
||||
|
||||
# 嵌入资源提取工具
|
||||
|
||||
Gitea 的可执行文件包含了运行所需的所有资源:模板、图片、样式表和翻译文件。你可以通过在 `custom` 目录下的相应路径中放置替换文件来覆盖其中的任何资源(详见 [自定义 Gitea 配置](../administration/customizing-gitea.md))。
|
||||
Gitea 的可執行文件包含了运行所需的所有资源:模板、图片、样式表和翻译文件。你可以通過在 `custom` 目錄下的相應路径中放置替换文件来覆盖其中的任何资源(详见 [自定义 Gitea 配置](../administration/customizing-gitea.md))。
|
||||
|
||||
要获取嵌入资源的副本以进行编辑,可以使用 CLI 中的 `embedded` 命令,通过操作系统的 shell 执行。
|
||||
要获取嵌入资源的副本以進行编辑,可以使用 CLI 中的 `embedded` 命令,通過操作系统的 shell 執行。
|
||||
|
||||
**注意:** 嵌入资源提取工具包含在 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`
|
||||
- 列出所有模板文件,無论在哪个虚拟目錄下:`**.tmpl`
|
||||
- 列出所有邮件模板文件:`templates/mail/**.tmpl`
|
||||
列出 `public/assets/img` 目录下的所有文件:`public/assets/img/**`
|
||||
列出 `public/assets/img` 目錄下的所有文件:`public/assets/img/**`
|
||||
|
||||
不要忘记为模式使用引号,因为空格、`*` 和其他字符可能对命令行解释器有特殊含义。
|
||||
不要忘记為模式使用引号,因為空格、`*` 和其他字符可能对命令行解释器有特殊含义。
|
||||
|
||||
如果未提供模式,则列出所有文件。
|
||||
|
||||
@@ -53,31 +53,31 @@ 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
|
||||
|
||||
@@ -11,17 +11,17 @@ aliases:
|
||||
|
||||
## 用法
|
||||
|
||||
`gitea [全局选项] 命令 [命令或全局选项] [参数...]`
|
||||
`gitea [全局選项] 命令 [命令或全局選项] [參數...]`
|
||||
|
||||
## 全局选项
|
||||
## 全局選项
|
||||
|
||||
所有全局选项均可被放置在命令级别。
|
||||
所有全局選项均可被放置在命令级别。
|
||||
|
||||
- `--help`,`-h`:显示帮助文本并退出。可选。
|
||||
- `--version`,`-v`:显示版本信息并退出。可选。 (示例:`Gitea version 1.1.0+218-g7b907ed built with: bindata, sqlite`)。
|
||||
- `--custom-path path`,`-C path`:Gitea 自定义文件夹的路径。可选。 (默认值:`AppWorkPath`/custom 或 `$GITEA_CUSTOM`)。
|
||||
- `--config path`,`-c path`:Gitea 配置文件的路径。可选。 (默认值:`custom`/conf/app.ini)。
|
||||
- `--work-path path`,`-w path`:Gitea 的 `AppWorkPath`。可选。 (默认值:LOCATION_OF_GITEA_BINARY 或 `$GITEA_WORK_DIR`)
|
||||
- `--help`,`-h`:显示帮助文本並退出。可選。
|
||||
- `--version`,`-v`:显示版本信息並退出。可選。 (示例:`Gitea version 1.1.0+218-g7b907ed built with: bindata, sqlite`)。
|
||||
- `--custom-path path`,`-C path`:Gitea 自定义文件夹的路径。可選。 (默认值:`AppWorkPath`/custom 或 `$GITEA_CUSTOM`)。
|
||||
- `--config path`,`-c path`:Gitea 配置文件的路径。可選。 (默认值:`custom`/conf/app.ini)。
|
||||
- `--work-path path`,`-w path`:Gitea 的 `AppWorkPath`。可選。 (默认值:LOCATION_OF_GITEA_BINARY 或 `$GITEA_WORK_DIR`)
|
||||
|
||||
注意:默认的 custom-path、config 和 work-path 也可以在构建时更改(如果需要)。
|
||||
|
||||
@@ -31,10 +31,10 @@ aliases:
|
||||
|
||||
启动服务器:
|
||||
|
||||
- 选项:
|
||||
- `--port number`,`-p number`:端口号。可选。 (默认值:3000)。覆盖配置文件中的设置。
|
||||
- `--install-port number`:运行安装页面的端口号。可选。 (默认值:3000)。覆盖配置文件中的设置。
|
||||
- `--pid path`,`-P path`:Pid 文件的路径。可选。
|
||||
- 選项:
|
||||
- `--port number`,`-p number`:端口号。可選。 (默认值:3000)。覆盖配置文件中的设置。
|
||||
- `--install-port number`:运行安裝页面的端口号。可選。 (默认值:3000)。覆盖配置文件中的设置。
|
||||
- `--pid path`,`-P path`:Pid 文件的路径。可選。
|
||||
- `--quiet`,`-q`:只在控制台上输出 Fatal 日志,用于在设置日志之前发出的日志。
|
||||
- `--verbose`:在控制台上输出跟踪日志,用于在设置日志之前发出的日志。
|
||||
- 示例:
|
||||
@@ -42,7 +42,7 @@ aliases:
|
||||
- `gitea web --port 80`
|
||||
- `gitea web --config /etc/gitea.ini --pid /some/custom/gitea.pid`
|
||||
- 注意:
|
||||
- Gitea 不应以 root 用户身份运行。要绑定到低于 1024 的端口,您可以在 Linux 上使用 setcap 命令:`sudo setcap 'cap_net_bind_service=+ep' /path/to/gitea`。每次更新 Gitea 都需要重新执行此操作。
|
||||
- Gitea 不應以 root 使用者身份运行。要绑定到低于 1024 的端口,您可以在 Linux 上使用 setcap 命令:`sudo setcap 'cap_net_bind_service=+ep' /path/to/gitea`。每次更新 Gitea 都需要重新執行此操作。
|
||||
|
||||
### admin
|
||||
|
||||
@@ -51,278 +51,278 @@ aliases:
|
||||
- 命令:
|
||||
- `user`:
|
||||
- `list`:
|
||||
- 选项:
|
||||
- `--admin`:仅列出管理员用户。可选。
|
||||
- 描述:列出所有现有用户。
|
||||
- 選项:
|
||||
- `--admin`:僅列出管理员使用者。可選。
|
||||
- 描述:列出所有現有使用者。
|
||||
- 示例:
|
||||
- `gitea admin user list`
|
||||
- `delete`:
|
||||
- 选项:
|
||||
- `--email`:要删除的用户的电子邮件。
|
||||
- `--username`:要删除的用户的用户名。
|
||||
- `--id`:要删除的用户的 ID。
|
||||
- 必须提供 `--id`、`--username` 或 `--email` 中的一个。如果提供多个,则所有条件必须匹配。
|
||||
- 選项:
|
||||
- `--email`:要删除的使用者的电子邮件。
|
||||
- `--username`:要删除的使用者的使用者名。
|
||||
- `--id`:要删除的使用者的 ID。
|
||||
- 必須提供 `--id`、`--username` 或 `--email` 中的一个。如果提供多个,则所有条件必須匹配。
|
||||
- 示例:
|
||||
- `gitea admin user delete --id 1`
|
||||
- `create`:
|
||||
- 选项:
|
||||
- `--name value`:用户名。必填。自 Gitea 1.9.0 版本起,请改用 `--username` 标志。
|
||||
- `--username value`:用户名。必填。Gitea 1.9.0 新增。
|
||||
- `--password value`:密码。必填。
|
||||
- 選项:
|
||||
- `--name value`:使用者名。必填。自 Gitea 1.9.0 版本起,請改用 `--username` 标志。
|
||||
- `--username value`:使用者名。必填。Gitea 1.9.0 新增。
|
||||
- `--password value`:密碼。必填。
|
||||
- `--email value`:邮箱。必填。
|
||||
- `--admin`:如果提供此选项,将创建一个管理员用户。可选。
|
||||
- `--access-token`:如果提供,将为用户创建访问令牌。可选。(默认值:false)。
|
||||
- `--must-change-password`:如果提供,创建的用户将在初始登录后需要选择一个新密码。可选。(默认值:true)。
|
||||
- `--random-password`:如果提供,将使用随机生成的密码作为创建用户的密码。`--password` 的值将被忽略。可选。
|
||||
- `--random-password-length`:如果提供,将用于配置随机生成密码的长度。可选。(默认值:12)
|
||||
- `--admin`:如果提供此選项,将建立一个管理员使用者。可選。
|
||||
- `--access-token`:如果提供,将為使用者建立访问令牌。可選。(默认值:false)。
|
||||
- `--must-change-password`:如果提供,建立的使用者将在初始登入后需要選择一个新密碼。可選。(默认值:true)。
|
||||
- `--random-password`:如果提供,将使用随机生成的密碼作為建立使用者的密碼。`--password` 的值将被忽略。可選。
|
||||
- `--random-password-length`:如果提供,将用于配置随机生成密碼的长度。可選。(默认值:12)
|
||||
- 示例:
|
||||
- `gitea admin user create --username myname --password asecurepassword --email me@example.com`
|
||||
- `change-password`:
|
||||
- 选项:
|
||||
- `--username value`,`-u value`:用户名。必填。
|
||||
- `--password value`,`-p value`:新密码。必填。
|
||||
- 選项:
|
||||
- `--username value`,`-u value`:使用者名。必填。
|
||||
- `--password value`,`-p value`:新密碼。必填。
|
||||
- 示例:
|
||||
- `gitea admin user change-password --username myname --password asecurepassword`
|
||||
- `must-change-password`:
|
||||
- 参数:
|
||||
- `[username...]`:需要更改密码的用户
|
||||
- 选项:
|
||||
- `--all`,`-A`:强制所有用户更改密码
|
||||
- `--exclude username`,`-e username`:排除给定的用户。可以多次设置。
|
||||
- `--unset`:撤销对给定用户的强制密码更改
|
||||
- 參數:
|
||||
- `[username...]`:需要更改密碼的使用者
|
||||
- 選项:
|
||||
- `--all`,`-A`:强制所有使用者更改密碼
|
||||
- `--exclude username`,`-e username`:排除给定的使用者。可以多次设置。
|
||||
- `--unset`:撤销对给定使用者的强制密碼更改
|
||||
- `regenerate`:
|
||||
- 选项:
|
||||
- `hooks`:重新生成所有仓库的 Git Hooks。
|
||||
- 選项:
|
||||
- `hooks`:重新生成所有存放庫的 Git Hooks。
|
||||
- `keys`:重新生成 authorized_keys 文件。
|
||||
- 示例:
|
||||
- `gitea admin regenerate hooks`
|
||||
- `gitea admin regenerate keys`
|
||||
- `auth`:
|
||||
- `list`:
|
||||
- 描述:列出所有存在的外部认证源。
|
||||
- 描述:列出所有存在的外部認證源。
|
||||
- 示例:
|
||||
- `gitea admin auth list`
|
||||
- `delete`:
|
||||
- 选项:
|
||||
- 選项:
|
||||
- `--id`:要删除的源的 ID。必填。
|
||||
- 示例:
|
||||
- `gitea admin auth delete --id 1`
|
||||
- `add-oauth`:
|
||||
- 选项:
|
||||
- `--name`:应用程序名称。
|
||||
- 選项:
|
||||
- `--name`:應用程序名稱。
|
||||
- `--provider`:OAuth2 提供者。
|
||||
- `--key`:客户端 ID(Key)。
|
||||
- `--secret`:客户端密钥。
|
||||
- `--auto-discover-url`:OpenID Connect 自动发现 URL(仅在使用 OpenID Connect 作为提供程序时需要)。
|
||||
- `--auto-discover-url`:OpenID Connect 自动发現 URL(僅在使用 OpenID Connect 作為提供程序时需要)。
|
||||
- `--use-custom-urls`:在 GitLab/GitHub OAuth 端点上使用自定义 URL。
|
||||
- `--custom-tenant-id`:在 OAuth 端点上使用自定义租户 ID。
|
||||
- `--custom-auth-url`:使用自定义授权 URL(GitLab/GitHub 的选项)。
|
||||
- `--custom-token-url`:使用自定义令牌 URL(GitLab/GitHub 的选项)。
|
||||
- `--custom-profile-url`:使用自定义配置文件 URL(GitLab/GitHub 的选项)。
|
||||
- `--custom-email-url`:使用自定义电子邮件 URL(GitHub 的选项)。
|
||||
- `--icon-url`:OAuth2 登录源的自定义图标 URL。
|
||||
- `--skip-local-2fa`:允许源覆盖本地 2FA。(可选)
|
||||
- `--scopes`:请求此 OAuth2 源的附加范围。(可选)
|
||||
- `--required-claim-name`:必须设置的声明名称,以允许用户使用此源登录。(可选)
|
||||
- `--required-claim-value`:必须设置的声明值,以允许用户使用此源登录。(可选)
|
||||
- `--group-claim-name`:提供此源的组名的声明名称。(可选)
|
||||
- `--admin-group`:管理员用户的组声明值。(可选)
|
||||
- `--restricted-group`:受限用户的组声明值。(可选)
|
||||
- `--group-team-map`:组与组织团队之间的 JSON 映射。(可选)
|
||||
- `--group-team-map-removal`:根据组自动激活团队成员资格的删除。(可选)
|
||||
- `--custom-auth-url`:使用自定义授权 URL(GitLab/GitHub 的選项)。
|
||||
- `--custom-token-url`:使用自定义令牌 URL(GitLab/GitHub 的選项)。
|
||||
- `--custom-profile-url`:使用自定义配置文件 URL(GitLab/GitHub 的選项)。
|
||||
- `--custom-email-url`:使用自定义电子邮件 URL(GitHub 的選项)。
|
||||
- `--icon-url`:OAuth2 登入源的自定义图标 URL。
|
||||
- `--skip-local-2fa`:允许源覆盖本地 2FA。(可選)
|
||||
- `--scopes`:請求此 OAuth2 源的附加范围。(可選)
|
||||
- `--required-claim-name`:必須设置的声明名稱,以允许使用者使用此源登入。(可選)
|
||||
- `--required-claim-value`:必須设置的声明值,以允许使用者使用此源登入。(可選)
|
||||
- `--group-claim-name`:提供此源的组名的声明名稱。(可選)
|
||||
- `--admin-group`:管理员使用者的组声明值。(可選)
|
||||
- `--restricted-group`:受限使用者的组声明值。(可選)
|
||||
- `--group-team-map`:组与組織团队之间的 JSON 映射。(可選)
|
||||
- `--group-team-map-removal`:根据组自动激活团队成员资格的删除。(可選)
|
||||
- 示例:
|
||||
- `gitea admin auth add-oauth --name external-github --provider github --key OBTAIN_FROM_SOURCE --secret OBTAIN_FROM_SOURCE`
|
||||
- `update-oauth`:
|
||||
- 选项:
|
||||
- 選项:
|
||||
- `--id`:要更新的源的 ID。必填。
|
||||
- `--name`:应用程序名称。
|
||||
- `--name`:應用程序名稱。
|
||||
- `--provider`:OAuth2 提供者。
|
||||
- `--key`:客户端 ID(Key)。
|
||||
- `--secret`:客户端密钥。
|
||||
- `--auto-discover-url`:OpenID Connect 自动发现 URL(仅在使用 OpenID Connect 作为提供程序时需要)。
|
||||
- `--auto-discover-url`:OpenID Connect 自动发現 URL(僅在使用 OpenID Connect 作為提供程序时需要)。
|
||||
- `--use-custom-urls`:在 GitLab/GitHub OAuth 端点上使用自定义 URL。
|
||||
- `--custom-tenant-id`:在 OAuth 端点上使用自定义租户 ID。
|
||||
- `--custom-auth-url`:使用自定义授权 URL(GitLab/GitHub 的选项)。
|
||||
- `--custom-token-url`:使用自定义令牌 URL(GitLab/GitHub 的选项)。
|
||||
- `--custom-profile-url`:使用自定义配置文件 URL(GitLab/GitHub 的选项)。
|
||||
- `--custom-email-url`:使用自定义电子邮件 URL(GitHub 的选项)。
|
||||
- `--icon-url`:OAuth2 登录源的自定义图标 URL。
|
||||
- `--skip-local-2fa`:允许源覆盖本地 2FA。(可选)
|
||||
- `--scopes`:请求此 OAuth2 源的附加范围。
|
||||
- `--required-claim-name`:必须设置的声明名称,以允许用户使用此源登录。(可选)
|
||||
- `--required-claim-value`:必须设置的声明值,以允许用户使用此源登录。(可选)
|
||||
- `--group-claim-name`:提供此源的组名的声明名称。(可选)
|
||||
- `--admin-group`:管理员用户的组声明值。(可选)
|
||||
- `--restricted-group`:受限用户的组声明值。(可选)
|
||||
- `--custom-auth-url`:使用自定义授权 URL(GitLab/GitHub 的選项)。
|
||||
- `--custom-token-url`:使用自定义令牌 URL(GitLab/GitHub 的選项)。
|
||||
- `--custom-profile-url`:使用自定义配置文件 URL(GitLab/GitHub 的選项)。
|
||||
- `--custom-email-url`:使用自定义电子邮件 URL(GitHub 的選项)。
|
||||
- `--icon-url`:OAuth2 登入源的自定义图标 URL。
|
||||
- `--skip-local-2fa`:允许源覆盖本地 2FA。(可選)
|
||||
- `--scopes`:請求此 OAuth2 源的附加范围。
|
||||
- `--required-claim-name`:必須设置的声明名稱,以允许使用者使用此源登入。(可選)
|
||||
- `--required-claim-value`:必須设置的声明值,以允许使用者使用此源登入。(可選)
|
||||
- `--group-claim-name`:提供此源的组名的声明名稱。(可選)
|
||||
- `--admin-group`:管理员使用者的组声明值。(可選)
|
||||
- `--restricted-group`:受限使用者的组声明值。(可選)
|
||||
- 示例:
|
||||
- `gitea admin auth update-oauth --id 1 --name external-github-updated`
|
||||
- `add-smtp`:
|
||||
- 选项:
|
||||
- `--name`:应用程序名称。必填。
|
||||
- `--auth-type`:SMTP 认证类型(PLAIN/LOGIN/CRAM-MD5)。默认为 PLAIN。
|
||||
- 選项:
|
||||
- `--name`:應用程序名稱。必填。
|
||||
- `--auth-type`:SMTP 認證類型(PLAIN/LOGIN/CRAM-MD5)。默认為 PLAIN。
|
||||
- `--host`:SMTP 主机。必填。
|
||||
- `--port`:SMTP 端口。必填。
|
||||
- `--force-smtps`:SMTPS 始终在端口 465 上使用。设置此选项以强制在其他端口上使用 SMTPS。
|
||||
- `--skip-verify`:跳过 TLS 验证。
|
||||
- `--force-smtps`:SMTPS 始终在端口 465 上使用。设置此選项以强制在其他端口上使用 SMTPS。
|
||||
- `--skip-verify`:跳過 TLS 驗證。
|
||||
- `--helo-hostname`:发送 HELO 时使用的主机名。留空以发送当前主机名。
|
||||
- `--disable-helo`:禁用 SMTP helo。
|
||||
- `--allowed-domains`:留空以允许所有域。使用逗号(',')分隔多个域。
|
||||
- `--skip-local-2fa`:跳过 2FA 登录。
|
||||
- `--active`:启用此认证源。
|
||||
- `--skip-local-2fa`:跳過 2FA 登入。
|
||||
- `--active`:启用此認證源。
|
||||
备注:
|
||||
`--force-smtps`、`--skip-verify`、`--disable-helo`、`--skip-local-2fs` 和 `--active` 选项可以采用以下形式使用:
|
||||
- `--option`、`--option=true` 以启用选项
|
||||
- `--option=false` 以禁用选项
|
||||
如果未指定这些选项,则在 `update-smtp` 中不会更改值,或者在 `add-smtp` 中将使用默认的 `false` 值。
|
||||
`--force-smtps`、`--skip-verify`、`--disable-helo`、`--skip-local-2fs` 和 `--active` 選项可以采用以下形式使用:
|
||||
- `--option`、`--option=true` 以启用選项
|
||||
- `--option=false` 以禁用選项
|
||||
如果未指定这些選项,则在 `update-smtp` 中不会更改值,或者在 `add-smtp` 中将使用默认的 `false` 值。
|
||||
- 示例:
|
||||
- `gitea admin auth add-smtp --name ldap --host smtp.mydomain.org --port 587 --skip-verify --active`
|
||||
- `update-smtp`:
|
||||
- 选项:
|
||||
- 選项:
|
||||
- `--id`:要更新的源的 ID。必填。
|
||||
- 其他选项与 `add-smtp` 共享
|
||||
- 其他選项与 `add-smtp` 共享
|
||||
- 示例:
|
||||
- `gitea admin auth update-smtp --id 1 --host smtp.mydomain.org --port 587 --skip-verify=false`
|
||||
- `gitea admin auth update-smtp --id 1 --active=false`
|
||||
- `add-ldap`:添加新的 LDAP(通过 Bind DN)认证源
|
||||
- 选项:
|
||||
- `--name value`:认证名称。必填。
|
||||
- `--not-active`:停用认证源。
|
||||
- `--security-protocol value`:安全协议名称。必填。
|
||||
- `--skip-tls-verify`:禁用 TLS 验证。
|
||||
- `add-ldap`:添加新的 LDAP(通過 Bind DN)認證源
|
||||
- 選项:
|
||||
- `--name value`:認證名稱。必填。
|
||||
- `--not-active`:停用認證源。
|
||||
- `--security-protocol value`:安全协议名稱。必填。
|
||||
- `--skip-tls-verify`:禁用 TLS 驗證。
|
||||
- `--host value`:LDAP 服务器的地址。必填。
|
||||
- `--port value`:连接到 LDAP 服务器时使用的端口。必填。
|
||||
- `--user-search-base value`:用户帐户将在其中搜索的 LDAP 基础路径。必填。
|
||||
- `--user-filter value`:声明如何查找试图进行身份验证的用户记录的 LDAP 过滤器。必填。
|
||||
- `--admin-filter value`:指定是否应授予用户管理员特权的 LDAP 过滤器。
|
||||
- `--restricted-filter value`:指定是否应将用户设置为受限状态的 LDAP 过滤器。
|
||||
- `--username-attribute value`:用户 LDAP 记录中包含用户名的属性。
|
||||
- `--firstname-attribute value`:用户 LDAP 记录中包含用户名字的属性。
|
||||
- `--surname-attribute value`:用户 LDAP 记录中包含用户姓氏的属性。
|
||||
- `--email-attribute value`:用户 LDAP 记录中包含用户电子邮件地址的属性。必填。
|
||||
- `--public-ssh-key-attribute value`:用户 LDAP 记录中包含用户公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:用户 LDAP 记录中包含用户头像的属性。
|
||||
- `--bind-dn value`:在搜索用户时绑定到 LDAP 服务器的 DN。
|
||||
- `--bind-password value`:绑定 DN 的密码(如果有)。
|
||||
- `--user-search-base value`:使用者帳戶将在其中搜索的 LDAP 基础路径。必填。
|
||||
- `--user-filter value`:声明如何查找试图進行身份驗證的使用者记录的 LDAP 過滤器。必填。
|
||||
- `--admin-filter value`:指定是否應授予使用者管理员特权的 LDAP 過滤器。
|
||||
- `--restricted-filter value`:指定是否應将使用者设置為受限状态的 LDAP 過滤器。
|
||||
- `--username-attribute value`:使用者 LDAP 记录中包含使用者名的属性。
|
||||
- `--firstname-attribute value`:使用者 LDAP 记录中包含使用者名字的属性。
|
||||
- `--surname-attribute value`:使用者 LDAP 记录中包含使用者姓氏的属性。
|
||||
- `--email-attribute value`:使用者 LDAP 记录中包含使用者电子邮件地址的属性。必填。
|
||||
- `--public-ssh-key-attribute value`:使用者 LDAP 记录中包含使用者公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:使用者 LDAP 记录中包含使用者头像的属性。
|
||||
- `--bind-dn value`:在搜索使用者时绑定到 LDAP 服务器的 DN。
|
||||
- `--bind-password value`:绑定 DN 的密碼(如果有)。
|
||||
- `--attributes-in-bind`:在绑定 DN 上下文中获取属性。
|
||||
- `--synchronize-users`:启用用户同步。
|
||||
- `--synchronize-users`:启用使用者同步。
|
||||
- `--page-size value`:搜索页面大小。
|
||||
- 示例:
|
||||
- `gitea admin auth add-ldap --name ldap --security-protocol unencrypted --host mydomain.org --port 389 --user-search-base "ou=Users,dc=mydomain,dc=org" --user-filter "(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))" --email-attribute mail`
|
||||
- `update-ldap`:更新现有的 LDAP(通过 Bind DN)认证源
|
||||
- 选项:
|
||||
- `--id value`:认证源的 ID。必填。
|
||||
- `--name value`:认证名称。
|
||||
- `--not-active`:停用认证源。
|
||||
- `--security-protocol value`:安全协议名称。
|
||||
- `--skip-tls-verify`:禁用 TLS 验证。
|
||||
- `update-ldap`:更新現有的 LDAP(通過 Bind DN)認證源
|
||||
- 選项:
|
||||
- `--id value`:認證源的 ID。必填。
|
||||
- `--name value`:認證名稱。
|
||||
- `--not-active`:停用認證源。
|
||||
- `--security-protocol value`:安全协议名稱。
|
||||
- `--skip-tls-verify`:禁用 TLS 驗證。
|
||||
- `--host value`:LDAP 服务器的地址。
|
||||
- `--port value`:连接到 LDAP 服务器时使用的端口。
|
||||
- `--user-search-base value`:用户帐户将在其中搜索的 LDAP 基础路径。
|
||||
- `--user-filter value`:声明如何查找试图进行身份验证的用户记录的 LDAP 过滤器。
|
||||
- `--admin-filter value`:指定是否应授予用户管理员特权的 LDAP 过滤器。
|
||||
- `--restricted-filter value`:指定是否应将用户设置为受限状态的 LDAP 过滤器。
|
||||
- `--username-attribute value`:用户 LDAP 记录中包含用户名的属性。
|
||||
- `--firstname-attribute value`:用户 LDAP 记录中包含用户名字的属性。
|
||||
- `--surname-attribute value`:用户 LDAP 记录中包含用户姓氏的属性。
|
||||
- `--email-attribute value`:用户 LDAP 记录中包含用户电子邮件地址的属性。
|
||||
- `--public-ssh-key-attribute value`:用户 LDAP 记录中包含用户公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:用户 LDAP 记录中包含用户头像的属性。
|
||||
- `--bind-dn value`:在搜索用户时绑定到 LDAP 服务器的 DN。
|
||||
- `--bind-password value`:绑定 DN 的密码(如果有)。
|
||||
- `--user-search-base value`:使用者帳戶将在其中搜索的 LDAP 基础路径。
|
||||
- `--user-filter value`:声明如何查找试图進行身份驗證的使用者记录的 LDAP 過滤器。
|
||||
- `--admin-filter value`:指定是否應授予使用者管理员特权的 LDAP 過滤器。
|
||||
- `--restricted-filter value`:指定是否應将使用者设置為受限状态的 LDAP 過滤器。
|
||||
- `--username-attribute value`:使用者 LDAP 记录中包含使用者名的属性。
|
||||
- `--firstname-attribute value`:使用者 LDAP 记录中包含使用者名字的属性。
|
||||
- `--surname-attribute value`:使用者 LDAP 记录中包含使用者姓氏的属性。
|
||||
- `--email-attribute value`:使用者 LDAP 记录中包含使用者电子邮件地址的属性。
|
||||
- `--public-ssh-key-attribute value`:使用者 LDAP 记录中包含使用者公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:使用者 LDAP 记录中包含使用者头像的属性。
|
||||
- `--bind-dn value`:在搜索使用者时绑定到 LDAP 服务器的 DN。
|
||||
- `--bind-password value`:绑定 DN 的密碼(如果有)。
|
||||
- `--attributes-in-bind`:在绑定 DN 上下文中获取属性。
|
||||
- `--synchronize-users`:启用用户同步。
|
||||
- `--synchronize-users`:启用使用者同步。
|
||||
- `--page-size value`:搜索页面大小。
|
||||
- 示例:
|
||||
- `gitea admin auth update-ldap --id 1 --name "my ldap auth source"`
|
||||
- `gitea admin auth update-ldap --id 1 --username-attribute uid --firstname-attribute givenName --surname-attribute sn`
|
||||
- `add-ldap-simple`:添加新的 LDAP(简单身份验证)认证源
|
||||
- 选项:
|
||||
- `--name value`:认证名称。必填。
|
||||
- `--not-active`:停用认证源。
|
||||
- `--security-protocol value`:安全协议名称。必填。
|
||||
- `--skip-tls-verify`:禁用 TLS 验证。
|
||||
- `add-ldap-simple`:添加新的 LDAP(简單身份驗證)認證源
|
||||
- 選项:
|
||||
- `--name value`:認證名稱。必填。
|
||||
- `--not-active`:停用認證源。
|
||||
- `--security-protocol value`:安全协议名稱。必填。
|
||||
- `--skip-tls-verify`:禁用 TLS 驗證。
|
||||
- `--host value`:LDAP 服务器的地址。必填。
|
||||
- `--port value`:连接到 LDAP 服务器时使用的端口。必填。
|
||||
- `--user-search-base value`:用户帐户将在其中搜索的 LDAP 基础路径。
|
||||
- `--user-filter value`:声明如何查找试图进行身份验证的用户记录的 LDAP 过滤器。必填。
|
||||
- `--admin-filter value`:指定是否应授予用户管理员特权的 LDAP 过滤器。
|
||||
- `--restricted-filter value`:指定是否应将用户设置为受限状态的 LDAP 过滤器。
|
||||
- `--username-attribute value`:用户 LDAP 记录中包含用户名的属性。
|
||||
- `--firstname-attribute value`:用户 LDAP 记录中包含用户名字的属性。
|
||||
- `--surname-attribute value`:用户 LDAP 记录中包含用户姓氏的属性。
|
||||
- `--email-attribute value`:用户 LDAP 记录中包含用户电子邮件地址的属性。必填。
|
||||
- `--public-ssh-key-attribute value`:用户 LDAP 记录中包含用户公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:用户 LDAP 记录中包含用户头像的属性。
|
||||
- `--user-dn value`:用户的 DN。必填。
|
||||
- `--user-search-base value`:使用者帳戶将在其中搜索的 LDAP 基础路径。
|
||||
- `--user-filter value`:声明如何查找试图進行身份驗證的使用者记录的 LDAP 過滤器。必填。
|
||||
- `--admin-filter value`:指定是否應授予使用者管理员特权的 LDAP 過滤器。
|
||||
- `--restricted-filter value`:指定是否應将使用者设置為受限状态的 LDAP 過滤器。
|
||||
- `--username-attribute value`:使用者 LDAP 记录中包含使用者名的属性。
|
||||
- `--firstname-attribute value`:使用者 LDAP 记录中包含使用者名字的属性。
|
||||
- `--surname-attribute value`:使用者 LDAP 记录中包含使用者姓氏的属性。
|
||||
- `--email-attribute value`:使用者 LDAP 记录中包含使用者电子邮件地址的属性。必填。
|
||||
- `--public-ssh-key-attribute value`:使用者 LDAP 记录中包含使用者公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:使用者 LDAP 记录中包含使用者头像的属性。
|
||||
- `--user-dn value`:使用者的 DN。必填。
|
||||
- 示例:
|
||||
- `gitea admin auth add-ldap-simple --name ldap --security-protocol unencrypted --host mydomain.org --port 389 --user-dn "cn=%s,ou=Users,dc=mydomain,dc=org" --user-filter "(&(objectClass=posixAccount)(cn=%s))" --email-attribute mail`
|
||||
- `update-ldap-simple`:更新现有的 LDAP(简单身份验证)认证源
|
||||
- 选项:
|
||||
- `--id value`:认证源的 ID。必填。
|
||||
- `--name value`:认证名称。
|
||||
- `--not-active`:停用认证源。
|
||||
- `--security-protocol value`:安全协议名称。
|
||||
- `--skip-tls-verify`:禁用 TLS 验证。
|
||||
- `update-ldap-simple`:更新現有的 LDAP(简單身份驗證)認證源
|
||||
- 選项:
|
||||
- `--id value`:認證源的 ID。必填。
|
||||
- `--name value`:認證名稱。
|
||||
- `--not-active`:停用認證源。
|
||||
- `--security-protocol value`:安全协议名稱。
|
||||
- `--skip-tls-verify`:禁用 TLS 驗證。
|
||||
- `--host value`:LDAP 服务器的地址。
|
||||
- `--port value`:连接到 LDAP 服务器时使用的端口。
|
||||
- `--user-search-base value`:用户帐户将在其中搜索的 LDAP 基础路径。
|
||||
- `--user-filter value`:声明如何查找试图进行身份验证的用户记录的 LDAP 过滤器。
|
||||
- `--admin-filter value`:指定是否应授予用户管理员特权的 LDAP 过滤器。
|
||||
- `--restricted-filter value`:指定是否应将用户设置为受限状态的 LDAP 过滤器。
|
||||
- `--username-attribute value`:用户 LDAP 记录中包含用户名的属性。
|
||||
- `--firstname-attribute value`:用户 LDAP 记录中包含用户名字的属性。
|
||||
- `--surname-attribute value`:用户 LDAP 记录中包含用户姓氏的属性。
|
||||
- `--email-attribute value`:用户 LDAP 记录中包含用户电子邮件地址的属性。
|
||||
- `--public-ssh-key-attribute value`:用户 LDAP 记录中包含用户公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:用户 LDAP 记录中包含用户头像的属性。
|
||||
- `--user-dn value`:用户的 DN。
|
||||
- `--user-search-base value`:使用者帳戶将在其中搜索的 LDAP 基础路径。
|
||||
- `--user-filter value`:声明如何查找试图進行身份驗證的使用者记录的 LDAP 過滤器。
|
||||
- `--admin-filter value`:指定是否應授予使用者管理员特权的 LDAP 過滤器。
|
||||
- `--restricted-filter value`:指定是否應将使用者设置為受限状态的 LDAP 過滤器。
|
||||
- `--username-attribute value`:使用者 LDAP 记录中包含使用者名的属性。
|
||||
- `--firstname-attribute value`:使用者 LDAP 记录中包含使用者名字的属性。
|
||||
- `--surname-attribute value`:使用者 LDAP 记录中包含使用者姓氏的属性。
|
||||
- `--email-attribute value`:使用者 LDAP 记录中包含使用者电子邮件地址的属性。
|
||||
- `--public-ssh-key-attribute value`:使用者 LDAP 记录中包含使用者公共 SSH 密钥的属性。
|
||||
- `--avatar-attribute value`:使用者 LDAP 记录中包含使用者头像的属性。
|
||||
- `--user-dn value`:使用者的 DN。
|
||||
- 示例:
|
||||
- `gitea admin auth update-ldap-simple --id 1 --name "my ldap auth source"`
|
||||
- `gitea admin auth update-ldap-simple --id 1 --username-attribute uid --firstname-attribute givenName --surname-attribute sn`
|
||||
|
||||
### cert
|
||||
|
||||
生成自签名的 SSL 证书。将输出到当前目录下的`cert.pem`和`key.pem`文件中,并且会覆盖任何现有文件。
|
||||
生成自签名的 SSL 证书。将输出到当前目錄下的`cert.pem`和`key.pem`文件中,並且会覆盖任何現有文件。
|
||||
|
||||
- 选项:
|
||||
- 選项:
|
||||
- `--host value`:逗号分隔的主机名和 IP 地址列表,此证书适用于这些主机。支持使用通配符。必填。
|
||||
- `--ecdsa-curve value`:用于生成密钥的 ECDSA 曲线。可选。有效选项为 P224、P256、P384、P521。
|
||||
- `--rsa-bits value`:要生成的 RSA 密钥的大小。可选。如果设置了--ecdsa-curve,则忽略此选项。(默认值:3072)。
|
||||
- `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。
|
||||
- `--duration value`:证书有效期。可选。(默认值:8760h0m0s)
|
||||
- `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。
|
||||
- `--ecdsa-curve value`:用于生成密钥的 ECDSA 曲线。可選。有效選项為 P224、P256、P384、P521。
|
||||
- `--rsa-bits value`:要生成的 RSA 密钥的大小。可選。如果设置了--ecdsa-curve,则忽略此選项。(默认值:3072)。
|
||||
- `--start-date value`:证书的建立日期。可選。(格式:`Jan 1 15:04:05 2011`)。
|
||||
- `--duration value`:证书有效期。可選。(默认值:8760h0m0s)
|
||||
- `--ca`:如果提供此選项,则证书将生成自己的证书颁发机构。可選。
|
||||
- 示例:
|
||||
- `gitea cert --host git.example.com,example.com,www.example.com --ca`
|
||||
|
||||
### dump
|
||||
|
||||
将所有文件和数据库导出到一个 zip 文件中。输出文件将保存在当前目录下,类似于`gitea-dump-1482906742.zip`。
|
||||
将所有文件和数据库导出到一个 zip 文件中。输出文件将保存在当前目錄下,类似于`gitea-dump-1482906742.zip`。
|
||||
|
||||
- 选项:
|
||||
- `--file name`,`-f name`:指定要创建的导出文件的名称。可选。(默认值:gitea-dump-[timestamp].zip)。
|
||||
- `--tempdir path`,`-t path`:指定临时目录的路径。可选。(默认值:/tmp)。
|
||||
- `--skip-repository`,`-R`:跳过仓库的导出。可选。
|
||||
- `--skip-custom-dir`:跳过自定义目录的导出。可选。
|
||||
- `--skip-lfs-data`:跳过 LFS 数据的导出。可选。
|
||||
- `--skip-attachment-data`:跳过附件数据的导出。可选。
|
||||
- `--skip-package-data`:跳过包数据的导出。可选。
|
||||
- `--skip-log`:跳过日志数据的导出。可选。
|
||||
- `--database`,`-d`:指定数据库的 SQL 语法。可选。
|
||||
- `--verbose`,`-V`:如果提供此选项,显示附加详细信息。可选。
|
||||
- `--type`:设置导出的格式。可选。(默认值:zip)
|
||||
- 選项:
|
||||
- `--file name`,`-f name`:指定要建立的导出文件的名稱。可選。(默认值:gitea-dump-[timestamp].zip)。
|
||||
- `--tempdir path`,`-t path`:指定临时目錄的路径。可選。(默认值:/tmp)。
|
||||
- `--skip-repository`,`-R`:跳過存放庫的导出。可選。
|
||||
- `--skip-custom-dir`:跳過自定义目錄的导出。可選。
|
||||
- `--skip-lfs-data`:跳過 LFS 数据的导出。可選。
|
||||
- `--skip-attachment-data`:跳過附件数据的导出。可選。
|
||||
- `--skip-package-data`:跳過包数据的导出。可選。
|
||||
- `--skip-log`:跳過日志数据的导出。可選。
|
||||
- `--database`,`-d`:指定数据库的 SQL 语法。可選。
|
||||
- `--verbose`,`-V`:如果提供此選项,显示附加详细信息。可選。
|
||||
- `--type`:设置导出的格式。可選。(默认值:zip)
|
||||
- 示例:
|
||||
- `gitea dump`
|
||||
- `gitea dump --verbose`
|
||||
|
||||
### generate
|
||||
|
||||
用于在配置文件中生成随机值和令牌。对于自动部署时生成值非常有用。
|
||||
用于在配置文件中生成随机值和令牌。對於自动部署时生成值非常有用。
|
||||
|
||||
- 命令:
|
||||
- `secret`:
|
||||
- 选项:
|
||||
- `INTERNAL_TOKEN`: 用于内部 API 调用身份验证的令牌。
|
||||
- `JWT_SECRET`: 用于 LFS 和 OAUTH2 JWT 身份验证的密钥(LFS_JWT_SECRET 是此选项的别名,用于向后兼容)。
|
||||
- 選项:
|
||||
- `INTERNAL_TOKEN`: 用于内部 API 调用身份驗證的令牌。
|
||||
- `JWT_SECRET`: 用于 LFS 和 OAUTH2 JWT 身份驗證的密钥(LFS_JWT_SECRET 是此選项的别名,用于向后兼容)。
|
||||
- `SECRET_KEY`: 全局密钥。
|
||||
- 示例:
|
||||
- `gitea generate secret INTERNAL_TOKEN`
|
||||
@@ -331,27 +331,27 @@ aliases:
|
||||
|
||||
### keys
|
||||
|
||||
提供一个 SSHD AuthorizedKeysCommand。需要在 sshd 配置文件中进行配置:
|
||||
提供一个 SSHD AuthorizedKeysCommand。需要在 sshd 配置文件中進行配置:
|
||||
|
||||
```ini
|
||||
...
|
||||
# -e 的值和 AuthorizedKeysCommandUser 应与运行 Gitea 的用户名匹配
|
||||
# -e 的值和 AuthorizedKeysCommandUser 應与运行 Gitea 的使用者名匹配
|
||||
AuthorizedKeysCommandUser git
|
||||
AuthorizedKeysCommand /path/to/gitea keys -e git -u %u -t %t -k %k
|
||||
```
|
||||
|
||||
该命令将返回适用于提供的密钥的合适 authorized_keys 行。您还应在 `app.ini` 的 `[server]` 部分设置值 `SSH_CREATE_AUTHORIZED_KEYS_FILE=false`。
|
||||
該命令将返回适用于提供的密钥的合适 authorized_keys 行。您還應在 `app.ini` 的 `[server]` 部分设置值 `SSH_CREATE_AUTHORIZED_KEYS_FILE=false`。
|
||||
|
||||
注意: opensshd 要求 Gitea 程序由 root 拥有,并且不可由组或其他人写入。程序必须使用绝对路径指定。
|
||||
注意: Gitea 必须在运行此命令时处于运行状态才能成功。
|
||||
注意: opensshd 要求 Gitea 程序由 root 拥有,並且不可由组或其他人写入。程序必須使用绝对路径指定。
|
||||
注意: Gitea 必須在运行此命令时处于运行状态才能成功。
|
||||
|
||||
### migrate
|
||||
|
||||
迁移数据库。该命令可用于在首次启动服务器之前运行其他命令。此命令是幂等的。
|
||||
迁移数据库。該命令可用于在首次启动服务器之前运行其他命令。此命令是幂等的。
|
||||
|
||||
### doctor check
|
||||
|
||||
对 Gitea 实例进行诊断,可以修复一些可修复的问题。
|
||||
对 Gitea 实例進行诊断,可以修复一些可修复的问题。
|
||||
默认只运行部分检查,额外的检查可以参考:
|
||||
|
||||
- `gitea doctor check --list` - 列出所有可用的检查
|
||||
@@ -359,8 +359,8 @@ AuthorizedKeysCommand /path/to/gitea keys -e git -u %u -t %t -k %k
|
||||
- `gitea doctor check --default` - 运行默认的检查
|
||||
- `gitea doctor check --run [check(s),]...` - 运行指定的名字的检查
|
||||
|
||||
有些问题可以通过设置 `--fix` 选项进行自动修复。
|
||||
额外的日志可以通过 `--log-file=...` 进行设置。
|
||||
有些问题可以通過设置 `--fix` 選项進行自动修复。
|
||||
额外的日志可以通過 `--log-file=...` 進行设置。
|
||||
|
||||
#### doctor recreate-table
|
||||
|
||||
@@ -370,19 +370,19 @@ AuthorizedKeysCommand /path/to/gitea keys -e git -u %u -t %t -k %k
|
||||
2020/08/02 11:32:29 ...rm/session_schema.go:360:Sync() [W] Table user Column keep_activity_private db default is , struct default is 0
|
||||
```
|
||||
|
||||
您可以通过以下方式让 Gitea 重新创建这些表,并将旧数据复制到新表中,并适当设置默认值:
|
||||
您可以通過以下方式让 Gitea 重新建立这些表,並将旧数据复制到新表中,並适当设置默认值:
|
||||
|
||||
```
|
||||
gitea doctor recreate-table user
|
||||
```
|
||||
|
||||
您可以使用以下方式让 Gitea 重新创建多个表:
|
||||
您可以使用以下方式让 Gitea 重新建立多个表:
|
||||
|
||||
```
|
||||
gitea doctor recreate-table table1 table2 ...
|
||||
```
|
||||
|
||||
如果您希望 Gitea 重新创建所有表,请直接调用:
|
||||
如果您希望 Gitea 重新建立所有表,請直接调用:
|
||||
|
||||
```
|
||||
gitea doctor recreate-table
|
||||
@@ -392,47 +392,47 @@ gitea doctor recreate-table
|
||||
|
||||
### doctor convert
|
||||
|
||||
将现有的 MySQL 数据库从 utf8 转换为 utf8mb4,或者把 MSSQL 数据库从 varchar 转换为 nvarchar。
|
||||
将現有的 MySQL 数据库从 utf8 转换為 utf8mb4,或者把 MSSQL 数据库从 varchar 转换為 nvarchar。
|
||||
|
||||
### manager
|
||||
|
||||
管理运行中的服务器操作:
|
||||
|
||||
- 命令:
|
||||
- `shutdown`: 优雅地关闭运行中的进程
|
||||
- `restart`: 优雅地重新启动运行中的进程(对于 Windows 服务器尚未实现)
|
||||
- `flush-queues`: 刷新运行中的进程中的队列
|
||||
- 选项:
|
||||
- `--timeout value`: 刷新过程的超时时间(默认值: 1m0s)
|
||||
- `--non-blocking`: 设置为 true,以在返回之前不等待刷新完成
|
||||
- `shutdown`: 优雅地关闭运行中的進程
|
||||
- `restart`: 优雅地重新启动运行中的進程(對於 Windows 服务器尚未实現)
|
||||
- `flush-queues`: 刷新运行中的進程中的队列
|
||||
- 選项:
|
||||
- `--timeout value`: 刷新過程的超时时间(默认值: 1m0s)
|
||||
- `--non-blocking`: 设置為 true,以在返回之前不等待刷新完成
|
||||
- `logging`: 调整日志命令
|
||||
- 命令:
|
||||
- `pause`: 暂停日志记录
|
||||
- 注意:
|
||||
- 如果日志级别低于此级别,日志级别将被临时提升为 INFO。
|
||||
- Gitea 将在一定程度上缓冲日志,并在超过该点后丢弃日志。
|
||||
- 如果日志级别低于此级别,日志级别将被临时提升為 INFO。
|
||||
- Gitea 将在一定程度上缓冲日志,並在超過該点后丢弃日志。
|
||||
- `resume`: 恢复日志记录
|
||||
- `release-and-reopen`: 使 Gitea 释放和重新打开用于日志记录的文件和连接(相当于向 Gitea 发送 SIGUSR1 信号)。
|
||||
- `remove name`: 删除指定的日志记录器
|
||||
- 选项:
|
||||
- `--group group`, `-g group`: 从中删除子记录器的组(默认为`default`)
|
||||
- 選项:
|
||||
- `--group group`, `-g group`: 从中删除子记录器的组(默认為`default`)
|
||||
- `add`: 添加日志记录器
|
||||
- 命令:
|
||||
- `console`: 添加控制台日志记录器
|
||||
- 选项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式
|
||||
- 選项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认為"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名稱 - 默认為模式
|
||||
- `--level value`, `-l value`: 新日志记录器的日志级别
|
||||
- `--stacktrace-level value`, `-L value`: 堆栈跟踪日志级别
|
||||
- `--flags value`, `-F value`: 日志记录器的标志
|
||||
- `--expression value`, `-e value`: 日志记录器的匹配表达式
|
||||
- `--prefix value`, `-p value`: 日志记录器的前缀
|
||||
- `--color`: 在日志中使用颜色
|
||||
- `--stderr`: 将控制台日志输出到 stderr - 仅适用于控制台
|
||||
- `--stderr`: 将控制台日志输出到 stderr - 僅适用于控制台
|
||||
- `file`: 添加文件日志记录器
|
||||
- 选项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式
|
||||
- 選项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认為"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名稱 - 默认為模式
|
||||
- `--level value`, `-l value`: 新日志记录器的日志级别
|
||||
- `--stacktrace-level value`, `-L value`: 堆栈跟踪日志级别
|
||||
- `--flags value`, `-F value`: 日志记录器的标志
|
||||
@@ -441,79 +441,79 @@ gitea doctor recreate-table
|
||||
- `--color`: 在日志中使用颜色
|
||||
- `--filename value`, `-f value`: 日志记录器的文件名
|
||||
- `--rotate`, `-r`: 轮转日志
|
||||
- `--max-size value`, `-s value`: 在轮转之前的最大大小(以字节为单位)
|
||||
- `--max-size value`, `-s value`: 在轮转之前的最大大小(以字节為單位)
|
||||
- `--daily`, `-d`: 每天轮转日志
|
||||
- `--max-days value`, `-D value`: 保留的每日日志的最大数量
|
||||
- `--compress`, `-z`: 压缩轮转的日志
|
||||
- `--compression-level value`, `-Z value`: 使用的压缩级别
|
||||
- `conn`: 添加网络连接日志记录器
|
||||
- 选项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式
|
||||
- 選项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认為"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名稱 - 默认為模式
|
||||
- `--level value`, `-l value`: 新日志记录器的日志级别
|
||||
- `--stacktrace-level value`, `-L value`: 堆栈跟踪日志级别
|
||||
- `--flags value`, `-F value`: 日志记录器的标志
|
||||
- `--expression value`, `-e value`: 日志记录器的匹配表达式
|
||||
- `--prefix value`, `-p value`: 日志记录器的前缀
|
||||
- `--color`: 在日志中使用颜色
|
||||
- `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机
|
||||
- `--reconnect-on-message`, `-R`: 對於每个消息重新连接主机
|
||||
- `--reconnect`, `-r`: 连接中断时重新连接主机
|
||||
- `--protocol value`, `-P value`: 设置要使用的协议:tcp、unix 或 udp(默认为 tcp)
|
||||
- `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020)
|
||||
- `--protocol value`, `-P value`: 设置要使用的协议:tcp、unix 或 udp(默认為 tcp)
|
||||
- `--address value`, `-a value`: 要连接到的主机地址和端口(默认為:7020)
|
||||
- `smtp`: 添加 SMTP 日志记录器
|
||||
- 选项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式
|
||||
- 選项:
|
||||
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认為"default"
|
||||
- `--name value`, `-n value`: 新日志记录器的名稱 - 默认為模式
|
||||
- `--level value`, `-l value`: 新日志记录器的日志级别
|
||||
- `--stacktrace-level value`, `-L value`: 堆栈跟踪日志级别
|
||||
- `--flags value`, `-F value`: 日志记录器的标志
|
||||
- `--expression value`, `-e value`: 日志记录器的匹配表达式
|
||||
- `--prefix value`, `-p value`: 日志记录器的前缀
|
||||
- `--color`: 在日志中使用颜色
|
||||
- `--username value`, `-u value`: 邮件服务器用户名
|
||||
- `--password value`, `-P value`: 邮件服务器密码
|
||||
- `--host value`, `-H value`: 邮件服务器主机(默认为: 127.0.0.1:25)
|
||||
- `--username value`, `-u value`: 邮件服务器使用者名
|
||||
- `--password value`, `-P value`: 邮件服务器密碼
|
||||
- `--host value`, `-H value`: 邮件服务器主机(默认為: 127.0.0.1:25)
|
||||
- `--send-to value`, `-s value`: 要发送到的电子邮件地址
|
||||
- `--subject value`, `-S value`: 发送电子邮件的主题标题
|
||||
- `processes`: 显示 Gitea 进程和 Goroutine 信息
|
||||
- 选项:
|
||||
- `--flat`: 以平面表格形式显示进程,而不是树形结构
|
||||
- `--no-system`: 不显示系统进程
|
||||
- `--stacktraces`: 显示与进程关联的 Goroutine 的堆栈跟踪
|
||||
- `--json`: 输出为 JSON 格式
|
||||
- `--cancel PID`: 向具有 PID 的进程发送取消命令(仅适用于非系统进程)
|
||||
- `processes`: 显示 Gitea 進程和 Goroutine 信息
|
||||
- 選项:
|
||||
- `--flat`: 以平面表格形式显示進程,而不是树形结构
|
||||
- `--no-system`: 不显示系统進程
|
||||
- `--stacktraces`: 显示与進程关联的 Goroutine 的堆栈跟踪
|
||||
- `--json`: 输出為 JSON 格式
|
||||
- `--cancel PID`: 向具有 PID 的進程发送取消命令(僅适用于非系统進程)
|
||||
|
||||
### dump-repo
|
||||
|
||||
`dump-repo` 从 Git/GitHub/Gitea/GitLab 中转储存储库数据:
|
||||
`dump-repo` 从 Git/GitHub/Gitea/GitLab 中转儲存儲库数据:
|
||||
|
||||
- 选项:
|
||||
- `--git_service service`:Git 服务,可以是 `git`、`github`、`gitea`、`gitlab`。如果 `clone_addr` 可以被识别,则可以忽略此选项。
|
||||
- `--repo_dir dir`,`-r dir`:存储数据的存储库目录路径。
|
||||
- 選项:
|
||||
- `--git_service service`:Git 服务,可以是 `git`、`github`、`gitea`、`gitlab`。如果 `clone_addr` 可以被识别,则可以忽略此選项。
|
||||
- `--repo_dir dir`,`-r dir`:存儲数据的存儲库目錄路径。
|
||||
- `--clone_addr addr`:将被克隆的 URL,目前可以是 git/github/gitea/gitlab 的 http/https URL。例如:https://github.com/lunny/tango.git
|
||||
- `--auth_username lunny`:访问 `clone_addr` 的用户名。
|
||||
- `--auth_password <password>`:访问 `clone_addr` 的密码。
|
||||
- `--auth_username lunny`:访问 `clone_addr` 的使用者名。
|
||||
- `--auth_password <password>`:访问 `clone_addr` 的密碼。
|
||||
- `--auth_token <token>`:访问 `clone_addr` 的个人令牌。
|
||||
- `--owner_name lunny`:如果非空,数据将存储在具有所有者名称的目录中。
|
||||
- `--repo_name tango`:如果非空,数据将存储在具有存储库名称的目录中。
|
||||
- `--units <units>`:要迁移的项目,一个或多个项目应以逗号分隔。允许的项目有 wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments。如果为空,则表示所有项目。
|
||||
- `--owner_name lunny`:如果非空,数据将存儲在具有所有者名稱的目錄中。
|
||||
- `--repo_name tango`:如果非空,数据将存儲在具有存儲库名稱的目錄中。
|
||||
- `--units <units>`:要迁移的项目,一个或多个项目應以逗号分隔。允许的项目有 wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments。如果為空,则表示所有项目。
|
||||
|
||||
### restore-repo
|
||||
|
||||
`restore-repo` 从磁盘目录中还原存储库数据:
|
||||
`restore-repo` 从硬碟目錄中還原存儲库数据:
|
||||
|
||||
- 选项:
|
||||
- `--repo_dir dir`,`-r dir`:还原数据的存储库目录路径。
|
||||
- `--owner_name lunny`:还原目标所有者名称。
|
||||
- `--repo_name tango`:还原目标存储库名称。
|
||||
- `--units <units>`:要还原的项目,一个或多个项目应以逗号分隔。允许的项目有 wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments。如果为空,则表示所有项目。
|
||||
- 選项:
|
||||
- `--repo_dir dir`,`-r dir`:還原数据的存儲库目錄路径。
|
||||
- `--owner_name lunny`:還原目标所有者名稱。
|
||||
- `--repo_name tango`:還原目标存儲库名稱。
|
||||
- `--units <units>`:要還原的项目,一个或多个项目應以逗号分隔。允许的项目有 wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments。如果為空,则表示所有项目。
|
||||
|
||||
### actions generate-runner-token
|
||||
|
||||
生成一个供 Runner 使用的新令牌,用于向服务器注册。
|
||||
|
||||
- 选项:
|
||||
- `--scope {owner}[/{repo}]`,`-s {owner}[/{repo}]`:限制 Runner 的范围,没有范围表示该 Runner 可用于所有仓库,但你也可以将其限制为特定的仓库或所有者。
|
||||
- 選项:
|
||||
- `--scope {owner}[/{repo}]`,`-s {owner}[/{repo}]`:限制 Runner 的范围,没有范围表示該 Runner 可用于所有存放庫,但你也可以将其限制為特定的存放庫或所有者。
|
||||
|
||||
要注册全局 Runner:
|
||||
|
||||
@@ -521,13 +521,13 @@ gitea doctor recreate-table
|
||||
gitea actions generate-runner-token
|
||||
```
|
||||
|
||||
要注册特定组织的 Runner,例如 `org`:
|
||||
要注册特定組織的 Runner,例如 `org`:
|
||||
|
||||
```
|
||||
gitea actions generate-runner-token -s org
|
||||
```
|
||||
|
||||
要注册特定仓库的 Runner,例如 `username/test-repo`:
|
||||
要注册特定存放庫的 Runner,例如 `username/test-repo`:
|
||||
|
||||
```
|
||||
gitea actions generate-runner-token -s username/test-repo
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,75 +9,75 @@ aliases:
|
||||
|
||||
# 自定义 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
|
||||
|
||||
将 [想要展示的内容](http://www.robotstxt.org/) 存放在 `custom` 目录中的
|
||||
将 [想要展示的内容](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 `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/` 目录中存放一些其他有用的模板,例如:
|
||||
除了 `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 结束处的模板
|
||||
- `body_outer_post.tmpl`,在底部 `<footer>` 元素之前.
|
||||
- `footer.tmpl`,在 `<body>` 标签结束处的模板,可以在这里填写一些附加的 Javascript 脚本。
|
||||
- `footer.tmpl`,在 `<body>` 標籤结束处的模板,可以在这里填写一些附加的 Javascript 脚本。
|
||||
|
||||
## 自定义 gitignores,labels, licenses, locales 以及 readmes
|
||||
|
||||
将自定义文件放在 `custom/options` 下相应子的文件夹中即可
|
||||
将自定义文件放在 `custom/options` 下相應子的文件夹中即可
|
||||
|
||||
## 更改 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` 進行更改。
|
||||
|
||||
@@ -9,15 +9,15 @@ aliases:
|
||||
|
||||
# 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 = gitea@mydomain.com
|
||||
PROTOCOL = sendmail
|
||||
SENDMAIL_PATH = /usr/sbin/sendmail
|
||||
SENDMAIL_ARGS = "--" ; 大多数 "sendmail" 程序都接受选项,使用 "--" 将防止电子邮件地址被解释为选项。
|
||||
SENDMAIL_ARGS = "--" ; 大多数 "sendmail" 程序都接受選项,使用 "--" 将防止电子邮件地址被解释為選项。
|
||||
```
|
||||
|
||||
## 使用 SMTP
|
||||
|
||||
直接使用 SMTP 服务器作为中继。如果您不想在实例上设置 MTA,但在电子邮件提供商那里有一个帐户,这个选项非常有用。
|
||||
直接使用 SMTP 服务器作為中继。如果您不想在实例上设置 MTA,但在电子邮件提供商那里有一个帳戶,这个選项非常有用。
|
||||
|
||||
```ini title="app.ini"
|
||||
[mailer]
|
||||
@@ -45,27 +45,27 @@ PASSWD = `password`
|
||||
|
||||
重启 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 = example.user@gmail.com
|
||||
@@ -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,9 +7,9 @@ aliases:
|
||||
- /zh-tw/environment-variables
|
||||
---
|
||||
|
||||
# 环境变量清单
|
||||
# 环境变量清單
|
||||
|
||||
这里是用来控制 Gitea 行为表现的的环境变量清单,您需要在执行如下 Gitea 启动命令前设置它们来确保配置生效:
|
||||
这里是用来控制 Gitea 行為表現的的环境变量清單,您需要在執行如下 Gitea 启动命令前设置它们来确保配置生效:
|
||||
|
||||
```
|
||||
GITEA_CUSTOM=/home/gitea/custom ./gitea web
|
||||
@@ -17,33 +17,33 @@ GITEA_CUSTOM=/home/gitea/custom ./gitea web
|
||||
|
||||
## 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 的文件目錄
|
||||
|
||||
- `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 的访问地址的一部分
|
||||
- `USER`:Gitea 运行时使用的系统使用者,它将作為一些 repository 的访问地址的一部分
|
||||
- `USERNAME`: 如果没有配置 `USER`, Gitea 将使用 `USERNAME`
|
||||
- `HOME`: 用户的 home 目录,在 Windows 中会使用 `USERPROFILE` 环境变量
|
||||
- `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 实例
|
||||
|
||||
此功能支持整个文件的渲染。如果您想要在 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@
|
||||
@@ -30,15 +30,15 @@ COPY custom/app.ini /data/gitea/conf/app.ini
|
||||
[...]
|
||||
|
||||
RUN apk --no-cache add asciidoctor freetype freetype-dev gcc g++ libpng libffi-dev pandoc python3-dev py3-pyzmq pipx
|
||||
# 安装其他您需要的外部渲染器的软件包
|
||||
# 安裝其他您需要的外部渲染器的軟體包
|
||||
|
||||
RUN pipx install jupyter docutils --include-deps
|
||||
# 在上面添加您需要安装的任何其他 Python 软件包
|
||||
# 在上面添加您需要安裝的任何其他 Python 軟體包
|
||||
```
|
||||
|
||||
## `app.ini` 文件配置
|
||||
|
||||
在您的自定义 `app.ini` 文件中为每个外部渲染器添加一个 `[markup.XXXXX]` 部分:
|
||||
在您的自定义 `app.ini` 文件中為每个外部渲染器添加一个 `[markup.XXXXX]` 部分:
|
||||
|
||||
```ini
|
||||
[markup.asciidoc]
|
||||
@@ -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,17 +77,17 @@ 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
|
||||
|
||||
@@ -110,9 +110,9 @@ ELEMENT = a
|
||||
ALLOW_ATTR = class
|
||||
```
|
||||
|
||||
请注意:此示例中的配置将允许渲染 HTML 文件,并使用 `cat` 命令将文件内容输出为 HTML。此外,配置中的两个清理规则将允许 `<div>` 和 `<a>` 元素使用 `class` 属性。
|
||||
請注意:此示例中的配置将允许渲染 HTML 文件,並使用 `cat` 命令将文件内容输出為 HTML。此外,配置中的两个清理規則将允许 `<div>` 和 `<a>` 元素使用 `class` 属性。
|
||||
|
||||
在进行配置更改后,请重新启动 Gitea 以使更改生效。
|
||||
在進行配置更改后,請重新启动 Gitea 以使更改生效。
|
||||
|
||||
### 示例:Office DOCX
|
||||
|
||||
@@ -128,7 +128,7 @@ 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 格式的图片。
|
||||
|
||||
模板文件的内容如下:
|
||||
|
||||
@@ -150,13 +150,13 @@ 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
|
||||
|
||||
在 `.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 样式:
|
||||
|
||||
@@ -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 样式應用到特定的外部渲染器,使其具有所需的样式效果。
|
||||
|
||||
@@ -9,11 +9,11 @@ aliases:
|
||||
|
||||
# 设置 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,13 +61,13 @@ 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;
|
||||
@@ -80,7 +80,7 @@ REVERSE_PROXY_LIMIT = 1
|
||||
REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128
|
||||
```
|
||||
|
||||
`REVERSE_PROXY_LIMIT` 限制反向代理服务器的层数,设置为 `0` 表示不使用这些标头。
|
||||
`REVERSE_PROXY_LIMIT` 限制反向代理服务器的层数,设置為 `0` 表示不使用这些标头。
|
||||
`REVERSE_PROXY_TRUSTED_PROXIES` 表示受信任的反向代理服务器网络地址,
|
||||
经过该网络地址转发来的流量会经过解析 `X-Real-IP` 头部得到真实客户端地址。
|
||||
经過該网络地址转发来的流量会经過解析 `X-Real-IP` 头部得到真实客户端地址。
|
||||
(参考 [configuration cheat sheet](../administration/config-cheat-sheet.md#安全性))
|
||||
|
||||
@@ -13,12 +13,12 @@ aliases:
|
||||
|
||||
```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 以上版本。
|
||||
|
||||
@@ -10,11 +10,11 @@ sidebar_position: 12
|
||||
## 使用内置服务器
|
||||
|
||||
在启用HTTPS之前,确保您拥有有效的SSL/TLS证书。
|
||||
建议在测试和评估情况下使用自签名证书,请运行 `gitea cert --host [HOST]` 以生成自签名证书
|
||||
建议在测试和评估情况下使用自签名证书,請运行 `gitea cert --host [HOST]` 以生成自签名证书
|
||||
|
||||
如果您在服务器上使用阿帕奇(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#server-server)。
|
||||
|
||||
对于“CERT_FILE”或“KEY_FILE”字段,当文件路径是相对路径时,文件路径相对于“GITEA_CUSTOM”环境变量。它也可以是绝对路径。
|
||||
對於“CERT_FILE”或“KEY_FILE”字段,当文件路径是相对路径时,文件路径相對於“GITEA_CUSTOM”环境变量。它也可以是绝对路径。
|
||||
|
||||
### 设置HTTP重定向
|
||||
|
||||
Gitea服务器仅支持监听一个端口;要重定向HTTP请求致HTTPS端口,您需要启用HTTP重定向服务:
|
||||
Gitea服务器僅支持监听一个端口;要重定向HTTP請求致HTTPS端口,您需要启用HTTP重定向服务:
|
||||
|
||||
```ini
|
||||
[server]
|
||||
@@ -44,7 +44,7 @@ PORT_TO_REDIRECT = 3080
|
||||
|
||||
## 使用 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 的最小配置如下:
|
||||
|
||||
@@ -59,7 +59,7 @@ ACME_DIRECTORY=https
|
||||
ACME_EMAIL=email@example.com
|
||||
```
|
||||
|
||||
小型配置请使用 [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,11 +74,11 @@ ACME_DIRECTORY=https
|
||||
ACME_EMAIL=email@example.com
|
||||
```
|
||||
|
||||
要了解关于配置, 请访问 [配置备忘单](../administration/config-cheat-sheet.md#server-server)获取更多信息
|
||||
要了解关于配置, 請访问 [配置备忘單](../administration/config-cheat-sheet.md#server-server)获取更多信息
|
||||
|
||||
## 使用反向代理服务器
|
||||
|
||||
按照 [reverse proxy guide](reverse-proxies.md) 的规则设置你的反向代理服务器
|
||||
按照 [reverse proxy guide](reverse-proxies.md) 的規則设置你的反向代理服务器
|
||||
|
||||
然后,按照下面的向导启用 HTTPS:
|
||||
|
||||
@@ -86,4 +86,4 @@ ACME_EMAIL=email@example.com
|
||||
- [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 上。
|
||||
|
||||
@@ -8,17 +8,17 @@ aliases:
|
||||
|
||||
# 日志配置
|
||||
|
||||
Gitea 的日志配置主要由以下三种类型的组件组成:
|
||||
Gitea 的日志配置主要由以下三种類型的组件组成:
|
||||
|
||||
- `[log]` 部分用于一般配置
|
||||
- `[log.<mode-name>]` 部分用于配置不同的日志输出方式,也称为 "writer mode",模式名称同时也作为 "writer name"
|
||||
- `[log]` 部分还可以包含遵循 `logger.<logger-name>.<CONFIG-KEY>` 模式的子日志记录器的配置
|
||||
- `[log.<mode-name>]` 部分用于配置不同的日志输出方式,也稱為 "writer mode",模式名稱同时也作為 "writer name"
|
||||
- `[log]` 部分還可以包含遵循 `logger.<logger-name>.<CONFIG-KEY>` 模式的子日志记录器的配置
|
||||
|
||||
默认情况下,已经有一个完全功能的日志输出,因此不需要重新定义。
|
||||
|
||||
## 收集日志以获取帮助
|
||||
|
||||
要收集日志以获取帮助和报告问题,请参阅 [需要帮助](help/support.md)。
|
||||
要收集日志以获取帮助和报告问题,請参阅 [需要帮助](help/support.md)。
|
||||
|
||||
## `[log]` 部分
|
||||
|
||||
@@ -28,16 +28,16 @@ Gitea 的日志配置主要由以下三种类型的组件组成:
|
||||
|
||||
- `ROOT_PATH`:(默认值:**%(GITEA_WORK_DIR)/log**):日志文件的基本路径。
|
||||
- `MODE`:(默认值:**console**):要用于默认日志记录器的日志输出列表。
|
||||
- `LEVEL`:(默认值:**Info**):要持久化的最严重的日志事件,不区分大小写。可能的值为:`Trace`、`Debug`、`Info`、`Warn`、`Error`、`Fatal`。
|
||||
- `STACKTRACE_LEVEL`:(默认值:**None**):对于此类及更严重的事件,将在记录时打印堆栈跟踪。
|
||||
- `LEVEL`:(默认值:**Info**):要持久化的最严重的日志事件,不区分大小写。可能的值為:`Trace`、`Debug`、`Info`、`Warn`、`Error`、`Fatal`。
|
||||
- `STACKTRACE_LEVEL`:(默认值:**None**):對於此类及更严重的事件,将在记录时打印堆栈跟踪。
|
||||
|
||||
它还可以包含以下子日志记录器:
|
||||
它還可以包含以下子日志记录器:
|
||||
|
||||
- `logger.router.MODE`:(默认值:**,**):用于路由器日志记录器的日志输出列表。
|
||||
- `logger.access.MODE`:(默认值:**_empty_**):用于访问日志记录器的日志输出列表。默认情况下,访问日志记录器被禁用。
|
||||
- `logger.xorm.MODE`:(默认值:**,**):用于 XORM 日志记录器的日志输出列表。
|
||||
|
||||
将子日志记录器的模式设置为逗号(`,`)表示使用默认的全局 `MODE`。
|
||||
将子日志记录器的模式设置為逗号(`,`)表示使用默认的全局 `MODE`。
|
||||
|
||||
## 快速示例
|
||||
|
||||
@@ -55,7 +55,7 @@ logger.router.MODE = ,
|
||||
logger.xorm.MODE = ,
|
||||
logger.access.MODE =
|
||||
|
||||
; 这是“控制台”模式的配置选项(由上面的 MODE=console 使用)
|
||||
; 这是“控制台”模式的配置選项(由上面的 MODE=console 使用)
|
||||
[log.console]
|
||||
MODE = console
|
||||
FLAGS = stdflags
|
||||
@@ -63,11 +63,11 @@ PREFIX =
|
||||
COLORIZE = true
|
||||
```
|
||||
|
||||
这等同于将所有日志发送到控制台,并将默认的 Golang 日志也发送到控制台日志中。
|
||||
这等同于将所有日志发送到控制台,並将默认的 Golang 日志也发送到控制台日志中。
|
||||
|
||||
这只是一个示例,默认情况下不需要将其写入配置文件中。
|
||||
|
||||
### 禁用路由日志并将一些访问日志记录到文件中
|
||||
### 禁用路由日志並将一些访问日志记录到文件中
|
||||
|
||||
禁用路由日志,将访问日志(>=Warn)记录到 `access.log` 中:
|
||||
|
||||
@@ -82,7 +82,7 @@ LEVEL = Warn
|
||||
FILE_NAME = access.log
|
||||
```
|
||||
|
||||
### 为不同的模式设置不同的日志级别
|
||||
### 為不同的模式设置不同的日志级别
|
||||
|
||||
将默认日志(>=Warn)记录到 `gitea.log` 中,将错误日志记录到 `file-error.log` 中:
|
||||
|
||||
@@ -111,29 +111,29 @@ Gitea 提供以下日志写入器:
|
||||
|
||||
某些配置适用于所有日志输出模式:
|
||||
|
||||
- `MODE` 是日志输出写入器的模式。它将默认为 ini 部分的模式名称。因此,`[log.console]` 将默认为 `MODE = console`。
|
||||
- `MODE` 是日志输出写入器的模式。它将默认為 ini 部分的模式名稱。因此,`[log.console]` 将默认為 `MODE = console`。
|
||||
- `LEVEL` 是此输出将记录的最低日志级别。
|
||||
- `STACKTRACE_LEVEL` 是此输出将打印堆栈跟踪的最低日志级别。
|
||||
- `COLORIZE` 对于 `console`,默认为 `true`,否则默认为 `false`。
|
||||
- `COLORIZE` 對於 `console`,默认為 `true`,否则默认為 `false`。
|
||||
|
||||
#### `EXPRESSION`
|
||||
|
||||
`EXPRESSION` 表示日志事件必须匹配才能被输出写入器记录的正则表达式。
|
||||
日志消息(去除颜色)或 `longfilename:linenumber:functionname` 必须匹配其中之一。
|
||||
`EXPRESSION` 表示日志事件必須匹配才能被输出写入器记录的正则表达式。
|
||||
日志消息(去除颜色)或 `longfilename:linenumber:functionname` 必須匹配其中之一。
|
||||
注意:整个消息或字符串不需要完全匹配。
|
||||
|
||||
请注意,此表达式将在写入器的 goroutine 中运行,而不是在日志事件的 goroutine 中运行。
|
||||
請注意,此表达式将在写入器的 goroutine 中运行,而不是在日志事件的 goroutine 中运行。
|
||||
|
||||
#### `FLAGS`
|
||||
|
||||
`FLAGS` 表示在每条消息之前打印的前置日志上下文信息。
|
||||
它是一个逗号分隔的字符串集。值的顺序无关紧要。
|
||||
它是一个逗号分隔的字符串集。值的顺序無关紧要。
|
||||
|
||||
默认值为 `stdflags`(= `date,time,medfile,shortfuncname,levelinitial`)。
|
||||
默认值為 `stdflags`(= `date,time,medfile,shortfuncname,levelinitial`)。
|
||||
|
||||
可能的值为:
|
||||
可能的值為:
|
||||
|
||||
- `none` 或 `,` - 无标志。
|
||||
- `none` 或 `,` - 無标志。
|
||||
- `date` - 当地时区的日期:`2009/01/23`。
|
||||
- `time` - 当地时区的时间:`01:23:23`。
|
||||
- `microseconds` - 微秒精度:`01:23:23.123123`。假定有时间。
|
||||
@@ -150,13 +150,13 @@ Gitea 提供以下日志写入器:
|
||||
|
||||
### 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 模式
|
||||
|
||||
@@ -164,100 +164,100 @@ Gitea 提供以下日志写入器:
|
||||
|
||||
设置:
|
||||
|
||||
- `FILE_NAME`:要将日志事件写入的文件,相对于 `ROOT_PATH`,默认为 `%(ROOT_PATH)/gitea.log`。异常情况:访问日志默认为 `%(ROOT_PATH)/access.log`。
|
||||
- `MAX_SIZE_SHIFT`:**28**:单个文件的最大大小位移。28 表示 256Mb。详细信息见下文。
|
||||
- `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,其中较高的数字表示更好的压缩。
|
||||
请注意,更好的压缩可能会带来更高的资源使用。
|
||||
必须在前面加上 `-` 符号。
|
||||
請注意,更好的压缩可能会带来更高的资源使用。
|
||||
必須在前面加上 `-` 符号。
|
||||
|
||||
### Conn 模式
|
||||
|
||||
在此模式下,日志记录器将通过网络套接字发送日志消息。
|
||||
在此模式下,日志记录器将通過网络套接字发送日志消息。
|
||||
|
||||
设置:
|
||||
|
||||
- `ADDR`:**:7020**:设置要连接的地址。
|
||||
- `PROTOCOL`:**tcp**:设置协议,可以是 "tcp"、"unix" 或 "udp"。
|
||||
- `RECONNECT`:**false**:在连接丢失时尝试重新连接。
|
||||
- `RECONNECT_ON_MSG`:**false**:为每条消息重新连接主机。
|
||||
- `RECONNECT_ON_MSG`:**false**:為每条消息重新连接主机。
|
||||
|
||||
### "Router" 日志记录器
|
||||
|
||||
当 Gitea 的路由处理程序工作时,Router 日志记录器记录以下消息类型:
|
||||
当 Gitea 的路由处理程序工作时,Router 日志记录器记录以下消息類型:
|
||||
|
||||
- `started` 消息将以 TRACE 级别记录
|
||||
- `polling`/`completed` 路由将以 INFO 级别记录。异常情况:"/assets" 静态资源请求也会以 TRACE 级别记录。
|
||||
- `polling`/`completed` 路由将以 INFO 级别记录。异常情况:"/assets" 静态资源請求也会以 TRACE 级别记录。
|
||||
- `slow` 路由将以 WARN 级别记录
|
||||
- `failed` 路由将以 WARN 级别记录
|
||||
|
||||
### "XORM" 日志记录器
|
||||
|
||||
为了使 XORM 输出 SQL 日志,还应将 `[database]` 部分中的 `LOG_SQL` 设置为 `true`。
|
||||
為了使 XORM 输出 SQL 日志,還應将 `[database]` 部分中的 `LOG_SQL` 设置為 `true`。
|
||||
|
||||
### "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 释放并重新打开其日志文件和连接。
|
||||
可以通過向运行中的進程发送 `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 manager logging add` 和 `remove` 子命令在 Gitea 运行时添加和删除日志记录。
|
||||
此功能只能调整正在运行的日志系统,不能用于启动未初始化的访问或路由日志记录器。如果您希望启动这些系统,建议调整 app.ini 并(优雅地)重新启动 Gitea 服务。
|
||||
此功能只能调整正在运行的日志系统,不能用于启动未初始化的访问或路由日志记录器。如果您希望启动这些系统,建议调整 app.ini 並(优雅地)重新启动 Gitea 服务。
|
||||
|
||||
这些命令的主要目的是在运行中的系统上轻松添加临时日志记录器,以便调查问题,因为重新启动可能会导致问题消失。
|
||||
这些命令的主要目的是在运行中的系统上轻松添加临时日志记录器,以便调查问题,因為重新启动可能会导致问题消失。
|
||||
|
||||
## 使用 `logrotate` 而不是内置的日志轮转
|
||||
|
||||
Gitea 包含内置的日志轮转功能,对于大多数部署来说应该已经足够了。但是,如果您想使用 `logrotate` 工具:
|
||||
Gitea 包含内置的日志轮转功能,對於大多数部署来说應該已经足够了。但是,如果您想使用 `logrotate` 工具:
|
||||
|
||||
- 在 `app.ini` 中将 `LOG_ROTATE` 设置为 `false`,禁用内置的日志轮转。
|
||||
- 安装 `logrotate`。
|
||||
- 根据部署要求配置 `logrotate`,有关配置语法细节,请参阅 `man 8 logrotate`。
|
||||
在 `postrotate/endscript` 块中通过 `kill -USR1` 或 `kill -10` 向 `gitea` 进程本身发送 `USR1` 信号,
|
||||
- 在 `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 并从容器外部运行,您可以使用
|
||||
- 如果您正在使用 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 /etc/logrotate.conf --force` 重新加载 `logrotate`。
|
||||
|
||||
@@ -8,8 +8,8 @@ aliases:
|
||||
|
||||
# 邮件模板
|
||||
|
||||
为了定制特定操作的电子邮件主题和内容,可以使用模板来自定义 Gitea。这些功能的模板位于 [`custom` 目录](../administration/customizing-gitea.md) 下。
|
||||
如果没有自定义的替代方案,Gitea 将使用内部模板作为默认模板。
|
||||
為了定制特定操作的电子邮件主题和内容,可以使用模板来自定义 Gitea。这些功能的模板位于 [`custom` 目錄](../administration/customizing-gitea.md) 下。
|
||||
如果没有自定义的替代方案,Gitea 将使用内部模板作為默认模板。
|
||||
|
||||
自定义模板在 Gitea 启动时加载。对它们的更改在 Gitea 重新启动之前不会被识别。
|
||||
|
||||
@@ -17,42 +17,42 @@ aliases:
|
||||
|
||||
目前,以下通知事件使用模板:
|
||||
|
||||
| 操作名称 | 用途 |
|
||||
| 操作名稱 | 用途 |
|
||||
| ---------- | ---------------------------------------------------------------------- |
|
||||
| `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
|
||||
custom/templates/mail/{操作類型}/{操作名稱}.tmpl
|
||||
```
|
||||
|
||||
其中 `{操作类型}` 是 `issue` 或 `pull`(针对合并请求),`{操作名称}` 是上述列出的操作名称之一。
|
||||
其中 `{操作類型}` 是 `issue` 或 `pull`(针对合並請求),`{操作名稱}` 是上述列出的操作名稱之一。
|
||||
|
||||
例如,有关合并请求中的评论的电子邮件的特定模板是:
|
||||
例如,有关合並請求中的评论的电子邮件的特定模板是:
|
||||
|
||||
```sh
|
||||
custom/templates/mail/pull/comment.tmpl
|
||||
```
|
||||
|
||||
然而,并不需要为每个操作类型/名称组合创建模板。
|
||||
使用回退系统来选择适当的模板。在此列表中,将使用 _第一个存在的_ 模板:
|
||||
然而,並不需要為每个操作類型/名稱组合建立模板。
|
||||
使用回退系统来選择适当的模板。在此列表中,将使用 _第一个存在的_ 模板:
|
||||
|
||||
- 所需**操作类型**和**操作名称**的特定模板。
|
||||
- 操作类型为 `issue` 和所需**操作名称**的模板。
|
||||
- 所需**操作类型**和操作名称为 `default` 的模板。
|
||||
- 操作类型为` issue` 和操作名称为 `default` 的模板。
|
||||
- 所需**操作類型**和**操作名稱**的特定模板。
|
||||
- 操作類型為 `issue` 和所需**操作名稱**的模板。
|
||||
- 所需**操作類型**和操作名稱為 `default` 的模板。
|
||||
- 操作類型為` issue` 和操作名稱為 `default` 的模板。
|
||||
|
||||
唯一必需的模板是操作类型为 `issue` 操作名称为 `default` 的模板,除非用户在 `custom` 目录中覆盖了它。
|
||||
唯一必需的模板是操作類型為 `issue` 操作名稱為 `default` 的模板,除非使用者在 `custom` 目錄中覆盖了它。
|
||||
|
||||
## 模板语法
|
||||
|
||||
@@ -70,44 +70,44 @@ custom/templates/mail/pull/comment.tmpl
|
||||
用于邮件正文的文本和宏
|
||||
```
|
||||
|
||||
指定 _主题_ 部分是可选的(因此也是虚线分隔符)。在使用时,_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。
|
||||
指定 _主题_ 部分是可選的(因此也是虚线分隔符)。在使用时,_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。
|
||||
|
||||
_主题_ 和 _邮件正文_ 由 [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` 等),并与选择的模板对应。 |
|
||||
| `.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/)。
|
||||
有关语法的详细信息,请参阅链接的文档。
|
||||
有关语法的详细信息,請参阅链接的文檔。
|
||||
|
||||
主题构建的步骤如下:
|
||||
|
||||
- 根据通知类型和可用的模板选择一个模板。
|
||||
- 解析并解析模板(例如,将 `{{.Issue.Index}}` 转换为工单或合并请求的编号)。
|
||||
- 将所有空格字符(例如 `TAB`,`LF` 等)转换为普通空格。
|
||||
- 根据通知類型和可用的模板選择一个模板。
|
||||
- 解析並解析模板(例如,将 `{{.Issue.Index}}` 转换為工單或合並請求的编号)。
|
||||
- 将所有空格字符(例如 `TAB`,`LF` 等)转换為普通空格。
|
||||
- 删除所有前导、尾随和多余的空格。
|
||||
- 将字符串截断为前 256 个字母(字符)。
|
||||
- 将字符串截断為前 256 个字母(字符)。
|
||||
|
||||
如果最终结果为空字符串,**或者**没有可用的主题模板(即所选模板不包含主题部分),将使用 Gitea 的**内部默认值**。
|
||||
如果最终结果為空字符串,**或者**没有可用的主题模板(即所選模板不包含主题部分),将使用 Gitea 的**内部默认值**。
|
||||
|
||||
内部默认(回退)主题相当于:
|
||||
|
||||
@@ -117,29 +117,29 @@ _主题_ 和 _邮件正文_ 由 [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/)。
|
||||
有关语法的详细信息,请参阅链接的文档。
|
||||
有关语法的详细信息,請参阅链接的文檔。
|
||||
|
||||
邮件正文在邮件主题之后进行解析,因此还有一个额外的 _元数据_ 字段,即在考虑所有情况之后实际呈现的主题。
|
||||
邮件正文在邮件主题之后進行解析,因此還有一个额外的 _元数据_ 字段,即在考虑所有情况之后实际呈現的主题。
|
||||
|
||||
期望的结果是 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) 以获取错误消息。
|
||||
|
||||
## 示例
|
||||
|
||||
@@ -148,7 +148,7 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
|
||||
```html
|
||||
[{{.Repo}}] @{{.Doer.Name}}
|
||||
{{if eq .ActionName "new"}}
|
||||
创建了
|
||||
建立了
|
||||
{{else if eq .ActionName "comment"}}
|
||||
评论了
|
||||
{{else if eq .ActionName "close"}}
|
||||
@@ -159,9 +159,9 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
|
||||
更新了
|
||||
{{end}}
|
||||
{{if eq .ActionType "issue"}}
|
||||
工单
|
||||
工單
|
||||
{{else}}
|
||||
合并请求
|
||||
合並請求
|
||||
{{end}}
|
||||
#{{.Issue.Index}}: {{.Issue.Title}}
|
||||
------------
|
||||
@@ -175,7 +175,7 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
|
||||
<body>
|
||||
{{if .IsMention}}
|
||||
<p>
|
||||
您收到此邮件是因为 @{{.Doer.Name}} 提到了您。
|
||||
您收到此邮件是因為 @{{.Doer.Name}} 提到了您。
|
||||
</p>
|
||||
{{end}}
|
||||
<p>
|
||||
@@ -185,7 +185,7 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
|
||||
({{.Doer.FullName}})
|
||||
{{end}}
|
||||
{{if eq .ActionName "new"}}
|
||||
创建了
|
||||
建立了
|
||||
{{else if eq .ActionName "close"}}
|
||||
关闭了
|
||||
{{else if eq .ActionName "reopen"}}
|
||||
@@ -209,11 +209,11 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
|
||||
</html>
|
||||
```
|
||||
|
||||
该模板将生成以下内容:
|
||||
該模板将生成以下内容:
|
||||
|
||||
### 主题
|
||||
|
||||
> [mike/stuff] @rhonda 在合并请求 #38 上进行了评论:New color palette
|
||||
> [mike/stuff] @rhonda 在合並請求 #38 上進行了评论:New color palette
|
||||
|
||||
### 邮件正文
|
||||
|
||||
@@ -231,18 +231,18 @@ _主题_ 和 _邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text
|
||||
|
||||
## 高级用法
|
||||
|
||||
模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表:
|
||||
模板系统包含一些函数,可用于進一步处理和格式化消息。以下是其中一些函数的列表:
|
||||
|
||||
| 函数名 | 参数 | 可用于 | 用法 |
|
||||
| 函数名 | 參數 | 可用于 | 用法 |
|
||||
| ---------------- | ----------- | ---------- | ------------------------------------------------ |
|
||||
| `AppUrl` | - | 任何地方 | Gitea 的 URL |
|
||||
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" |
|
||||
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常為 "Gitea" |
|
||||
| `AppDomain` | - | 任何地方 | Gitea 的主机名 |
|
||||
| `EllipsisString` | string, int | 任何地方 | 将字符串截断为指定长度;根据需要添加省略号 |
|
||||
| `SanitizeHTML` | string | 仅正文部分 | 通过删除其中的危险 HTML 标签对文本进行清理 |
|
||||
| `SafeHTML` | string | 仅正文部分 | 将输入作为 HTML 处理;可用于输出原始的 HTML 内容 |
|
||||
| `EllipsisString` | string, int | 任何地方 | 将字符串截断為指定长度;根据需要添加省略号 |
|
||||
| `SanitizeHTML` | string | 僅正文部分 | 通過删除其中的危险 HTML 標籤对文本進行清理 |
|
||||
| `SafeHTML` | string | 僅正文部分 | 将输入作為 HTML 处理;可用于输出原始的 HTML 内容 |
|
||||
|
||||
这些都是 _函数_,而不是元数据,因此必须按以下方式使用:
|
||||
这些都是 _函数_,而不是元数据,因此必須按以下方式使用:
|
||||
|
||||
```html
|
||||
像这样使用: {{SanitizeHTML "Escape<my
|
||||
|
||||
@@ -6,11 +6,11 @@ aliases:
|
||||
- /zh-tw/repo-indexer
|
||||
---
|
||||
|
||||
# 仓库索引器
|
||||
# 存放庫索引器
|
||||
|
||||
## 设置仓库索引器
|
||||
## 设置存放庫索引器
|
||||
|
||||
通过在您的 [`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`。
|
||||
- 要匹配 `resources/bin` 目录及其子目录中的所有文件,请使用 `resources/bin/**`。
|
||||
- 要匹配位于 `resources/bin` 目录下的所有文件,请使用 `resources/bin/*`。
|
||||
- 要匹配所有名为 `Makefile` 的文件,请使用 `**Makefile`。
|
||||
- 匹配目录没有效果;模式 `resources/bin` 不会包含/排除该目录中的文件;`resources/bin/**` 会。
|
||||
- 所有文件和模式都规范化为小写,因此 `**Makefile`、`**makefile` 和 `**MAKEFILE` 是等效的。
|
||||
- 要匹配所有带有 `.txt` 扩展名的文件,無论在哪个目錄中,請使用 `**.txt`。
|
||||
- 要匹配僅在存放庫的根级别中具有 `.txt` 扩展名的所有文件,請使用 `*.txt`。
|
||||
- 要匹配 `resources/bin` 目錄及其子目錄中的所有文件,請使用 `resources/bin/**`。
|
||||
- 要匹配位于 `resources/bin` 目錄下的所有文件,請使用 `resources/bin/*`。
|
||||
- 要匹配所有名為 `Makefile` 的文件,請使用 `**Makefile`。
|
||||
- 匹配目錄没有效果;模式 `resources/bin` 不会包含/排除該目錄中的文件;`resources/bin/**` 会。
|
||||
- 所有文件和模式都规范化為小写,因此 `**Makefile`、`**makefile` 和 `**MAKEFILE` 是等效的。
|
||||
|
||||
@@ -12,26 +12,26 @@ 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`。
|
||||
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`,您必须做下列配置:
|
||||
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 {
|
||||
@@ -64,7 +64,7 @@ server {
|
||||
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 直接提供静态资源
|
||||
|
||||
我们可以通过将资源分为静态和动态两种类型来调节性能。
|
||||
我们可以通過将资源分為静态和动态两种類型来调节性能。
|
||||
|
||||
CSS 文件、JavaScript 文件、图片和字体是静态内容。首页、仓库视图和工单列表是动态内容。
|
||||
CSS 文件、JavaScript 文件、图片和字體是静态内容。首页、存放庫视图和工單列表是动态内容。
|
||||
|
||||
Nginx 可以直接提供静态资源,并且只代理动态资源请求给 Gitea。
|
||||
Nginx 为提供静态内容进行了优化,而代理大响应可能与这一优化行为相反。
|
||||
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 {
|
||||
@@ -114,7 +114,7 @@ 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 的服务器
|
||||
@@ -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>
|
||||
@@ -193,13 +193,13 @@ server {
|
||||
</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`。
|
||||
- 使用 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` 改为适当的值)
|
||||
- 在 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
|
||||
@@ -328,9 +328,9 @@ backend gitea
|
||||
|
||||
如果您将 http 内容重定向到 https,上面的配置文件也能够使用。只需要记住,在 HAProxy 和 Gitea 之间的连接将由 http 完成,所以你不需要在 Gitea 的配置文件中启用 https。
|
||||
|
||||
## 使用 HAProxy 作为反向代理服务并将 Gitea 路由至一个子路径
|
||||
## 使用 HAProxy 作為反向代理服务並将 Gitea 路由至一个子路径
|
||||
|
||||
如果您已经有一个域名并且想与 Gitea 共享该域名,您可以在您的 HAProxy 中加入如下配置,为 Gitea 添加路由规则:
|
||||
如果您已经有一个域名並且想与 Gitea 共享該域名,您可以在您的 HAProxy 中加入如下配置,為 Gitea 添加路由規則:
|
||||
|
||||
```
|
||||
frontend http-in
|
||||
@@ -342,7 +342,7 @@ frontend http-in
|
||||
|
||||
在这个配置下,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: *
|
||||
|
||||
@@ -8,30 +8,30 @@ aliases:
|
||||
|
||||
# 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 会生成提交:
|
||||
|
||||
- 仓库初始化
|
||||
- 存放庫初始化
|
||||
- Wiki 更改
|
||||
- 使用编辑器或 API 进行的 CRUD 操作
|
||||
- 从合并请求进行合并
|
||||
- 使用编辑器或 API 進行的 CRUD 操作
|
||||
- 从合並請求進行合並
|
||||
|
||||
根据配置和服务器信任,您可能希望 Gitea 对这些提交进行签名。
|
||||
根据配置和服务器信任,您可能希望 Gitea 对这些提交進行签名。
|
||||
|
||||
## 安装和生成 Gitea 的 GPG 密钥
|
||||
## 安裝和生成 Gitea 的 GPG 密钥
|
||||
|
||||
如何安装签名密钥由服务器管理员决定。Gitea 目前使用服务器的 `git` 命令生成所有提交,因此将使用服务器的 `gpg` 进行签名(如果配置了)。管理员应该审查 GPG 的最佳实践 - 特别是可能建议仅安装签名的子密钥,而不是主签名和认证的密钥。
|
||||
如何安裝签名密钥由服务器管理员决定。Gitea 目前使用服务器的 `git` 命令生成所有提交,因此将使用服务器的 `gpg` 進行签名(如果配置了)。管理员應該审查 GPG 的最佳实践 - 特别是可能建议僅安裝签名的子密钥,而不是主签名和認證的密钥。
|
||||
|
||||
## 通用配置
|
||||
|
||||
@@ -53,84 +53,84 @@ MERGES = pubkey, twofa, basesigned, commitssigned
|
||||
|
||||
### `SIGNING_KEY`
|
||||
|
||||
首先讨论的选项是 `SIGNING_KEY`。有三个主要选项:
|
||||
首先讨论的選项是 `SIGNING_KEY`。有三个主要選项:
|
||||
|
||||
- `none` - 这将阻止 Gitea 对任何提交进行签名
|
||||
- `none` - 这将阻止 Gitea 对任何提交進行签名
|
||||
- `default` - Gitea 将使用 `git config` 中配置的默认密钥
|
||||
- `KEYID` - Gitea 将使用具有 ID `KEYID` 的 GPG 密钥对提交进行签名。在这种情况下,您应该提供 `SIGNING_NAME` 和 `SIGNING_EMAIL`,以便显示此密钥的信息。
|
||||
- `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 登录时进行签名
|
||||
- `pubkey`:僅在使用者拥有公钥时進行签名
|
||||
- `twofa`:僅在使用者使用 2FA 登入时進行签名
|
||||
- `always`:始终签名
|
||||
|
||||
除了 `never` 和 `always` 之外的选项可以组合为逗号分隔的列表。如果所有选择的选项都为 true,则提交将被签名。
|
||||
除了 `never` 和 `always` 之外的選项可以组合為逗号分隔的列表。如果所有選择的選项都為 true,则提交将被签名。
|
||||
|
||||
### `WIKI`
|
||||
|
||||
此选项确定 Gitea 是否应该对 Wiki 的提交进行签名。可能的取值有:
|
||||
此選项确定 Gitea 是否應該对 Wiki 的提交進行签名。可能的取值有:
|
||||
|
||||
- `never`:从不签名
|
||||
- `pubkey`:仅在用户拥有公钥时进行签名
|
||||
- `twofa`:仅在用户使用 2FA 登录时进行签名
|
||||
- `parentsigned`:仅在父提交已签名时进行签名。
|
||||
- `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`:仅在父提交已签名时进行签名。
|
||||
- `pubkey`:僅在使用者拥有公钥时進行签名
|
||||
- `twofa`:僅在使用者使用 2FA 登入时進行签名
|
||||
- `parentsigned`:僅在父提交已签名时進行签名。
|
||||
- `always`:始终签名
|
||||
|
||||
除了 `never` 和 `always` 之外的选项可以组合为逗号分隔的列表。如果所有选择的选项都为 true,则更改将被签名。
|
||||
除了 `never` 和 `always` 之外的選项可以组合為逗号分隔的列表。如果所有選择的選项都為 true,则更改将被签名。
|
||||
|
||||
### `MERGES`
|
||||
|
||||
此选项确定 Gitea 是否应该对 PR 的合并提交进行签名。可能的选项有:
|
||||
此選项确定 Gitea 是否應該对 PR 的合並提交進行签名。可能的選项有:
|
||||
|
||||
- `never`:从不签名
|
||||
- `pubkey`:仅在用户拥有公钥时进行签名
|
||||
- `twofa`:仅在用户使用 2FA 登录时进行签名
|
||||
- `basesigned`:仅在基础仓库中的父提交已签名时进行签名。
|
||||
- `headsigned`:仅在头分支中的头提交已签名时进行签名。
|
||||
- `commitssigned`:仅在头分支中的所有提交到合并点的提交都已签名时进行签名。
|
||||
- `approved`:仅对已批准的合并到受保护分支的提交进行签名。
|
||||
- `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
|
||||
|
||||
@@ -10,50 +10,50 @@ aliases:
|
||||
|
||||
## 背景
|
||||
|
||||
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 文件中读取的所有系统配置,并在各处引用。但是在可能的情况下,应将其作为函数参数使用。
|
||||
- `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`来处理请求。
|
||||
- `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
|
||||
@@ -82,29 +82,29 @@ 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 序列,否则迁移将悄无声息地通过,但后续的插入将失败:
|
||||
- 这将导致表中的所有行都被使用 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`,因此應将某些`modules`子包移动到`services`中。
|
||||
|
||||
@@ -14,7 +14,7 @@ Gitea 在其前端中使用[Fomantic-UI](https://fomantic-ui.com/introduction/ge
|
||||
|
||||
HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
|
||||
|
||||
源文件可以在以下目录中找到:
|
||||
源文件可以在以下目錄中找到:
|
||||
|
||||
- **CSS 样式**: `web_src/css/`
|
||||
- **JavaScript 文件**: `web_src/js/`
|
||||
@@ -27,19 +27,19 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
|
||||
|
||||
## 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)`。
|
||||
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 类。如果内联脚本和样式不可避免,请解释无法避免的原因。
|
||||
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
|
||||
|
||||
@@ -50,66 +50,66 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`)
|
||||
### 框架使用
|
||||
|
||||
不建议混合使用不同的框架,这会使代码难以维护。
|
||||
一个 JavaScript 模块应遵循一个主要框架,并遵循该框架的最佳实践。
|
||||
一个 JavaScript 模組應遵循一个主要框架,並遵循該框架的最佳实践。
|
||||
|
||||
推荐的实现方式:
|
||||
推荐的实現方式:
|
||||
|
||||
- Vue + Vanilla JS
|
||||
- Fomantic-UI(jQuery)
|
||||
- htmx (部分页面重新加载其他静态组件)
|
||||
- Vanilla JS
|
||||
|
||||
不推荐的实现方式:
|
||||
不推荐的实現方式:
|
||||
|
||||
- Vue + Fomantic-UI(jQuery)
|
||||
- jQuery + Vanilla JS
|
||||
- htmx + 任何其他需要大量 JavaScript 代码或不必要的功能,如 htmx 脚本 (`hx-on`)
|
||||
|
||||
为了保持界面一致,Vue 组件可以使用 Fomantic-UI 的 CSS 类。
|
||||
為了保持界面一致,Vue 组件可以使用 Fomantic-UI 的 CSS 类。
|
||||
尽管不建议混合使用不同的框架,
|
||||
我们使用 htmx 进行简单的交互。您可以在此 [PR](https://github.com/go-gitea/gitea/pull/28908) 中查看一个简单交互的示例,其中应使用 htmx。如果您需要更高级的反应性,请不要使用 htmx,请使用其他框架(Vue/Vanilla JS)。
|
||||
但如果混合使用是必要的,并且代码设计良好且易于维护,也可以工作。
|
||||
我们使用 htmx 進行简單的交互。您可以在此 [PR](https://github.com/go-gitea/gitea/pull/28908) 中查看一个简單交互的示例,其中應使用 htmx。如果您需要更高级的反應性,請不要使用 htmx,請使用其他框架(Vue/Vanilla JS)。
|
||||
但如果混合使用是必要的,並且代码设计良好且易于维护,也可以工作。
|
||||
|
||||
### `async` 函数
|
||||
|
||||
只有当函数内部存在`await`调用或返回`Promise`时,才将函数标记为`async`。
|
||||
只有当函数内部存在`await`调用或返回`Promise`时,才将函数标记為`async`。
|
||||
|
||||
不建议使用`async`事件监听器,这可能会导致问题。
|
||||
原因是`await`后的代码在事件分发之外执行。
|
||||
原因是`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 时发出警告。
|
||||
这是有意為之的,我们想调用异步函数並忽略 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
|
||||
|
||||
禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。
|
||||
禁止使用`dataset`,它的驼峰命名行為使得搜索属性变得困难。
|
||||
然而,仍然存在一些特殊情况,因此当前的准则是:
|
||||
|
||||
- 对于旧代码:
|
||||
- 對於旧代码:
|
||||
|
||||
- 应将`$.data()`重构为`$.attr()`。
|
||||
- 應将`$.data()`重构為`$.attr()`。
|
||||
- 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用。
|
||||
|
||||
- 对于新代码:
|
||||
- 不应使用`node.dataset`,而应使用`node.getAttribute`。
|
||||
- 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
|
||||
- 對於新代码:
|
||||
- 不應使用`node.dataset`,而應使用`node.getAttribute`。
|
||||
- 不要将任何使用者数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
|
||||
|
||||
### 显示/隐藏元素
|
||||
|
||||
- 推荐在 Vue 组件中使用`v-if`和`v-show`来显示/隐藏元素。
|
||||
- Go 模板代码应使用 `.tw-hidden` 和 `showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.tw-hidden`的注释以获取更多详细信息。
|
||||
- Go 模板代码應使用 `.tw-hidden` 和 `showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,請参阅`.tw-hidden`的注释以获取更多详细信息。
|
||||
|
||||
### Go HTML 模板中的样式和属性
|
||||
|
||||
@@ -142,8 +142,8 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`)
|
||||
|
||||
### Vue3 和 JSX
|
||||
|
||||
Gitea 现在正在使用 Vue3。我们决定不引入 JSX,以保持 HTML 代码和 JavaScript 代码分离。
|
||||
Gitea 現在正在使用 Vue3。我们决定不引入 JSX,以保持 HTML 代码和 JavaScript 代码分离。
|
||||
|
||||
### 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 示例的页面。
|
||||
|
||||
@@ -10,31 +10,31 @@ aliases:
|
||||
|
||||
## 背景
|
||||
|
||||
自 2014 年 2 月 12 日编写了第一行代码以来,Gitea 已经发展成为一个庞大的项目。
|
||||
自 2014 年 2 月 12 日编写了第一行代码以来,Gitea 已经发展成為一个庞大的项目。
|
||||
因此,代码库变得越来越大。代码库越大,维护就越困难。
|
||||
存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。
|
||||
为了使代码库更易于维护,使 Gitea 变得更好,开发人员应牢记使用现代机制来重构旧代码。
|
||||
存在许多過时的機制,许多框架混合在一起,一些遗留代码可能会导致错误並阻碍新功能的开发。
|
||||
為了使代码库更易于维护,使 Gitea 变得更好,开发人员應牢记使用現代機制来重构旧代码。
|
||||
|
||||
本文档是关于重构代码库的指南集合。
|
||||
本文檔是关于重构代码库的指南集合。
|
||||
|
||||
## 重构建议
|
||||
|
||||
- 设计更多关于未来的内容,而不仅仅解决当前问题。
|
||||
- 设计更多关于未来的内容,而不僅僅解决当前问题。
|
||||
- 减少模糊性,减少冲突,提高可维护性。
|
||||
- 描述重构,例如:
|
||||
- 为什么需要重构。
|
||||
- 為什么需要重构。
|
||||
- 如何解决旧问题。
|
||||
- 重构的优点/缺点是什么。
|
||||
- 只做必要的更改,尽量保留旧逻辑。
|
||||
- 引入一些中间步骤,使重构更容易审查,完整的重构计划可以在几个 PR 中完成。
|
||||
- 如果存在分歧,应该请 TOC(技术监督委员会)参与决策。
|
||||
- 如果存在分歧,應該請 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 同步后反映在主存储库中,这通常是在任何 PR 合并之后。
|
||||
翻译被接受后,它将在下一次 Crowdin 同步后反映在主存儲库中,这通常是在任何 PR 合並之后。
|
||||
|
||||
在撰写本文时,这意味着更改后的翻译可能要到 Gitea 的下一个版本才会出现。
|
||||
在撰写本文时,这意味着更改后的翻译可能要到 Gitea 的下一个版本才会出現。
|
||||
|
||||
如果使用开发版本,则在同步更改内容后,它应该会在更新后立即显示。
|
||||
如果使用开发版本,则在同步更改内容后,它應該会在更新后立即显示。
|
||||
|
||||
@@ -10,21 +10,21 @@ aliases:
|
||||
|
||||
## 开启/配置 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 认证
|
||||
## 通過 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
|
||||
@@ -35,7 +35,7 @@ Gitea 调用解析查询参数以及头部信息来获取 token 的代码可以
|
||||
Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675
|
||||
```
|
||||
|
||||
以 `curl` 命令为例,它会以如下形式携带在请求中:
|
||||
以 `curl` 命令為例,它会以如下形式携带在請求中:
|
||||
|
||||
```
|
||||
curl "http://localhost:4000/api/v1/repos/test1/test1/issues" \
|
||||
@@ -44,20 +44,20 @@ 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 认证
|
||||
### 使用 Basic authentication 認證
|
||||
|
||||
```
|
||||
$ curl --url https://yourusername:yourpassword@gitea.your.host/api/v1/users/yourusername/tokens
|
||||
[{"name":"test","sha1":"..."},{"name":"dev","sha1":"..."}]
|
||||
```
|
||||
|
||||
## 使用 Sudo 方式请求 API
|
||||
## 使用 Sudo 方式請求 API
|
||||
|
||||
此 API 允许管理员借用其他用户身份进行 API 请求。只需在请求中指定查询参数 `sudo=` 或是指定 header 中的 `Sudo:` 为需要使用的用户 username 即可。
|
||||
此 API 允许管理员借用其他使用者身份進行 API 請求。只需在請求中指定查询參數 `sudo=` 或是指定 header 中的 `Sudo:` 為需要使用的使用者 username 即可。
|
||||
|
||||
@@ -14,30 +14,30 @@ aliases:
|
||||
|
||||
[](https://gitpod.io/#https://github.com/go-gitea/gitea)
|
||||
|
||||
## 安装 Golang
|
||||
## 安裝 Golang
|
||||
|
||||
您需要 [安装 go](https://go.dev/doc/install) 并设置您的 go 环境。
|
||||
您需要 [安裝 go](https://go.dev/doc/install) 並设置您的 go 环境。
|
||||
|
||||
接下来,[使用 npm 安装 Node.js](https://nodejs.org/en/download/) ,这是构建
|
||||
接下来,[使用 npm 安裝 Node.js](https://nodejs.org/en/download/) ,这是构建
|
||||
JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@
|
||||
并且推荐使用最新的 LTS 版本。
|
||||
並且推荐使用最新的 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` 的版本而有差异。因此推荐安装我们持续集成使用
|
||||
的 Go 版本。截至上次更新,Go 版本应该是 @goVersion@。
|
||||
**注意 2** :Go 版本 @minGoVersion@ 或更高版本是必須的。Gitea 使用 `gofmt` 来
|
||||
格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安裝我们持续集成使用
|
||||
的 Go 版本。截至上次更新,Go 版本應該是 @goVersion@。
|
||||
|
||||
## 安装 Make
|
||||
## 安裝 Make
|
||||
|
||||
Gitea 大量使用 `Make` 来自动化任务和改进开发。本指南涵盖了如何安装 Make。
|
||||
Gitea 大量使用 `Make` 来自动化任务和改進开发。本指南涵盖了如何安裝 Make。
|
||||
|
||||
### 在 Linux 上
|
||||
|
||||
使用包管理器安装。
|
||||
使用包管理器安裝。
|
||||
|
||||
在 Ubuntu/Debian 上:
|
||||
|
||||
@@ -55,19 +55,19 @@ sudo yum install make
|
||||
|
||||
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 一样。
|
||||
- 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`。
|
||||
|
||||
@@ -75,15 +75,15 @@ Make 的这三个发行版都可以在 Windows 上运行:
|
||||
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,12 +92,12 @@ 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(基本)
|
||||
|
||||
@@ -105,22 +105,22 @@ git fetch --all --prune
|
||||
[说明](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)
|
||||
@@ -130,40 +130,40 @@ make watch-frontend
|
||||
make watch-backend
|
||||
```
|
||||
|
||||
在 macOS 上,监视所有后端源文件可能会达到默认的打开文件限制,这可以通过当前 shell 的 `ulimit -n 12288` 或所有未来 shell 的 shell 启动文件来增加。
|
||||
在 macOS 上,监视所有后端源文件可能会达到默认的打开文件限制,这可以通過当前 shell 的 `ulimit -n 12288` 或所有未来 shell 的 shell 启动文件来增加。
|
||||
|
||||
### 格式化、代码分析和拼写检查
|
||||
|
||||
我们的持续集成将拒绝未通过代码检查(包括格式检查、代码分析和拼写检查)的 PR。
|
||||
我们的持续集成将拒绝未通過代码检查(包括格式检查、代码分析和拼写检查)的 PR。
|
||||
|
||||
你应该格式化你的代码:
|
||||
你應該格式化你的代码:
|
||||
|
||||
```bash
|
||||
make fmt
|
||||
```
|
||||
|
||||
并检查源代码:
|
||||
並检查源代码:
|
||||
|
||||
```bash
|
||||
# lint 前端和后端代码
|
||||
make lint
|
||||
# 仅 lint 后端代码
|
||||
# 僅 lint 后端代码
|
||||
make lint-backend
|
||||
```
|
||||
|
||||
**注意** :`gofmt` 的结果取决于 `go` 的版本。您应该运行与持续集成相同的 go 版本。
|
||||
**注意** :`gofmt` 的结果取决于 `go` 的版本。您應該运行与持续集成相同的 go 版本。
|
||||
|
||||
### 处理 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
|
||||
@@ -192,81 +192,81 @@ REPO_INDEXER_CONN_STR = http://elastic:changeme@localhost:9200
|
||||
|
||||
### 构建和添加 SVGs
|
||||
|
||||
SVG 图标是使用 `make svg` 命令构建的,该命令将图标资源编译到输出目录 `public/assets/img/svg` 中。可以在 `web_src/svg` 目录中添加自定义图标。
|
||||
SVG 图标是使用 `make svg` 命令构建的,該命令将图标资源编译到输出目錄 `public/assets/img/svg` 中。可以在 `web_src/svg` 目錄中添加自定义图标。
|
||||
|
||||
### 构建 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 路由时,您**必须**
|
||||
更新和/或创建 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
|
||||
这些使用 [go-swagger](https://goswagger.io/) 评论的文档。
|
||||
建立新的 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)
|
||||
[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
|
||||
```
|
||||
|
||||
您应该验证生成的 Swagger 文件:
|
||||
您應該驗證生成的 Swagger 文件:
|
||||
|
||||
```bash
|
||||
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/` 目錄,您将需要進行新的迁移。可以找到这些
|
||||
在 `models/migrations/` 中。您可以确保您的迁移适用于主要
|
||||
数据库类型使用:
|
||||
数据库類型使用:
|
||||
|
||||
```bash
|
||||
make test-sqlite-migration # 将 SQLite 切换为适当的数据库
|
||||
make test-sqlite-migration # 将 SQLite 切换為适当的数据库
|
||||
```
|
||||
|
||||
## 测试
|
||||
|
||||
Gitea 运行两种类型的测试:单元测试和集成测试。
|
||||
Gitea 运行两种類型的测试:單元测试和集成测试。
|
||||
|
||||
### 单元测试
|
||||
### 單元测试
|
||||
|
||||
`go test` 系统中的`*_test.go` 涵盖了单元测试。
|
||||
`go test` 系统中的`*_test.go` 涵盖了單元测试。
|
||||
您可以设置环境变量 `GITEA_UNIT_TESTS_LOG_SQL=1` 以在详细模式下运行测试时显示所有 SQL 语句(即设置`GOTESTFLAGS=-v` 时)。
|
||||
|
||||
```bash
|
||||
@@ -275,27 +275,27 @@ 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
|
||||
|
||||
我们的持续集成将测试代码是否通过了单元测试,并且所有支持的数据库都将在 Docker 环境中通过集成测试。
|
||||
还将测试从几个最新版本的 Gitea 迁移。
|
||||
我们的持续集成将测试代码是否通過了單元测试,並且所有支持的数据库都将在 Docker 环境中通過集成测试。
|
||||
還将测试从几个最新版本的 Gitea 迁移。
|
||||
|
||||
请在 PR 中附带提交适当的单元测试和集成测试。
|
||||
請在 PR 中附带提交适当的單元测试和集成测试。
|
||||
|
||||
## 网站文档
|
||||
## 网站文檔
|
||||
|
||||
该网站的文档位于 `docs/` 中。如果你改变了文档内容,你可以使用以下测试方法进行持续集成:
|
||||
該网站的文檔位于 `docs/` 中。如果你改变了文檔内容,你可以使用以下测试方法進行持续集成:
|
||||
|
||||
```bash
|
||||
make lint-md
|
||||
@@ -303,32 +303,32 @@ make lint-md
|
||||
|
||||
## Visual Studio Code
|
||||
|
||||
`contrib/ide/vscode` 中为 Visual Studio Code 提供了 `launch.json` 和 `tasks.json`。查看
|
||||
`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) 了解更多信息。
|
||||
|
||||
## Goland
|
||||
|
||||
单击 `/main.go` 中函数 `func main()` 上的 `Run Application` 箭头
|
||||
單擊 `/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。
|
||||
|
||||
@@ -19,8 +19,8 @@ Gitea 拥有一个出色的第三方集成社区,以及在其他各种项目
|
||||
|
||||
## 预填新文件名和内容
|
||||
|
||||
如果你想打开一个具有给定名称和内容的新文件,
|
||||
你可以使用查询参数来实现:
|
||||
如果你想打开一个具有给定名稱和内容的新文件,
|
||||
你可以使用查询參數来实現:
|
||||
|
||||
```txt
|
||||
GET /{{org}}/{{repo}}/_new/{{filepath}}
|
||||
|
||||
@@ -8,24 +8,24 @@ aliases:
|
||||
|
||||
# 迁移接口
|
||||
|
||||
完整迁移功能在 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`。
|
||||
|
||||
## 下载器接口
|
||||
|
||||
要从新的 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)中找到这些接口。
|
||||
|
||||
## 上传器接口
|
||||
|
||||
目前,只实现了`GiteaLocalUploader`,因此我们只能通过此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
|
||||
目前,只实現了`GiteaLocalUploader`,因此我们只能通過此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
|
||||
|
||||
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。
|
||||
|
||||
@@ -8,7 +8,7 @@ aliases:
|
||||
|
||||
# OAuth2 提供者
|
||||
|
||||
Gitea 支持作为 OAuth2 提供者,允许第三方应用程序在用户同意的情况下访问其资源。此功能自 1.8.0 版起可用。
|
||||
Gitea 支持作為 OAuth2 提供者,允许第三方應用程序在使用者同意的情况下访问其资源。此功能自 1.8.0 版起可用。
|
||||
|
||||
## 端点
|
||||
|
||||
@@ -22,40 +22,40 @@ Gitea 支持作为 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 支持以下令牌范围:
|
||||
|
||||
| 名称 | 介绍 |
|
||||
| 名稱 | 介绍 |
|
||||
| ---------------------------------------- | --------------------------------------------------------------- |
|
||||
| **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 |
|
||||
| **repo** | 完全控制所有存储库 |
|
||||
| **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 |
|
||||
| **public_repo** | 仅授予对公共存储库的读/写访问权限 |
|
||||
| **admin:repo_hook** | 授予对所有存储库的 Hooks 访问权限,该权限已包含在 `repo` 范围中 |
|
||||
| **write:repo_hook** | 授予对存储库 Hooks 的读/写访问权限 |
|
||||
| **read:repo_hook** | 授予对存储库 Hooks 的只读访问权限 |
|
||||
| **admin:org** | 授予对组织设置的完全访问权限 |
|
||||
| **write:org** | 授予对组织设置的读/写访问权限 |
|
||||
| **read:org** | 授予对组织设置的只读访问权限 |
|
||||
| **(no scope)** | 授予对公共使用者配置文件和公共存儲库的只读访问权限 |
|
||||
| **repo** | 完全控制所有存儲库 |
|
||||
| **repo:status** | 授予对所有存儲库中提交状态的读/写访问权限 |
|
||||
| **public_repo** | 僅授予对公共存儲库的读/写访问权限 |
|
||||
| **admin:repo_hook** | 授予对所有存儲库的 Hooks 访问权限,該权限已包含在 `repo` 范围中 |
|
||||
| **write:repo_hook** | 授予对存儲库 Hooks 的读/写访问权限 |
|
||||
| **read:repo_hook** | 授予对存儲库 Hooks 的只读访问权限 |
|
||||
| **admin:org** | 授予对組織设置的完全访问权限 |
|
||||
| **write:org** | 授予对組織设置的读/写访问权限 |
|
||||
| **read:org** | 授予对組織设置的只读访问权限 |
|
||||
| **admin:public_key** | 授予公钥管理的完全访问权限 |
|
||||
| **write:public_key** | 授予对公钥的读/写访问权限 |
|
||||
| **read:public_key** | 授予对公钥的只读访问权限 |
|
||||
| **admin:org_hook** | 授予对组织级别 Hooks 的完全访问权限 |
|
||||
| **admin:user_hook** | 授予对用户级别 Hooks 的完全访问权限 |
|
||||
| **admin:org_hook** | 授予对組織级别 Hooks 的完全访问权限 |
|
||||
| **admin:user_hook** | 授予对使用者级别 Hooks 的完全访问权限 |
|
||||
| **notification** | 授予对通知的完全访问权限 |
|
||||
| **user** | 授予对用户个人资料信息的完全访问权限 |
|
||||
| **read:user** | 授予对用户个人资料的读取权限 |
|
||||
| **user:email** | 授予对用户电子邮件地址的读取权限 |
|
||||
| **user:follow** | 授予访问权限以关注/取消关注用户 |
|
||||
| **delete_repo** | 授予删除存储库的权限 |
|
||||
| **user** | 授予对使用者个人资料信息的完全访问权限 |
|
||||
| **read:user** | 授予对使用者个人资料的读取权限 |
|
||||
| **user:email** | 授予对使用者电子邮件地址的读取权限 |
|
||||
| **user:follow** | 授予访问权限以关注/取消关注使用者 |
|
||||
| **delete_repo** | 授予删除存儲库的权限 |
|
||||
| **package** | 授予对托管包的完全访问权限 |
|
||||
| **write:package** | 授予对包的读/写访问权限 |
|
||||
| **read:package** | 授予对包的读取权限 |
|
||||
@@ -63,38 +63,38 @@ Gitea 支持以下令牌范围:
|
||||
| **admin:gpg_key** | 授予 GPG 密钥管理的完全访问权限 |
|
||||
| **write:gpg_key** | 授予对 GPG 密钥的读/写访问权限 |
|
||||
| **read:gpg_key** | 授予对 GPG 密钥的只读访问权限 |
|
||||
| **admin:application** | 授予应用程序管理的完全访问权限 |
|
||||
| **write:application** | 授予应用程序管理的读/写访问权限 |
|
||||
| **read:application** | 授予应用程序管理的读取权限 |
|
||||
| **sudo** | 允许以站点管理员身份执行操作 |
|
||||
| **admin:application** | 授予應用程序管理的完全访问权限 |
|
||||
| **write:application** | 授予應用程序管理的读/写访问权限 |
|
||||
| **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 攻擊。
|
||||
|
||||

|
||||
|
||||
用户将会被询问是否授权给您的应用程序。如果他们同意了授权,用户将会被重定向到 `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 請求](development/api-usage.md#oauth2-provider) 以读写使用者的资源。
|
||||
|
||||
@@ -10,23 +10,23 @@ aliases:
|
||||
|
||||
本页面包含一些常见问题和答案。
|
||||
|
||||
有关更多帮助资源,请查看所有[支持选项](help/support.md)。
|
||||
有关更多帮助资源,請查看所有[支持選项](help/support.md)。
|
||||
|
||||
## 1.x 和 1.x.x 下载之间的区别
|
||||
|
||||
以 1.7.x 版本为例。
|
||||
以 1.7.x 版本為例。
|
||||
|
||||
**注意:**此示例也适用于 Docker 镜像!
|
||||
|
||||
在我们的[下载页面](https://dl.gitea.com/gitea/)上,您会看到一个 1.7 目录,以及 1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.5 和 1.7.6 的目录。
|
||||
在我们的[下载页面](https://dl.gitea.com/gitea/)上,您会看到一个 1.7 目錄,以及 1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.5 和 1.7.6 的目錄。
|
||||
|
||||
1.7 目录和 1.7.0 目录是**不同**的。1.7 目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。
|
||||
1.7 目錄和 1.7.0 目錄是**不同**的。1.7 目錄是在每个合並到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。
|
||||
|
||||
然而,1.7.0 目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。
|
||||
然而,1.7.0 目錄是在建立[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)標籤时建立的构建。
|
||||
|
||||
这意味着 1.x 的下载会随着提交合并到各自的分支而改变(将其视为每个版本的单独的“main”分支)。
|
||||
这意味着 1.x 的下载会随着提交合並到各自的分支而改变(将其视為每个版本的單独的“main”分支)。
|
||||
|
||||
另一方面,1.x.x 的下载应该永远不会改变。
|
||||
另一方面,1.x.x 的下载應該永远不会改变。
|
||||
|
||||
## 如何从 Gogs/GitHub 等迁移到 Gitea
|
||||
|
||||
@@ -34,9 +34,9 @@ aliases:
|
||||
|
||||
- [Gogs 版本 0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286)
|
||||
|
||||
要从 GitHub 迁移到 Gitea,您可以使用 Gitea 内置的迁移表单。
|
||||
要从 GitHub 迁移到 Gitea,您可以使用 Gitea 内置的迁移表單。
|
||||
|
||||
为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。
|
||||
為了迁移诸如问题、拉取請求等项目,您需要至少输入您的使用者名。
|
||||
|
||||
[Example (requires login)](https://demo.gitea.com/repo/migrate)
|
||||
|
||||
@@ -44,13 +44,13 @@ aliases:
|
||||
|
||||
https://github.com/loganinak/MigrateGitlabToGogs
|
||||
|
||||
## Gitea 存储文件的位置
|
||||
## Gitea 存儲文件的位置
|
||||
|
||||
- _`AppWorkPath`_
|
||||
- `--work-path`标志
|
||||
- 或者环境变量`GITEA_WORK_DIR`
|
||||
- 或者在构建时设置的内置值
|
||||
- 或者包含 Gitea 二进制文件的目录
|
||||
- 或者包含 Gitea 二進制文件的目錄
|
||||
- `%(APP_DATA_PATH)`(数据库、索引器等的默认路径)
|
||||
- `app.ini`中的`APP_DATA_PATH`
|
||||
- 或者*`AppWorkPath`*`/data`
|
||||
@@ -65,7 +65,7 @@ https://github.com/loganinak/MigrateGitlabToGogs
|
||||
- RepoRootPath
|
||||
- `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径)
|
||||
- 否则*`AppWorkPath`*`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径)
|
||||
- 默认值为`%(APP_DATA_PATH)/gitea-repositories`
|
||||
- 默认值為`%(APP_DATA_PATH)/gitea-repositories`
|
||||
- INI(配置文件)
|
||||
- `--config`标志
|
||||
- 或者在构建时设置的可能内置值
|
||||
@@ -78,63 +78,63 @@ https://github.com/loganinak/MigrateGitlabToGogs
|
||||
|
||||
有几个地方可能会导致显示不正确。
|
||||
|
||||
1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。
|
||||
1. 如果使用反向代理,請确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明進行设置。
|
||||
2. 确保在`app.ini`的`server`部分中正确设置了`ROOT_URL`。
|
||||
|
||||
如果某些克隆选项未显示(HTTP/S 或 SSH),可以在`app.ini中`
|
||||
如果某些克隆選项未显示(HTTP/S 或 SSH),可以在`app.ini中`
|
||||
|
||||
- `DISABLE_HTTP_GIT`: 如果设为 true, 将会没有 HTTP/HTTPS 链接
|
||||
- `DISABLE_SSH`: 如果设为 true, 将会没有 SSH 链接
|
||||
- `SSH_EXPOSE_ANONYMOUS`: 如果设为 false, SSH 链接将会对匿名用户隐藏
|
||||
- `DISABLE_HTTP_GIT`: 如果设為 true, 将会没有 HTTP/HTTPS 链接
|
||||
- `DISABLE_SSH`: 如果设為 true, 将会没有 SSH 链接
|
||||
- `SSH_EXPOSE_ANONYMOUS`: 如果设為 false, SSH 链接将会对匿名使用者隐藏
|
||||
|
||||
## 文件上传失败:413 Request Entity Too Large
|
||||
|
||||
当反向代理限制文件上传大小时,会出现此错误。
|
||||
当反向代理限制文件上传大小时,会出現此错误。
|
||||
|
||||
有关使用 nginx 解决此问题,请参阅[反向代理指南](../administration/reverse-proxies.md)。
|
||||
有关使用 nginx 解决此问题,請参阅[反向代理指南](../administration/reverse-proxies.md)。
|
||||
|
||||
## 自定义模板无法加载或运行错误
|
||||
## 自定义模板無法加载或运行错误
|
||||
|
||||
Gitea 的自定义模板必须将其添加到正确的位置,否则 Gitea 将无法找到并使用自定义模板。
|
||||
Gitea 的自定义模板必須将其添加到正确的位置,否则 Gitea 将無法找到並使用自定义模板。
|
||||
|
||||
模板的正确路径应该相对于`CustomPath`。
|
||||
模板的正确路径應該相對於`CustomPath`。
|
||||
|
||||
1. 要找到`CustomPath`,请在站点管理 -> 配置 中查找自定义文件根路径。
|
||||
1. 要找到`CustomPath`,請在站点管理 -> 配置 中查找自定义文件根路径。
|
||||
|
||||
如果找不到,请尝试`echo $GITEA_CUSTOM`。
|
||||
如果找不到,請尝试`echo $GITEA_CUSTOM`。
|
||||
|
||||
2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置)
|
||||
2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存儲文件的位置)
|
||||
3. 如果仍然找不到路径,则可以参考[自定义 Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。
|
||||
|
||||
## Gitea 是否有"GitHub/GitLab Pages"功能?
|
||||
|
||||
Gitea 不提供内置的 Pages 服务器。您需要一个专用的域名来提供静态页面,以避免 CSRF 安全风险。
|
||||
|
||||
对于简单的用法,您可以使用反向代理来重写和提供 Gitea 的原始文件 URL 中的静态内容。
|
||||
對於简單的用法,您可以使用反向代理来重写和提供 Gitea 的原始文件 URL 中的静态内容。
|
||||
|
||||
还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。
|
||||
還有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。
|
||||
|
||||
## 活跃用户与禁止登录用户
|
||||
## 活跃使用者与禁止登入使用者
|
||||
|
||||
在 Gitea 中,"活跃用户"是指通过电子邮件激活其帐户的用户。
|
||||
在 Gitea 中,"活跃使用者"是指通過电子邮件激活其帳戶的使用者。
|
||||
|
||||
"禁止登录用户"是指不允许再登录到 Gitea 的用户。
|
||||
"禁止登入使用者"是指不允许再登入到 Gitea 的使用者。
|
||||
|
||||
## 设置日志记录
|
||||
|
||||
- [官方文档](../administration/logging-config.md)
|
||||
- [官方文檔](../administration/logging-config.md)
|
||||
|
||||
## 什么是 Swagger?
|
||||
|
||||
[Swagger](https://swagger.io/) 是 Gitea 用于其 API 文档的工具。
|
||||
[Swagger](https://swagger.io/) 是 Gitea 用于其 API 文檔的工具。
|
||||
|
||||
所有 Gitea 实例都有内置的 API,无法完全禁用它。
|
||||
但是,您可以在 app.ini 的 api 部分将 ENABLE_SWAGGER 设置为 false,以禁用其文档显示。
|
||||
有关更多信息,请参阅 Gitea 的[API 文档](development/api-usage.md)。
|
||||
所有 Gitea 实例都有内置的 API,無法完全禁用它。
|
||||
但是,您可以在 app.ini 的 api 部分将 ENABLE_SWAGGER 设置為 false,以禁用其文檔显示。
|
||||
有关更多信息,請参阅 Gitea 的[API 文檔](development/api-usage.md)。
|
||||
|
||||
您可以在上查看最新的 API(例如)https://gitea.com/api/swagger
|
||||
|
||||
您还可以在上查看`swagger.json`文件的示例 https://gitea.com/swagger.v1.json
|
||||
您還可以在上查看`swagger.json`文件的示例 https://gitea.com/swagger.v1.json
|
||||
|
||||
## 调整服务器用于公共/私有使用
|
||||
|
||||
@@ -142,88 +142,88 @@ Gitea 不提供内置的 Pages 服务器。您需要一个专用的域名来提
|
||||
|
||||
有多种方法可以组合使用来防止垃圾邮件发送者:
|
||||
|
||||
1. 通过设置电子邮件域名的白名单或黑名单。
|
||||
2. 通过设置一些域名或者 OpenID 白名单(见下文)。
|
||||
3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET`和 `RECAPTCHA_SITEKEY`。
|
||||
4. 将`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](development/api-usage.md) 或 Gitea 的管理界面创建新用户。
|
||||
1. 通過设置电子邮件域名的白名單或黑名單。
|
||||
2. 通過设置一些域名或者 OpenID 白名單(见下文)。
|
||||
3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置為`true`,並正确配置`RECAPTCHA_SECRET`和 `RECAPTCHA_SITEKEY`。
|
||||
4. 将`DISABLE_REGISTRATION`设置為`true`,並通過 [CLI](../administration/command-line.md)、[API](development/api-usage.md) 或 Gitea 的管理界面建立新使用者。
|
||||
|
||||
### 仅允许/阻止特定的电子邮件域名
|
||||
### 僅允许/阻止特定的电子邮件域名
|
||||
|
||||
您可以在`app.ini`中的`[service]`下的配置`EMAIL_DOMAIN_WHITELIST` 或 `EMAIL_DOMAIN_BLOCKLIST`。
|
||||
|
||||
### 仅允许/阻止特定的 OpenID 提供商
|
||||
### 僅允许/阻止特定的 OpenID 提供商
|
||||
|
||||
您可以在`app.ini`的`[openid]`下配置`WHITELISTED_URI`或`BLACKLISTED_URIS`。
|
||||
|
||||
**注意**: 白名单优先,如果白名单非空,则忽略黑名单。
|
||||
**注意**: 白名單优先,如果白名單非空,则忽略黑名單。
|
||||
|
||||
### 仅允许发布问题的用户
|
||||
### 僅允许發佈问题的使用者
|
||||
|
||||
目前实现这一点的方法是创建/修改一个具有最大仓库创建限制为 0 的用户。
|
||||
目前实現这一点的方法是建立/修改一个具有最大存放庫建立限制為 0 的使用者。
|
||||
|
||||
### 受限制的用户
|
||||
### 受限制的使用者
|
||||
|
||||
受限制的用户仅能访问其组织/团队成员和协作所在的内容的子集,而忽略组织/仓库等的公共标志。
|
||||
受限制的使用者僅能访问其組織/团队成员和协作所在的内容的子集,而忽略組織/存放庫等的公共标志。
|
||||
|
||||
示例用例:一个公司运行一个需要登录的 Gitea 实例。大多数仓库是公开的(所有同事都可以访问/浏览)。
|
||||
示例用例:一个公司运行一个需要登入的 Gitea 实例。大多数存放庫是公开的(所有同事都可以访问/浏览)。
|
||||
|
||||
在某些情况下,某个客户或第三方需要访问特定的仓库,并且只能访问该仓库。通过将此类客户帐户设置为受限制帐户,并使用团队成员身份和/或协作来授予所需的任何访问权限,可以简单地实现这一点,而无需使所有内容都变为私有。
|
||||
在某些情况下,某个客户或第三方需要访问特定的存放庫,並且只能访问該存放庫。通過将此类客户帳戶设置為受限制帳戶,並使用团队成员身份和/或协作来授予所需的任何访问权限,可以简單地实現这一点,而無需使所有内容都变為私有。
|
||||
|
||||
### 启用 Fail2ban
|
||||
|
||||
使用 [Fail2Ban](../administration/fail2ban-setup.md) 监视并阻止基于日志模式的自动登录尝试或其他恶意行为。
|
||||
使用 [Fail2Ban](../administration/fail2ban-setup.md) 监视並阻止基于日志模式的自动登入尝试或其他恶意行為。
|
||||
|
||||
## SSHD vs 内建 SSH
|
||||
|
||||
SSHD 是大多数 Unix 系统上内建的 SSH 服务器。
|
||||
|
||||
Gitea 还提供了自己的 SSH 服务器,用于在 SSHD 不可用时使用。
|
||||
Gitea 還提供了自己的 SSH 服务器,用于在 SSHD 不可用时使用。
|
||||
|
||||
## Gitea 运行缓慢
|
||||
|
||||
导致此问题的最常见原因是加载联合头像。
|
||||
|
||||
您可以通过在`app.ini`中将`ENABLE_FEDERATED_AVATAR`设置为`false`来关闭此功能。
|
||||
您可以通過在`app.ini`中将`ENABLE_FEDERATED_AVATAR`设置為`false`来关闭此功能。
|
||||
|
||||
还有一个可能需要更改的选项是在`app.ini`中将`DISABLE_GRAVATAR`设置为`true`。
|
||||
還有一个可能需要更改的選项是在`app.ini`中将`DISABLE_GRAVATAR`设置為`true`。
|
||||
|
||||
## 无法创建仓库/文件
|
||||
## 無法建立存放庫/文件
|
||||
|
||||
请确保 Gitea 具有足够的权限来写入其主目录和数据目录。
|
||||
請确保 Gitea 具有足够的权限来写入其主目錄和数据目錄。
|
||||
|
||||
参见[AppDataPath 和 RepoRootPath](faq.md#Gitea存储文件的位置)
|
||||
参见[AppDataPath 和 RepoRootPath](faq.md#Gitea存儲文件的位置)
|
||||
|
||||
**适用于 Arch 用户的注意事项:**在撰写本文时,Arch 软件包的 systemd 文件包含了以下行:
|
||||
**适用于 Arch 使用者的注意事项:**在撰写本文时,Arch 軟體包的 systemd 文件包含了以下行:
|
||||
|
||||
`ReadWritePaths=/etc/gitea/app.ini`
|
||||
|
||||
这将使得 Gitea 无法写入其他路径。
|
||||
这将使得 Gitea 無法写入其他路径。
|
||||
|
||||
## 翻译不正确/如何添加更多翻译
|
||||
|
||||
我们当前的翻译是在我们的[Crowdin 项目](https://crowdin.com/project/gitea)上众包进行的
|
||||
我们当前的翻译是在我们的[Crowdin 项目](https://crowdin.com/project/gitea)上众包進行的
|
||||
|
||||
无论您想要更改翻译还是添加新的翻译,都需要在 Crowdin 集成中进行,因为所有翻译都会被 CI 覆盖。
|
||||
無论您想要更改翻译還是添加新的翻译,都需要在 Crowdin 集成中進行,因為所有翻译都会被 CI 覆盖。
|
||||
|
||||
## 推送钩子/ Webhook / Actions 未运行
|
||||
|
||||
如果您可以推送但无法在主页仪表板上看到推送活动,或者推送不触发 Webhook 和 Actions,可能是 git 钩子不工作而导致的。
|
||||
如果您可以推送但無法在主页仪表板上看到推送活动,或者推送不触发 Webhook 和 Actions,可能是 git 钩子不工作而导致的。
|
||||
|
||||
这可能是由于以下原因:
|
||||
|
||||
1. Git 钩子不同步:在站点管理面板上运行“重新同步所有仓库的 pre-receive、update 和 post-receive 钩子”
|
||||
2. Git 仓库(和钩子)存储在一些不支持脚本执行的文件系统上(例如由 NAS 挂载),请确保文件系统支持`chmod a+x any-script`
|
||||
3. 如果您使用的是 Docker,请确保 Docker Server(而不是客户端)的版本 >= 20.10.6
|
||||
1. Git 钩子不同步:在站点管理面板上运行“重新同步所有存放庫的 pre-receive、update 和 post-receive 钩子”
|
||||
2. Git 存放庫(和钩子)存儲在一些不支持脚本執行的文件系统上(例如由 NAS 挂载),請确保文件系统支持`chmod a+x any-script`
|
||||
3. 如果您使用的是 Docker,請确保 Docker Server(而不是客户端)的版本 >= 20.10.6
|
||||
|
||||
## SSH 问题
|
||||
|
||||
如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。
|
||||
如果無法通過`ssh`访问存放庫,但`https`正常工作,請考虑以下情况。
|
||||
|
||||
首先,请确保您可以通过 SSH 访问 Gitea。
|
||||
首先,請确保您可以通過 SSH 访问 Gitea。
|
||||
|
||||
`ssh git@myremote.example`
|
||||
|
||||
如果连接成功,您应该会收到以下错误消息:
|
||||
如果连接成功,您應該会收到以下错误消息:
|
||||
|
||||
```
|
||||
Hi there, You've successfully authenticated, but Gitea does not provide shell access.
|
||||
@@ -232,7 +232,7 @@ If this is unexpected, please log in with password and setup Gitea under another
|
||||
|
||||
如果您收到以上消息但仍然连接成功,这意味着您的 SSH 密钥**没有**由 Gitea 管理。这意味着钩子不会运行,在其他一些潜在问题中也包括在内。
|
||||
|
||||
如果您无法连接,可能是因为您的 SSH 密钥在本地配置不正确。
|
||||
如果您無法连接,可能是因為您的 SSH 密钥在本地配置不正确。
|
||||
这是针对 SSH 而不是 Gitea 的问题,因此在此不涉及。
|
||||
|
||||
### SSH 常见错误
|
||||
@@ -242,30 +242,30 @@ Permission denied (publickey).
|
||||
fatal: Could not read from remote repository.
|
||||
```
|
||||
|
||||
此错误表示服务器拒绝登录尝试,
|
||||
请检查以下事项:
|
||||
此错误表示服务器拒绝登入尝试,
|
||||
請检查以下事项:
|
||||
|
||||
- 在客户端:
|
||||
- 确保公钥和私钥已添加到正确的 Gitea 用户。
|
||||
- 确保远程 URL 中没有任何问题。特别是,请确保 ∂
|
||||
Git 用户(@ 之前的部分)的名称拼写正确。
|
||||
- 确保客户端机器上的公钥和私钥正确无误。
|
||||
- 确保公钥和私钥已添加到正确的 Gitea 使用者。
|
||||
- 确保远程 URL 中没有任何问题。特别是,請确保 ∂
|
||||
Git 使用者(@ 之前的部分)的名稱拼写正确。
|
||||
- 确保客户端机器上的公钥和私钥正确無误。
|
||||
- 在服务器上:
|
||||
|
||||
- 确保存储库存在并且命名正确。
|
||||
- 检查系统用户主目录中的 `.ssh` 目录的权限。
|
||||
- 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。
|
||||
- 确保存儲库存在並且命名正确。
|
||||
- 检查系统使用者主目錄中的 `.ssh` 目錄的权限。
|
||||
- 驗證正确的公钥是否已添加到 `.ssh/authorized_keys` 中。
|
||||
|
||||
尝试在 Gitea 管理面板上运行
|
||||
`Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)`。
|
||||
|
||||
- 查看 Gitea 日志。
|
||||
- 查看 /var/log/auth(或类似的文件)。
|
||||
- 检查存储库的权限。
|
||||
- 检查存儲库的权限。
|
||||
|
||||
以下是一个示例,其中缺少公共 SSH 密钥,
|
||||
认证成功,但是其他设置导致 SSH 无法访问正确的
|
||||
存储库。
|
||||
認證成功,但是其他设置导致 SSH 無法访问正确的
|
||||
存儲库。
|
||||
|
||||
```
|
||||
fatal: Could not read from remote repository.
|
||||
@@ -274,26 +274,26 @@ Please make sure you have the correct access rights
|
||||
and the repository exists.
|
||||
```
|
||||
|
||||
在这种情况下,请检查以下设置:
|
||||
在这种情况下,請检查以下设置:
|
||||
|
||||
- 在服务器上:
|
||||
- 确保`git`系统用户设置了可用的 shell
|
||||
- 使用`getent passwd git | cut -d: -f7`进行验证
|
||||
- 可以使用`usermod`或`chsh`进行修改。
|
||||
- 确保`git`系统使用者设置了可用的 shell
|
||||
- 使用`getent passwd git | cut -d: -f7`進行驗證
|
||||
- 可以使用`usermod`或`chsh`進行修改。
|
||||
- 确保`.ssh/authorized_keys`中的`gitea serv`命令使用
|
||||
正确的配置文件。
|
||||
|
||||
## 迁移带有标签的存储库后缺失发布版本
|
||||
## 迁移带有標籤的存儲库后缺失發佈版本
|
||||
|
||||
要迁移带有所有标签的存储库,您需要执行两个操作:
|
||||
要迁移带有所有標籤的存儲库,您需要執行两个操作:
|
||||
|
||||
- 推送标签到存储库:
|
||||
- 推送標籤到存儲库:
|
||||
|
||||
```
|
||||
git push --tags
|
||||
```
|
||||
|
||||
- 在 Gitea 中重新同步所有存储库的标签:
|
||||
- 在 Gitea 中重新同步所有存儲库的標籤:
|
||||
|
||||
```
|
||||
gitea admin repo-sync-releases
|
||||
@@ -311,59 +311,59 @@ error: failed to push some refs to '<GIT_REPO_URL>'
|
||||
|
||||
检查`app.ini`文件中的`LFS_HTTP_AUTH_EXPIRY`值。
|
||||
|
||||
默认情况下,LFS 令牌在 20 分钟后过期。如果您的连接速度较慢或文件较大(或两者都是),可能无法在时间限制内完成上传。
|
||||
默认情况下,LFS 令牌在 20 分钟后過期。如果您的连接速度较慢或文件较大(或两者都是),可能無法在时间限制内完成上传。
|
||||
|
||||
您可以将此值设置为`60m`或`120m`。
|
||||
您可以将此值设置為`60m`或`120m`。
|
||||
|
||||
## 如何在启动 Gitea 之前创建用户
|
||||
## 如何在启动 Gitea 之前建立使用者
|
||||
|
||||
Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您可以使用[管理 CLI 命令](../administration/command-line.md#admin)像正常情况下添加用户。
|
||||
Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您可以使用[管理 CLI 命令](../administration/command-line.md#admin)像正常情况下添加使用者。
|
||||
|
||||
## 如何启用密码重置
|
||||
## 如何启用密碼重置
|
||||
|
||||
没有密码重置的设置。当配置了[邮件服务](../administration/email-setup.md)时,密码重置将自动启用;否则将被禁用。
|
||||
没有密碼重置的设置。当配置了[邮件服务](../administration/email-setup.md)时,密碼重置将自动启用;否则将被禁用。
|
||||
|
||||
## 如何更改用户的密码
|
||||
## 如何更改使用者的密碼
|
||||
|
||||
- 作为管理员,您可以更改任何用户的密码(并可选择强制其在下次登录时更改密码)...
|
||||
- 转到您的`站点管理 -> 用户账户`页面并编辑用户。
|
||||
- 作為管理员,您可以更改任何使用者的密碼(並可選择强制其在下次登入时更改密碼)...
|
||||
- 转到您的`站点管理 -> 使用者账户`页面並编辑使用者。
|
||||
- 使用[管理 CLI 命令](../administration/command-line.md#admin)。
|
||||
|
||||
请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。
|
||||
請注意,大多数命令還需要一个[全局标志](../administration/command-line.md#全局選项)来指向正确的配置。
|
||||
|
||||
- 作为**用户**,您可以更改密码...
|
||||
- 作為**使用者**,您可以更改密碼...
|
||||
|
||||
- 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。
|
||||
- 使用`忘记密码`链接。
|
||||
- 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密碼)。
|
||||
- 使用`忘记密碼`链接。
|
||||
|
||||
如果`忘记密码/账户恢复`页面被禁用,请联系管理员配置[邮件服务](../administration/email-setup.md)。
|
||||
如果`忘记密碼/账户恢复`页面被禁用,請联系管理员配置[邮件服务](../administration/email-setup.md)。
|
||||
|
||||
## 为什么我的 Markdown 显示错误
|
||||
## 為什么我的 Markdown 显示错误
|
||||
|
||||
在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。
|
||||
在 Gitea 版本 `1.11` 中,我们转换為使用[goldmark](https://github.com/yuin/goldmark)進行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。
|
||||
|
||||
如果您在版本`1.11`之前的 Markdown 正常工作,但在升级后无法正常工作,请仔细阅读 CommonMark 规范,看看问题是由错误还是非兼容的语法引起的。
|
||||
如果您在版本`1.11`之前的 Markdown 正常工作,但在升级后無法正常工作,請仔细阅读 CommonMark 规范,看看问题是由错误還是非兼容的语法引起的。
|
||||
|
||||
如果是后者,通常规范中会列出一种符合标准的替代方法。
|
||||
|
||||
## 使用 MySQL 进行升级时出现的错误
|
||||
## 使用 MySQL 進行升级时出現的错误
|
||||
|
||||
如果在使用 MySQL 升级 Gitea 时收到以下错误:
|
||||
|
||||
> `ORM engine initialization failed: migrate: do migrate: Error: 1118: Row size too large...`
|
||||
|
||||
请运行 `gitea doctor convert` 或对数据库中的每个表运行 `ALTER TABLE table_name ROW_FORMAT=dynamic;`。
|
||||
請运行 `gitea doctor convert` 或对数据库中的每个表运行 `ALTER TABLE table_name ROW_FORMAT=dynamic;`。
|
||||
|
||||
潜在问题是默认行格式分配给每个表的索引空间
|
||||
太小。Gitea 要求其表的`ROWFORMAT`为`DYNAMIC`。
|
||||
太小。Gitea 要求其表的`ROWFORMAT`為`DYNAMIC`。
|
||||
|
||||
如果收到包含`Error 1071: Specified key was too long; max key length is 1000 bytes...`
|
||||
的错误行,则表示您正在尝试在使用 ISAM 引擎的表上运行 Gitea。尽管在先前版本的 Gitea 中可能是凑巧能够工作的,但它从未得到官方支持,
|
||||
您必须使用 InnoDB。您应该对数据库中的每个表运行`ALTER TABLE table_name ENGINE=InnoDB;`。
|
||||
您必須使用 InnoDB。您應該对数据库中的每个表运行`ALTER TABLE table_name ENGINE=InnoDB;`。
|
||||
|
||||
## 为什么 Emoji 只显示占位符或单色图像
|
||||
## 為什么 Emoji 只显示占位符或單色图像
|
||||
|
||||
Gitea 需要系统或浏览器安装其中一个受支持的 Emoji 字体,例如 Apple Color Emoji、Segoe UI Emoji、Segoe UI Symbol、Noto Color Emoji 和 Twemoji Mozilla。通常,操作系统应该已经提供了其中一个字体,但特别是在 Linux 上,可能需要手动安装它们。
|
||||
Gitea 需要系统或浏览器安裝其中一个受支持的 Emoji 字體,例如 Apple Color Emoji、Segoe UI Emoji、Segoe UI Symbol、Noto Color Emoji 和 Twemoji Mozilla。通常,操作系统應該已经提供了其中一个字體,但特别是在 Linux 上,可能需要手动安裝它们。
|
||||
|
||||
## SystemD 和 Docker 上的标准输出日志
|
||||
|
||||
@@ -371,43 +371,43 @@ SystemD 上的标准输出默认会写入日志记录中。您可以尝试使用
|
||||
|
||||
类似地,Docker 上的标准输出可以使用`docker logs <container>`来查看。
|
||||
|
||||
要收集日志以进行帮助和问题报告,请参阅[支持选项](help/support.md)。
|
||||
要收集日志以進行帮助和问题报告,請参阅[支持選项](help/support.md)。
|
||||
|
||||
## 初始日志记录
|
||||
|
||||
在 Gitea 读取配置文件并设置其日志记录之前,它会将一些内容记录到标准输出,以帮助调试日志记录无法工作的情况。
|
||||
在 Gitea 读取配置文件並设置其日志记录之前,它会将一些内容记录到标准输出,以帮助调试日志记录無法工作的情况。
|
||||
|
||||
您可以通过设置`--quiet`或`-q`选项来停止此日志记录。请注意,这只会在 Gitea 设置自己的日志记录之前停止日志记录。
|
||||
您可以通過设置`--quiet`或`-q`選项来停止此日志记录。請注意,这只会在 Gitea 设置自己的日志记录之前停止日志记录。
|
||||
|
||||
如果您报告了错误或问题,必须提供这些信息以恢复初始日志记录。
|
||||
如果您报告了错误或问题,必須提供这些信息以恢复初始日志记录。
|
||||
|
||||
只有在完全配置了所有内容之后,您才应该设置此选项。
|
||||
只有在完全配置了所有内容之后,您才應該设置此選项。
|
||||
|
||||
## 在数据库启动期间出现有关结构默认值的警告
|
||||
## 在数据库启动期间出現有关结构默认值的警告
|
||||
|
||||
有时,在迁移过程中,旧列和默认值可能在数据库架构中保持不变。
|
||||
有时,在迁移過程中,旧列和默认值可能在数据库架构中保持不变。
|
||||
这可能会导致警告,例如:
|
||||
|
||||
```
|
||||
2020/08/02 11:32:29 ...rm/session_schema.go:360:Sync() [W] Table user Column keep_activity_private db default is , struct default is 0
|
||||
```
|
||||
|
||||
可以安全地忽略这些警告,但您可以通过让 Gitea 重新创建这些表来停止这些警告,使用以下命令:
|
||||
可以安全地忽略这些警告,但您可以通過让 Gitea 重新建立这些表来停止这些警告,使用以下命令:
|
||||
|
||||
```
|
||||
gitea doctor recreate-table user
|
||||
```
|
||||
|
||||
这将导致 Gitea 重新创建用户表并将旧数据复制到新表中,
|
||||
并正确设置默认值。
|
||||
这将导致 Gitea 重新建立使用者表並将旧数据复制到新表中,
|
||||
並正确设置默认值。
|
||||
|
||||
您可以使用以下命令要求 Gitea 重新创建多个表:
|
||||
您可以使用以下命令要求 Gitea 重新建立多个表:
|
||||
|
||||
```
|
||||
gitea doctor recreate-table table1 table2 ...
|
||||
```
|
||||
|
||||
如果您希望 Gitea 重新创建所有表,请使用以下命令:
|
||||
如果您希望 Gitea 重新建立所有表,請使用以下命令:
|
||||
|
||||
```
|
||||
gitea doctor recreate-table
|
||||
@@ -415,19 +415,19 @@ gitea doctor recreate-table
|
||||
|
||||
在运行这些命令之前,强烈建议您备份数据库。
|
||||
|
||||
## 为什么查看文件时制表符/缩进显示错误
|
||||
## 為什么查看文件时制表符/缩進显示错误
|
||||
|
||||
如果您正在使用 Cloudflare,请在仪表板中关闭自动缩小选项。
|
||||
如果您正在使用 Cloudflare,請在仪表板中关闭自动缩小選项。
|
||||
|
||||
`Speed` -> `Optimization` -> 在 `Auto-Minify` 设置中取消选中 `HTML`。
|
||||
`Speed` -> `Optimization` -> 在 `Auto-Minify` 设置中取消選中 `HTML`。
|
||||
|
||||
## 如何从磁盘采用存储库
|
||||
## 如何从硬碟采用存儲库
|
||||
|
||||
- 将您的(裸)存储库添加到正确的位置,即您的配置所在的地方(`repository.ROOT`),确保它们位于正确的布局`<REPO_ROOT>/[user]/[repo].git`。
|
||||
- **注意:**目录名必须为小写。
|
||||
- 您还可以在`<ROOT_URL>/admin/config`中检查存储库根路径。
|
||||
- 确保存在要采用存储库的用户/组织。
|
||||
- 作为管理员,转到`<ROOT_URL>/admin/repos/unadopted`并搜索。
|
||||
- 用户也可以通过配置[`ALLOW_ADOPTION_OF_UNADOPTED_REPOSITORIES`](../administration/config-cheat-sheet.md#仓库) 获得类似的权限。
|
||||
- 如果上述步骤都正确执行,您应该能够选择要采用的存储库。
|
||||
- 如果没有找到存储库,请启用[调试日志记录](../administration/config-cheat-sheet.md#仓库)以检查是否有特定错误。
|
||||
- 将您的(裸)存儲库添加到正确的位置,即您的配置所在的地方(`repository.ROOT`),确保它们位于正确的布局`<REPO_ROOT>/[user]/[repo].git`。
|
||||
- **注意:**目錄名必須為小写。
|
||||
- 您還可以在`<ROOT_URL>/admin/config`中检查存儲库根路径。
|
||||
- 确保存在要采用存儲库的使用者/組織。
|
||||
- 作為管理员,转到`<ROOT_URL>/admin/repos/unadopted`並搜索。
|
||||
- 使用者也可以通過配置[`ALLOW_ADOPTION_OF_UNADOPTED_REPOSITORIES`](../administration/config-cheat-sheet.md#存放庫) 获得类似的权限。
|
||||
- 如果上述步骤都正确執行,您應該能够選择要采用的存儲库。
|
||||
- 如果没有找到存儲库,請启用[调试日志记录](../administration/config-cheat-sheet.md#存放庫)以检查是否有特定错误。
|
||||
|
||||
@@ -6,45 +6,45 @@ aliases:
|
||||
- /zh-tw/seek-help
|
||||
---
|
||||
|
||||
# 支持选项
|
||||
# 支持選项
|
||||
|
||||
- [付费商业支持](https://about.gitea.com/)
|
||||
- [Discord](https://discord.gg/Gitea)
|
||||
- [论坛](https://forum.gitea.com/)
|
||||
- [Matrix](https://matrix.to/#/#gitea-space:matrix.org)
|
||||
- 注意:大多数 Matrix 频道都与 Discord 中的对应频道桥接,可能在桥接过程中会出现一定程度的不稳定性。
|
||||
- 注意:大多数 Matrix 频道都与 Discord 中的对應频道桥接,可能在桥接過程中会出現一定程度的不稳定性。
|
||||
- 中文支持
|
||||
- [Discourse 中文分类](https://forum.gitea.com/c/5-category/5)
|
||||
- QQ 群 328432459
|
||||
|
||||
# Bug 报告
|
||||
|
||||
如果您发现了 Bug,请在 GitHub 上 [创建一个问题](https://github.com/go-gitea/gitea/issues)。
|
||||
如果您发現了 Bug,請在 GitHub 上 [建立一个问题](https://github.com/go-gitea/gitea/issues)。
|
||||
|
||||
**注意:** 在请求支持时,可能需要准备以下信息,以便帮助者获得所需的所有信息:
|
||||
**注意:** 在請求支持时,可能需要准备以下信息,以便帮助者获得所需的所有信息:
|
||||
|
||||
1. 您的 `app.ini`(将任何敏感数据进行必要的清除)。
|
||||
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. 如果遇到慢速/挂起/死锁等问题,请在出现问题时报告堆栈跟踪。
|
||||
4. 可重現的步骤,以便他人能够更快速、更容易地重現和理解问题。
|
||||
- [demo.gitea.com](https://demo.gitea.com) 可用于重現问题。
|
||||
5. 如果遇到慢速/挂起/死锁等问题,請在出現问题时报告堆栈跟踪。
|
||||
转到 "Site Admin" -> "Monitoring" -> "Stacktrace" -> "Download diagnosis report"。
|
||||
|
||||
# 高级 Bug 报告提示
|
||||
|
||||
## 更多日志的配置选项
|
||||
## 更多日志的配置選项
|
||||
|
||||
默认情况下,日志以 `info` 级别输出到控制台。
|
||||
如果您需要设置日志级别和/或从文件中收集日志,
|
||||
您只需将以下配置复制到您的 `app.ini` 中(删除所有其他 `[log]` 部分),
|
||||
然后您将在 Gitea 的日志目录中找到 `*.log` 文件(默认为 `%(GITEA_WORK_DIR)/log`)。
|
||||
然后您将在 Gitea 的日志目錄中找到 `*.log` 文件(默认為 `%(GITEA_WORK_DIR)/log`)。
|
||||
|
||||
```ini
|
||||
; 要显示所有 SQL 日志,您还可以在 [database] 部分中设置 LOG_SQL=true
|
||||
; 要显示所有 SQL 日志,您還可以在 [database] 部分中设置 LOG_SQL=true
|
||||
[log]
|
||||
LEVEL=debug
|
||||
MODE=console,file
|
||||
@@ -54,7 +54,7 @@ MODE=console,file
|
||||
|
||||
Gitea 可以使用 Golang 的 pprof 处理程序和工具链来收集堆栈跟踪和其他运行时信息。
|
||||
|
||||
如果 Web UI 停止工作,您可以尝试通过命令行收集堆栈跟踪:
|
||||
如果 Web UI 停止工作,您可以尝试通過命令行收集堆栈跟踪:
|
||||
|
||||
1. 设置 app.ini:
|
||||
|
||||
@@ -65,5 +65,5 @@ Gitea 可以使用 Golang 的 pprof 处理程序和工具链来收集堆栈跟
|
||||
|
||||
2. 重新启动 Gitea
|
||||
|
||||
3. 尝试触发 bug,当请求卡住一段时间,使用或浏览器访问:获取堆栈跟踪。
|
||||
3. 尝试触发 bug,当請求卡住一段时间,使用或浏览器访问:获取堆栈跟踪。
|
||||
`curl http://127.0.0.1:6060/debug/pprof/goroutine?debug=1`
|
||||
|
||||
@@ -10,7 +10,7 @@ aliases:
|
||||
|
||||
这里列出了 Gitea 与其它一些 Git 托管工具之间的异同,以便确认 Gitea 是否能够满足您的需求。
|
||||
|
||||
请注意,此列表中的某些表项可能已经过时,因为我们并没有定期检查其它产品的功能是否有所更改。你可以前往 [Github issue](https://github.com/go-gitea/gitea/issues) 来帮助我们更新过时的内容,感谢!
|
||||
請注意,此列表中的某些表项可能已经過时,因為我们並没有定期检查其它产品的功能是否有所更改。你可以前往 [Github issue](https://github.com/go-gitea/gitea/issues) 来帮助我们更新過时的内容,感谢!
|
||||
|
||||
_表格中的符号含义:_
|
||||
|
||||
@@ -35,9 +35,9 @@ _表格中的符号含义:_
|
||||
| 支持第三方渲染工具 | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
|
||||
| WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
|
||||
| 扩展 API | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 内置软件包/容器注册中心 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 同步提交到外部仓库 (push mirror) | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
|
||||
| 同步外部仓库的提交 (pull mirror) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ? |
|
||||
| 内置軟體包/容器注册中心 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 同步提交到外部存放庫 (push mirror) | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
|
||||
| 同步外部存放庫的提交 (pull mirror) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ? |
|
||||
| 浅色和深色主题 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ? |
|
||||
| 自定义主题支持 | ✓ | ✓ | ✘ | ✘ | ✘ | ✓ | ✘ |
|
||||
| 支持 Markdown | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
@@ -45,10 +45,10 @@ _表格中的符号含义:_
|
||||
| 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/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
|
||||
| 多实例交互 | [/](https://github.com/go-gitea/gitea/issues/18240) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
|
||||
| Markdown 绘图 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| Markdown 数学公式 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
@@ -57,47 +57,47 @@ _表格中的符号含义:_
|
||||
|
||||
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
|
||||
| -------------------- | --------------------------------------------------- | ---- | --------- | --------- | --------- | --------- | ------------ |
|
||||
| 仓库主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 仓库内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 存放庫主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 存放庫内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
|
||||
| Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 组织里程碑 | [✘](https://github.com/go-gitea/gitea/issues/14622) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 细粒度用户角色 | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 提交人的身份验证 | ⁄ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
|
||||
| 組織里程碑 | [✘](https://github.com/go-gitea/gitea/issues/14622) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 细粒度使用者角色 | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 提交人的身份驗證 | ⁄ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
|
||||
| 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://github.com/go-gitea/gitea/issues/3217) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 关联的工單 | ✘ | ✘ | ⁄ | [✓](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) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 工单依赖关系 | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
|
||||
| 通过 Email 创建工单 | [✘](https://github.com/go-gitea/gitea/issues/6226) | [✘](https://github.com/gogs/gogs/issues/2602) | ✘ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 工單批处理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 工單看板 | [✓](https://github.com/go-gitea/gitea/pull/8346) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 从工單建立分支 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 从评论建立工單 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 工單搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 工單全局搜索 | [✘](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) | ✓ | ✘ | ✘ |
|
||||
|
||||
#### Pull/Merge requests
|
||||
@@ -110,7 +110,7 @@ _表格中的符号含义:_
|
||||
| 评论 Pull/Merge request 中的某行代码 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 指定 Pull/Merge request 的审核人 | ✓ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 解决 Merge 冲突 | [✘](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 限制某些用户的 push 和 merge 权限 | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ |
|
||||
| 限制某些使用者的 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) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
|
||||
@@ -125,12 +125,12 @@ _表格中的符号含义:_
|
||||
| 自定义 Git 钩子 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 集成 AD / LDAP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 支持多个 LDAP / AD 服务 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
|
||||
| LDAP 用户同步 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| 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(外部授权) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
|
||||
| 作为 OAuth 2.0 provider | [✓](https://github.com/go-gitea/gitea/pull/5378) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 二次验证 (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 作為 OAuth 2.0 provider | [✓](https://github.com/go-gitea/gitea/pull/5378) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 二次驗證 (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
| 集成 Mattermost/Slack | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ |
|
||||
| 集成 Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
|
||||
| 集成 Microsoft Teams | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
|
||||
|
||||
@@ -8,40 +8,40 @@ aliases:
|
||||
|
||||
# 数据库准备
|
||||
|
||||
在使用 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 本身使用 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;
|
||||
@@ -50,37 +50,37 @@ aliases:
|
||||
|
||||
其中 `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`。
|
||||
`utf8mb4_bin` 是 MySQL/MariaDB 的通用排序規則。
|
||||
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 服务器上,测试与数据库的连接:
|
||||
|
||||
@@ -88,108 +88,108 @@ aliases:
|
||||
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 服务器上,测试与数据库的连接。
|
||||
|
||||
对于本地数据库:
|
||||
對於本地数据库:
|
||||
|
||||
```
|
||||
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. 在数据库实例所在的服务器上,放置以下凭据:
|
||||
|
||||
- `/path/to/postgresql.crt`: 数据库实例证书
|
||||
- `/path/to/postgresql.key`: 数据库实例私钥
|
||||
- `/path/to/root.crt`: 用于验证客户端证书的 CA 证书链
|
||||
- `/path/to/root.crt`: 用于驗證客户端证书的 CA 证书链
|
||||
|
||||
2. 在 `postgresql.conf` 中添加以下选项:
|
||||
2. 在 `postgresql.conf` 中添加以下選项:
|
||||
|
||||
```ini
|
||||
ssl = on
|
||||
@@ -206,31 +206,31 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
|
||||
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:
|
||||
對於 PostgreSQL 12:
|
||||
|
||||
```ini
|
||||
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full
|
||||
```
|
||||
|
||||
对于 PostgreSQL 11 及更早版本:
|
||||
對於 PostgreSQL 11 及更早版本:
|
||||
|
||||
```ini
|
||||
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/root.crt`: 用于驗證服务器证书的 CA 证书链
|
||||
|
||||
注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。
|
||||
注意:上述文件名在 PostgreSQL 中是硬编码的,無法更改。
|
||||
|
||||
7. 根据需要调整凭据、所有权和权限:
|
||||
|
||||
@@ -245,21 +245,21 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
|
||||
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. 在数据库实例上放置以下凭据:
|
||||
|
||||
- `/path/to/mysql.crt`: 数据库实例证书
|
||||
- `/path/to/mysql.key`: 数据库实例密钥
|
||||
- `/path/to/ca.crt`: CA 证书链。在单向 TLS 中不使用此文件,但用于验证双向 TLS 中的客户端证书。
|
||||
- `/path/to/ca.crt`: CA 证书链。在單向 TLS 中不使用此文件,但用于驗證双向 TLS 中的客户端证书。
|
||||
|
||||
2. 将以下选项添加到 `my.cnf`:
|
||||
2. 将以下選项添加到 `my.cnf`:
|
||||
|
||||
```ini
|
||||
[mysqld]
|
||||
@@ -276,9 +276,9 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
|
||||
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,9 +287,9 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
根据需要替换数据库用户名、密码和 Gitea 实例域名。
|
||||
根据需要替换数据库使用者名、密碼和 Gitea 实例域名。
|
||||
|
||||
6. 确保用于验证数据库服务器证书的 CA 证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。
|
||||
6. 确保用于驗證数据库服务器证书的 CA 证书链位于数据库和 Gitea 服务器的系统证书存儲中。請参考系统文檔中有关将 CA 证书添加到证书存儲的说明。
|
||||
|
||||
7. 在运行 Gitea 的服务器上,测试与数据库的连接:
|
||||
|
||||
@@ -297,4 +297,4 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
|
||||
mysql -u gitea -h example.db -p --ssl
|
||||
```
|
||||
|
||||
至此应该成功连接到数据库了。
|
||||
至此應該成功连接到数据库了。
|
||||
|
||||
@@ -6,59 +6,59 @@ aliases:
|
||||
- /zh-tw/install-from-binary
|
||||
---
|
||||
|
||||
# 使用二进制文件安装
|
||||
# 使用二進制文件安裝
|
||||
|
||||
所有打包的二进制程序均包含 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 下载
|
||||
|
||||
使用以下命令下载适用于 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 keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
gpg --verify gitea-@version@-linux-amd64.asc gitea-@version@-linux-amd64
|
||||
```
|
||||
|
||||
校验正确时的信息为 `Good signature from "Teabot <teabot@gitea.io>"`。
|
||||
校验错误时的信息为 `This key is not certified with a trusted signature!`。
|
||||
校验正确时的信息為 `Good signature from "Teabot <teabot@gitea.io>"`。
|
||||
校验错误时的信息為 `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,31 +94,31 @@ 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` 关闭安装界面
|
||||
- 手动配置数据库连接参数
|
||||
- 使用 `gitea generate secret` 创建 `SECRET_KEY` 和 `INTERNAL_TOKEN`
|
||||
- 设置 `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 工作路径
|
||||
|
||||
**提示:** 如果使用 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
|
||||
@@ -130,17 +130,17 @@ cp gitea /usr/local/bin/gitea
|
||||
|
||||
同样地,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:
|
||||
|
||||
### 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
|
||||
@@ -148,15 +148,15 @@ 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(推荐)
|
||||
|
||||
我们建议使用 systemd 作为服务管理器,使用 `systemctl restart gitea` 安全地重启程序。
|
||||
我们建议使用 systemd 作為服务管理器,使用 `systemctl restart gitea` 安全地重启程序。
|
||||
|
||||
### 2. 非 systemd 重启方法
|
||||
|
||||
@@ -166,40 +166,40 @@ GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
|
||||
|
||||
**提示:** 我们不建议使用 SIGKILL 信号(`-9`),这会强制停止 Gitea 程序,但不会正确关闭队列、索引器等任务。
|
||||
|
||||
请参阅下面的疑难解答说明,以在 Gitea 版本更新后修复损坏的仓库。
|
||||
請参阅下面的疑难解答说明,以在 Gitea 版本更新后修复损坏的存放庫。
|
||||
|
||||
## 排查故障
|
||||
|
||||
### 旧版 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
|
||||
|
||||
对于出现类似于 `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
|
||||
|
||||
从 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,13 +6,13 @@ 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
|
||||
@@ -22,7 +22,7 @@ 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
|
||||
@@ -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
|
||||
@@ -54,7 +54,7 @@ emerge gitea -va
|
||||
|
||||
### Canonical Snap
|
||||
|
||||
目前 Gitea 已在 Snap Store 中发布,名称为 [gitea](https://snapcraft.io/gitea)。
|
||||
目前 Gitea 已在 Snap Store 中發佈,名稱為 [gitea](https://snapcraft.io/gitea)。
|
||||
|
||||
```sh
|
||||
snap install gitea
|
||||
@@ -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
|
||||
@@ -49,41 +49,41 @@ git checkout @sourceVersion@ # or git checkout pr-xyz
|
||||
|
||||
## 构建
|
||||
|
||||
要从源代码进行构建,系统必须预先安装以下程序:
|
||||
要从源代码進行构建,系统必須预先安裝以下程序:
|
||||
|
||||
- `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 可以使用:
|
||||
|
||||
- `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
|
||||
@@ -91,7 +91,7 @@ TAGS="bindata" make backend
|
||||
|
||||
## 测试
|
||||
|
||||
按照上述步骤完成后,工作目录中将会有一个`gitea`二进制文件。可以从该目录进行测试,或将其移动到带有测试数据的目录中。当手动从命令行启动 Gitea 时,可以通过按下`Ctrl + C`来停止程序。
|
||||
按照上述步骤完成后,工作目錄中将会有一个`gitea`二進制文件。可以从該目錄進行测试,或将其移动到带有测试数据的目錄中。当手动从命令行启动 Gitea 时,可以通過按下`Ctrl + C`来停止程序。
|
||||
|
||||
```bash
|
||||
./gitea web
|
||||
@@ -99,35 +99,35 @@ TAGS="bindata" make backend
|
||||
|
||||
## 更改默认路径
|
||||
|
||||
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\""`
|
||||
- 对于`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\"`
|
||||
- 要设置`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\"`
|
||||
|
||||
将这些字符串与其前导的`-X`添加到`LDFLAGS`变量中,并像上面那样使用适当的`TAGS`运行`make build`。
|
||||
将这些字符串与其前导的`-X`添加到`LDFLAGS`变量中,並像上面那样使用适当的`TAGS`运行`make build`。
|
||||
|
||||
运行`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
|
||||
@@ -135,7 +135,7 @@ CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 TAGS="bindata sqlite sq
|
||||
|
||||
根据您的目标架构,适当替换`CC`、`GOOS`和`GOARCH`。
|
||||
|
||||
有时您需要构建一个静态编译的镜像。为此,您需要添加以下内容:
|
||||
有时您需要构建一个静态编译的镜像。為此,您需要添加以下内容:
|
||||
|
||||
```
|
||||
LDFLAGS="-linkmode external -extldflags '-static' $LDFLAGS" TAGS="netgo osusergo $TAGS" make build
|
||||
@@ -145,15 +145,15 @@ LDFLAGS="-linkmode external -extldflags '-static' $LDFLAGS" TAGS="netgo osusergo
|
||||
|
||||
### 添加 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)
|
||||
|
||||
@@ -180,7 +180,7 @@ TAGS="bindata sqlite sqlite_unlock_notify" \
|
||||
make build
|
||||
```
|
||||
|
||||
## 在 Windows 上使用 Zig 进行编译或交叉编译
|
||||
## 在 Windows 上使用 Zig 進行编译或交叉编译
|
||||
|
||||
使用`GIT BASH`编译。
|
||||
|
||||
@@ -211,7 +211,7 @@ make build
|
||||
|
||||
## Source Map
|
||||
|
||||
默认情况下,gitea 会为前端文件生成精简的 Source Map 以节省空间。 这可以通过“ENABLE_SOURCEMAP”环境变量进行控制:
|
||||
默认情况下,gitea 会為前端文件生成精简的 Source Map 以节省空间。 这可以通過“ENABLE_SOURCEMAP”环境变量進行控制:
|
||||
|
||||
- `ENABLE_SOURCEMAP=true` 生成所有 Source Map,这是开发版本的默认设置
|
||||
- `ENABLE_SOURCEMAP=reduced` 生成有限的 Source Map,这是生产版本的默认设置
|
||||
|
||||
@@ -6,30 +6,30 @@ aliases:
|
||||
- /zh-tw/install-on-cloud-provider
|
||||
---
|
||||
|
||||
# 在云服务器上安装 Gitea
|
||||
# 在云服务器上安裝 Gitea
|
||||
|
||||
## Cloudron
|
||||
|
||||
Gitea 可以在 [Cloudron](https://cloudron.io) 上进行一键安装。
|
||||
Cloudron 使得在您的服务器上运行 Gitea,并保持其更新和安全变得简单。
|
||||
Gitea 可以在 [Cloudron](https://cloudron.io) 上進行一键安裝。
|
||||
Cloudron 使得在您的服务器上运行 Gitea,並保持其更新和安全变得简單。
|
||||
|
||||
[](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
|
||||
|
||||
@@ -37,6 +37,6 @@ Gitea 软件包的维护地址在[这里](https://git.cloudron.io/cloudron/gitea
|
||||
|
||||
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/)。
|
||||
|
||||
@@ -6,11 +6,11 @@ aliases:
|
||||
- /zh-tw/install-on-kubernetes
|
||||
---
|
||||
|
||||
# 在 Kubernetes 中安装 Gitea
|
||||
# 在 Kubernetes 中安裝 Gitea
|
||||
|
||||
Gitea 已经提供了便于在 Kubernetes 云原生环境中安装所需的 Helm Chart
|
||||
Gitea 已经提供了便于在 Kubernetes 云原生环境中安裝所需的 Helm Chart
|
||||
|
||||
默认安装指令为:
|
||||
默认安裝指令為:
|
||||
|
||||
```bash
|
||||
helm repo add gitea https://dl.gitea.com/charts
|
||||
@@ -18,9 +18,9 @@ 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
|
||||
@@ -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/)
|
||||
|
||||
@@ -12,17 +12,17 @@ aliases:
|
||||
|
||||
### systemd 方式
|
||||
|
||||
在 terminal 中执行以下命令:
|
||||
在 terminal 中執行以下命令:
|
||||
|
||||
```
|
||||
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
|
||||
@@ -31,13 +31,13 @@ sudo systemctl start gitea
|
||||
|
||||
### 使用 supervisor
|
||||
|
||||
在 terminal 中执行以下命令安装 supervisor:
|
||||
在 terminal 中執行以下命令安裝 supervisor:
|
||||
|
||||
```
|
||||
sudo apt install supervisor
|
||||
```
|
||||
|
||||
为 supervisor 配置日志路径:
|
||||
為 supervisor 配置日志路径:
|
||||
|
||||
```
|
||||
# assuming gitea is installed in /home/git/gitea/
|
||||
@@ -53,9 +53,9 @@ 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
|
||||
|
||||
@@ -8,17 +8,17 @@ sidebar_position: 100
|
||||
|
||||
在升级之前,您需要做如下的准备工作。
|
||||
|
||||
## 为重大变更检查更新日志
|
||||
## 為重大变更检查更新日志
|
||||
|
||||
为了让 Gitea 变得更好,进行重大变更是不可避免的,尤其是一些里程碑更新的发布。
|
||||
在更新前,请 [在 Gitea 博客上阅读更新日志](https://blog.gitea.com/)
|
||||
并检查重大变更是否会影响你的 Gitea 实例。
|
||||
為了让 Gitea 变得更好,進行重大变更是不可避免的,尤其是一些里程碑更新的發佈。
|
||||
在更新前,請 [在 Gitea 博客上阅读更新日志](https://blog.gitea.com/)
|
||||
並检查重大变更是否会影響你的 Gitea 实例。
|
||||
|
||||
## 在控制面板中检查过期的配置项
|
||||
## 在控制面板中检查過期的配置项
|
||||
|
||||
一些配置项可能会在后续版本中过期,你需要在控制面板中检查他们。如果不解决过期的配置项,
|
||||
Gitea也许会在升级后无法重启。你可以访问 https://docs.gitea.com 获得要升级的版本
|
||||
对应的文档来修改你的配置文件。
|
||||
一些配置项可能会在后续版本中過期,你需要在控制面板中检查他们。如果不解决過期的配置项,
|
||||
Gitea也许会在升级后無法重启。你可以访问 https://docs.gitea.com 获得要升级的版本
|
||||
对應的文檔来修改你的配置文件。
|
||||
|
||||
## 降级前的备份
|
||||
|
||||
@@ -32,13 +32,13 @@ Gitea 会保留首二位版本号相同的版本的兼容性 (`a.b.x` -> `a.b.y`
|
||||
| 当前 | 目标 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 1.4.0 | 1.4.1 | ✅ |
|
||||
| 1.4.1 | 1.4.0 | ⚠️ 不建议,后果自负!尽管数据库结构可能不会变更,让它可以正常工作。我们强烈建议降级前进行完全的备份。 |
|
||||
| 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.5.y | 1.4.x | ❌ 数据库已被升级且無法用于旧版本Gitea,使用备份来進行降级。 |
|
||||
|
||||
**因为你不能基于升级后的数据库运行旧版 Gitea,所以你应该在数据库升级前完成数据备份。**
|
||||
**因為你不能基于升级后的数据库运行旧版 Gitea,所以你應該在数据库升级前完成数据备份。**
|
||||
|
||||
如果你在生产环境下使用 Gitea,你应该在升级前做好备份,哪怕只是小版本的补丁更新。
|
||||
如果你在生产环境下使用 Gitea,你應該在升级前做好备份,哪怕只是小版本的补丁更新。
|
||||
|
||||
备份步骤:
|
||||
|
||||
@@ -46,18 +46,18 @@ Gitea 会保留首二位版本号相同的版本的兼容性 (`a.b.x` -> `a.b.y`
|
||||
* 备份数据库
|
||||
* 备份 Gitea 配置文件
|
||||
* 备份 Gitea 在 `APP_DATA_PATH` 中的数据文件
|
||||
* 备份 Gitea 的外部存储 (例如: S3/MinIO 或被使用的其他存储)
|
||||
* 备份 Gitea 的外部存儲 (例如: S3/MinIO 或被使用的其他存儲)
|
||||
|
||||
如果你在使用云服务或拥有快照功能的文件系统,
|
||||
最好对 Gitea 的数据盘及相关资料存储进行一次快照。
|
||||
最好对 Gitea 的数据盘及相关资料存儲進行一次快照。
|
||||
|
||||
在所有上述步骤准备妥当之后,要升级 Gitea,只需要下载新版,停止运行旧版,进行数据备份,然后运行新版就好。
|
||||
每次 Gitea 实例启动时,它都会检查是否要进行数据库迁移。
|
||||
如果需要进行数据库迁移,Gitea 会花一些时间完成升级然后继续服务。
|
||||
在所有上述步骤准备妥当之后,要升级 Gitea,只需要下载新版,停止运行旧版,進行数据备份,然后运行新版就好。
|
||||
每次 Gitea 实例启动时,它都会检查是否要進行数据库迁移。
|
||||
如果需要進行数据库迁移,Gitea 会花一些时间完成升级然后继续服务。
|
||||
|
||||
## 从 Docker 升级
|
||||
|
||||
* `docker pull` 拉取 Gitea 的最新发布版。
|
||||
* `docker pull` 拉取 Gitea 的最新發佈版。
|
||||
* 停止运行中的实例,备份数据。
|
||||
* 使用 `docker` 或 `docker-compose` 启动较新的 Gitea Docker 容器.
|
||||
|
||||
@@ -67,18 +67,18 @@ Gitea 会保留首二位版本号相同的版本的兼容性 (`a.b.x` -> `a.b.y`
|
||||
* 使用你的包管理器更新 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 版本不兼容,你可能会遇到:
|
||||
|
||||
@@ -6,45 +6,45 @@ aliases:
|
||||
- /zh-tw/windows-service
|
||||
---
|
||||
|
||||
# 注册为 Windows 服务
|
||||
# 注册為 Windows 服务
|
||||
|
||||
## 准备工作
|
||||
|
||||
在 C:\gitea\custom\conf\app.ini 中进行了以下更改:
|
||||
在 C:\gitea\custom\conf\app.ini 中進行了以下更改:
|
||||
|
||||
```ini title="app.ini"
|
||||
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
|
||||
@@ -52,7 +52,7 @@ sc.exe config gitea start= delayed-auto
|
||||
|
||||
### 添加启动依赖项
|
||||
|
||||
要将启动依赖项添加到 Gitea Windows 服务(例如 Mysql、Mariadb),作为管理员,然后运行以下命令:
|
||||
要将启动依赖项添加到 Gitea Windows 服务(例如 Mysql、Mariadb),作為管理员,然后运行以下命令:
|
||||
|
||||
```
|
||||
sc.exe config gitea depend= mariadb
|
||||
@@ -62,7 +62,7 @@ sc.exe config gitea depend= mariadb
|
||||
|
||||
## 从 Windows 服务中删除
|
||||
|
||||
以 Administrator 身份运行 `cmd`,然后执行以下命令:
|
||||
以 Administrator 身份运行 `cmd`,然后執行以下命令:
|
||||
|
||||
```
|
||||
sc.exe delete gitea
|
||||
|
||||
@@ -6,19 +6,19 @@ aliases:
|
||||
- /zh-tw/install-with-docker-rootless
|
||||
---
|
||||
|
||||
# 使用 Docker 安装 (rootless)
|
||||
# 使用 Docker 安裝 (rootless)
|
||||
|
||||
Gitea 在其 Docker Hub 组织中提供自动更新的 Docker 镜像。您可以始终使用最新的稳定标签,或使用其他处理 Docker 镜像更新的服务。
|
||||
Gitea 在其 Docker Hub 組織中提供自动更新的 Docker 镜像。您可以始终使用最新的稳定標籤,或使用其他处理 Docker 镜像更新的服务。
|
||||
|
||||
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"
|
||||
@@ -80,7 +80,7 @@ services:
|
||||
|
||||
## MySQL 数据库
|
||||
|
||||
要将 Gitea 与 MySQL 数据库结合使用,请对上面创建的 `docker-compose.yml` 文件进行以下更改。
|
||||
要将 Gitea 与 MySQL 数据库结合使用,請对上面建立的 `docker-compose.yml` 文件進行以下更改。
|
||||
|
||||
```diff
|
||||
version: "2"
|
||||
@@ -120,7 +120,7 @@ services:
|
||||
|
||||
## 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"
|
||||
@@ -214,19 +214,19 @@ services:
|
||||
|
||||
## 启动
|
||||
|
||||
要启动基于 `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` 中。
|
||||
|
||||
## 升级
|
||||
|
||||
@@ -234,10 +234,10 @@ services:
|
||||
:exclamation::exclamation: **确保您已将数据卷迁移到 Docker 容器之外的其他位置** :exclamation::exclamation:
|
||||
:::
|
||||
|
||||
要将安装升级到最新版本,请按照以下步骤操作:
|
||||
要将安裝升级到最新版本,請按照以下步骤操作:
|
||||
|
||||
```bash
|
||||
# 如果在 docker-compose.yml 中指定了版本,请编辑该文件以更新版本
|
||||
# 如果在 docker-compose.yml 中指定了版本,請编辑該文件以更新版本
|
||||
# 拉取新的镜像
|
||||
docker-compose pull
|
||||
# 启动一个新的容器,自动移除旧的容器
|
||||
@@ -247,18 +247,18 @@ docker-compose up -d
|
||||
## 从标准镜像升级
|
||||
|
||||
- 备份您的设置
|
||||
- 将卷挂载点从 `/data` 更改为 `/var/lib/gitea`
|
||||
- 如果使用了自定义的 `app.ini`,请将其移动到新的挂载到 `/etc/gitea` 的卷中
|
||||
- 将卷中的文件夹(gitea)重命名为 custom
|
||||
- 将卷挂载点从 `/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
|
||||
...
|
||||
@@ -278,32 +278,32 @@ services:
|
||||
|
||||
# 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,7 +311,7 @@ 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 服务器:
|
||||
|
||||
@@ -321,5 +321,5 @@ sudo systemctl restart sshd
|
||||
|
||||
**注意**
|
||||
|
||||
这实际上并没有使用 Docker 的 SSH,而是仅仅使用了围绕它的命令。
|
||||
这实际上並没有使用 Docker 的 SSH,而是僅僅使用了围绕它的命令。
|
||||
从理论上讲,您可以不运行内部的 SSH 服务器。
|
||||
|
||||
@@ -6,15 +6,15 @@ aliases:
|
||||
- /zh-tw/install-with-docker
|
||||
---
|
||||
|
||||
# 使用 Docker 安装
|
||||
# 使用 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"
|
||||
@@ -78,7 +78,7 @@ services:
|
||||
|
||||
### MySQL 数据库
|
||||
|
||||
要将 Gitea 与 MySQL 数据库结合使用,请将这些更改应用于上面创建的 `docker-compose.yml` 文件。
|
||||
要将 Gitea 与 MySQL 数据库结合使用,請将这些更改應用于上面建立的 `docker-compose.yml` 文件。
|
||||
|
||||
```diff
|
||||
version: "3"
|
||||
@@ -128,7 +128,7 @@ services:
|
||||
|
||||
### 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,51 +207,51 @@ 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/`。
|
||||
注意:如果在 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"。
|
||||
- `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_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`。
|
||||
- `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_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 匹配(对于命名卷,则不需要这样做)。
|
||||
- `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` 中。
|
||||
|
||||
## 升级
|
||||
|
||||
@@ -259,7 +259,7 @@ MySQL 或 PostgreSQL 容器将需要分别创建。
|
||||
:exclamation::exclamation: **确保已将数据卷到 Docker 容器外部的某个位置** :exclamation::exclamation:
|
||||
:::
|
||||
|
||||
要将安装升级到最新版本:
|
||||
要将安裝升级到最新版本:
|
||||
|
||||
```bash
|
||||
# Edit `docker-compose.yml` to update the version, if you have one specified
|
||||
@@ -271,7 +271,7 @@ 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,7 +286,7 @@ 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`,然后您可以将其放入环境变量中。
|
||||
|
||||
@@ -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 主机密钥”)的公共密钥添加到 `~/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,18 +356,18 @@ 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` 结合使用以禁用授权文件密钥生成
|
||||
|
||||
@@ -10,36 +10,36 @@ sidebar_position: 20
|
||||
|
||||
## 要求
|
||||
|
||||
建议在Docker容器中运行Job,因此您需要首先安装Docker。
|
||||
并确保Docker守护进程正在运行。
|
||||
建议在Docker容器中运行Job,因此您需要首先安裝Docker。
|
||||
並确保Docker守护進程正在运行。
|
||||
|
||||
其他与Docker API兼容的OCI容器引擎也应该可以正常工作,但尚未经过测试。
|
||||
其他与Docker API兼容的OCI容器引擎也應該可以正常工作,但尚未经過测试。
|
||||
|
||||
但是,如果您确定要直接在主机上运行Job,则不需要Docker。
|
||||
|
||||
## 安装
|
||||
## 安裝
|
||||
|
||||
有多种安装Act Runner的方法。
|
||||
有多种安裝Act Runner的方法。
|
||||
|
||||
### 下载二进制文件
|
||||
### 下载二進制文件
|
||||
|
||||
您可以从[发布页面](https://gitea.com/gitea/act_runner/releases)下载二进制文件。
|
||||
您可以从[發佈页面](https://gitea.com/gitea/act_runner/releases)下载二進制文件。
|
||||
然而,如果您想使用最新的夜间构建版本,可以从[下载页面](https://dl.gitea.com/act_runner/)下载。
|
||||
|
||||
下载二进制文件时,请确保您已经下载了适用于您的平台的正确版本。
|
||||
您可以通过运行以下命令进行检查:
|
||||
下载二進制文件时,請确保您已经下载了适用于您的平台的正确版本。
|
||||
您可以通過运行以下命令進行检查:
|
||||
|
||||
```bash
|
||||
chmod +x act_runner
|
||||
./act_runner --version
|
||||
```
|
||||
|
||||
如果看到版本信息,则表示您已经下载了正确的二进制文件。
|
||||
如果看到版本信息,则表示您已经下载了正确的二進制文件。
|
||||
|
||||
### 使用 Docker 镜像
|
||||
|
||||
您可以使用[docker hub](https://hub.docker.com/r/gitea/act_runner/tags)上的Docker镜像。
|
||||
与二进制文件类似,您可以使用`nightly`标签使用最新的夜间构建版本,而`latest`标签是最新的稳定版本。
|
||||
与二進制文件类似,您可以使用`nightly`標籤使用最新的夜间构建版本,而`latest`標籤是最新的稳定版本。
|
||||
|
||||
```bash
|
||||
docker pull docker.io/gitea/act_runner:latest # for the latest stable release
|
||||
@@ -48,9 +48,9 @@ docker pull docker.io/gitea/act_runner:nightly # for the latest nightly build
|
||||
|
||||
## 配置
|
||||
|
||||
配置通过配置文件进行。它是可选的,当没有指定配置文件时,将使用默认配置。
|
||||
配置通過配置文件進行。它是可選的,当没有指定配置文件时,将使用默认配置。
|
||||
|
||||
您可以通过运行以下命令生成配置文件:
|
||||
您可以通過运行以下命令生成配置文件:
|
||||
|
||||
```bash
|
||||
./act_runner generate-config
|
||||
@@ -63,54 +63,54 @@ docker pull docker.io/gitea/act_runner:nightly # for the latest nightly build
|
||||
./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的时候。
|
||||
在运行Act Runner之前,我们需要首先将其注册到您的Gitea实例中。
|
||||
|
||||
## 注册
|
||||
|
||||
在运行Act Runner之前,需要进行注册,因为Runner需要知道从哪里获取Job,并且对于Gitea实例来说,识别Runner也很重要。
|
||||
在运行Act Runner之前,需要進行注册,因為Runner需要知道从哪里获取Job,並且對於Gitea实例来说,识别Runner也很重要。
|
||||
|
||||
### Runner级别
|
||||
|
||||
您可以在不同级别上注册Runner,它可以是:
|
||||
|
||||
- 实例级别:Runner将为实例中的所有存储库运行Job。
|
||||
- 组织级别:Runner将为组织中的所有存储库运行Job。
|
||||
- 存储库级别:Runner将为其所属的存储库运行Job。
|
||||
- 实例级别:Runner将為实例中的所有存儲库运行Job。
|
||||
- 組織级别:Runner将為組織中的所有存儲库运行Job。
|
||||
- 存儲库级别:Runner将為其所属的存儲库运行Job。
|
||||
|
||||
请注意,即使存储库具有自己的存储库级别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>/<org>/settings/actions/runners`。
|
||||
- 存儲库级别:存儲库设置页面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
|
||||
|
||||
如果您无法看到设置页面,请确保您具有正确的权限并且已启用 Actions。
|
||||
如果您無法看到设置页面,請确保您具有正确的权限並且已启用 Actions。
|
||||
|
||||
注册令牌的格式是一个随机字符串 `D0gvfu2iHfUjNqCYVljVyRV14fISpJxxxxxxxxxx`。
|
||||
|
||||
注册令牌也可以通过 Gitea 的 [命令行](../../administration/command-line.md#actions-generate-runner-token) 获得:
|
||||
注册令牌也可以通過 Gitea 的 [命令行](../../administration/command-line.md#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,19 +118,19 @@ export GITEA_RUNNER_REGISTRATION_TOKEN_FILE=/some-dir/runner-token
|
||||
./gitea --config ...
|
||||
```
|
||||
|
||||
来自环境变量的令牌在通过 Web 界面或 API 重置(重新创建新令牌)前将一直有效。
|
||||
来自环境变量的令牌在通過 Web 界面或 API 重置(重新建立新令牌)前将一直有效。
|
||||
|
||||
令牌可用于注册多个 Runner,直到使用 Web 界面中的令牌重置链接将其撤销并替换为新令牌。
|
||||
令牌可用于注册多个 Runner,直到使用 Web 界面中的令牌重置链接将其撤销並替换為新令牌。
|
||||
|
||||
### 注册Runner
|
||||
|
||||
可以通过运行以下命令来注册Act Runner:
|
||||
可以通過运行以下命令来注册Act Runner:
|
||||
|
||||
```bash
|
||||
./act_runner register
|
||||
```
|
||||
|
||||
或者,您可以使用 `--config` 选项来指定前面部分提到的配置文件。
|
||||
或者,您可以使用 `--config` 選项来指定前面部分提到的配置文件。
|
||||
|
||||
```bash
|
||||
./act_runner --config config.yaml register
|
||||
@@ -140,26 +140,26 @@ export GITEA_RUNNER_REGISTRATION_TOKEN_FILE=/some-dir/runner-token
|
||||
|
||||
- Gitea 实例的 URL,例如 `https://gitea.com/` 或 `http://192.168.8.8:3000/`。
|
||||
- 注册令牌。
|
||||
- Runner名称(可选)。如果留空,将使用主机名。
|
||||
- Runner标签(可选)。如果留空,将使用默认标签。
|
||||
- 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镜像,注册行为会略有不同。在这种情况下,注册和运行合并为一步,因此您需要在运行Act Runner时指定注册信息。
|
||||
如果您使用的是Docker镜像,注册行為会略有不同。在这种情况下,注册和运行合並為一步,因此您需要在运行Act Runner时指定注册信息。
|
||||
|
||||
```bash
|
||||
docker run \
|
||||
@@ -176,7 +176,7 @@ docker run \
|
||||
```
|
||||
|
||||
您可能注意到我们已将`/var/run/docker.sock`挂载到容器中。
|
||||
这是因为Act Runner将在Docker容器中运行Job,因此它需要与Docker守护进程进行通信。
|
||||
这是因為Act Runner将在Docker容器中运行Job,因此它需要与Docker守护進程進行通信。
|
||||
如前所述,如果要在主机上直接运行Job,可以将其移除。
|
||||
需要明确的是,这里的 "主机" 实际上指的是当前运行 Act Runner的容器,而不是主机机器本身。
|
||||
|
||||
@@ -205,11 +205,11 @@ services:
|
||||
|
||||
如果你不打算在工作流中使用 `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 容器所在主机的空闲端口号。
|
||||
@@ -234,27 +234,27 @@ docker run \
|
||||
-d gitea/act_runner:nightly
|
||||
```
|
||||
|
||||
### 标签
|
||||
### 標籤
|
||||
|
||||
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://<您喜欢的镜像>`。
|
||||
如果默认镜像無法满足您的需求,並且您有足够的硬碟空间可以使用更好、更大的镜像,您可以将其更改為`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仍处于开发中,建议定期检查最新版本並進行升级。
|
||||
|
||||
@@ -12,13 +12,13 @@ sidebar_position: 15
|
||||
|
||||
### 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
|
||||
|
||||
Gitea Actions支持使用Go编写Actions。
|
||||
请参阅[创建Go Actions](https://blog.gitea.com/creating-go-actions/)。
|
||||
請参阅[建立Go Actions](https://blog.gitea.com/creating-go-actions/)。
|
||||
|
||||
### 支持非标准的调度语法 @yearly, @monthly, @weekly, @daily, @hourly
|
||||
|
||||
@@ -29,97 +29,97 @@ Github Actions 不支持这些语法,详见: https://docs.github.com/en/acti
|
||||
### `concurrency`
|
||||
|
||||
这是用于一次运行一个Job。
|
||||
请参阅[使用并发](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。
|
||||
請参阅[使用並发](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。
|
||||
|
||||
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目前不支持此功能。
|
||||
|
||||
### `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目前不支持此功能。
|
||||
|
||||
### `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目前不支持此功能。
|
||||
|
||||
### `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目前不支持此功能。
|
||||
|
||||
### `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 目前不支持此功能。
|
||||
|
||||
### 复杂的`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]`。
|
||||
|
||||
### `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目前不支持此功能。
|
||||
|
||||
### 为错误创建注释
|
||||
### 為错误建立注释
|
||||
|
||||
请参阅[为错误创建注释](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目前不支持此功能。
|
||||
|
||||
### 表达式
|
||||
|
||||
对于 [表达式](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].DEFAULT_ACTIONS_URL` 保持默认值为 `github` 时,Gitea将会从 https://github.com 下载相对路径的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` 来下载。
|
||||
|
||||
如果你的 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)。
|
||||
請参阅[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。
|
||||
|
||||
@@ -6,119 +6,119 @@ sidebar_position: 40
|
||||
|
||||
# Gitea Actions设计
|
||||
|
||||
Gitea Actions由多个组件组成。本文档将对它们进行逐个描述。
|
||||
Gitea Actions由多个组件组成。本文檔将对它们進行逐个描述。
|
||||
|
||||
## Act
|
||||
|
||||
[nektos/act](https://github.com/nektos/act) 项目是一个优秀的工具,允许你在本地运行GitHub Actions。
|
||||
我们受到了它的启发,并思考它是否可能为Gitea运行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特定用途的桥接或适配器。
|
||||
还添加了一些额外的提交,例如:
|
||||
還添加了一些额外的提交,例如:
|
||||
|
||||
- 将执行日志输出到日志记录器钩子,以便报告给Gitea
|
||||
- 禁用 GraphQL URL,因为Gitea不支持它
|
||||
- 将執行日志输出到日志记录器钩子,以便报告给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不是唯一的选择。
|
||||
然而,Docker不是唯一的選择。
|
||||
act 也支持直接在主机上运行Job。
|
||||
这是通过像`linux_arm:host`这样的标签实现的。
|
||||
这个标签表示Runner可以接受需要在`linux_arm`上运行的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: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:vm:ubuntu-latest`:(僅為示例,未实現)使用带有`ubuntu-latest` ISO的虚拟机运行带有`my_custom_label`標籤的Job。
|
||||
|
||||
## 通信协议
|
||||
|
||||
由于act runner是Gitea的独立部分,我们需要一种协议让Runner与Gitea实例进行通信。
|
||||
然而,我们不认为让Gitea监听一个新端口是个好主意。
|
||||
由于act runner是Gitea的独立部分,我们需要一种协议让Runner与Gitea实例進行通信。
|
||||
然而,我们不认為让Gitea监听一个新端口是个好主意。
|
||||
相反,我们希望重用HTTP端口,这意味着我们需要一个与HTTP兼容的协议。
|
||||
因此,我们选择使用基于HTTP的gRPC。
|
||||
因此,我们選择使用基于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是个不好的主意。
|
||||
|
||||

|
||||
|
||||
图片中标记了四个网络连接,并且箭头的方向表示建立连接的方向。
|
||||
图片中标记了四个网络连接,並且箭头的方向表示建立连接的方向。
|
||||
|
||||
### 连接 1,act runner到Gitea实例
|
||||
|
||||
act runner 必须能够连接到Gitea以接收任务并发送执行结果回来。
|
||||
act runner 必須能够连接到Gitea以接收任务並发送執行结果回来。
|
||||
|
||||
### 连接 2,Job容器到Gitea实例
|
||||
|
||||
即使Job容器位于同一台机器上,它们的网络命名空间与Runner不同。
|
||||
举个例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要连接到Gitea来获取代码。
|
||||
获取代码并不总是运行某些Job所必需的,但在大多数情况下是必需的。
|
||||
获取代码並不总是运行某些Job所必需的,但在大多数情况下是必需的。
|
||||
|
||||
如果您使用回环地址注册Runner,当Runner与Gitea在同一台机器上时,Runner可以连接到Gitea。
|
||||
然而,如果Job容器尝试从本地主机获取代码,它将失败,因为Gitea不在同一个容器中。
|
||||
然而,如果Job容器尝试从本地主机获取代码,它将失败,因為Gitea不在同一个容器中。
|
||||
|
||||
### 连接 3,act runner到互联网
|
||||
|
||||
当您使用诸如 `actions/checkout@v4` 的一些Actions时,act runner下载的是脚本,而不是Job容器。
|
||||
默认情况下,它从[github.com](http://github.com/)下载,因此需要访问互联网。如果您设置的是 self,
|
||||
那么默认将从您的当前Gitea实例下载,那么此步骤不需要连接到互联网。
|
||||
它还默认从Docker Hub下载一些Docker镜像,这也需要互联网访问。
|
||||
它還默认从Docker Hub下载一些Docker镜像,这也需要互联网访问。
|
||||
|
||||
然而,互联网访问并不是绝对必需的。
|
||||
然而,互联网访问並不是绝对必需的。
|
||||
您可以配置您的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容器到互联网
|
||||
|
||||
当使用诸如`actions/setup-go@v5`的Actions时,可能需要从互联网下载资源,以设置Job容器中的Go语言环境。
|
||||
因此,成功完成这些Actions需要访问互联网。
|
||||
|
||||
然而,这也是可选的。
|
||||
您可以使用自定义的Actions来避免依赖互联网访问,或者可以使用已安装所有依赖项的打包的Docker镜像来运行Job。
|
||||
然而,这也是可選的。
|
||||
您可以使用自定义的Actions来避免依赖互联网访问,或者可以使用已安裝所有依赖项的打包的Docker镜像来运行Job。
|
||||
|
||||
## 总结
|
||||
|
||||
使用Gitea Actions只需要确保Runner能够连接到Gitea实例。
|
||||
互联网访问是可选的,但如果没有互联网访问,将需要额外的工作。
|
||||
换句话说:当Runner能够自行查询互联网时,它的工作效果最好,但您不需要将其暴露给互联网(无论是单向还是双向)。
|
||||
互联网访问是可選的,但如果没有互联网访问,将需要额外的工作。
|
||||
换句话说:当Runner能够自行查询互联网时,它的工作效果最好,但您不需要将其暴露给互联网(無论是單向還是双向)。
|
||||
|
||||
如果您在使用Gitea Actions时遇到任何网络问题,希望上面的图片能够帮助您进行故障排除。
|
||||
如果您在使用Gitea Actions时遇到任何网络问题,希望上面的图片能够帮助您進行故障排除。
|
||||
|
||||
@@ -8,22 +8,22 @@ sidebar_position: 100
|
||||
|
||||
本页面包含一些关于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.xyz }}`?
|
||||
|
||||
您可以使用`github.xyz`,Gitea将正常工作。
|
||||
如前所述,Gitea Actions的设计是与GitHub Actions兼容的。
|
||||
然而,我们建议在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出现不同类型的密钥(因为您在Gitea上使用此工作流,而不是GitHub)。
|
||||
不过,这完全是可选的,因为目前这两个选项的效果是相同的。
|
||||
然而,我们建议在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出現不同類型的密钥(因為您在Gitea上使用此工作流,而不是GitHub)。
|
||||
不過,这完全是可選的,因為目前这两个選项的效果是相同的。
|
||||
|
||||
## 使用`actions/checkout@v4`等Actions时,Job容器会从何处下载脚本?
|
||||
|
||||
@@ -42,46 +42,46 @@ GitHub 上有成千上万个 [Actions 脚本](https://github.com/marketplace?typ
|
||||
注意,`https://`或`http://`前缀是必需的!
|
||||
|
||||
这是与 GitHub Actions 的一个区别,GitHub Actions 只允许使用托管在 GitHub 上的 actions 脚本。
|
||||
但用户理应拥有权利去灵活决定如何运行 Actions。
|
||||
但使用者理應拥有权利去灵活决定如何运行 Actions。
|
||||
|
||||
另外,如果您希望您的 Runner 默认从您自己的 Gitea 实例下载 Actions,可以通过设置 `[actions].DEFAULT_ACTIONS_URL`进行配置。
|
||||
另外,如果您希望您的 Runner 默认从您自己的 Gitea 实例下载 Actions,可以通過设置 `[actions].DEFAULT_ACTIONS_URL`進行配置。
|
||||
参见[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
|
||||
|
||||
## 如何限制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" 组织注册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支持哪些操作系统?
|
||||
|
||||
它在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)。
|
||||
因此,您需要在工作流文件中将默认shell指定為`powershell`,参考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。
|
||||
|
||||
```yaml
|
||||
defaults:
|
||||
@@ -89,66 +89,66 @@ 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的方式。
|
||||
具有`ubuntu`、`centos`或`with-gpu`的Runner并不一定表示它可以接受`[centos, with-gpu]`的Job。
|
||||
因此,Runner应该通知Gitea实例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。
|
||||
我们還需要重新设计任务分配给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)。
|
||||
|
||||
目前,act runner尝试匹配标签中的每一个,并使用找到的第一个匹配项。
|
||||
目前,act runner尝试匹配標籤中的每一个,並使用找到的第一个匹配项。
|
||||
|
||||
## 代理标签和自定义标签对于Runner有什么区别?
|
||||
## 代理標籤和自定义標籤對於Runner有什么区别?
|
||||
|
||||

|
||||
|
||||
代理标签是由Runner在注册过程中向Gitea实例报告的。
|
||||
而自定义标签则是由Gitea的管理员或组织或仓库的所有者手动添加的(取决于Runner所属的级别)。
|
||||
代理標籤是由Runner在注册過程中向Gitea实例报告的。
|
||||
而自定义標籤则是由Gitea的管理员或組織或存放庫的所有者手动添加的(取决于Runner所属的级别)。
|
||||
|
||||
然而,目前这方面的设计还有待改进,因为它目前存在一些不完善之处。
|
||||
您可以向已注册的Runner添加自定义标签,比如 `centos`,这意味着该Runner将接收具有`runs-on: centos`的Job。
|
||||
然而,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的标签,我们建议您重新注册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 支持哪些工作流触发事件?
|
||||
|
||||
表格中列出的所有事件都是支持的,并且与 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 | 不适用 |
|
||||
@@ -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功能的名称。
|
||||
- "GitHub Actions"是GitHub功能的名称。
|
||||
- "Actions"根据上下文的不同可以指代以上任意一个。在本文档中指代的是"Gitea Actions"。
|
||||
- "Gitea Actions"(两个單詞都大写且带有"s")是Gitea功能的名稱。
|
||||
- "GitHub Actions"是GitHub功能的名稱。
|
||||
- "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语言编写的。
|
||||
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。
|
||||
|
||||
对于内部使用的Gitea实例,比如企业或个人使用的实例,这两个规则不是问题,它们自然而然就是如此。
|
||||
然而,对于公共的Gitea实例,比如[gitea.com](https://gitea.com),在添加或使用Runner时应当牢记这两个规则。
|
||||
對於内部使用的Gitea实例,比如企业或个人使用的实例,这两个規則不是问题,它们自然而然就是如此。
|
||||
然而,對於公共的Gitea实例,比如[gitea.com](https://gitea.com),在添加或使用Runner时應当牢记这两个規則。
|
||||
|
||||
## 状态
|
||||
|
||||
Gitea Actions仍然在开发中,因此可能存在一些错误和缺失的功能。
|
||||
并且在稳定版本(v1.20或更高版本)之前可能会进行一些重大的更改。
|
||||
並且在稳定版本(v1.20或更高版本)之前可能会進行一些重大的更改。
|
||||
|
||||
如果情况发生变化,我们将在此处进行更新。
|
||||
因此,请在其他地方找到过时文章时参考此处的内容。
|
||||
如果情况发生变化,我们将在此处進行更新。
|
||||
因此,請在其他地方找到過时文章时参考此处的内容。
|
||||
|
||||
@@ -6,13 +6,13 @@ sidebar_position: 10
|
||||
|
||||
# 快速入门
|
||||
|
||||
本页面将指导您使用Gitea Actions的过程。
|
||||
本页面将指导您使用Gitea Actions的過程。
|
||||
|
||||
## 设置Gitea
|
||||
|
||||
首先,您需要一个Gitea实例。
|
||||
您可以按照[文档](installation/from-package.md) 来设置一个新实例或升级现有实例。
|
||||
无论您如何安装或运行Gitea,只要版本号是1.19.0或更高即可。
|
||||
您可以按照[文檔](installation/from-package.md) 来设置一个新实例或升级現有实例。
|
||||
無论您如何安裝或运行Gitea,只要版本号是1.19.0或更高即可。
|
||||
|
||||
从1.21.0开始,默认情况下,Actions是启用的。如果您正在使用1.21.0之前的版本,您需要将以下内容添加到配置文件中以启用它:
|
||||
|
||||
@@ -21,21 +21,21 @@ sidebar_position: 10
|
||||
ENABLED=true
|
||||
```
|
||||
|
||||
如果您想了解更多信息或在配置过程中遇到任何问题,请参考[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
|
||||
如果您想了解更多信息或在配置過程中遇到任何问题,請参考[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。
|
||||
|
||||
### 设置Runner
|
||||
|
||||
Gitea Actions需要[act runner](https://gitea.com/gitea/act_runner) 来运行Job。
|
||||
为了避免消耗过多资源并影响Gitea实例,建议您在与Gitea实例分开的机器上启动Runner。
|
||||
為了避免消耗過多资源並影響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实例中:
|
||||
|
||||
@@ -43,27 +43,27 @@ Gitea Actions需要[act runner](https://gitea.com/gitea/act_runner) 来运行Job
|
||||
./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)将连接到此地址。
|
||||
Runner和Job容器(由Runner启动以執行Job)将连接到此地址。
|
||||
这意味着它可能与用于Web访问的`ROOT_URL`不同。
|
||||
使用回环地址(例如 `127.0.0.1` 或 `localhost`)是一个不好的选择。
|
||||
如果不确定使用哪个地址,通常选择局域网地址即可。
|
||||
使用回环地址(例如 `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>/<org>/settings/actions/runners`。
|
||||
- 存儲库级别:存儲库设置页面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
|
||||
|
||||

|
||||
|
||||
注册后,当前目录中将出现一个名为 `.runner` 的新文件,该文件存储了注册信息。
|
||||
请不要手动编辑该文件。
|
||||
如果该文件丢失或损坏,只需删除它然后重新注册即可。
|
||||
注册后,当前目錄中将出現一个名為 `.runner` 的新文件,該文件存儲了注册信息。
|
||||
請不要手动编辑該文件。
|
||||
如果該文件丢失或损坏,只需删除它然后重新注册即可。
|
||||
|
||||
最后,是时候启动Runner了:
|
||||
|
||||
@@ -75,20 +75,20 @@ Runner和Job容器(由Runner启动以执行Job)将连接到此地址。
|
||||
|
||||

|
||||
|
||||
您可以通过访问[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`。
|
||||
|
||||

|
||||
|
||||
接下来的步骤可能相当复杂。
|
||||
您需要学习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,19 +112,19 @@ jobs:
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
```
|
||||
|
||||
您可以将上述示例上传为一个以`.yaml`扩展名的文件,放在存储库的`.gitea/workflows/`目录中,例如`.gitea/workflows/demo.yaml`。
|
||||
您可以将上述示例上传為一个以`.yaml`扩展名的文件,放在存儲库的`.gitea/workflows/`目錄中,例如`.gitea/workflows/demo.yaml`。
|
||||
您可能会注意到,这与[GitHub Actions的快速入门](https://docs.github.com/en/actions/quickstart)非常相似。
|
||||
这是因为Gitea Actions在尽可能兼容GitHub Actions的基础上进行设计。
|
||||
这是因為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"標籤中看到一个新的任务。
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -6,23 +6,23 @@ sidebar_position: 50
|
||||
|
||||
# 密钥管理
|
||||
|
||||
密钥管理允许您在用户、组织或仓库中存储敏感信息。
|
||||
密钥管理允许您在使用者、組織或存放庫中存儲敏感信息。
|
||||
密钥管理在 Gitea 1.19+ 版本中可用。
|
||||
|
||||
## 设置密钥名称
|
||||
## 设置密钥名稱
|
||||
|
||||
以下规则适用于密钥名称:
|
||||
以下規則适用于密钥名稱:
|
||||
|
||||
- 密钥名称只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
|
||||
- 密钥名稱只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
|
||||
|
||||
- 密钥名称不能以 `GITHUB_` 和 `GITEA_` 前缀开头。
|
||||
- 密钥名稱不能以 `GITHUB_` 和 `GITEA_` 前缀開頭。
|
||||
|
||||
- 密钥名称不能以数字开头。
|
||||
- 密钥名稱不能以数字開頭。
|
||||
|
||||
- 密钥名称不区分大小写。
|
||||
- 密钥名稱不区分大小写。
|
||||
|
||||
- 密钥名称在创建它们的级别上必须是唯一的。
|
||||
- 密钥名稱在建立它们的级别上必須是唯一的。
|
||||
|
||||
例如,对于在仓库级别创建的密钥,它在该仓库中必须具有唯一的名称;对于在组织级别创建的密钥,它在该级别上必须具有唯一的名称。
|
||||
例如,對於在存放庫级别建立的密钥,它在該存放庫中必須具有唯一的名稱;對於在組織级别建立的密钥,它在該级别上必須具有唯一的名稱。
|
||||
|
||||
如果在多个级别上存在具有相同名称的密钥,则最低级别的密钥优先生效。例如,如果组织级别的密钥与仓库级别的密钥具有相同的名称,则仓库级别的密钥将优先生效。
|
||||
如果在多个级别上存在具有相同名稱的密钥,则最低级别的密钥优先生效。例如,如果組織级别的密钥与存放庫级别的密钥具有相同的名稱,则存放庫级别的密钥将优先生效。
|
||||
|
||||
@@ -6,25 +6,25 @@ sidebar_position: 25
|
||||
|
||||
# 变量
|
||||
|
||||
您可以创建用户、组织和仓库级别的变量。变量的级别取决于创建它的位置。当创建变量时,变量的名称会被
|
||||
转换为大写,在yaml文件中引用时需要使用大写。
|
||||
您可以建立使用者、組織和存放庫级别的变量。变量的级别取决于建立它的位置。当建立变量时,变量的名稱会被
|
||||
转换為大写,在yaml文件中引用时需要使用大写。
|
||||
|
||||
## 命名规则
|
||||
## 命名規則
|
||||
|
||||
以下规则适用于变量名:
|
||||
以下規則适用于变量名:
|
||||
|
||||
- 变量名称只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
|
||||
- 变量名称不能以 `GITHUB_` 和 `GITEA_` 前缀开头。
|
||||
- 变量名称不能以数字开头。
|
||||
- 变量名称不区分大小写。
|
||||
- 变量名称在创建它们的级别上必须是唯一的。
|
||||
- 变量名称不能为 `CI`。
|
||||
- 变量名稱只能包含字母数字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下划线 (`_`)。不允许使用空格。
|
||||
- 变量名稱不能以 `GITHUB_` 和 `GITEA_` 前缀開頭。
|
||||
- 变量名稱不能以数字開頭。
|
||||
- 变量名稱不区分大小写。
|
||||
- 变量名稱在建立它们的级别上必須是唯一的。
|
||||
- 变量名稱不能為 `CI`。
|
||||
|
||||
## 使用
|
||||
|
||||
创建配置变量后,它们将自动填充到 `vars` 上下文中。您可以在工作流中使用类似 `${{ vars.VARIABLE_NAME }}` 这样的表达式来使用它们。
|
||||
建立配置变量后,它们将自动填充到 `vars` 上下文中。您可以在工作流中使用类似 `${{ vars.VARIABLE_NAME }}` 这样的表达式来使用它们。
|
||||
|
||||
## 优先级
|
||||
|
||||
如果同名变量存在于多个级别,则级别最低的变量优先。
|
||||
仓库级别的变量总是比组织或者用户级别的变量优先被选中。
|
||||
存放庫级别的变量总是比組織或者使用者级别的变量优先被選中。
|
||||
|
||||
@@ -8,37 +8,37 @@ aliases:
|
||||
|
||||
# AGit
|
||||
|
||||
在 Gitea `1.13` 版本中,添加了对 [AGit](https://git-repo.info/zh/2020/03/agit-flow-and-git-repo/) 的支持。AGit 允许用户在没有仓库写入权限的情况下直接创建拉取请求,也不需要分叉仓库。这有助于减少重复仓库的数量,降低不必要的磁盘使用量。
|
||||
在 Gitea `1.13` 版本中,添加了对 [AGit](https://git-repo.info/zh/2020/03/agit-flow-and-git-repo/) 的支持。AGit 允许使用者在没有存放庫写入权限的情况下直接建立拉取請求,也不需要分叉存放庫。这有助于减少重复存放庫的数量,降低不必要的硬碟使用量。
|
||||
|
||||
:::note
|
||||
服务器端需要 Git 版本 2.29 或更高版本才能正常运行。
|
||||
:::
|
||||
|
||||
## 使用 AGit 创建 PR
|
||||
## 使用 AGit 建立 PR
|
||||
|
||||
AGit 允许在推送代码到远程仓库时创建 PR(合并请求)。
|
||||
通过在推送时使用特定的 refspec(git 中已知的位置标识符),可以实现这一功能。
|
||||
AGit 允许在推送代码到远程存放庫时建立 PR(合並請求)。
|
||||
通過在推送时使用特定的 refspec(git 中已知的位置标识符),可以实現这一功能。
|
||||
下面的示例说明了这一点:
|
||||
|
||||
```shell
|
||||
git push origin HEAD:refs/for/main
|
||||
```
|
||||
|
||||
该命令的结构如下:
|
||||
該命令的结构如下:
|
||||
|
||||
- `HEAD`:目标分支
|
||||
- `refs/<for|draft|for-review>/<branch>`:目标 PR 类型
|
||||
- `for`:创建一个以 `<branch>` 为目标分支的普通 PR
|
||||
- `refs/<for|draft|for-review>/<branch>`:目标 PR 類型
|
||||
- `for`:建立一个以 `<branch>` 為目标分支的普通 PR
|
||||
- `draft`/`for-review`:目前被静默忽略
|
||||
- `<branch>/<session>`:要打开 PR 的目标分支
|
||||
- `-o <topic|title|description>`:PR 的选项
|
||||
- `-o <topic|title|description>`:PR 的選项
|
||||
- `title`:PR 的标题
|
||||
- `topic`:PR 应该打开的分支名称
|
||||
- `topic`:PR 應該打开的分支名稱
|
||||
- `description`:PR 的描述
|
||||
- `force-push=true`: 是否强制更新目标分支
|
||||
- 注意: 如果不传值,只用 `-o force-push` 也同样可以正常工作。
|
||||
|
||||
下面是另一个高级示例,用于创建一个以 `topic`、`title` 和 `description` 为参数的新 PR,目标分支是 `main`:
|
||||
下面是另一个高级示例,用于建立一个以 `topic`、`title` 和 `description` 為參數的新 PR,目标分支是 `main`:
|
||||
|
||||
```shell
|
||||
git push origin HEAD:refs/for/main -o topic="Topic of my PR" -o title="Title of the PR" -o description="# The PR Description\nThis can be **any** markdown content.\n- [x] Ok"
|
||||
|
||||
@@ -7,12 +7,12 @@ aliases:
|
||||
- /zh-tw/clone-filters
|
||||
---
|
||||
|
||||
# 克隆过滤器 (部分克隆)
|
||||
# 克隆過滤器 (部分克隆)
|
||||
|
||||
Git 引入了 `--filter` 选项用于 `git clone` 命令,该选项可以过滤掉大文件和对象(如 blob),从而创建一个仓库的部分克隆。克隆过滤器对于大型仓库和/或按流量计费的连接特别有用,因为完全克隆(不使用 `--filter`)可能会很昂贵(需要下载所有历史数据)。
|
||||
Git 引入了 `--filter` 選项用于 `git clone` 命令,該選项可以過滤掉大文件和对象(如 blob),从而建立一个存放庫的部分克隆。克隆過滤器對於大型存放庫和/或按流量计费的连接特别有用,因為完全克隆(不使用 `--filter`)可能会很昂贵(需要下载所有历史数据)。
|
||||
|
||||
这需要 Git 2.22 或更高版本,无论是在 Gitea 服务器上还是在客户端上都需要如此。为了使克隆过滤器正常工作,请确保客户端上的 Git 版本至少与服务器上的版本相同(或更高)。以管理员身份登录到 Gitea,然后转到管理后台 -> 应用配置,查看服务器的 Git 版本。
|
||||
这需要 Git 2.22 或更高版本,無论是在 Gitea 服务器上還是在客户端上都需要如此。為了使克隆過滤器正常工作,請确保客户端上的 Git 版本至少与服务器上的版本相同(或更高)。以管理员身份登入到 Gitea,然后转到管理后台 -> 應用配置,查看服务器的 Git 版本。
|
||||
|
||||
默认情况下,克隆过滤器是启用的,除非在 `[git]` 下将 `DISABLE_PARTIAL_CLONE` 设置为 `true`。
|
||||
默认情况下,克隆過滤器是启用的,除非在 `[git]` 下将 `DISABLE_PARTIAL_CLONE` 设置為 `true`。
|
||||
|
||||
请参阅 [GitHub 博客文章:了解部分克隆](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 以获取克隆过滤器的常见用法(无 Blob 和无树的克隆),以及 [GitLab 部分克隆文档](https://docs.gitlab.com/ee/topics/git/partial_clone.html) 以获取更高级的用法(例如按文件大小过滤和取消过滤以将部分克隆转换为完全克隆)。
|
||||
請参阅 [GitHub 博客文章:了解部分克隆](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 以获取克隆過滤器的常见用法(無 Blob 和無树的克隆),以及 [GitLab 部分克隆文檔](https://docs.gitlab.com/ee/topics/git/partial_clone.html) 以获取更高级的用法(例如按文件大小過滤和取消過滤以将部分克隆转换為完全克隆)。
|
||||
|
||||
@@ -9,30 +9,30 @@ aliases:
|
||||
|
||||
# 邮件接收
|
||||
|
||||
Gitea 支持通过接收邮件执行多种操作。本页面描述了如何进行设置。
|
||||
Gitea 支持通過接收邮件執行多种操作。本页面描述了如何進行设置。
|
||||
|
||||
## 要求
|
||||
|
||||
处理接收的电子邮件需要启用 IMAP 功能的电子邮件帐户。
|
||||
处理接收的电子邮件需要启用 IMAP 功能的电子邮件帳戶。
|
||||
推荐的策略是使用 [电子邮件子地址](https://en.wikipedia.org/wiki/Email_address#Sub-addressing),但也可以使用 catch-all 邮箱。
|
||||
接收电子邮件地址中包含一个用户/操作特定的令牌,告诉 Gitea 应执行哪个操作。
|
||||
此令牌应该出现在 `To` 和 `Delivered-To` 头字段中。
|
||||
接收电子邮件地址中包含一个使用者/操作特定的令牌,告诉 Gitea 應執行哪个操作。
|
||||
此令牌應該出現在 `To` 和 `Delivered-To` 头字段中。
|
||||
|
||||
Gitea 会尝试检测自动回复并跳过它们,电子邮件服务器也应该配置以减少接收到的干扰(垃圾邮件、通讯订阅等)。
|
||||
Gitea 会尝试检测自动回复並跳過它们,电子邮件服务器也應該配置以减少接收到的干扰(垃圾邮件、通讯订阅等)。
|
||||
|
||||
## 配置
|
||||
|
||||
要激活处理接收的电子邮件消息功能,您需要在配置文件中配置 `email.incoming` 部分。
|
||||
|
||||
`REPLY_TO_ADDRESS` 包含电子邮件客户端将要回复的地址。
|
||||
该地址需要包含 `%{token}` 占位符,该占位符将被替换为描述用户/操作的令牌。
|
||||
此占位符在地址中只能出现一次,并且必须位于地址的用户部分(`@` 之前)。
|
||||
該地址需要包含 `%{token}` 占位符,該占位符将被替换為描述使用者/操作的令牌。
|
||||
此占位符在地址中只能出現一次,並且必須位于地址的使用者部分(`@` 之前)。
|
||||
|
||||
使用电子邮件子地址的示例可能如下:`incoming+%{token}@example.com`
|
||||
|
||||
如果使用 catch-all 邮箱,则占位符可以出现在地址的用户部分的任何位置:`incoming+%{token}@example.com`、`incoming_%{token}@example.com`、`%{token}@example.com`
|
||||
如果使用 catch-all 邮箱,则占位符可以出現在地址的使用者部分的任何位置:`incoming+%{token}@example.com`、`incoming_%{token}@example.com`、`%{token}@example.com`
|
||||
|
||||
## 安全性
|
||||
|
||||
在选择用于接收传入电子邮件的域时要小心。
|
||||
在選择用于接收传入电子邮件的域时要小心。
|
||||
建议在子域名上接收传入电子邮件,例如 `incoming.example.com`,以防止与运行在 `example.com` 上的其他服务可能存在的安全问题。
|
||||
|
||||
@@ -7,9 +7,9 @@ aliases:
|
||||
- /zh-tw/issue-pull-request-templates
|
||||
---
|
||||
|
||||
# 从模板创建工单与合并请求
|
||||
# 从模板建立工單与合並請求
|
||||
|
||||
开发者可以利用问题模板创建工单与合并请求,其目的在于规范参与者的语言表达。
|
||||
开发者可以利用问题模板建立工單与合並請求,其目的在于规范参与者的语言表达。
|
||||
|
||||
## 模板介绍
|
||||
|
||||
@@ -19,27 +19,27 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
|
||||
|
||||
在 Gitea 中存在两种用途的 Markdown 模板:
|
||||
|
||||
- `ISSUE_TEMPLATE/bug-report.md` 用于规范工单的 Markdown 文本描述
|
||||
- `PULL_REQUEST_TEMPLATE.md` 用于规范合并请求的 Markdown 文本描述
|
||||
- `ISSUE_TEMPLATE/bug-report.md` 用于规范工單的 Markdown 文本描述
|
||||
- `PULL_REQUEST_TEMPLATE.md` 用于规范合並請求的 Markdown 文本描述
|
||||
|
||||
对于以上 Markdown 模板,我们推荐您将它们放置到项目目录 `.gitea` 进行收纳。
|
||||
對於以上 Markdown 模板,我们推荐您将它们放置到项目目錄 `.gitea` 進行收纳。
|
||||
|
||||
### YAML 模板
|
||||
|
||||
用 YAML 语法编写的模板相比 Markdown 可以实现更丰富的功能,利用表单实现诸如:问卷调查、字符校验。在 Gitea 中的 YAML 同样支持两种用途:
|
||||
用 YAML 语法编写的模板相比 Markdown 可以实現更丰富的功能,利用表單实現诸如:问卷调查、字符校验。在 Gitea 中的 YAML 同样支持两种用途:
|
||||
|
||||
- `ISSUE_TEMPLATE/bug-report.yaml` 用于创建问卷调查形式的工单
|
||||
- `PULL_REQUEST_TEMPLATE.yaml` 用于创建表单形式的合并请求
|
||||
- `ISSUE_TEMPLATE/bug-report.yaml` 用于建立问卷调查形式的工單
|
||||
- `PULL_REQUEST_TEMPLATE.yaml` 用于建立表單形式的合並請求
|
||||
|
||||
对于以上 YAML 模板,我们同样推荐您将它们放置到项目目录 `.gitea` 进行收纳。
|
||||
對於以上 YAML 模板,我们同样推荐您将它们放置到项目目錄 `.gitea` 進行收纳。
|
||||
|
||||
##### 表单支持通过 URL 查询参数传值
|
||||
##### 表單支持通過 URL 查询參數传值
|
||||
|
||||
当新建工单页面 URL 以 `?title=Issue+Title&body=Issue+Text` 为查询参数,表单将使用其中的参数(key-value)填充表单内容。
|
||||
当新建工單页面 URL 以 `?title=Issue+Title&body=Issue+Text` 為查询參數,表單将使用其中的參數(key-value)填充表單内容。
|
||||
|
||||
### Gitea 支持的模板文件路径
|
||||
|
||||
工单模板文件名:
|
||||
工單模板文件名:
|
||||
|
||||
- `ISSUE_TEMPLATE.md`
|
||||
- `ISSUE_TEMPLATE.yaml`
|
||||
@@ -60,7 +60,7 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
|
||||
- `.github/issue_template.yaml`
|
||||
- `.github/issue_template.yml`
|
||||
|
||||
合并请求模板:
|
||||
合並請求模板:
|
||||
|
||||
- `PULL_REQUEST_TEMPLATE.md`
|
||||
- `PULL_REQUEST_TEMPLATE.yaml`
|
||||
@@ -81,9 +81,9 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
|
||||
- `.github/pull_request_template.yaml`
|
||||
- `.github/pull_request_template.yml`
|
||||
|
||||
#### 工单模板目录
|
||||
#### 工單模板目錄
|
||||
|
||||
由于工单存在多种类型,Gitea 支持将工单模板统一收纳到 `ISSUE_TEMPLATE` 目录。以下是 Gitea 支持的工单模板目录:
|
||||
由于工單存在多种類型,Gitea 支持将工單模板统一收纳到 `ISSUE_TEMPLATE` 目錄。以下是 Gitea 支持的工單模板目錄:
|
||||
|
||||
- `ISSUE_TEMPLATE`
|
||||
- `issue_template`
|
||||
@@ -94,7 +94,7 @@ Gitea 支持两种格式的模板:Markdown 和 YAML。
|
||||
- `.gitlab/ISSUE_TEMPLATE`
|
||||
- `.gitlab/issue_template`
|
||||
|
||||
目录支持混合存放 Markdown (`.md`) 或 YAML (`.yaml`/`.yml`) 格式的工单模板。另外,合并请求模板不支持目录存放。
|
||||
目錄支持混合存放 Markdown (`.md`) 或 YAML (`.yaml`/`.yml`) 格式的工單模板。另外,合並請求模板不支持目錄存放。
|
||||
|
||||
## Markdown 模板语法
|
||||
|
||||
@@ -112,19 +112,19 @@ labels:
|
||||
This is the template!
|
||||
```
|
||||
|
||||
上面的示例表示用户从列表中选择一个工单模板时,列表会展示模板名称 `Template Name` 和模板描述 `This template is for testing!`。 同时,标题会预先填充为 `[TEST]`,而正文将预先填充 `This is the template!`。该 Issue 会被指派给 `user1`。 最后,Issue 还会被分配两个标签,`bug` 和 `help needed`,并且将问题指向 `main` 分支。
|
||||
上面的示例表示使用者从列表中選择一个工單模板时,列表会展示模板名稱 `Template Name` 和模板描述 `This template is for testing!`。 同时,标题会预先填充為 `[TEST]`,而正文将预先填充 `This is the template!`。該 Issue 会被指派给 `user1`。 最后,Issue 還会被分配两个標籤,`bug` 和 `help needed`,並且将问题指向 `main` 分支。
|
||||
|
||||
## YAML 模板语法
|
||||
|
||||
YAML 模板格式如下,相比 Markdown 模板提供了更多实用性的功能。
|
||||
|
||||
```yaml
|
||||
name: 表单名称
|
||||
about: 表单描述
|
||||
name: 表單名稱
|
||||
about: 表單描述
|
||||
title: 默认标题
|
||||
body: 主体内容
|
||||
type: 定义表单元素类型
|
||||
id: 定义表单标号
|
||||
body: 主體内容
|
||||
type: 定义表單元素類型
|
||||
id: 定义表單标号
|
||||
attributes: 扩展的属性
|
||||
validations: 内容校验
|
||||
```
|
||||
@@ -195,89 +195,89 @@ body:
|
||||
|
||||
### Markdown 段落
|
||||
|
||||
您可以在 YAML 模板中使用 `markdown` 元素为开发者提供额外的上下文支撑,这部分内容会作为创建工单的提示但不会作为工单内容提交。
|
||||
您可以在 YAML 模板中使用 `markdown` 元素為开发者提供额外的上下文支撑,这部分内容会作為建立工單的提示但不会作為工單内容提交。
|
||||
|
||||
`attributes` 子项提供了以下扩展能力:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ------- | ------------------------------ | ---- | ------ | ------ | ------ |
|
||||
| `value` | 渲染的文本。支持 Markdown 格式 | 必选 | 字符串 | - | - |
|
||||
| `value` | 渲染的文本。支持 Markdown 格式 | 必選 | 字符串 | - | - |
|
||||
|
||||
### Textarea 多行文本输入框
|
||||
|
||||
您可以使用 `textarea` 元素在表单中添加多行文本输入框。 除了输入文本,开发者还可以在 `textarea` 区域附加文件。
|
||||
您可以使用 `textarea` 元素在表單中添加多行文本输入框。 除了输入文本,开发者還可以在 `textarea` 区域附加文件。
|
||||
|
||||
`attributes` 子项提供了以下扩展能力:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ------------- | ----------------------------------------------------------------------------------------------------- | ---- | ------ | -------- | ------------------ |
|
||||
| `label` | 预期用户输入的简短描述,也以表单形式显示。 | 必选 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指导的文本区域的描述,以表单形式显示。 | 可选 | 字符串 | 空字符串 | - |
|
||||
| `placeholder` | 半透明的占位符,在文本区域空白时呈现 | 可选 | 字符串 | 空字符串 | - |
|
||||
| `value` | 在文本区域中预填充的文本。 | 可选 | 字符串 | - | - |
|
||||
| `render` | 如果提供了值,提交的文本将格式化为代码块。 提供此键时,文本区域将不会扩展到文件附件或 Markdown 编辑。 | 可选 | 字符串 | - | Gitea 支持的语言。 |
|
||||
| `label` | 预期使用者输入的简短描述,也以表單形式显示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指导的文本区域的描述,以表單形式显示。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `placeholder` | 半透明的占位符,在文本区域空白时呈現 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `value` | 在文本区域中预填充的文本。 | 可選 | 字符串 | - | - |
|
||||
| `render` | 如果提供了值,提交的文本将格式化為代码块。 提供此键时,文本区域将不会扩展到文件附件或 Markdown 编辑。 | 可選 | 字符串 | - | Gitea 支持的语言。 |
|
||||
|
||||
`validations` 子项提供以下文本校验参数:
|
||||
`validations` 子项提供以下文本校验參數:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ---------- | ---------------------------- | ---- | ------ | ------ | ------ |
|
||||
| `required` | 防止在元素完成之前提交表单。 | 可选 | 布尔型 | false | - |
|
||||
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布尔型 | false | - |
|
||||
|
||||
### Input 单行输入框
|
||||
### Input 單行输入框
|
||||
|
||||
您可以使用 `input` 元素添加单行文本字段到表单。
|
||||
您可以使用 `input` 元素添加單行文本字段到表單。
|
||||
|
||||
`attributes` 子项提供了以下扩展能力:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ------------- | ---------------------------------------------- | ---- | ------ | -------- | ------ |
|
||||
| `label` | 预期用户输入的简短描述,也以表单形式显示。 | 必选 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指导的字段的描述,以表单形式显示。 | 可选 | 字符串 | 空字符串 | - |
|
||||
| `placeholder` | 半透明的占位符,在字段空白时呈现。 | 可选 | 字符串 | 空字符串 | - |
|
||||
| `value` | 字段中预填的文本。 | 可选 | 字符串 | - | - |
|
||||
| `label` | 预期使用者输入的简短描述,也以表單形式显示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指导的字段的描述,以表單形式显示。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `placeholder` | 半透明的占位符,在字段空白时呈現。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `value` | 字段中预填的文本。 | 可選 | 字符串 | - | - |
|
||||
|
||||
`validations` 子项提供以下文本校验参数:
|
||||
`validations` 子项提供以下文本校验參數:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ----------- | -------------------------------- | ---- | ------ | ------ | -------------------------------------------------------------- |
|
||||
| `required` | 防止在未填内容时提交表单。 | 可选 | 布尔型 | false | - |
|
||||
| `is_number` | 防止在未填数字时提交表单。 | 可选 | 布尔型 | false | - |
|
||||
| `regex` | 直到满足了与正则表达式匹配的值。 | 可选 | 字符串 | - | [正则表达式](https://en.wikipedia.org/wiki/Regular_expression) |
|
||||
| `required` | 防止在未填内容时提交表單。 | 可選 | 布尔型 | false | - |
|
||||
| `is_number` | 防止在未填数字时提交表單。 | 可選 | 布尔型 | false | - |
|
||||
| `regex` | 直到满足了与正则表达式匹配的值。 | 可選 | 字符串 | - | [正则表达式](https://en.wikipedia.org/wiki/Regular_expression) |
|
||||
|
||||
### Dropdown 下拉菜单
|
||||
### Dropdown 下拉菜單
|
||||
|
||||
您可以使用 `dropdown` 元素在表单中添加下拉菜单。
|
||||
您可以使用 `dropdown` 元素在表單中添加下拉菜單。
|
||||
|
||||
`attributes` 子项提供了以下扩展能力:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ------------- | --------------------------------------------------------- | ---- | ---------- | -------- | ------ |
|
||||
| `label` | 预期用户输入的简短描述,以表单形式显示。 | 必选 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指导的下拉列表的描述,以表单形式显示。 | 可选 | 字符串 | 空字符串 | - |
|
||||
| `multiple` | 确定用户是否可以选择多个选项。 | 可选 | 布尔型 | false | - |
|
||||
| `options` | 用户可以选择的选项列表。 不能为空,所有选择必须是不同的。 | 必选 | 字符串数组 | - | - |
|
||||
| `label` | 预期使用者输入的简短描述,以表單形式显示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指导的下拉列表的描述,以表單形式显示。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `multiple` | 确定使用者是否可以選择多个選项。 | 可選 | 布尔型 | false | - |
|
||||
| `options` | 使用者可以選择的選项列表。 不能為空,所有選择必須是不同的。 | 必選 | 字符串数组 | - | - |
|
||||
|
||||
`validations` 子项提供以下文本校验参数:
|
||||
`validations` 子项提供以下文本校验參數:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ---------- | ---------------------------- | ---- | ------ | ------ | ------ |
|
||||
| `required` | 防止在元素完成之前提交表单。 | 可选 | 布尔型 | false | - |
|
||||
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布尔型 | false | - |
|
||||
|
||||
### Checkboxes 复选框
|
||||
### Checkboxes 复選框
|
||||
|
||||
您可以使用 `checkboxes` 元素添加一组复选框到表单。
|
||||
您可以使用 `checkboxes` 元素添加一组复選框到表單。
|
||||
|
||||
`attributes` 子项提供了以下扩展能力:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ------------- | ----------------------------------------------------- | ---- | ------ | -------- | ------ |
|
||||
| `label` | 预期用户输入的简短描述,以表单形式显示。 | 必选 | 字符串 | - | - |
|
||||
| `description` | 复选框集的描述,以表单形式显示。 支持 Markdown 格式。 | 可选 | 字符串 | 空字符串 | - |
|
||||
| `options` | 用户可以选择的复选框列表。 有关语法,请参阅下文。 | 必选 | 数组 | - | - |
|
||||
| `label` | 预期使用者输入的简短描述,以表單形式显示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 复選框集的描述,以表單形式显示。 支持 Markdown 格式。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `options` | 使用者可以選择的复選框列表。 有关语法,請参阅下文。 | 必選 | 数组 | - | - |
|
||||
|
||||
对于 `options`,您可以设置以下参数:
|
||||
對於 `options`,您可以设置以下參數:
|
||||
|
||||
| 键 | 描述 | 必选 | 类型 | 默认值 | 有效值 |
|
||||
| 键 | 描述 | 必選 | 類型 | 默认值 | 有效值 |
|
||||
| ---------- | --------------------------------------------------------------------------------- | ---- | ------ | ------ | ------ |
|
||||
| `label` | 选项的标识符,显示在表单中。 支持 Markdown 用于粗体或斜体文本格式化和超文本链接。 | 必选 | 字符串 | - | - |
|
||||
| `required` | 防止在元素完成之前提交表单。 | 可选 | 布尔型 | false | - |
|
||||
| `label` | 選项的标识符,显示在表單中。 支持 Markdown 用于粗體或斜體文本格式化和超文本链接。 | 必選 | 字符串 | - | - |
|
||||
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布尔型 | false | - |
|
||||
|
||||
@@ -6,28 +6,28 @@ aliases:
|
||||
- /zh-tw/labels
|
||||
---
|
||||
|
||||
# 标签
|
||||
# 標籤
|
||||
|
||||
您可以使用标签对工单和合并请求进行分类,并提高对它们的概览。
|
||||
您可以使用標籤对工單和合並請求進行分类,並提高对它们的概览。
|
||||
|
||||
## 创建标签
|
||||
## 建立標籤
|
||||
|
||||
对于仓库,可以在 `工单(Issues)` 中点击 `标签(Labels)` 来创建标签。
|
||||
對於存放庫,可以在 `工單(Issues)` 中點擊 `標籤(Labels)` 来建立標籤。
|
||||
|
||||
对于组织,您可以定义组织级别的标签,这些标签与所有组织仓库共享,包括已存在的仓库和新创建的仓库。可以在组织的 `设置(Settings)` 中创建组织级别的标签。
|
||||
對於組織,您可以定义組織级别的標籤,这些標籤与所有組織存放庫共享,包括已存在的存放庫和新建立的存放庫。可以在組織的 `设置(Settings)` 中建立組織级别的標籤。
|
||||
|
||||
标签具有必填的名称和颜色,可选的描述,以及必须是独占的或非独占的(见下面的“作用域标签”)。
|
||||
標籤具有必填的名稱和颜色,可選的描述,以及必須是独占的或非独占的(见下面的“作用域標籤”)。
|
||||
|
||||
当您创建一个仓库时,可以通过使用 `工单标签(Issue Labels)` 选项来选择标签集。该选项列出了一些在您的实例上 [全局配置的可用标签集](../administration/customizing-gitea.md#labels)。在创建仓库时,这些标签也将被创建。
|
||||
当您建立一个存放庫时,可以通過使用 `工單標籤(Issue Labels)` 選项来選择標籤集。該選项列出了一些在您的实例上 [全局配置的可用標籤集](../administration/customizing-gitea.md#labels)。在建立存放庫时,这些標籤也将被建立。
|
||||
|
||||
## 作用域标签
|
||||
## 作用域標籤
|
||||
|
||||
作用域标签用于确保将至多一个具有相同作用域的标签分配给工单或合并请求。例如,如果标签 `kind/bug` 和 `kind/enhancement` 的独占选项被设置,那么工单只能被分类为 bug 或 enhancement 中的一个。
|
||||
作用域標籤用于确保将至多一个具有相同作用域的標籤分配给工單或合並請求。例如,如果標籤 `kind/bug` 和 `kind/enhancement` 的独占選项被设置,那么工單只能被分类為 bug 或 enhancement 中的一个。
|
||||
|
||||
作用域标签的名称必须包含 `/`(不能在名称的任一端)。标签的作用域是基于最后一个 `/` 决定的,因此例如标签 `scope/subscope/item` 的作用域是 `scope/subscope`。
|
||||
作用域標籤的名稱必須包含 `/`(不能在名稱的任一端)。標籤的作用域是基于最后一个 `/` 决定的,因此例如標籤 `scope/subscope/item` 的作用域是 `scope/subscope`。
|
||||
|
||||
## 按标签筛选
|
||||
## 按標籤筛選
|
||||
|
||||
工单和合并请求列表可以按标签进行筛选。选择多个标签将显示具有所有选定标签的工单和合并请求。
|
||||
工單和合並請求列表可以按標籤進行筛選。選择多个標籤将显示具有所有選定標籤的工單和合並請求。
|
||||
|
||||
通过按住 alt 键并单击标签,可以将具有所选标签的工单和合并请求从列表中排除。
|
||||
通過按住 alt 键並單擊標籤,可以将具有所選標籤的工單和合並請求从列表中排除。
|
||||
|
||||
@@ -8,85 +8,85 @@ aliases:
|
||||
|
||||
# 自动链接引用
|
||||
|
||||
当发布工单、合并请求或评论时,文本描述会被解析以查找引用。这些引用将显示为工单视图中的链接,并且在某些情况下会触发特定的“操作”。
|
||||
当發佈工單、合並請求或评论时,文本描述会被解析以查找引用。这些引用将显示為工單视图中的链接,並且在某些情况下会触发特定的“操作”。
|
||||
|
||||
类似地,当列出提交消息时,它们也会被解析,并且当它们被推送到主分支时可以触发“操作”。
|
||||
类似地,当列出提交消息时,它们也会被解析,並且当它们被推送到主分支时可以触发“操作”。
|
||||
|
||||
为了防止意外创建引用,对于引用的识别有一定的规则。例如,它们不应该包含在代码文本内部。它们还应该在周围的文本中合理清晰(例如,使用空格)。
|
||||
為了防止意外建立引用,對於引用的识别有一定的規則。例如,它们不應該包含在代码文本内部。它们還應該在周围的文本中合理清晰(例如,使用空格)。
|
||||
|
||||
## 用户、团队和组织提及
|
||||
## 使用者、团队和組織提及
|
||||
|
||||
当找到形式为 `@username` 的文本,并且 `username` 与现有用户的名称匹配时,将创建一个“提及”引用。这将通过将文本更改为指向该用户个人资料的链接来显示,并根据被提及的用户是否具有访问内容所需的权限来可能创建通知。
|
||||
当找到形式為 `@username` 的文本,並且 `username` 与現有使用者的名稱匹配时,将建立一个“提及”引用。这将通過将文本更改為指向該使用者个人资料的链接来显示,並根据被提及的使用者是否具有访问内容所需的权限来可能建立通知。
|
||||
|
||||
示例:
|
||||
|
||||
> [@John](#),你能看一下这个吗?
|
||||
|
||||
对于团队和组织也是有效的:
|
||||
對於团队和組織也是有效的:
|
||||
|
||||
> [@Documenters](#),我们需要为此进行规划。
|
||||
> [@Documenters](#),我们需要為此進行规划。
|
||||
> [@CoolCompanyInc](#),这个问题关系到我们所有人!
|
||||
|
||||
团队将在适当时收到邮件通知,但整个组织不会收到通知。
|
||||
团队将在适当时收到邮件通知,但整个組織不会收到通知。
|
||||
|
||||
提交消息不会产生用户通知。
|
||||
提交消息不会产生使用者通知。
|
||||
|
||||
## 提交
|
||||
|
||||
可以使用提交的 SHA1 哈希或至少七个字符的一部分来引用提交。它们将显示为指向相应提交的链接。
|
||||
可以使用提交的 SHA1 哈希或至少七个字符的一部分来引用提交。它们将显示為指向相應提交的链接。
|
||||
|
||||
示例:
|
||||
|
||||
> 这个错误是在 [e59ff077](#) 中引入的
|
||||
|
||||
## 工单和合并请求
|
||||
## 工單和合並請求
|
||||
|
||||
可以使用简单的符号 `#1234` 来创建对另一个工单或合并请求的引用,其中 _1234_ 是同一仓库中一个工单或合并请求的编号。这些引用将显示为指向被引用内容的链接。
|
||||
可以使用简單的符号 `#1234` 来建立对另一个工單或合並請求的引用,其中 _1234_ 是同一存放庫中一个工單或合並請求的编号。这些引用将显示為指向被引用内容的链接。
|
||||
|
||||
创建此类型引用的效果是,在被引用的文档中创建一个“通知”,前提是引用的创建者对其具有读取权限。
|
||||
建立此類型引用的效果是,在被引用的文檔中建立一个“通知”,前提是引用的建立者对其具有读取权限。
|
||||
|
||||
示例:
|
||||
|
||||
> 这似乎与 [#1234](#) 相关
|
||||
|
||||
还可以使用形式 `owner/repository#1234` 来引用其他仓库中的工单和合并请求:
|
||||
還可以使用形式 `owner/repository#1234` 来引用其他存放庫中的工單和合並請求:
|
||||
|
||||
> 这似乎与 [mike/compiler#1234](#) 相关
|
||||
|
||||
或者也可以使用 `!1234` 符号。虽然在 Gitea 中合并请求是工单的一种形式,但 `#1234` 形式总是链接到工单;如果链接的条目恰好是一个合并请求,Gitea 会适当地进行重定向。而使用 `!1234` 符号,则会创建一个合并请求链接,根据需要会被重定向到工单。然而,如果使用外部跟踪器,这个区别可能很重要,因为工单和合并请求的链接是不能互换的。
|
||||
或者也可以使用 `!1234` 符号。虽然在 Gitea 中合並請求是工單的一种形式,但 `#1234` 形式总是链接到工單;如果链接的条目恰好是一个合並請求,Gitea 会适当地進行重定向。而使用 `!1234` 符号,则会建立一个合並請求链接,根据需要会被重定向到工單。然而,如果使用外部跟踪器,这个区别可能很重要,因為工單和合並請求的链接是不能互换的。
|
||||
|
||||
## 可操作的引用在合并请求和提交消息中
|
||||
## 可操作的引用在合並請求和提交消息中
|
||||
|
||||
有时,一个提交或合并请求可能会修复或重新出现在某个特定工单中。Gitea 支持在引用之前加上特定的“关键字”来关闭和重新打开被引用的工单。常见的关键字包括“closes”、“fixes”、“reopens”等。这个列表可以由站点管理员进行 [自定义](../administration/config-cheat-sheet.md)。
|
||||
有时,一个提交或合並請求可能会修复或重新出現在某个特定工單中。Gitea 支持在引用之前加上特定的“关键字”来关闭和重新打开被引用的工單。常见的关键字包括“closes”、“fixes”、“reopens”等。这个列表可以由站点管理员進行 [自定义](../administration/config-cheat-sheet.md)。
|
||||
|
||||
示例:
|
||||
|
||||
> 这个合并请求 _closes_ [#1234](#)
|
||||
> 这个合並請求 _closes_ [#1234](#)
|
||||
|
||||
如果可操作的引用被接受,这将在被引用的工单上创建一个通知,宣布当引用的合并请求被合并时该工单将被关闭。
|
||||
如果可操作的引用被接受,这将在被引用的工單上建立一个通知,宣布当引用的合並請求被合並时該工單将被关闭。
|
||||
|
||||
为了接受可操作的引用,必须满足以下至少一项条件之一:
|
||||
為了接受可操作的引用,必須满足以下至少一项条件之一:
|
||||
|
||||
- 评论者在创建引用时具有关闭或重新打开工单的权限。
|
||||
- 评论者在建立引用时具有关闭或重新打开工單的权限。
|
||||
- 引用位于提交消息中。
|
||||
- 引用作为合并请求描述的一部分发布。
|
||||
- 引用作為合並請求描述的一部分發佈。
|
||||
|
||||
在最后一种情况下,只有当合并合并请求的人具有相应权限时,工单才会被关闭或重新打开。
|
||||
在最后一种情况下,只有当合並合並請求的人具有相應权限时,工單才会被关闭或重新打开。
|
||||
|
||||
此外,只有合并请求和提交消息可以创建一个操作,只有工单可以通过这种方式被关闭或重新打开。
|
||||
此外,只有合並請求和提交消息可以建立一个操作,只有工單可以通過这种方式被关闭或重新打开。
|
||||
|
||||
默认的关键字如下:
|
||||
|
||||
- **关闭工单**: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved
|
||||
- **重新打开工单**: reopen, reopens, reopened
|
||||
- **关闭工單**: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved
|
||||
- **重新打开工單**: reopen, reopens, reopened
|
||||
|
||||
## 合并请求和提交消息中的时间跟踪
|
||||
## 合並請求和提交消息中的时间跟踪
|
||||
|
||||
当提交或合并合并请求导致自动关闭工单时,还可以通过提交消息添加解决此工单所花费的时间。
|
||||
当提交或合並合並請求导致自动关闭工單时,還可以通過提交消息添加解决此工單所花费的时间。
|
||||
|
||||
要指定解决工单所花费的时间,需要在工单编号后面以 `@<number><time-unit>` 的格式指定时间。在一个提交消息中,可以指定多个已解决的工单,并为每个工单指定花费的时间。
|
||||
要指定解决工單所花费的时间,需要在工單编号后面以 `@<number><time-unit>` 的格式指定时间。在一个提交消息中,可以指定多个已解决的工單,並為每个工單指定花费的时间。
|
||||
|
||||
支持的时间单位(`<time-unit>`):
|
||||
支持的时间單位(`<time-unit>`):
|
||||
|
||||
- `m` - 分钟
|
||||
- `h` - 小时
|
||||
@@ -94,50 +94,50 @@ aliases:
|
||||
- `w` - 周(相当于 5 天)
|
||||
- `mo` - 月(相当于 4 周)
|
||||
|
||||
用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间单位可以结合使用,例如 `@1h10m` 表示 1 小时 10 分钟。
|
||||
用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间單位可以结合使用,例如 `@1h10m` 表示 1 小时 10 分钟。
|
||||
|
||||
提交消息示例:
|
||||
|
||||
> Fixed #123 spent @1h, refs #102, fixes #124 @1.5h
|
||||
|
||||
这将导致工单 #123 增加 1 小时,工单 #124 增加 1 小时半。
|
||||
这将导致工單 #123 增加 1 小时,工單 #124 增加 1 小时半。
|
||||
|
||||
## 外部跟踪器
|
||||
|
||||
Gitea 支持使用外部工单跟踪器,并可以在合并请求中创建对外部托管的工单的引用。但是,如果外部跟踪器使用数字来标识工单,那么它们将与 Gitea 中托管的合并请求无法区分。为了解决这个问题,Gitea 允许使用 `!` 标记来标识合并请求。例如:
|
||||
Gitea 支持使用外部工單跟踪器,並可以在合並請求中建立对外部托管的工單的引用。但是,如果外部跟踪器使用数字来标识工單,那么它们将与 Gitea 中托管的合並請求無法区分。為了解决这个问题,Gitea 允许使用 `!` 标记来标识合並請求。例如:
|
||||
|
||||
> 这是工单 [#1234](#),并链接到外部跟踪器。
|
||||
> 这是合并请求 [!1234](#),并链接到 Gitea 中的合并请求。
|
||||
> 这是工單 [#1234](#),並链接到外部跟踪器。
|
||||
> 这是合並請求 [!1234](#),並链接到 Gitea 中的合並請求。
|
||||
|
||||
在工单和合并请求中,`!` 和 `#` 可以互换使用,除非需要进行区分。如果仓库使用外部跟踪器,默认情况下,合并提交消息将使用 `!` 作为引用。
|
||||
在工單和合並請求中,`!` 和 `#` 可以互换使用,除非需要進行区分。如果存放庫使用外部跟踪器,默认情况下,合並提交消息将使用 `!` 作為引用。
|
||||
|
||||
## 工单和合并请求引用摘要
|
||||
## 工單和合並請求引用摘要
|
||||
|
||||
下表说明了工单和合并请求的不同类型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的仓库,而 `UserZ/RepoZ` 表示另一个仓库。
|
||||
下表说明了工單和合並請求的不同類型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的存放庫,而 `UserZ/RepoZ` 表示另一个存放庫。
|
||||
|
||||
| 在 User1/Repo1 中的引用 | Repo1 的工单是外部的 | RepoZ 的工单是外部的 | 渲染效果 |
|
||||
| 在 User1/Repo1 中的引用 | Repo1 的工單是外部的 | RepoZ 的工單是外部的 | 渲染效果 |
|
||||
| ----------------------- | :------------------: | :------------------: | --------------------------------------------- |
|
||||
| `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
|
||||
| `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
|
||||
| `#1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工单_ 1234 |
|
||||
| `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工單/合並請求 1234 |
|
||||
| `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工單/合並請求 1234 |
|
||||
| `#1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工單_ 1234 |
|
||||
| `!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| `User1/Repo1#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
|
||||
| `User1/Repo1!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
|
||||
| `User1/Repo1#1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工单_ 1234 |
|
||||
| `User1/Repo1#1234` | 否 | - | 链接到 `User1/Repo1` 中的工單/合並請求 1234 |
|
||||
| `User1/Repo1!1234` | 否 | - | 链接到 `User1/Repo1` 中的工單/合並請求 1234 |
|
||||
| `User1/Repo1#1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工單_ 1234 |
|
||||
| `User1/Repo1!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| `UserZ/RepoZ#1234` | - | 否 | 链接到 `UserZ/RepoZ` 中的工单/合并请求 1234 |
|
||||
| `UserZ/RepoZ!1234` | - | 否 | 链接到 `UserZ/RepoZ` 中的工单/合并请求 1234 |
|
||||
| `UserZ/RepoZ#1234` | - | 是 | 链接到 `UserZ/RepoZ` 的 _外部工单_ 1234 |
|
||||
| `UserZ/RepoZ#1234` | - | 否 | 链接到 `UserZ/RepoZ` 中的工單/合並請求 1234 |
|
||||
| `UserZ/RepoZ!1234` | - | 否 | 链接到 `UserZ/RepoZ` 中的工單/合並請求 1234 |
|
||||
| `UserZ/RepoZ#1234` | - | 是 | 链接到 `UserZ/RepoZ` 的 _外部工單_ 1234 |
|
||||
| `UserZ/RepoZ!1234` | - | 是 | 链接到 `UserZ/RepoZ` 的 _PR_ 1234 |
|
||||
| **字母数字工单编号:** | - | - | - |
|
||||
| `AAA-1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工单_ `AAA-1234` |
|
||||
| **字母数字工單编号:** | - | - | - |
|
||||
| `AAA-1234` | 是 | - | 链接到 `User1/Repo1` 的 _外部工單_ `AAA-1234` |
|
||||
| `!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| `User1/Repo1!1234` | 是 | - | 链接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| _不支持_ | - | 是 | 链接到 `UserZ/RepoZ` 的 _外部工单_ `AAA-1234` |
|
||||
| _不支持_ | - | 是 | 链接到 `UserZ/RepoZ` 的 _外部工單_ `AAA-1234` |
|
||||
| `UserZ/RepoZ!1234` | - | 是 | 链接到 `UserZ/RepoZ` 中的 _PR_ 1234 |
|
||||
|
||||
_最后一部分适用于使用字母数字格式的外部工单跟踪器的仓库。_
|
||||
_最后一部分适用于使用字母数字格式的外部工單跟踪器的存放庫。_
|
||||
|
||||
_**-**: 不适用_
|
||||
|
||||
注意:不完全支持具有不同类型工单(外部 vs. 内部)的仓库之间的自动引用,可能会导致无效链接。
|
||||
注意:不完全支持具有不同類型工單(外部 vs. 内部)的存放庫之间的自动引用,可能会导致無效链接。
|
||||
|
||||
@@ -7,11 +7,11 @@ aliases:
|
||||
- /zh-tw/merge-message-templates
|
||||
---
|
||||
|
||||
# 合并消息模板
|
||||
# 合並消息模板
|
||||
|
||||
## 文件名
|
||||
|
||||
PR 默认合并消息模板可能的文件名:
|
||||
PR 默认合並消息模板可能的文件名:
|
||||
|
||||
- `.gitea/default_merge_message/MERGE_TEMPLATE.md`
|
||||
- `.gitea/default_merge_message/REBASE_TEMPLATE.md`
|
||||
@@ -24,24 +24,24 @@ PR 默认合并消息模板可能的文件名:
|
||||
|
||||
您可以在这些模板中使用以下以 `${}` 包围的变量,这些变量遵循 [os.Expand](https://pkg.go.dev/os#Expand) 语法:
|
||||
|
||||
- BaseRepoOwnerName:此合并请求的基础仓库所有者名称
|
||||
- BaseRepoName:此合并请求的基础仓库名称
|
||||
- BaseBranch:此合并请求的基础仓库目标分支名称
|
||||
- HeadRepoOwnerName:此合并请求的源仓库所有者名称
|
||||
- HeadRepoName:此合并请求的源仓库名称
|
||||
- HeadBranch:此合并请求的源仓库分支名称
|
||||
- PullRequestTitle:合并请求的标题
|
||||
- PullRequestDescription:合并请求的描述
|
||||
- PullRequestPosterName:合并请求的提交者名称
|
||||
- PullRequestIndex:合并请求的索引号
|
||||
- PullRequestReference:合并请求的引用字符与索引号。例如,#1、!2
|
||||
- ClosingIssues:返回一个包含将由此合并请求关闭的所有工单的字符串。例如 `close #1, close #2`
|
||||
- ReviewedOn: 该提交所属的合并请求。例如: `Reviewed-on: https://gitea.com/foo/bar/pulls/1`
|
||||
- ReviewedBy: 谁同意的此合并请求。例如: `Reviewed-by: Jane Doe <jane.doe@example.com>`
|
||||
- BaseRepoOwnerName:此合並請求的基础存放庫所有者名稱
|
||||
- BaseRepoName:此合並請求的基础存放庫名稱
|
||||
- BaseBranch:此合並請求的基础存放庫目标分支名稱
|
||||
- HeadRepoOwnerName:此合並請求的源存放庫所有者名稱
|
||||
- HeadRepoName:此合並請求的源存放庫名稱
|
||||
- HeadBranch:此合並請求的源存放庫分支名稱
|
||||
- PullRequestTitle:合並請求的标题
|
||||
- PullRequestDescription:合並請求的描述
|
||||
- PullRequestPosterName:合並請求的提交者名稱
|
||||
- PullRequestIndex:合並請求的索引号
|
||||
- PullRequestReference:合並請求的引用字符与索引号。例如,#1、!2
|
||||
- ClosingIssues:返回一个包含将由此合並請求关闭的所有工單的字符串。例如 `close #1, close #2`
|
||||
- ReviewedOn: 該提交所属的合並請求。例如: `Reviewed-on: https://gitea.com/foo/bar/pulls/1`
|
||||
- ReviewedBy: 谁同意的此合並請求。例如: `Reviewed-by: Jane Doe <jane.doe@example.com>`
|
||||
|
||||
## 变基(Rebase)
|
||||
|
||||
在没有合并提交的情况下进行变基时,`REBASE_TEMPLATE.md` 修改最后一次提交的消息。此模板还提供以下附加变量:
|
||||
在没有合並提交的情况下進行变基时,`REBASE_TEMPLATE.md` 修改最后一次提交的消息。此模板還提供以下附加变量:
|
||||
|
||||
- CommitTitle:提交的标题
|
||||
- CommitBody:提交的正文文本
|
||||
|
||||
@@ -4,19 +4,19 @@ slug: "alpine"
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Alpine 软件包注册表
|
||||
# Alpine 軟體包儲存庫
|
||||
|
||||
在您的用户或组织中发布 [Alpine](https://pkgs.alpinelinux.org/) 软件包。
|
||||
在您的使用者或組織中發佈 [Alpine](https://pkgs.alpinelinux.org/) 軟體包。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Alpine 注册表,您需要使用像 curl 这样的 HTTP 客户端来上传包,并使用像 apk 这样的包管理器来消费包。
|
||||
要使用 Alpine 儲存庫,您需要使用像 curl 这样的 HTTP 客户端来上传包,並使用像 apk 这样的包管理器来消费包。
|
||||
|
||||
以下示例使用 `apk`。
|
||||
|
||||
## 配置软件包注册表
|
||||
## 配置軟體包儲存庫
|
||||
|
||||
要注册 Alpine 注册表,请将 URL 添加到已知的 apk 源列表中 (`/etc/apk/repositories`):
|
||||
要注册 Alpine 儲存庫,請将 URL 添加到已知的 apk 源列表中 (`/etc/apk/repositories`):
|
||||
|
||||
```
|
||||
https://gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
|
||||
@@ -24,43 +24,43 @@ https://gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
|
||||
|
||||
| 占位符 | 描述 |
|
||||
| ------------ | -------------- |
|
||||
| `owner` | 软件包所有者 |
|
||||
| `owner` | 軟體包所有者 |
|
||||
| `branch` | 要使用的分支名 |
|
||||
| `repository` | 要使用的仓库名 |
|
||||
| `repository` | 要使用的存放庫名 |
|
||||
|
||||
如果注册表是私有的,请在 URL 中提供凭据。您可以使用密码或[个人访问令牌](development/api-usage.md#通过-api-认证):
|
||||
如果註冊表是私有的,請在 URL 中提供凭据。您可以使用密碼或[个人访问令牌](development/api-usage.md#通過-api-認證):
|
||||
|
||||
```
|
||||
https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
|
||||
```
|
||||
|
||||
Alpine 注册表文件使用 RSA 密钥进行签名,apk 必须知道该密钥。下载公钥并将其存储在 `/etc/apk/keys/` 目录中:
|
||||
Alpine 儲存庫文件使用 RSA 密钥進行签名,apk 必須知道該密钥。下载公钥並将其存儲在 `/etc/apk/keys/` 目錄中:
|
||||
|
||||
```shell
|
||||
curl -JO https://gitea.example.com/api/packages/{owner}/alpine/key
|
||||
```
|
||||
|
||||
之后,更新本地软件包索引:
|
||||
之后,更新本地軟體包索引:
|
||||
|
||||
```shell
|
||||
apk update
|
||||
```
|
||||
|
||||
## 发布软件包
|
||||
## 發佈軟體包
|
||||
|
||||
要发布一个 Alpine 包(`*.apk`),请执行带有包内容的 HTTP `PUT` 操作,将其放在请求体中。
|
||||
要發佈一个 Alpine 包(`*.apk`),請執行带有包内容的 HTTP `PUT` 操作,将其放在請求體中。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}
|
||||
```
|
||||
|
||||
| 参数 | 描述 |
|
||||
| 參數 | 描述 |
|
||||
| ------------ | --------------------------------------------------------------------------------------------------- |
|
||||
| `owner` | 包的所有者。 |
|
||||
| `branch` | 分支可以与操作系统的发行版本匹配,例如:v3.17。 |
|
||||
| `repository` | 仓库可以用于[分组包](https://wiki.alpinelinux.org/wiki/Repositories) 或者只是 `main` 或类似的名称。 |
|
||||
| `repository` | 存放庫可以用于[分组包](https://wiki.alpinelinux.org/wiki/Repositories) 或者只是 `main` 或类似的名稱。 |
|
||||
|
||||
使用 HTTP 基本身份验证的示例请求:
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
@@ -68,50 +68,50 @@ curl --user your_username:your_password_or_token \
|
||||
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main
|
||||
```
|
||||
|
||||
如果您使用的是双重身份验证或 OAuth,请使用[个人访问令牌](development/api-usage.md#authentication)代替密码。
|
||||
您不能将具有相同名称的文件两次发布到一个包中。您必须首先删除现有的包文件。
|
||||
如果您使用的是双重身份驗證或 OAuth,請使用[個人訪問令牌](development/api-usage.md#authentication)代替密碼。
|
||||
您不能将具有相同名稱的文件两次發佈到一个包中。您必須首先删除現有的包文件。
|
||||
|
||||
服务器将以以下的 HTTP 状态码响应:
|
||||
服务器将以以下的 HTTP 狀態碼回應:
|
||||
|
||||
| HTTP 状态码 | 含义 |
|
||||
| HTTP 狀態碼 | 含义 |
|
||||
| ----------------- | ------------------------------------------ |
|
||||
| `201 Created` | 软件包已发布。 |
|
||||
| `400 Bad Request` | 软件包的名称、版本、分支、仓库或架构无效。 |
|
||||
| `409 Conflict` | 具有相同参数组合的包文件已存在于软件包中。 |
|
||||
| `201 Created` | 軟體包已發佈。 |
|
||||
| `400 Bad Request` | 軟體包的名稱、版本、分支、存放庫或架构無效。 |
|
||||
| `409 Conflict` | 具有相同參數组合的包文件已存在于軟體包中。 |
|
||||
|
||||
## 删除软件包
|
||||
## 删除軟體包
|
||||
|
||||
要删除 Alpine 包,执行 HTTP 的 DELETE 操作。如果没有文件,这将同时删除包版本。
|
||||
要删除 Alpine 包,執行 HTTP 的 DELETE 操作。如果没有文件,这将同时删除包版本。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}/{architecture}/{filename}
|
||||
```
|
||||
|
||||
| 参数 | 描述 |
|
||||
| 參數 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 软件包的所有者 |
|
||||
| `owner` | 軟體包的所有者 |
|
||||
| `branch` | 要使用的分支名 |
|
||||
| `repository` | 要使用的仓库名 |
|
||||
| `architecture` | 软件包的架构 |
|
||||
| `repository` | 要使用的存放庫名 |
|
||||
| `architecture` | 軟體包的架构 |
|
||||
| `filename` | 要删除的文件名 |
|
||||
|
||||
使用 HTTP 基本身份验证的示例请求:
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main/test-package-1.0.0.apk
|
||||
```
|
||||
|
||||
服务器将以以下的 HTTP 状态码响应:
|
||||
服务器将以以下的 HTTP 狀態碼回應:
|
||||
|
||||
| HTTP 状态码 | 含义 |
|
||||
| ---------------- | ------------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 未找到软件包或文件 |
|
||||
| `404 Not Found` | 未找到軟體包或文件 |
|
||||
|
||||
## 安装软件包
|
||||
## 安裝軟體包
|
||||
|
||||
要从 Alpine 注册表安装软件包,请执行以下命令:
|
||||
要从 Alpine 儲存庫安裝軟體包,請執行以下命令:
|
||||
|
||||
```shell
|
||||
# use latest version
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
---
|
||||
date: "2023-05-15T00:00:00+00:00"
|
||||
slug: "container"
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Arch 儲存庫
|
||||
|
||||
在您的使用者或組織中發佈 [Arch](https://archlinux.org/packages/) 軟體包。 Arch 儲存庫的功能像是一個完整的[鏡像Arch 儲存庫](https://wiki.archlinux.org/title/mirrors\),需要調整系統的`/etc/pacman.conf`文件。
|
||||
|
||||
## 需求
|
||||
|
||||
系統需要安裝有HTTP客戶端像是`curl`來下載文件,且必須安裝有`pacman`軟體包管理工具。
|
||||
|
||||
## 配置 Arch 儲存庫
|
||||
|
||||
Arch 儲存庫的軟體都有`gpg`簽名驗證,所以需要匯入驗證需要的公鑰,下面是下載公鑰的範例。
|
||||
```sh
|
||||
wget https://gitea.example.com/api/packages/{owner}/arch/repository.key
|
||||
```
|
||||
|
||||
匯入公鑰之前,請先確認是否為該 Arch 儲存庫的公鑰,下面是檢視公鑰的範例。確認完成請記第二行的16為的`key id`
|
||||
```sh
|
||||
gpg --show-keys repository.key
|
||||
```
|
||||
|
||||
接下來要匯入到pacman的鑰匙圈中,下面是匯入的範例。
|
||||
```sh
|
||||
pacman-key --add repository.key
|
||||
pacman-key --lsign-key {key id}
|
||||
```
|
||||
|
||||
匯入驗證的公鑰,接下來要修改pacman的配置檔,位置是`/etc/pacman.conf`,內容如下。
|
||||
```conf
|
||||
[{owner}.gitea.example.com]
|
||||
SigLevel = Required
|
||||
Server = https://gitea.example.com/api/packages/{owner}/arch/{repository}/{architecture}
|
||||
```
|
||||
|
||||
| 占位符 | 描述 |
|
||||
| ------------ | -------------- |
|
||||
| `owner` | 軟體包所有者 |
|
||||
| `repository` | 要使用的存放庫名 |
|
||||
| `architecture` | 軟體包的架构 |
|
||||
|
||||
如果註冊表是私有的,請在 URL 中提供凭据。您可以使用密碼或[个人访问令牌](development/api-usage.md#通過-api-認證):
|
||||
```
|
||||
Server = https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/arch/{repository}/{architecture}
|
||||
```
|
||||
|
||||
## 發佈軟體包
|
||||
|
||||
要發佈一个 Arch 軟體包,請執行带有包内容的 HTTP `PUT` 操作,将其放在請求體中。
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/arch/{repository}
|
||||
```
|
||||
|
||||
| 占位符 | 描述 |
|
||||
| ------------ | -------------- |
|
||||
| `owner` | 軟體包所有者 |
|
||||
| `repository` | 要使用的存放庫名 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/file.pkg.tar.zst \
|
||||
https://gitea.example.com/api/packages/testuser/arch/core
|
||||
```
|
||||
|
||||
如果您使用的是双重身份驗證或 OAuth,請使用[個人訪問令牌](development/api-usage.md#authentication)代替密碼。
|
||||
您不能将具有相同名稱的文件两次發佈到一个包中。您必須首先删除現有的包文件。
|
||||
|
||||
服务器将以以下的 HTTP 狀態碼回應:
|
||||
| HTTP 狀態碼 | 含义 |
|
||||
| ----------------- | ------------------------------------------ |
|
||||
| `201 Created` | 軟體包已發佈。 |
|
||||
| `400 Bad Request` | 軟體包的名稱、版本、分支、存放庫或架构無效。 |
|
||||
| `409 Conflict` | 具有相同參數组合的包文件已存在于軟體包中。 |
|
||||
|
||||
## 安裝軟體包
|
||||
|
||||
要从 AArch 儲存庫安裝軟體包,請執行以下命令:
|
||||
|
||||
```sh
|
||||
pacman -Sy {package_name}
|
||||
```
|
||||
|
||||
| Parameter | 含义 |
|
||||
| -------------- | ----------- |
|
||||
| `package_name` | 軟體包 |
|
||||
|
||||
## 删除軟體包
|
||||
|
||||
要删除 Arch 軟體包,執行 HTTP 的 DELETE 操作。如果没有文件,这将同时删除包版本。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/arch/{repository}/{package_name}/{package_version}/{architecture}
|
||||
```
|
||||
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 軟體包的所有者 |
|
||||
| `repository` | 要使用的存放庫名 |
|
||||
| `architecture` | 軟體包的架构 |
|
||||
| `package_name` | 要删除的軟體名 |
|
||||
| `package_version` | 軟體版本 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/arch/core/test-package/1.0.0/x86-64
|
||||
```
|
||||
|
||||
服务器将以以下的 HTTP 狀態碼回應:
|
||||
|
||||
| HTTP 状态码 | 含义 |
|
||||
| ---------------- | ------------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 未找到軟體包或文件 |
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user