如果你维护过企业内部的应用分发,一定遇到过这样的场景:安卓 APK 用网盘分享,iOS IPA 靠邮件发送,Windows 安装包扔到 FTP,下载统计全靠猜。混乱、低效,毫无体验可言。
这个困扰了我很久的问题,终于有了一个完整的解决方案。
AppLink 是一套自建应用分发平台,支持 Android / iOS / Windows / macOS / Linux 全平台版本管理、扫码下载、下载统计和角色权限管理。我已经把它开源了。
为什么需要这个平台
在传统分发模式下,每个平台都是孤岛:
Android APK → 网盘链接 → 用户不知道有没有新版本 iOS IPA → 邮件附件 → 版本管理全靠文件名 Windows EXE → FTP 下载 → 下载量全靠猜 macOS DMG → 群里扔文件 → 别人下载了你也不知道
当应用超过 3 个、团队超过 5 个人时,这种模式彻底崩溃。
AppLink 把所有这些平台整合到一个统一的发布入口,只需要上传一次,各平台用户就能通过同一个地址找到最新版本。
核心功能
多平台版本管理
上传应用后,可以在后台为每个应用添加多个平台的版本 —— Android APK、iOS IPA、Windows EXE、macOS DMG、Linux AppImage,甚至 Web App。每个版本都可以独立控制启用/禁用、填写更新日志。
扫码下载
每个应用详情页自动生成二维码,手机扫一扫直接下载对应平台的安装包。对于内网分发的场景,这个体验极大地降低了使用门槛。
下载统计与分析
下载统计不再是盲区。平台自动记录每一次下载的来源平台,生成平台分布饼图和热门应用排行榜。你可以清楚地看到哪个平台下载量最大、哪个应用最受欢迎。
双角色权限管理
平台内置了两套角色:
- 管理员 (admin) —— 全部权限,包括用户管理、系统设置
- 发布者 (publisher) —— 只能管理自己创建的应用
第一个注册的用户自动成为管理员,后续注册需要管理员审批。开放注册可以在后台开关。
自定义品牌
你可以自定义站点名称和图标(支持 Emoji、文字、上传图片),让平台拥有自己的品牌标识,而不是千篇一律的默认界面。
技术栈
| 层 | 技术 |
|---|---|
| 框架 | Next.js 16 (App Router) |
| 认证 | NextAuth v5 (Credentials + JWT) |
| 数据库 | SQLite (Prisma ORM) —— 开箱即用,无需额外数据库服务 |
| 样式 | Tailwind CSS + shadcn/ui |
| 容器化 | Docker + Docker Compose —— 一键部署 |
零外部依赖数据库这一点对运维特别友好:SQLite + Docker 部署,不需要 MySQL/PostgreSQL 的搭建和维护,一个 docker-compose up -d 就完成了。
快速上手
本地开发
git clone https://github.com/sevpinna/AppLink.git cd applink npm install cp .env.example .env npx prisma db push npm run dev
访问 http://localhost:3000,第一个注册的账号自动升级为管理员。
生产部署 —— 构建 Docker 镜像并导出
项目提供了 scripts/build.sh 来自动化镜像构建和导出流程:
# 构建镜像并导出为 .tar.gz 文件(版本号自动从 package.json 读取) bash scripts/build.sh # 或指定版本号 bash scripts/build.sh 1.0.0



这个脚本会依次完成三件事:
- 生成版本信息 —— 调用
scripts/version.cjs将版本号和构建时间写入public/version.json,在页面底部展示 - 安装依赖 —— 确保构建环境完整
- 构建 Docker 镜像并导出 —— 执行
docker build构建生产镜像,随后用docker save压缩为applink-版本号.tar.gz
导出后的镜像包可以直接上传到目标服务器:
# 上传到服务器 scp applink-0.1.16.tar.gz root@your-server:/opt/docker/applink/ # 服务器上加载镜像并启动 cd /opt/docker/applink gunzip -c applink-0.1.16.tar.gz | docker load docker compose up -d
默认的 docker-compose.yml 已经配置好了数据库和上传文件的持久化,但有两个配置项需要你根据部署环境修改:
| 变量 | 说明 | 生产环境要求 |
|---|---|---|
NEXTAUTH_SECRET |
JWT 签名密钥 | 替换为 openssl rand -base64 32 生成的强随机字符串 |
NEXTAUTH_URL |
用户访问平台的地址 | 改为你实际的域名和协议,如 https://applink.yourdomain.com |
⚠️
NEXTAUTH_URL的协议必须和用户实际访问的协议一致。比如用户通过https://访问,NEXTAUTH_URL就应该是https://...,否则 Secure cookie 在 HTTP 下无法发送,用户会一直跳转回登录页。
services:
applink:
image: applink:latest
ports:
- "3000:3000"
environment:
- DATABASE_URL=file:/app/data/dev.db
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-your-secret}
- NEXTAUTH_URL=http://127.0.0.1:3000 # 生产环境改为你的域名,如 https://yourdomain.com
volumes:
- ./docker/data:/app/data # 数据库持久化
- ./docker/uploads:/app/uploads # 上传文件持久化
restart: unless-stopped
适合谁用
- 个人开发者 —— 分发自己的 Side Project,提供给测试用户下载
- 创业团队 —— 内部测试包分发,不用再在群里发 APK 文件
- 企业 IT 部门 —— 内部应用商店,统一管理公司内部的移动端和桌面端应用
- 培训机构 —— 分发教学用应用安装包
开源
项目采用 MIT License 发布,你可以自由使用、修改和商用。
GitHub 地址:https://github.com/sevpinna/AppLink
如果你有什么功能需求或发现了 bug,欢迎提 Issue 或 PR。
写在最后
做这个项目的初衷很简单:需要一个好用的应用分发工具,但市面上的方案要么太贵,要么太重,要么已经停止维护了。与其将就,不如造一个自己用着舒服的轮子。
现在把它开源出来,希望能帮到有同样困扰的人。如果你觉得有用,点个 Star ⭐ 就是对我最大的鼓励。