Gitea - Arch Linux 中文维基

跳至內容

# Gitea

出自 Arch Linux 中文维基

相關文章

- Gogs
- Git

本文或本節需要翻譯。要貢獻翻譯，請訪問簡體中文翻譯團隊。

附註： 需要翻譯。（在 Talk:Gitea# 中討論）
翻譯狀態：

- 本文（或部分內容）譯自 Gitea，最近一次同步於 2024-04-12，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

Gitea 是 Gogs 的社區管理分支，Gogs 是用 Go 編寫並在 MIT 許可下發布的輕量級代碼託管解決方案。

## 安裝

安裝 gitea包 或 gitea-gitAUR 軟體包。還有一個 gitea fork forgejo包 軟體包。

Gitea 需要使用資料庫後端，支持以下資料庫：

- MariaDB/MySQL
- PostgreSQL
- SQLite
- MSSQL

## 配置

用戶配置文件位於 `/etc/gitea/app.ini`。

有關更多配置示例，參見 Gitea 文檔。

### PostgreSQL

安裝並配置 PostgreSQL.

在 TCP 或 UNIX 套接字之間進行選擇，然後跳轉到相應的部分。

注意：當 Gitea 和 PostgreSQL 在同一台機器上時，您應該使用 Unix 套接字，因為它更快、更安全。

#### 用 TCP socket

以 `postgres` 用戶身份連接伺服器時創建新用戶（系統會提示輸入新用戶的密碼）：

    [postgres]$ createuser -P gitea

創建用戶 `gitea` 擁有的 Gitea 資料庫：

    [postgres]$ createdb -O gitea gitea

PostgreSQL#Configure PostgreSQL to be accessible from remote hosts

驗證它是否有效：

    $ psql --host=ip_address --dbname=gitea --username=gitea --password

通過首次運行安裝程序或更新 `app.ini` 配置 Gitea：

    /etc/gitea/app.ini

    DB_TYPE             = postgres
    HOST                = hostadress:port
    NAME                = gitea
    USER                = gitea
    ; Use PASSWD = `your password` for quoting if you use special characters in the password.
    PASSWD              = password

#### 用 Unix socket

以 `postgres` 用戶身份連接伺服器時創建新用戶（系統會提示輸入新用戶的密碼）：

    [postgres]$ createuser gitea

創建用戶 `gitea` 擁有的 Gitea 資料庫：

    [postgres]$ createdb -O gitea gitea

通過將以下行添加到 `/var/lib/postgres/data/pg_hba.conf` 來設置 Unix 套接字：

    /var/lib/postgres/data/pg_hba.conf

    local    gitea           gitea           peer

重新啟動 `postgresql.service`.

驗證它是否有效：

    [gitea]$ psql --dbname=gitea --username=gitea

通過首次運行安裝程序或更新 `app.ini` 配置 Gitea：

    /etc/gitea/app.ini

    DB_TYPE             = postgres
    HOST                = /run/postgresql/
    NAME                = gitea
    USER                = gitea
    PASSWD              =

### MariaDB/MySQL

注意：使用`/var/run/mysqld/mysqld.sock` 作為監聽參數，即可啟用 MySQL 套接字支持。

以下是設置MariaDB的示例，設置所需的密碼：

    $ mysql -u root -p

    mysql> CREATE DATABASE `gitea` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;
    mysql> CREATE USER `gitea`@'localhost' IDENTIFIED BY 'password';
    mysql> GRANT ALL PRIVILEGES ON `gitea`.* TO `gitea`@`localhost`;
    mysql> FLUSH PRIVILEGES;
    mysql> \q

嘗試使用新用戶連接到新資料庫：

    $ mysql -u gitea -p -D gitea

通過首次運行安裝程序或更新 `app.ini` 配置MariaDB：

    /etc/gitea/app.ini

    DB_TYPE  = mysql
    HOST     = 127.0.0.1:3306 ; or /var/run/mysqld/mysqld.sock
    NAME     = gitea
    USER     = gitea
    PASSWD   = password

## 用法

啟動/啟用 `gitea.service`, 網絡接口應在 `http://localhost:3000` 上監聽。

