Firezone 贡献指南:从 Docker 开发环境到 Pull Request 全流程实践
网络网络安全零信任后端【免费下载链接】firezoneBlazing-fast remote access项目地址https://gitcode.com/gh_mirrors/fi/firezone点击查看免费下载导读本文以 Firezone 官方贡献指南docs/CONTRIBUTING.md为骨架完整还原其从零搭建本地开发集群、初始化数据库、生成自签名证书、配置版本管理与 pre-commit、到提交 PR 的全流程并辅以仓库源码docker-compose.yml、elixir/mix.exs、.tool-versions 等进行底层印证。读完你将掌握 Firezone 的完整开发工作流如何用 Docker 一键拉起 portal/gateway/client/relay 四类组件、如何通过mix命令引导 Ecto 数据库、如何满足仓库要求的提交签名与静态检查门槛以及如何写出能被审阅者顺利合并的 PR。一、贡献总览与总体原则Firezone 是一个由 ElixirPortal / API与 RustGateway、Relay、客户端共同构成的多语言代码库欢迎任何形式的贡献。在动手之前官方指南要求贡献者遵守以下总体原则Overview 章节遵守行为准则见 docs/CODE_OF_CONDUCT.md。Rust 代码遵循编码规范见 rust/CODING_GUIDELINES.md。尽可能测试你的代码并包含单元测试。由你本人论证改动的合理性说明为什么这是一个好改动是贡献者的责任。安全问题走负责任披露任何安全漏洞不要通过公开 Issue 上报请遵循 docs/SECURITY.md 中描述的流程。AI 使用政策仓库对使用 AI/LLM 辅助编码持欢迎态度但对与维护者的沟通内容有严格要求不得使用 AI 生成评论评论必须由真人撰写经判断由 AI 撰写的外部评论、Issue 或 PR 可能会被直接关闭且不予通知。换言之AI 可以帮你写代码但沟通层仍需真人把关。二、Quick Start用 Docker 快速拉起本地集群Quick Start 的目标是让新手在几分钟内得到一个完整的本地 Firezone 运行环境从而直观感受 Portal、Gateway、Client、Relay 各组件如何协作。验证通过后再按组件深入开发。2.1 Docker 环境准备官方推荐使用 Docker Desktop即使是 Linux 开发者也推荐Firezone 核心开发者即使用它因为它自带正确版本的compose。如果使用 Linux 上的 Docker Engine则需额外安装compose 插件v2否则无法识别docker compose子命令。可通过以下命令确认版本 docker compose version Docker Compose version v2.27.02.2 引导数据库Bootstrapping the DB启动本地集群的完整步骤如下docker compose build docker compose run --rm elixir /bin/sh -c mix ecto.create mix ecto.migrate mix ecto.seed # 进入下一步前请从 seed 输出中复制 Firezone 账号 UUID # 输出示例 Created accounts: c89bcc8c-9392-4dae-a40d-888aef6d28e0: Firezone Account docker compose up -d portal vault gateway client relay-1 relay-2完成上述步骤后访问http://localhost:8080/account-uuid-here使用以下凭据登录Email: firezonelocalhost.local Password: Firezone1234源码印证docker compose run --rm elixir对应 docker-compose.yml 中名为elixir的服务容器——它专门用于在无需宿主机安装 Elixir/Erlang 的前提下运行mix任务其环境变量MIX_ENV: prod确保 seed 使用正确的密钥生成有效令牌POOL_MEMBER_FIREZONE_ID则控制mix ecto.seed中账号级 ICE-less 特性开关FEATURE_ICELESS_ENABLED默认关闭。而ecto.seed别名在 elixir/mix.exs 中被定义为ecto.create ecto.migrate run priv/repo/seeds.exs的组合。2.3 启动后的集群拓扑启动后你将得到均由根目录 docker-compose.yml 编排portalElixir/Phoenix 控制平面监听8080Web与8081API并通过portal-router把流量路由到模拟公网网段203.0.113.0/24gateway一个已连接 portal 的网关使用 TUN 设备/dev/net/tun转发流量并开启net.ipv4.ip_forward系统参数client一个已连接 portal 的无头 Linux 客户端relay-1 / relay-2两个 TURN 中继公网地址分别为203.0.113.101与203.0.113.102由relay-1-router/relay-2-router做 UDP 端口转发3478及49152-65535resource一台位于与网关共享的独立网络中的资源主机IP 为10.20.0.100。此外docker-compose.yml 中的network-config服务会在两个 relay 健康后为 relay-internal 桥接 veth 挂载xdp_passeBPF 程序用于解决 XDP_TX 回传与 checksum 校验问题——这是研究 relay 数据面时值得注意的细节。2.4 验证一切正常# 测试客户端能否 ping 通资源主机 docker compose exec -it client ping 10.20.0.100 # 也可以直接进入客户端容器交互 docker compose exec -it client /bin/sh如果ping成功说明 Portal→Gateway→Client→Relay→Resource 整条链路已打通本地环境就绪。三、生成自签名证书本地 TLS 调试本地开发强烈建议生成并信任一张自签名证书以避免在浏览器与 API 之间反复排查 TLS 问题。macOS 上可执行cd elixir # 为 localhost 生成自签名证书 # 注使用 openssl 而非 mix phx.gen.cert是因为 Phoenix 存在生成缺失 :NULL 参数 # 无效证书的 bug详见 phoenixframework/phoenix issue #6319 openssl req -x509 -newkey rsa:2048 -nodes -sha256 -days 365 \ -keyout priv/cert/selfsigned-key.pem \ -out priv/cert/selfsigned.pem \ -subj /OFirezone Development/CNlocalhost \ -addext subjectAltNameDNS:localhost,DNS:host.docker.internal,IP:127.0.0.1 \ -addext basicConstraintscritical,CA:FALSE \ -addext keyUsagecritical,digitalSignature,keyEncipherment \ -addext extendedKeyUsagecritical,serverAuth # 将证书加入系统信任库 sudo security add-trusted-cert -d -p ssl -k /Library/Keychains/System.keychain priv/cert/selfsigned.pem证书生成后会被加入系统信任库方便浏览器直接访问。Firefox 用户注意Firefox 默认使用自己的证书库而忽略 macOS 系统钥匙串可通过两种方式信任该证书打开about:config将security.enterprise_roots.enabled设为true直接导入证书Settings → Privacy Security → Certificates → View Certificates → Authorities → Importpriv/cert/selfsigned.pem。提示subjectAltName中同时包含host.docker.internal正是为了让容器内组件如通过host.docker.internal访问宿主机服务的 Gateway也能校验通过证书输出目录为elixir/priv/cert/在仓库中已被.gitignore排除不会误提交。四、开发者环境搭建4.1 Git 提交签名强制要求Firezone 要求仓库内所有提交都必须签名。如果你需要配置git的提交签名校验请参考 Git 官方关于 Commit Signature Verification 的文档完成 GPG/SSH 签名配置之后再执行提交。4.2 工具链版本管理.tool-versions mise/asdf大多数工具与 SDK 的版本由各目录下的.tool-versions文件管理Elixir 工具见 elixir/.tool-versionsRust 工具见 rust/.tool-versions根目录见 .tool-versions。任何兼容.tool-versions的版本管理器推荐 Mise 或 asdf都可以安装这些工具。例如 fresh asdf 环境需要先安装对应插件asdf plugin add nodejs asdf install nodejs以仓库当前版本为例elixir/.tool-versionsnodejs 22.20.0 pnpm 10.33.0 elixir 1.20.3-otp-29 erlang 29.0.5而根目录 .tool-versions 则固定了静态分析相关工具python 3.11.14、shfmt 3.9.0、shellcheck 0.9.0、prettier 3.6.2、bats 1.13.0、actionlint 1.7.9、uv 0.12.5。这些工具用于 pre-commit 阶段的静态检查以及任何本地非 Docker的开发与测试。4.3 Pre-commit仓库使用pre-commit在提交前拦截静态分析问题安装 Mise 自动安装 pre-commit 及其它所需工具安装仓库级检查钩子pre-commit install --config .github/pre-commit-config.yaml源码印证根目录 mise.toml 中定义了mise run lint等价于pre-commit run --all-files --config .github/pre-commit-config.yaml、lint-staged仅检查暂存文件以及format对所有 prettier 管理文件执行格式化。mise 的minimum_release_age 7d设置还会拒绝安装发布不足 7 天的工具版本以缓解恶意发布供应链攻击窗口。4.4 按组件选择开发入口ElixirWeb 应用 / API完整指南见 elixir/README.md。从elixir/目录执行mise install或asdf install安装 elixir/.tool-versions 中声明的工具随后docker compose up -d postgres启动数据库在elixir/下依次运行mix deps.get、mix setup、mix ecto.seed、iex -S mix启动 Portal。注意 elixir/mix.exs 的 aliases 中把ecto.seed绑定为create migrate seed把test绑定为ecto.create --quiet → ecto.migrate → openapi.generate → test即跑测试前会自动先建库、迁移并重新生成 OpenAPI 规范。RustGateway / Relay / 客户端库完整指南见 rust/README.md。仓库针对最新的 stable Rust并通过 rust/rust-toolchain.toml 固定版本若用rustup会自动处理否则需自行安装最新 stable。Ubuntu 下还需要安装 GTK、WebKitGTK、OpenSSL 等系统依赖以及 relay 所需的 eBPF 工具链nightly-2025-05-30rust-srcbpf-linker。Shell 脚本见 scripts/README.md。本地开发需安装shfmt与shellcheck提交前执行shfmt -i 4 **/*.sh与shellcheck --severitywarning **/*.sh脚本规范建议 dev/test 脚本使用#!/usr/bin/env bash加set -euox pipefailDocker 等最小环境则用#!/bin/sh加set -eu。Elixir 死代码检查可用mise run //:elixir:dead-code --check。Rust 开发与 Docker 结合根目录的docker-compose.yml每次测试改动都要求重建镜像。仓库提供了覆盖方案——使用 rust/docker-compose-dev.yml 叠加docker compose -f docker-compose.yml -f rust/docker-compose-dev.yml command这样会直接使用本地编译产物位于rust/target/x86_64-unknown-musl/debug。也可以设置环境变量COMPOSE_FILE避免每次手动指定export COMPOSE_FILEdocker-compose.yml:rust/docker-compose-dev.yml五、报告 Bug任何 Bug 报告都受欢迎。报告前请先在 issues 追踪器中搜索包括已关闭的 issue。确认不存在后新建 issue 并包含以下要素问题描述预期行为复现步骤预估影响High / Medium / LowFirezone 版本平台架构amd64、aarch64 等Linux 发行版Linux 内核版本六、提交 Pull Request6.1 运行测试测试是你作为贡献者的责任代码有 Bug 可能被直接拒绝。同时建议查看代码覆盖率报告确认新代码已被测试覆盖。单元测试在项目根目录elixir/执行mix test如需行级覆盖率运行mix coveralls.html生成 HTML 报告输出到cover/。仓库在 elixir/mix.exs 中通过test_coverage: [tool: ExCoveralls]集成了 ExCoveralls并配置了test_ignore_filters: [~r^test/fixtures/]。端到端测试更全面的 e2e 测试在 CI 流水线中执行出于安全原因e2e 不会随你的 PR 自动触发必须由审阅者手动触发。6.2 使用详细的提交信息Conventional Commits详细的提交信息对发布工程流程帮助极大。请遵循Conventional Commits规范撰写提交信息示例如下read -r -d COMMIT_MSG EOM Updating the foobar widget to support additional widths Additional widths are needed to various device screen sizes. Closes #72 EOM git commit -m $COMMIT_MSG6.3 确保静态分析通过静态检查会在git commit时自动执行若未触发可手动运行mise run lint七、日志与敏感信息仓库对日志级别与敏感信息有明确约定IP 地址和域名只允许在 DEBUG 级别记录不允许出现在 INFO 或其他生产构建默认开启的级别中。这意味着贡献者在新增日志时应避免在默认日志级别下泄露端点信息相关日志过滤逻辑可参考 elixir/lib/portal/logger_filters.ex。八、寻求帮助卡住时不要犹豫可以在 Firezone 社区论坛提问。此外docs/AGENT.md 与 rust/AGENT.md 为 AI Agent 和开发者提供了仓库结构与编码约定的快速索引可作为深入开发的补充资料。赞分享网络网络安全零信任后端【免费下载链接】firezoneBlazing-fast remote access项目地址https://gitcode.com/gh_mirrors/fi/firezone点击查看免费下载相关推荐Diem 项目贡献指南从开发环境搭建到 Pull Request 全流程实战Diem 项目贡献指南从开发环境搭建到 Pull Request 全流程实战 本篇指南以 Diem 开源仓库官方贡献文档为主体完整覆盖贡献者许可协议CLA区块链金融科技Hydra 项目贡献指南从开发环境搭建到 Pull Request 全流程实战Hydra 项目贡献指南从开发环境搭建到 Pull Request 全流程实战 导读 Hydra 是一个用于优雅配置复杂应用的 Python 框架A fr开发工具后端CLITaro 贡献者指南从环境搭建到 Pull Request 全流程实战Taro 贡献者指南从环境搭建到 Pull Request 全流程实战 TaroNervJS/taro是支持 React/Vue/Nerv 等框架、可同时前端小程序跨平台移动开发上一篇WezTerm Lua 配置中的 JSON 序列化wezterm.serde.json_encode 用法与底层实现解析下一篇Azure Cosmos DB NoSQL Modeling Session创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

