菜单

从源代码构建

相关源文件

本文档介绍如何从源代码构建 FRP (Fast Reverse Proxy)。从源码构建允许您编译最新的功能、为特定平台定制构建或为 FRP 开发做出贡献。有关基于 Docker 的部署选项,请参阅 Docker 部署

先决条件

在从源码构建 FRP 之前,请确保已安装以下先决条件:

  • Go 1.19 或更高版本
  • Git
  • Make(适用于类 Unix 系统)或类似的构建工具

标准构建流程

标准构建流程使用主 Makefile 为当前平台编译 FRP。

构建步骤

  1. 克隆仓库

  2. 构建客户端和服务器组件

这将在 ./bin/ 目录中编译 frpc(客户端)和 frps(服务器)二进制文件。

单个组件构建

仅构建客户端或服务器组件

来源:Makefile31-35

构建流程

来源:Makefile31-35

交叉编译

FRP 支持使用 Makefile.cross-compiles 文件为多种操作系统和架构进行交叉编译。

支持的平台

交叉编译过程支持以下平台:

操作系统架构
Linuxamd64, arm (v5/v7), arm64, mips, mipsle, mips64, mips64le, riscv64, loong64
Windowsamd64, arm64
Darwin (macOS)amd64, arm64
FreeBSDamd64
Androidarm64

来源:Makefile.cross-compiles5

交叉编译过程

一次性为所有支持的平台构建 FRP

此命令将为每个支持的平台编译 frpc 和 frps,并将二进制文件放置在 ./release/ 目录中。

交叉编译架构

来源:Makefile.cross-compiles11-37

构建系统组件

FRP 构建系统由三个主要组件组成,它们协同工作来编译和打包软件。

来源:Makefile1-37 Makefile.cross-compiles1-38 package.sh1-75

创建发布包

package.sh 脚本可自动为所有支持的平台构建和打包 FRP。

打包创建过程

  1. 运行打包脚本

  2. 此脚本将:

    • 为当前平台构建 FRP
    • 为所有支持的平台进行交叉编译
    • 将每个构建打包成 ZIP 文件(适用于 Windows)或 tar.gz 文件(适用于其他平台)
    • 将这些包放置在 ./release/packages/ 目录中。

包内容

每个包包含:

  • 目标平台的 frpc 和 frps 二进制文件
  • 示例配置文件(frpc.toml 和 frps.toml)
  • LICENSE 文件

来源:package.sh14-68

构建配置选项

构建 FRP 时,您可以使用各种选项来自定义构建。

构建标签

构建标签决定了构建哪个组件。

  • -tags frps:构建服务器组件
  • -tags frpc:构建客户端组件

编译器标志

标准构建使用以下标志:

  • -trimpath:移除文件路径信息以提高可重现性。
  • -ldflags "-s -w":去除调试信息以减小二进制文件的大小。

来源:Makefile3 Makefile31-35 Makefile.cross-compiles3 Makefile.cross-compiles30-31

测试构建

为了确保您的构建正常工作,您可以运行包含的测试。

来源:Makefile37-66

疑难解答常见的构建问题

环境问题

如果遇到 Go 环境相关问题:

  • 确保 GOPATH 设置正确。
  • 确保 Go 版本是 1.19+。
  • 检查 CGO_ENABLED 是否设置正确(构建使用 CGO_ENABLED=0)。

交叉编译问题

对于交叉编译问题:

  • 验证目标架构是否受支持。
  • 对于 ARM 构建,请确保指定了正确的 GOARM 版本。
  • 对于 MIPS 构建,请检查 GOMIPS softfloat 设置。

来源:Makefile.cross-compiles16-27

常见错误:缺少 Go 模块

如果您看到关于缺少 Go 模块的错误:

  • 运行 go mod download 来获取依赖项。
  • 确保您的互联网连接可以访问模块仓库。

验证构建

要验证您的构建是否成功,您可以检查版本。

构建的二进制文件应显示当前 FRP 版本号。

来源:package.sh11-12