介绍

有时候,我们需要对不同的流量来源做精准的统计,比如我们群发短信,希望对群发效果做a/b test,可以在短信里面的带的landing page做区分,然后需要有精准的统计工具,这个时候我们可以用短地址系统来做统计,也就是在不同的短信里面使用不同的短地址,然后对短地址系统来做数据采集和分析。

yourls是一个基于php+mysql开发开源的短地址服务系统,除了基础的跳转外,还提供丰富的统计和插件。

安装

我们知道使用php的包安装工具composer有时候是件非常痛苦的事情,还有yourls系统需要apache或者nginx配合,把服务器搞得很乱,因此,最好的办法就是把yourls封装到docker里面,打包交给docker-composeswarm 或者 k8s 来管理。

好在yourls官方维护了一个docker的镜像,因此,我看了一下这个docker每天都自动构建,那么我们只需要找到相对稳定的版本直接使用就好了

如果用compose,直接用官方的这个例子改一下,然后执行docker-compose up 就可以直接跑起一个demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.1'

services:

yourls:
image: yourls
restart: always
ports:
- 8080:80
environment:
YOURLS_DB_PASS: example
YOURLS_SITE: http://localhost:8080 # https://example.com
YOURLS_USER: example_username
YOURLS_PASS: example_password


mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: example

注意,官方的例子,YOURLS_SITE的值是https://example.com,如果你直接跑是不行的,你可以修改一下主机的hosts也可以直接使用http://localhost:8080

另外,mysql的配置,生产环境的话最好把存储配置独立的volume出来

配置

上线这个例子可以可以看到,这个yourls的镜像使用的是环境变量来传递系统的配置,这些配置可以在这里找到.

主要有mysql的数据库配置,站点设置,短地址的算法配置,还有一些全局配置。下面我们来看看

  • 站点配置 site options
1
2
3
4
5
6
YOURLS_SITE: 站点的url,如果配置不对,系统的管理界面访问不了
YOURLS_HOURS_OFFSET: GMT时区的偏移,我们在国内用上海的时区就+8就行
YOURLS_PRIVATE: 管理界面是需要登录才能看到,默认开启
YOURLS_UNIQUE_URLS: 是否运行同一个url对应多个短地址,默认是不允许的,如果我们上面说的a/b test的例子的需求,那么这个应该是改为false
YOURLS_COOKIEKEY: 加密cookie的key
yourls_user_passwords: 系统的用户配置
  • 短地址的算法配置 URL Shortening settings

    1
    2
    YOURLS_URL_CONVERT: 缩短的方法 base 36 or 62. 
    yourls_reserved_URL: 禁用词,比如一些色词
  • 全局配置 Options settings

1
2
3
YOURLS_PRIVATE_INFOS: 虽然如果`YOURLS_PRIVATE`是开启的,但是仍然可以把统计界面设置为开放的,就是把 YOURLS_PRIVATE_INFOS设置为false即可
YOURLS_PRIVATE_API: 虽然如果`YOURLS_PRIVATE`是开启的,api可以开放,如上
YOURLS_NOSTATS: 禁用统计

以上这些配置,我们可以修改一下compose,传到环境变量就好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3.1'

services:

yourls:
image: yourls
restart: always
ports:
- 8080:80
environment:
YOURLS_DB_PASS: example
YOURLS_SITE: http://localhost:8080 # https://example.com
YOURLS_USER: example_username
YOURLS_PASS: example_password
YOURLS_UNIQUE_URLS: 'False'
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: example

以上,这个配置支持了一个url对应多个短地址

插件使用

yourls有插件,默认提供了几个插件,

比如它默认是用自增的数字来做short id的,如果需要使用随机码来做short id,那就需要启用 Random ShortURLs这个插件

还有默认是不支持short id里面出现横杆的,如果需要支持,则需要启用 Allow Hyphens in Short URLs这个这个插件

更多的插件,可以在这里找到.