我之前推荐一个基于 NotepadTab + Obsidian 实现匿名分享文章的方法:《一个简单安全的记事本工具 NotepadTab,却意外解决了匿名分享文章的痛点?附 Obsidian 用法》
文中提到,这个方案最终生成的链接会非常长,显得不够美观。
在生活中我们也会碰到类似的问题,比如一个特别长的链接在生成二维码的时候,二维码会变得非常复杂,难以扫描。如果将其通过短链接工具缩短一下,就变得更容易扫描了。
不过现在由于短链跳转内容不可控,短链接平台都开始收紧策略了。可以考虑给自己搭建一个缩短链接的服务,给自己使用。
我选择的是 Shlink 方案,因为它同时支持了 API 和不错的网页 UI,可以满足大多数需求。
前提条件
你需要准备两样东西——
- 一个较短的域名
- 一台服务器,配置不限
这两个东西比你想象的要便宜,域名的价格在 50 元/年以内,冷门后缀更是便宜到只要个位数。服务器可以看看国内的各种云,它们常年推出活动,往往 99 元/年以内就能租下一台服务器。更不要说服务器还可以部署一些其他非常有用的服务,比如部署 RustDesk 可以一并解决远程桌面的问题。
相关阅读:《低价服务器可以用来做什么?搭一个实用的免费远程桌面中转服务:RustDesk》
开始部署
现在我们开始部署 Shlink。
1. 配置 DNS 解析
既然是短链接服务,我们就需要两个域名,一个用于提供出去最终访问,一个用于提供 shlink 的管理后台。
你可以在云服务商后台,这样配置两条 A 记录——
s.yourdomain.com -> 服务器 IP
shlink.yourdomain.com -> 服务器 IP
你配置其他的也可以,这里只是示例。
2. 使用 Docker 部署 Shlink 服务:
接下来通过 SSH 连接到服务器
ssh username@服务器IP
运行以下命令启动 Shlink 容器:
docker run -d \
--name shlink \
-p 8080:8080 \
-e DEFAULT_DOMAIN=yourdomain.com \
-e IS_HTTPS_ENABLED=true \
shlinkio/shlink
参数说明:
- --name shlink:为容器指定名称。
- -p 8080:8080:将容器的 8080 端口映射到主机的 8080 端口。
- -e DEFAULT_DOMAIN=yourdomain.com:设置您的默认域名。
- -e IS_HTTPS_ENABLED=true:启用 HTTPS,没有证书可以设置为 false。
2. 获取 Shlink API 密钥:
在终端继续执行以下命令,生成 API 密钥:
docker exec -it shlink shlink api-key:generate
找个安全的地方记录下生成的 API 密钥,后续配置 Web 客户端时需要使用。
3. 使用 Docker 部署 Shlink Web 客户端:
接下来继续通过 Docker 部署 Shlink web 客户端。其中的参数需要记得修改。
bash docker run -d \ --name shlink-web-client \ -p 8081:8080 \ -e SHLINK_SERVER_URL=http://yourdomain.com:8080 \ -e SHLINK_SERVER_API_KEY=your_api_key \ shlinkio/shlink-web-client
参数说明:
- -e SHLINK_SERVER_URL=http://yourdomain.com:8080:设置 Shlink 服务器的 URL。
- -e SHLINK_SERVER_API_KEY=your_api_key:设置之前获取的 API 密钥。
首次访问 Web 客户端时,需手动输入 Shlink 服务器的 URL 和 API 密钥。
4. 配置 Nginx 反向代理:
为通过域名访问 Shlink 服务和 Web 客户端,建议配置 Nginx 反向代理。可以参考这个 Nginx 配置示例:
```nginx server { listen 80; server_name s.yourdomain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server { listen 80; server_name shlink.yourdomain.com;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
} ```
如果你用了 1Panel 之类的平台,也可以借助图形界面配置这两个反向代理。
通过以上步骤,应该可以成功部署并访问 Shlink 服务及其 Web 管理界面了。
5. 高阶操作:通过 API 触发
通过向 Shlink 的 REST API 发送 HTTP POST 请求,同样可以创建短链接。以下是使用 curl 命令的示例:
bash curl -X POST http://yourd
