Gitea
Gitea 是一个社区管理的 fork,源自 Gogs,是用 Go 编写并以 MIT 许可证发布的轻量级代码托管解决方案。
安装
Install gitea 或 gitea-gitAUR 软件包。还有一个用于 Gitea 分支的软件包 forgejo。
Gitea 需要使用数据库后端,以下是支持的数据库
- MariaDB/MySQL
- PostgreSQL
- SQLite
- MSSQL
配置
用户配置文件位于 /etc/gitea/app.ini
。
请参阅 Gitea 文档 以获取更多配置示例。
PostgreSQL
Install 并 configure PostgreSQL。
在 TCP 或 UNIX 套接字之间选择,并跳转到相应的章节。
使用 TCP 套接字
以 postgres
用户身份连接到服务器时创建新用户(系统将提示您输入新用户的密码)
[postgres]$ createuser -P gitea
创建 Gitea 数据库,所有者为 gitea
用户
[postgres]$ createdb -O gitea gitea
PostgreSQL#配置 PostgreSQL 以允许从远程主机访问
验证其是否工作
$ 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 套接字
以 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
,Web 界面应监听 https://127.0.0.1:3000
。
首次运行 Gitea 时,它应重定向到 https://127.0.0.1:3000/install
。
- 您可能需要配置反向代理以进行远程访问,例如 nginx。
- 如果您希望 Gitea 监听所有接口,请在
/etc/gitea/app.ini
中设置HTTP_ADDR = 0.0.0.0
。
技巧与窍门
本地 Shell 客户端 (tea)
使用 tea 您可以使用 Gitea 的官方 CLI 客户端。更多信息请访问 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 Web 服务器直接绑定到端口 80/443(即在没有代理的设置中),您将需要添加一个 drop-in systemd 单元文件覆盖
/etc/systemd/system/gitea.service.d/override.conf
[Service] AmbientCapabilities=CAP_NET_BIND_SERVICE CapabilityBoundingSet=CAP_NET_BIND_SERVICE PrivateUsers=false
启用深色主题
在 ui 部分,您可以将 DEFAULT_THEME
设置为 arc-green
,以使 Web 界面使用深色背景。
自定义 Gitea 的外观
请参阅 Gitea 文档[1] 以获取更多详细信息。
Gitea 的外观可以使用 Go 模板高度自定义。首先,创建 /var/lib/gitea/custom
目录。可以通过编辑 /var/lib/gitea/custom/templates
中的文件来覆盖模板。默认模板可以在 Gitea 源代码 的 templates
目录下找到。例如,要自定义主页,请从源代码复制 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
以下是使用 nginx 作为 Gitea 通过 Unix 套接字的反向代理的示例(您需要 提供 SSL 证书)
/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; } }
更新 app.ini
的 [server]
和 [session]
部分
/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
中激活任何 SSL 证书选项。
Apache HTTP 服务器
以下是使用 Apache HTTP 服务器 作为 Gitea 通过 Unix 套接字的反向代理的示例。要将 domain.tld
转发到 Gitea 服务器,请使用
/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
其中 domain.tld
应替换为您的域名(此条目仅作为标头传递给代理,并且对于此设置似乎无关紧要)。
/etc/gitea/app.ini
[server] PROTOCOL = unix DOMAIN = domain.tld ROOT_URL = https://domain.tld HTTP_ADDR = /run/gitea/gitea.socket LOCAL_ROOT_URL =
要转发子路径,例如 domain.tld/git
到 Gitea 服务器,请使用
/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 =
设置自定义数据目录
到目前为止,您不能使用自定义路径,例如 /srv/gitea
作为您的服务器主目录,因为附带的 gitea.service
单元文件将所有内容标记为只读。
要启用这些自定义路径,请创建一个 drop-in snippet,并将您的服务器主目录作为新的 ReadWriteDirectories
指令
/etc/systemd/system/gitea.service.d/data-directory.conf
[Service] ReadWriteDirectories=/srv/gitea
然后执行 daemon-reload 和 重启 gitea.service
以使更改生效。
故障排除
升级到 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
要解决此问题,请以 root
用户身份在您的 MySQL/MariaDB 服务器上运行以下命令
$ mysql -u root -p
MariaDB> set global innodb_large_prefix = `ON`;
Gitea 应该停止抱怨密钥大小并正常启动。
服务启动失败,提示权限被拒绝
如果您手动创建 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