Gitea

出自 Arch Linux 中文维基

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

附註: 需要翻譯。(在 Talk:Gitea# 中討論)

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

安裝[編輯 | 編輯原始碼]

安裝 giteagitea-gitAUR 軟件包。還有一個 gitea fork forgejo 軟件包。

Gitea 需要使用數據庫後端,支持以下數據庫:

配置[編輯 | 編輯原始碼]

用户配置文件位於 /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

參見[編輯 | 編輯原始碼]