从源代码安装
您应该 安装 go 并正确设置您的 go 环境。特别是,建议设置 $GOPATH
环境变量并将 go bin 目录或目录 ${GOPATH//://bin:}/bin
添加到 $PATH
。请参阅 Go wiki 中有关 GOPATH 的条目。
接下来,安装带有 npm 的 Node.js,这是构建 JavaScript 和 CSS 文件所需的。支持的最低 Node.js 版本为 18,建议使用最新的 LTS 版本。
需要 Go 版本 1.22 或更高版本。但是,建议获取与我们的持续集成相同的版本,请参阅 在 Gitea 上进行开发 中给出的建议。
下载
首先,我们必须检索源代码。由于 Go 模块的出现,最简单的方法是直接使用 Git,因为我们不再需要在 GOPATH 中构建 Gitea。
git clone https://github.com/go-gitea/gitea
(此文档的先前版本建议使用 go get
。现在不再需要。)
确定要构建和安装的 Gitea 版本。目前,您可以从多个选项中进行选择。main
分支代表当前的开发版本。要使用 main 构建,请跳到 构建部分。
要使用标记的版本进行工作,可以使用以下命令
git branch -a
git checkout release/v1.22
要验证拉取请求,首先启用新的分支(xyz
是 PR ID;例如,#2663 的 PR ID 为 2663
)
git fetch origin pull/xyz/head:pr-xyz
要从特定标记的版本(如 v1.22.3)构建 Gitea 源代码,请列出可用的标记并签出特定标记。
使用以下命令列出可用的标记。
git tag -l
git checkout v1.22.3 # or git checkout pr-xyz
构建
要从源代码构建,系统上必须存在以下程序
提供了各种 make 任务 来尽可能简化构建过程。
根据要求,可以包含以下构建标签。
bindata
:构建单个单片二进制文件,其中包含所有资产。生产构建需要此标签。sqlite sqlite_unlock_notify
:启用对 SQLite3 数据库的支持。仅建议用于小型安装。pam
:启用对 PAM(Linux 可插拔身份验证模块)的支持。可用于验证本地用户或将身份验证扩展到 PAM 可用的方法。gogit
: (EXPERIMENTAL) 使用 go-git 变体的 Git 命令。
将所有资产(JS/CSS/模板等)捆绑到二进制文件中。生产部署需要使用 bindata
构建标签。当您开发/测试 Gitea 或能够正确分离资产时,可以排除 bindata
。
要包含所有资产,请使用 bindata
标签
TAGS="bindata" make build
在我们的持续集成系统中,默认的发布构建的构建标签为:TAGS="bindata sqlite sqlite_unlock_notify"
。因此,从源代码构建的最简单推荐方法是
TAGS="bindata sqlite sqlite_unlock_notify" make build
build
目标分为两个子目标
make backend
需要 Go 1.22 或更高版本。make frontend
需要 Node.js 18 或更高版本。
如果存在预构建的前端文件,则可以只构建后端
TAGS="bindata" make backend
测试
按照上述步骤操作后,工作目录中将提供一个 gitea
二进制文件。可以从此目录中测试它或将其移动到具有测试数据的目录中。当 Gitea 从命令行手动启动时,可以通过按 Ctrl + C
来终止它。
./gitea web
更改默认路径
Gitea 将从 CustomPath
搜索一些内容。默认情况下,这是运行 Gitea 时当前工作目录中的 custom/
目录。它还将在 $(CustomPath)/conf/app.ini
中查找其配置文件 CustomConf
,并将使用当前工作目录作为多个可配置值的相对基路径 AppWorkPath
。最后,静态文件将从 StaticRootPath
提供,默认情况下为 AppWorkPath
。
这些值在开发时虽然有用,但在下游用户的偏好可能会发生冲突。
一种选择是使用脚本文件来遮蔽 gitea
二进制文件并在运行 Gitea 之前创建适当的环境。但是,在构建时,可以使用 LDFLAGS
环境变量为 make
更改这些默认值。适当的设置如下所示
- 要设置
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
。
运行 gitea help
将允许您查看为您的 gitea
计算的设置是什么。
交叉构建
go
编译器工具链支持交叉编译到工具链支持的不同架构目标。有关支持的目标列表,请参阅 GOOS
和 GOARCH
环境变量。如果您要为功能较弱的系统(例如 Raspberry Pi)构建 Gitea,则交叉编译很有用。
要使用构建标签(TAGS
)交叉构建 Gitea,您还需要一个 C 交叉编译器,该编译器针对由 GOOS
和 GOARCH
变量选择的相同架构。例如,要交叉构建用于 Linux ARM64(GOOS=linux
和 GOARCH=arm64
),您需要 aarch64-unknown-linux-gnu-gcc
交叉编译器。这是必需的,因为 Gitea 构建标签使用 cgo
的外部函数接口 (FFI)。
交叉构建 Gitea 用于 Linux ARM64,没有任何标签
GOOS=linux GOARCH=arm64 make build
交叉构建 Gitea 用于 Linux ARM64,使用推荐的构建标签
CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 TAGS="bindata sqlite sqlite_unlock_notify" make build
根据您的目标架构,适当替换CC
、GOOS
和GOARCH
。
有时您需要构建一个静态编译的镜像。要做到这一点,您需要添加
LDFLAGS="-linkmode external -extldflags '-static' $LDFLAGS" TAGS="netgo osusergo $TAGS" make build
这可以与上面的CC
、GOOS
和GOARCH
结合使用。
添加 bash/zsh 自动补全 (从 1.19 起)
可以在 contrib/autocompletion/bash_autocomplete
中找到一个启用 bash 补全的脚本。此脚本应根据需要进行修改,并在您的 .bashrc
中使用 source
命令加载,或者复制到 /usr/share/bash-completion/completions/gitea
目录。
类似地,可以在 contrib/autocompletion/zsh_autocomplete
中找到一个用于 zsh 补全的脚本。此脚本可以复制到 /usr/share/zsh/_gitea
目录,或者在您的 .zshrc
文件中加载。
实际情况可能会有所不同,这些脚本可能需要进一步改进。
使用 Linux 和 Zig 编译或交叉编译
请按照 Zig 入门指南 安装 zig。
- 编译 (Linux ➝ Linux)
CC="zig cc -target x86_64-linux-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
CGO_LDFLAGS="-linkmode=external -v"
GOOS=linux \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build
- 交叉编译 (Linux ➝ Windows)
CC="zig cc -target x86_64-windows-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
GOOS=windows \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build
使用 Windows 和 Zig 编译或交叉编译
使用 GIT BASH
编译。
- 编译 (Windows ➝ Windows)
CC="zig cc -target x86_64-windows-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
GOOS=windows \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build
- 交叉编译 (Windows ➝ Linux)
CC="zig cc -target x86_64-linux-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
CGO_LDFLAGS="-linkmode=external -v"
GOOS=linux \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build
源映射
默认情况下,gitea 为前端文件生成缩减的源映射以节省空间。这可以通过 ENABLE_SOURCEMAP
环境变量来控制
ENABLE_SOURCEMAP=true
生成所有源映射,这是开发版本中的默认设置ENABLE_SOURCEMAP=reduced
生成有限的源映射,这是生产版本中的默认设置ENABLE_SOURCEMAP=false
不生成任何源映射