自建短链服务:本地部署 Shlink 管理链接,用 cpolar 给团队临时分享统计数据
自建短链服务本地部署 Shlink 管理链接用 cpolar 给团队临时分享统计数据活动页上线前运营经常会问三个很具体的问题微信群、公众号、邮件里的链接分别有多少人点了点击高峰在哪个时间段老板远程看数据时能不能不让他登录一堆内部系统这类场景不一定要把数据交给第三方短链平台。Shlink 是一个开源自托管短链服务核心能力很直接生成短链、自定义短码、打标签、记录访问次数并在 Web 客户端里查看来源、设备、浏览器、地区等基础统计。本文用 Docker Compose 在本地跑一套 Shlink只创建测试短链和脱敏链接再用 cpolar 开一个短时 HTTPS 入口让运营、市场或老板远程验收统计面板。先把边界说清楚本文只演示测试短链不放真实客户名单、订单参数、内部后台地址不暴露数据库端口、管理密码、服务器目录和 Docker socket不把 Shlink API Key 发到大群cpolar 只短时开放 Web 客户端和 API验收结束立即关闭。长期使用请换正式域名、正式 HTTPS、访问控制、备份、反垃圾策略和权限流程。1. 准备本地目录本文选择 Shlink 作为主角不做 YOURLS 横评。Shlink 服务端负责短链跳转和统计Shlink Web Client 负责可视化管理。数据库用 MariaDB只在 Docker 内部网络里访问不映射到宿主机端口。新建目录mkdir -p ~/demo/shlink-short-url cd ~/demo/shlink-short-url生成一组演示用密码和 API Keyopenssl rand -base64 24 openssl rand -hex 32把生成结果分别填到下面的MARIADB_PASSWORD和INITIAL_API_KEY。API Key 相当于管理凭证只给参与验收的人短时使用。2. 编写 Docker Compose创建docker-compose.ymlservices: shlink-db: image: mariadb:11 container_name: shlink-demo-db restart: unless-stopped environment: MARIADB_DATABASE: shlink MARIADB_USER: shlink MARIADB_PASSWORD: ChangeMe-Shlink-DB-2026! MARIADB_ROOT_PASSWORD: ChangeMe-Root-2026! volumes: - shlink-db-data:/var/lib/mysql healthcheck: test: [CMD, healthcheck.sh, --connect, --innodb_initialized] interval: 10s timeout: 5s retries: 5 shlink: image: shlinkio/shlink:stable container_name: shlink-demo-api restart: unless-stopped depends_on: shlink-db: condition: service_healthy ports: - 127.0.0.1:8080:8080 environment: DEFAULT_DOMAIN: 127.0.0.1:8080 IS_HTTPS_ENABLED: false DB_DRIVER: maria DB_HOST: shlink-db DB_NAME: shlink DB_USER: shlink DB_PASSWORD: ChangeMe-Shlink-DB-2026! INITIAL_API_KEY: replace-with-your-temporary-api-key TIMEZONE: Asia/Shanghai shlink-web: image: shlinkio/shlink-web-client:stable container_name: shlink-demo-web restart: unless-stopped ports: - 127.0.0.1:8081:80 volumes: shlink-db-data:这里有三个安全细节MariaDB 没有ports数据库只在 Compose 内部网络可见。Shlink API 和 Web Client 都绑定到127.0.0.1不会直接暴露到局域网。INITIAL_API_KEY只用于演示和验收发给谁、什么时候撤回都要有记录。启动服务docker compose up -d查看容器状态docker compose ps确认 Shlink API 正常curl http://127.0.0.1:8080/rest/v3/health看到status为pass说明服务端和数据库连接正常。打开 Web 客户端http://127.0.0.1:8081首次进入时添加一个服务器连接Server name本地 Shlink 演示URLhttp://127.0.0.1:8080API key填写INITIAL_API_KEY连接成功后就可以在页面里创建短链、查看列表和统计。3. 创建一条测试短链为了避免把真实业务数据带进演示目标地址使用一个公开测试页。比如https://www.example.com/?utm_sourcewechatutm_mediumtestutm_campaignshlink_demo在 Web 客户端里创建短链时填写Long URL上面的测试地址Custom slugdemo-csdnTagsdemo、wechat、20260725Valid since / valid until按演示周期填写测试结束后让链接失效保存后短链地址为http://127.0.0.1:8080/demo-csdn本地验证跳转curl -I http://127.0.0.1:8080/demo-csdn返回里能看到301或302跳转以及Location: https://www.example.com/...说明短链规则已经生效。如果要模拟不同渠道可以再建两条测试短链短码标签长链接里的渠道参数demo-wechatdemo,wechatutm_sourcewechatdemo-emaildemo,emailutm_sourceemaildemo-bossdemo,boss-reviewutm_sourceboss_review这样运营验收时看到的是“不同渠道短链的访问统计”不是一堆混在一起的点击数。4. 制造几次可验证点击统计面板需要有数据。我们可以用浏览器手动点几次也可以用curl模拟不同来源和设备。下面的命令只访问本地测试短链curl -A Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) \ -e https://mp.weixin.qq.com/ \ -L http://127.0.0.1:8080/demo-csdn -o /dev/null curl -A Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126 \ -e https://mail.example.local/campaign \ -L http://127.0.0.1:8080/demo-csdn -o /dev/null curl -A Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) Safari/605.1.15 \ -L http://127.0.0.1:8080/demo-csdn -o /dev/null回到 Shlink Web Client进入短链详情页重点看四类数据Visits总点击量是否增加。Referrers来源里是否出现微信文章、邮件活动页或空来源。Devices / Browsers移动端、桌面端、Chrome、Safari 是否被识别。Tags按wechat、email、boss-review过滤时数据是否分开。如果本地没有配置 GeoLite2 数据库地区统计会受限。库存文章和团队验收阶段重点先确认点击量、来源、设备、浏览器和标签维度正式长期环境再补齐 GeoLite2、日志保留周期和隐私说明。5. 设计一个验收口径短链统计最容易吵起来的地方不是工具能不能记录点击而是每个人对“有效点击”的理解不同。为了让远程验收更顺畅建议在开放 cpolar 之前先写清楚验收口径。可以用下面这张表作为 Demo 口径验收项通过标准备注短链跳转访问短链后能跳到指定测试页面不使用真实客户落地页标签分类wechat、email、boss-review能分开筛选每条测试短链至少一个渠道标签点击增长每次访问后统计数能增加刷新面板后核对来源识别带Referer的请求能看到来源域名空来源也要解释清楚设备识别手机、桌面端访问能进入不同设备统计用浏览器或curl -A模拟权限边界验收人只拿到临时 API Key不共享数据库密码和服务器权限这个口径的价值很大运营看渠道市场看点击老板看结论开发看数据是否可复现。大家验收的是短链统计能力不是临时搭一个完整投放系统。6. 用 API 快速核对统计Web 面板适合给非技术同事看API 适合自己核对。把 API Key 放到环境变量里避免每条命令都明文出现export SHLINK_API_KEYreplace-with-your-temporary-api-key查询短链列表curl -s \ -H X-Api-Key: $SHLINK_API_KEY \ http://127.0.0.1:8080/rest/v3/short-urls | jq查询某条短链访问统计curl -s \ -H X-Api-Key: $SHLINK_API_KEY \ http://127.0.0.1:8080/rest/v3/short-urls/demo-csdn/visits | jq这里不是把 Shlink 当 API 调试台而是用接口确认面板数据来源面板里的访问次数、来源、设备统计最终都来自短链服务自己的访问记录。验收时如果有人质疑“面板是不是缓存”可以用这两条命令现场交叉验证。7. 用 cpolar 临时开放远程验收入口远程验收有一个容易踩的坑Shlink Web Client 是前端页面它需要从浏览器访问 Shlink API。因此只开放 Web 端口还不够浏览器仍然连不到你电脑上的127.0.0.1:8080。做法是开两个 cpolar HTTPS 隧道一个给 API一个给 Web Client。在本机启动 API 隧道cpolar http 8080记录生成的 HTTPS 地址例如https://shlink-api-demo.cpolar.top再打开一个终端启动 Web Client 隧道cpolar http 8081记录 Web 地址例如https://shlink-web-demo.cpolar.top把 Web 地址发给参与验收的人。对方打开 Web Client 后添加服务器连接Server nameShlink 临时验收URLhttps://shlink-api-demo.cpolar.topAPI key单独私发临时 API Key不发到公开群然后让对方只做三件事打开短链列表确认demo-csdn、demo-wechat、demo-email等测试短链存在。进入详情页查看总访问量、来源、设备、浏览器、标签过滤结果。按验收口径截图或记录结论不修改生产链接、不新增真实投放链接。如果还要让远程同事测试短链跳转就把 API 隧道里的短码地址发给他https://shlink-api-demo.cpolar.top/demo-csdn访问后刷新统计面板点击数会增加。这里的短链仍然只指向测试地址不承载真实推广活动。8. 远程验收时怎么演示建议按固定顺序演示避免对方一上来就改链接或误删测试数据。第一步先打开 Web Client 的短链列表让对方看到三条测试短链都在demo-wechat、demo-email、demo-boss。此时重点讲清楚“短码”和“长链接”的关系短码负责对外传播长链接里可以带 UTM 参数标签用于后台筛选。第二步打开demo-csdn的详情页展示总访问量、最近访问时间、来源和设备。这里不要追求数据很漂亮演示数据本来就是可控样本重点是让对方确认“从点击到统计面板更新”的链路完整。第三步让远程同事访问一次https://shlink-api-demo.cpolar.top/demo-csdn访问完成后刷新短链详情页。看到访问次数增加就说明外网入口、短链跳转、统计写入和 Web 面板读取都跑通了。第四步切换到标签筛选。例如只看wechat标签下的短链再切到email标签。这个动作能帮助运营理解以后每个渠道单独生成短链复盘时就不用从一大堆混合点击里手工拆数据。第五步明确告诉参与验收的人这次只看测试链接和脱敏数据不在临时环境里创建正式投放链接如果需要正式投放要走长期环境的域名、权限、备份和审计流程。9. 验收结束后的收尾动作远程验收结束不要让临时入口继续挂着。按顺序处理# 1. 在运行 cpolar 的两个终端里按 CtrlC关闭临时 HTTPS 隧道 # 2. 清理本机环境变量 unset SHLINK_API_KEY # 3. 停止演示服务 cd ~/demo/shlink-short-url docker compose down如果这套环境后续还要继续用只停止容器即可如果确认演示数据也要删除再执行docker compose down -v-v会删除 MariaDB 数据卷短链和统计记录一并清空执行前要确认不需要保留。10. 长期使用时要补的生产项本文是本地演示和短时验收方案不能直接当生产上线清单。长期运行 Shlink需要补齐这些项正式域名短链域名要稳定不能依赖临时隧道地址。HTTPS使用反向代理或托管证书保证后台和短链访问都是 HTTPS。访问控制API Key 分人分用途管理离职、外包结束、活动结束后及时撤销。备份MariaDB 定期备份并验证恢复流程。反垃圾限制公开创建短链避免被滥用成垃圾链接跳板。数据合规统计数据只保留必要字段避免把用户手机号、订单号、内部 token 拼进长链接。最小暴露面数据库、宿主机目录、Docker socket、SSH、管理面板都不要直接公网开放。小结这套流程解决的是“短链统计怎么让团队快速验收”的问题Shlink 在本地负责短链、标签和访问统计Docker Compose 保证服务可复现cpolar 提供短时 HTTPS 入口让运营、市场或老板在外网查看统计面板。真正关键的不是把工具跑起来而是把边界守住只用测试短链和脱敏数据远程只开放 Web/APIAPI Key 私发给验收人验收结束关闭 cpolar。这样既能让团队看到点击量、来源、设备等基础数据又不会把数据库、管理密码和内部系统一起暴露出去。