I3C通信原理与RK3576硬件实现深度解析

I3C通信原理与RK3576硬件实现深度解析

1. 为什么说“I3C 比 I2C 快 10 倍”不是营销话术,而是有硬指标支撑的工程事实刚看到这个标题时,我第一反应是:又一个被过度简化的传播口径。毕竟在嵌入式现场干了十多年,见过太多把“理论峰值”当“实测吞吐”的宣传——比如某家…

2026/9/25 17:16:33 阅读更多 →
Windows下Neo4j社区版zip安装、配置与避坑指南

Windows下Neo4j社区版zip安装、配置与避坑指南

简介:面向图数据库学习者与开发运维人员,这是一份 Neo4j 5.23.0 社区版 Windows 安装压缩包,可离线部署并直接用于本地开发与教学。Neo4j 以节点和关系构成的图模型存储数据,可直观表达复杂关联,并通过 Cypher 声明式查…

2026/9/25 17:16:33 阅读更多 →
浙大要出第二个梁文锋?“超级科学家版DeepSeek”来了

浙大要出第二个梁文锋?“超级科学家版DeepSeek”来了

9月22日至24日云栖大会期间,来自浙大的“求是引擎”成功进行了国内首次72小时不间断的AI科研直播,公开挑战人类300年来未解的数学难题——吻接数问题,并巨大推进和更新了该课题,使之成为本届大会的最大亮点。OpenAI已经在“用 AI …