首次運行 Gitea 時，應該會重定向到 `http://localhost:3000/install`。

注意：

- 您可能希望配置反向代理以進行遠程訪問，例如 nginx.
- 如果希望 Gitea 監聽所有接口，請在 `/etc/gitea/app.ini` 中設置 `HTTP_ADDR = 0.0.0.0`。

## 技巧和竅門

### 本地 shell 客戶端 (tea)

通過 tea包，您可以使用 gitea 的官方客戶端。更多信息請訪問 https://gitea.com/gitea/tea 。

### 啟用 SSH 支持

確保 SSH 已正確配置並運行。

#### 設置域名

您可能希望設置`SSH_DOMAIN`, 例如

    /etc/gitea/app.ini

    SSH_DOMAIN                 = git.domain.tld

注意： 如果將 `PROTOCOL` 設置為 `unix` ，則需要取消設置 `LOCAL_ROOT_URL` 或將其設置為 `http://unix/`。參見 comment。

#### 配置 SSH

默認情況下，Gitea 將以用戶 `gitea` 的身份運行；該帳戶也將用於 ssh 版本庫訪問。要使 ssh 訪問正常，必須啟用 PAM。或者，也可以解鎖服務帳戶。

    /etc/ssh/sshd_config

    ...
    UsePAM yes
    ...

如果在 SSH 配置中使用 `AllowUsers`，請在其中添加 `AllowUsers gitea`，例如：

    /etc/ssh/sshd_config

    ...
    AllowUsers archie gitea
    ...

如果使用 `sshd.service`，請重新啟動該服務（如果使用 `sshd.socket`，則無需重啟）。

### 禁用 HTTP 協議

默認情況下，已啟用通過 HTTP 協議與版本庫交互的功能。 如果使用SSH，可以將 `DISABLE_HTTP_GIT` 設置為 `true`，禁用 HTTP 支持。

### 綁定受限埠

如果使用內置 SSH 伺服器並希望 Gitea 將其綁定到 22 埠，或希望直接將 Gitea 網絡伺服器綁定到 80/443 埠（即在不使用代理的設置中），則需要添加 drop-in systemd unit override：

    /etc/systemd/system/gitea.service.d/override.conf

    [Service]
    AmbientCapabilities=CAP_NET_BIND_SERVICE
    CapabilityBoundingSet=CAP_NET_BIND_SERVICE
    PrivateUsers=false

### 啟用 Dark 主題

在ui部分，可以將 `DEFAULT_THEME` 設置為 `arc-green`，使網頁界面使用深色背景。

### 自定義 Gitea 的外觀

更多詳情，請參閱 Gitea 文檔[1]。

gitea 的外觀可使用Go模板進行高度定製。 首先，創建 `/var/lib/gitea/custom` 目錄。 可通過編輯 `/var/lib/gitea/custom/templates` 中的文件覆蓋模板。 默認模板可在 `templates` 目錄下的 Gitea 原始碼中找到。例如，要自定義主頁，可將原始碼中的 `templates/home.tmpl` 複製到 `/var/lib/gitea/custom/templates/home.tmpl` 並根據需要編輯模板。

此外，還可以通過創建以下文件更改徽標和圖標： `/var/lib/gitea/custom/public/img/logo.svg`和 `/var/lib/gitea/custom/public/img/favicon.svg`

更改這些文件後，需要重新啟動 Gitea。

### 配置反向代理

有關更多信息和示例，請參閱 Gitea 文檔網站 [2] 上的反向代理部分。

#### nginx

