Gitea
Gitea 是 Gogs 的社區管理分支,Gogs 是用 Go 編寫並在 MIT 許可下發佈的輕量級代碼託管解決方案。
安裝[編輯 | 編輯原始碼]
安裝 gitea包 或 gitea-gitAUR 軟件包。還有一個 gitea fork forgejo包 軟件包。
Gitea 需要使用數據庫後端,支持以下數據庫:
- MariaDB/MySQL
- PostgreSQL
- SQLite
- MSSQL
配置[編輯 | 編輯原始碼]
用戶配置文件位於 /etc/gitea/app.ini
。
有關更多配置示例,參見 Gitea 文檔。
PostgreSQL[編輯 | 編輯原始碼]
在 TCP 或 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
配置 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
/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