# 用 Shlink 部署一个短链接服务

> 本文开放前 70% 正文，剩余内容会员可见。

原文：https://utgd.net/article/21116

我之前推荐一个基于 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

---

[前往标准阅读页](https://utgd.net/article/21116?audience=web)