The following is an example of using nginx as reverse proxy for Gitea over unix socket (you need to provide the SSL certificate):

    /etc/nginx/servers-available/gitea.conf

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name git.domain.tld;

        ssl_certificate /path/to/fullchain.pem;
        ssl_certificate_key /path/to/privkey.pem;

        location / {
            client_max_body_size 512M;
            proxy_pass http://unix:/run/gitea/gitea.socket;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

Update the `[server]` and `[session]` section of `app.ini`:

    /etc/gitea/app.ini

    [server]
    PROTOCOL                   = unix
    DOMAIN                     = git.domain.tld
    ROOT_URL                   = https://git.domain.tld
    HTTP_ADDR                  = /run/gitea/gitea.socket
    LOCAL_ROOT_URL             =

    [session]
    COOKIE_SECURE              = true

注意：You do not need to activate any SSL certificate options in `/etc/gitea/app.ini`.

#### Apache HTTP Server

The following is an example of using the Apache HTTP Server as reverse proxy for Gitea over unix socket. To forward `domain.tld` to the gitea server, use

    /etc/httpd/conf/httpd.conf

    ProxyPreserveHost On
    ProxyRequests off
    AllowEncodedSlashes NoDecode
    Proxypass / unix:/run/gitea/gitea.socket|http://domain.tld nocanon
    ProxypassReverse / unix:/run/gitea/gitea.socket|http://domain.tld nocanon

where `domain.tld` should be replaced by your domain name (this entry is only passed as a header to the proxy, and does not seem to matter for this setup).

    /etc/gitea/app.ini

    [server]
    PROTOCOL                   = unix
    DOMAIN                     = domain.tld
    ROOT_URL                   = https://domain.tld
    HTTP_ADDR                  = /run/gitea/gitea.socket
    LOCAL_ROOT_URL             =

To forward a subpath such as `domain.tld/git` to the gitea server, use

    /etc/httpd/conf/httpd.conf

    <Proxy *>
      Order allow,deny
      Allow from all
    </Proxy>
    AllowEncodedSlashes NoDecode
    Proxypass /git unix:/run/gitea/gitea.socket|http://domain.tld nocanon
    ProxypassReverse /git unix:/run/gitea/gitea.socket|http://domain.tld nocanon

    /etc/gitea/app.ini

    [server]
    PROTOCOL                   = unix
    DOMAIN                     = domain.tld
    ROOT_URL                   = https://git.domain.tld
    HTTP_ADDR                  = /run/gitea/gitea.socket
    LOCAL_ROOT_URL             =

### Setup for custom data directory

As of now, you cannot use a custom path like `/srv/gitea` as your server home, since the shipped `gitea.service` unit file marks everything read-only.

To enable these custom paths, create a drop-in snippet with your server home directory as a new `ReadWriteDirectories` directive:

    /etc/systemd/system/gitea.service.d/data-directory.conf

    [Service]
    ReadWriteDirectories=/srv/gitea

Then do a daemon-reload and restart `gitea.service` for the changes to take effect.

## 問題解決

### 升級到 1.5.0 後啟動資料庫時出現錯誤

升級到 1.5.0 後可能會出現問題。服務無法啟動，日誌中出現以下錯誤：

    /var/log/gitea/gitea.log

    2018/08/21 16:11:12 [...itea/routers/init.go:60 GlobalInit()] [E] Failed to initialize ORM engine: migrate: do migrate: Sync2: Error 1071: Specified key was too long; max key length is 767 bytes

要解決這個問題，請在 MySQL/MariaDB 伺服器上以 `root` 用戶身份運行以下命令

    $ mysql -u root -p

    MariaDB> set global innodb_large_prefix = `ON`;

gitea should stop complaining about key size and startup properly.

### Service failing with permission denied

如果手動創建 `gitea` 用戶，並將其主頁文件夾設置為 `/home/gitea`，gitea 服務將無法啟動，並輸出類似於 ：

    Sep 04 04:44:32 systemd[1]: gitea.service: Failed with result 'exit-code'.
    Sep 04 04:44:32 systemd[1]: gitea.service: Main process exited, code=exited, status=200/CHDIR
    Sep 04 04:44:32 (gitea)[30727]: gitea.service: Failed at step CHDIR spawning /usr/bin/gitea: Permission denied
    Sep 04 04:44:32 (gitea)[30727]: gitea.service: Changing to the requested working directory failed: Permission denied

該服務需要將用戶的主文件夾作為 gitea 的主文件夾，默認文件夾為 `/var/lib/gitea` ：

    $ usermod -d /var/lib/gitea gitea

## 參見

- Gitea Documentation

分類：​

- Git 網絡界面

隱藏分類：​

- 使用「模板:Translateme」標記的頁面或章節

Gitea
新增話題