相关新闻

UE5蓝图触发器实战:从盒体触发器到可复用游戏逻辑组件

UE5蓝图触发器实战:从盒体触发器到可复用游戏逻辑组件

1. 项目概述:从“出发区域”切入UE5蓝图逻辑构建最近在跟着张亮002老师的UE5教程学习,正好做到了第1-6讲,主题是“出发区域”。这讲内容看似基础,就是一个玩家走进特定区域触发事件的逻辑,但恰恰是这种最基础的交互&am…

2026/10/20 14:35:18 阅读更多 →
SVM在风力发电故障检测中的工程实践

SVM在风力发电故障检测中的工程实践

1. 项目背景与核心价值风力发电作为清洁能源的重要组成部分,其设备可靠性直接关系到电网稳定和发电效率。风力涡轮机长期在恶劣环境中运行,齿轮箱、轴承和发电机等关键部件容易出现磨损、裂纹或电气故障。传统定期维护方式存在滞后性,而基于支…

2026/10/21 15:56:54 阅读更多 →
SSSD部署最佳实践:从源码编译到生产环境配置全流程

SSSD部署最佳实践:从源码编译到生产环境配置全流程

SSSD部署最佳实践:从源码编译到生产环境配置全流程 【免费下载链接】sssd A daemon to manage identity, authentication and authorization for centrally-managed systems. 项目地址: https://gitcode.com/gh_mirrors/ss/sssd SSSD(System Secu…

2026/10/19 20:20:15 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/21 21:32:28 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:50:56 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 16:24:48 阅读更多 →