跳过主内容
版本:1.22.3

从源代码安装

您应该 安装 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

构建

要从源代码构建,系统上必须存在以下程序

  • go 1.22 或更高版本,请参阅 此处
  • node 18 或更高版本,带有 npm,请参阅 此处
  • make,请参阅 此处

提供了各种 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 编译器工具链支持交叉编译到工具链支持的不同架构目标。有关支持的目标列表,请参阅 GOOSGOARCH 环境变量。如果您要为功能较弱的系统(例如 Raspberry Pi)构建 Gitea,则交叉编译很有用。

要使用构建标签(TAGS)交叉构建 Gitea,您还需要一个 C 交叉编译器,该编译器针对由 GOOSGOARCH 变量选择的相同架构。例如,要交叉构建用于 Linux ARM64(GOOS=linuxGOARCH=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

根据您的目标架构,适当替换CCGOOSGOARCH

有时您需要构建一个静态编译的镜像。要做到这一点,您需要添加

LDFLAGS="-linkmode external -extldflags '-static' $LDFLAGS" TAGS="netgo osusergo $TAGS" make build

这可以与上面的CCGOOSGOARCH结合使用。

添加 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 不生成任何源映射