{"id":18888197,"url":"https://github.com/easytier/luci-app-easytier","last_synced_at":"2026-04-16T09:07:47.839Z","repository":{"id":252639245,"uuid":"813658049","full_name":"EasyTier/luci-app-easytier","owner":"EasyTier","description":"OpenWrt里的EasyTier安装包（IPK和APK）","archived":false,"fork":false,"pushed_at":"2026-01-31T09:33:41.000Z","size":386,"stargazers_count":472,"open_issues_count":38,"forks_count":1823,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-31T22:22:49.112Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EasyTier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-11T13:50:28.000Z","updated_at":"2026-01-31T09:33:45.000Z","dependencies_parsed_at":"2025-01-15T17:33:54.886Z","dependency_job_id":"2c710321-1797-414b-8143-7d42dfcc96bf","html_url":"https://github.com/EasyTier/luci-app-easytier","commit_stats":null,"previous_names":["easytier/luci-app-easytier"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/EasyTier/luci-app-easytier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyTier%2Fluci-app-easytier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyTier%2Fluci-app-easytier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyTier%2Fluci-app-easytier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyTier%2Fluci-app-easytier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EasyTier","download_url":"https://codeload.github.com/EasyTier/luci-app-easytier/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyTier%2Fluci-app-easytier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31878903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T07:36:03.521Z","status":"ssl_error","status_checked_at":"2026-04-16T07:35:53.576Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T07:42:44.064Z","updated_at":"2026-04-16T09:07:47.833Z","avatar_url":"https://github.com/EasyTier.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"![luci-app-easytier](https://socialify.git.ci/EasyTier/luci-app-easytier/image?description=1\u0026font=JetBrains+Mono\u0026forks=1\u0026issues=1\u0026logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F169161851%3Fs%3D200%26v%3D4\u0026name=1\u0026pulls=1\u0026stargazers=1\u0026theme=Auto)\n\n[English](README_EN.md) | 简体中文\n\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n[![OpenWrt](https://img.shields.io/badge/OpenWrt-18.06--26.x-orange.svg)](https://openwrt.org)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/EasyTier/luci-app-easytier)\n\nOpenWrt LuCI界面，用于管理 [EasyTier](https://github.com/EasyTier/EasyTier) - 一个简单、安全、去中心化的内网穿透VPN组网方案。\n\n## ✨ 特性\n\n- 🎨 现代化UI设计，支持亮色/暗色主题自动切换\n- 📱 完美适配移动端和桌面端\n- 🌍 完整的中文/英文国际化支持\n- 📊 实时流量监控和网卡状态显示\n- 🔄 实时显示性能占用和版本信息\n- 📦 支持压缩包和二进制文件上传\n- 🔧 灵活的配置管理和备份恢复\n\n## 📋 兼容性\n\n### OpenWrt版本\n- ✅ OpenWrt 18.06 / 18.08\n- ✅ OpenWrt 19.x ~ 26.x\n- ✅ 支持 IPK (22.03.x) 和 APK (SNAPSHOT) 包格式\n\n### 架构支持\n- ARM: aarch64, armv7, arm\n- MIPS: mips, mipsel\n- x86: x86_64\n\n## 🚀 快速开始\n\n### 方式一：使用预编译包\n\n1. 从 [Releases](https://github.com/EasyTier/luci-app-easytier/releases) 下载对应架构的安装包\n2. 上传到OpenWrt的 `/tmp` 目录\n3. 安装：\n\n```bash\n# IPK包 (OpenWrt 22.03.x)\nopkg install /tmp/luci-app-easytier_*.ipk\n\n# APK包 (OpenWrt SNAPSHOT)\napk add --allow-untrusted /tmp/luci-app-easytier_*.apk\n```\n\n4. 刷新浏览器或重新登录LuCI界面\n5. 在 **VPN → EasyTier** 中上传EasyTier二进制程序\n\n### 方式二：GitHub Actions自动编译\n\n1. Fork本项目\n2. 修改 `.github/workflows/build.yml` 中的架构列表（可选）\n3. 进入 Actions 页面，手动触发 `Build-OpenWrt-EasyTier` 工作流\n4. 填写版本号（如 `v1.0.0`）和发布说明\n5. 等待编译完成，在 Releases 中下载\n\n\u003cimg width=\"2727\" height=\"866\" alt=\"image\" src=\"https://github.com/user-attachments/assets/24a55d1c-7937-4cef-87f8-cd8778b5f009\" /\u003e\n\n### 方式三：本地编译\n\n```bash\n# 1. 下载OpenWrt SDK\nwget https://downloads.openwrt.org/releases/22.03.7/targets/rockchip/armv8/openwrt-sdk-22.03.7-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64.tar.xz\ntar -xJf openwrt-sdk-*.tar.xz\ncd openwrt-sdk-*/\n\n# 2. 克隆项目\ngit clone https://github.com/EasyTier/luci-app-easytier.git package/luci-app-easytier\n\n# 3. 更新feeds并配置\n./scripts/feeds update -a\n./scripts/feeds install -a\nmake defconfig\n\n# 4. 编译\nmake package/luci-app-easytier/compile V=s\n\n# 5. 查找生成的ipk\nfind bin/ -name \"luci-app-easytier*.ipk\"\n```\n\n## 📦 依赖\n\n- `kmod-tun` - TUN/TAP内核模块（必需）\n- `luci-compat` - LuCI兼容层\n\n安装前请确保已安装 `kmod-tun`：\n```bash\nopkg update\nopkg install kmod-tun\n```\n\n## 🔧 使用说明\n\n### 首次配置\n\n1. 安装插件后，进入 **VPN → EasyTier**\n2. 在 **上传程序** 页面上传EasyTier二进制文件或直接安装包含核心的ipk/apk包（easytier.ipk easytier.apk）\n   - 支持单个文件：`easytier-core`, `easytier-cli`, `easytier-web-embed`\n   - 支持压缩包：`.zip`, `.tar.gz`, `.tar`\n3. 在 **EasyTier Core** 页面配置网络参数\n4. 启用并保存配置\n\n### 配置方式\n\n支持两种配置方式：\n\n1. **命令行参数**：通过LuCI界面配置各项参数\n2. **配置文件**：使用 `/etc/easytier/config.toml` 配置文件\n\n### 功能页面\n\n- **状态** - 查看运行状态、版本信息、连接信息和实时流量\n- **EasyTier Core** - 配置核心参数（网络名称、密钥、节点等）\n- **自建控制台** - 配置easytier-web控制台\n- **日志** - 查看运行日志，支持级别过滤\n- **上传程序** - 上传和管理EasyTier二进制文件\n\n## 🛠️ 开发指南\n\n### 技术栈\n\n- **后端**: Lua 5.1 (LuCI旧架构)\n- **前端**: HTML + CSS + ES5 JavaScript\n- **渲染**: 服务器端渲染 (SSR)\n- **国际化**: LuCI原生i18n (.po文件)\n\n### 开发要求\n\n#### 兼容性原则\n- ✅ 必须兼容 OpenWrt 18.06 ~ 26.x\n- ✅ 使用 LuCI Lua1 架构（同时兼容Lua2）\n- ❌ 禁止使用 LuCI JS框架 (view.js/form.js/rpc.js)\n- ❌ 禁止使用 ES6+ 语法 (let/const/箭头函数/fetch)\n\n#### 前端规范\n```javascript\n// ✅ 允许\nvar xhr = new XMLHttpRequest();\nfunction handleClick() { }\ndocument.getElementById('id');\n\n// ❌ 禁止\nconst data = await fetch('/api');\nlet result = () =\u003e {};\nimport module from 'module';\n```\n\n#### 后端规范\n```lua\n-- ✅ 使用 Lua1 API\nlocal http = require \"luci.http\"\nlocal uci = require \"luci.model.uci\".cursor()\nhttp.write_json({success = true})\n\n-- ❌ 禁止 Lua2 特有语法\n-- 不使用新版 LuCI JS API\n```\n\n#### 国际化\n```lua\n-- Lua中\nlocal translate = i18n.translate\ntranslate(\"Text to translate\")\n\n-- HTM模板中\n\u003c%:Text to translate%\u003e\n\n-- JavaScript中（由Lua注入）\nvar msg = '\u003c%=translate(\"Text\")%\u003e';\n```\n\n### 目录结构\n\n```\nluci-app-easytier/\n├── luasrc/\n│   ├── controller/\n│   │   └── easytier.lua          # 路由和API控制器\n│   ├── model/cbi/\n│   │   ├── easytier.lua          # 配置页面\n│   │   └── easytier_status.lua   # 状态页面\n│   └── view/easytier/\n│       ├── easytier_status.htm   # 状态页面模板\n│       ├── easytier_log.htm      # 日志页面\n│       ├── easytier_upload.htm   # 上传页面\n│       └── ...\n├── root/\n│   ├── etc/\n│   │   ├── config/easytier       # UCI配置文件\n│   │   ├── init.d/easytier       # 启动脚本\n│   │   └── easytier/             # 配置目录\n│   └── usr/share/easytier/\n│       └── download.sh           # 下载脚本\n├── po/\n│   ├── zh_Hans/easytier.po       # 简体中文翻译\n│   └── templates/easytier.pot    # 翻译模板\n└── Makefile                      # OpenWrt包定义\n```\n\n### API设计规范\n\n```lua\n-- API路径格式\nentry({\"admin\", \"vpn\", \"easytier\", \"api_name\"}, call(\"function_name\")).leaf = true\n\n-- 返回JSON格式\nfunction api_name()\n    luci.http.prepare_content(\"application/json\")\n    luci.http.write_json({\n        success = true,\n        data = {},\n        message = \"Success\"\n    })\nend\n```\n\n### 提交代码\n\n1. Fork项目并创建分支\n2. 确保代码符合开发规范\n3. 测试在 OpenWrt 18.06 和最新版本上的兼容性\n4. 提交Pull Request\n\n详细开发规范请参考 [开发指南](DEVELOPMENT.md)\n\n## 🐛 故障排除\n\n### 安装后界面不显示\n```bash\n# 清除LuCI缓存\nrm -rf /tmp/luci-*\n# 重新登录LuCI界面\n```\n\n### util.pcdata 警告\n```bash\nsed -i 's/util.pcdata/xml.pcdata/g' /usr/lib/lua/luci/model/cbi/easytier.lua\n```\n\n### 配置文件冲突\n升级时如果提示配置文件冲突，旧配置会保留，新配置保存为 `/etc/config/easytier-opkg`，可以忽略此报错。\n\n## 📄 许可证\n\n本项目采用 [Apache License 2.0](LICENSE) 许可证。\n\n## 🔗 相关链接\n\n- [EasyTier 官方仓库](https://github.com/EasyTier/EasyTier)\n- [EasyTier 官方文档](https://easytier.cn)\n- [OpenWrt 官网](https://openwrt.org)\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n---\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasytier%2Fluci-app-easytier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasytier%2Fluci-app-easytier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasytier%2Fluci-app-easytier/lists"}