2026/9/25 17:16:33 阅读更多 →

最新新闻

5G NR通感一体化ISAC系统级模拟器设计:从OFDM波形到距离多普勒处理

5G NR通感一体化ISAC系统级模拟器设计:从OFDM波形到距离多普勒处理

简介:基于5G NR的通信感知一体化(ISAC)系统级模拟器源码工程,面向通信工程、电子信息、人工智能等专业的本科毕业设计或课程设计场景,以Matlab仿真实例完整演示5G新空口框架下的综合传感与通信联合仿真流程与数据分析方…

2026/9/25 18:06:05 阅读更多 →
【项目编号:project62303】Django 电影推荐系统:从电影发现、评分收藏到个性化推荐的完整实现

【项目编号:project62303】Django 电影推荐系统:从电影发现、评分收藏到个性化推荐的完整实现

DJANGO MOVIE RECOMMENDATIONDjango 电影推荐系统:从电影发现、评分收藏到个性化推荐的完整实现以影迷的观影决策路径为主线,连接电影检索、详情数据、用户行为与后台运营技术关键词Django Web业务主线发现 → 互动 → 推荐核心看点多条件筛选 个性化…

2026/9/25 18:05:05 阅读更多 →
基于Python的搜索引擎设计与实现:从爬虫到倒排索引的完整实战

基于Python的搜索引擎设计与实现:从爬虫到倒排索引的完整实战

做毕设的时候,我选了“基于Python的搜索引擎设计与实现”这个题目。说实话,刚开始心里挺没底的,因为搜索引擎这东西听起来就像是个巨头才能搞的项目,百度谷歌那是多大的工程。但真正把一个能用的搜索引擎从零写出来之后&#xff0…

2026/9/25 18:05:05 阅读更多 →
AI大模型原理和应用面试题(目录)

AI大模型原理和应用面试题(目录)

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:AI大模型原理和应用面试题 序号标题1如何设计 AI Agent 的工具权限控制&#xff1f…

2026/9/25 18:05:05 阅读更多 →
《动手学深度学习》第二版:可运行的深度学习操作系统

《动手学深度学习》第二版:可运行的深度学习操作系统

1. 这不是一本普通教材:它是一套可运行的深度学习操作系统如果你在搜索引擎里输入“李沐 深度学习”,排在最前面的几乎必然是《动手学深度学习》。但很多人点进去后发现——这根本不是传统意义上“翻着看”的课本,而是一套自带引擎、能直接启…

2026/9/25 18:05:05 阅读更多 →
Torch-FL 实战:让多元 AI 芯片即插即用 PyTorch

Torch-FL 实战:让多元 AI 芯片即插即用 PyTorch

1. 多元芯片跑 PyTorch 的真实困境搞过深度学习部署的人大概都有这种体会:手里攒了一堆不同品牌的加速卡,想在同一套 PyTorch 训练脚本里把它们都用起来,结果发现每换一种芯片就得改一遍代码、重装一遍环境、重新调一遍算子。这事儿说起来简单…

2026/9/25 18:05:04 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →