Docker Compose部署随机图API
平时我们部署博客的时候,为了考虑美观会考虑使用随机图来作为文章的封面,现在有很多大佬愿意提供随机图API,通过API我们可以很方便地部署随机图,不必自己寻找图片,考虑带宽支出
不过很多时候一些公益API访问速度很慢,其中很多图片并不是我们所想要的,这时候我们就要考虑自建随机图API了,我参考了很多教程,他们中的很多都是基于宝塔来实现的,但其实我们不必要安装宝塔面板,完全可以在Docker内实现
前置准备
首先我们先建立一个文件夹来方式我们的docker-compose
和其他的随机图文件,并且进入该文件夹内:
mkdir random-pic && cd random-pic
之后上传随机图的php
文件,在这里有三个版本,其中一个版本我尝试过无法使用(可能是我没有正确使用?
原理介绍
随机图的基本实现是通过新建一个站点,通过向站点发送请求,站点文件将请求重定向(301)到随机图所在图链,从而实现随机图切换:
图片准备
获取到原始图片之后,我建议你对图片继续压缩处理,常见的诸如将图片转换成webp
,这能有效减小文件体积,加快用户端的加载速度,如果你使用的是对象存储或者套了CDN的话,这能减小带宽和费用压力
在这里推荐一下来自Google的Squoosh,是一个很全能的图片压缩程序,不用下载,直接在浏览器中就可以使用:网址
基本上支持了常见图片类型的转换和压缩:
版本1(不支持桌面与移动端切换
<?php
//存放api随机图链接的文件名img.txt
$filename = "img.txt";
if(!file_exists($filename)){
die('文件不存在');
}
//从文本获取链接
$pics = [];
$fs = fopen($filename, "r");
while(!feof($fs)){
$line=trim(fgets($fs));
if($line!='' && substr($str , 0 , 1) != '#'){
array_push($pics, $line);
}
}
// 从数组随机获取链接
// $pic = $pics[array_rand($pics)];
$pic = $pics[random_int(0, count($pics) - 1)]; # 真随机
//返回指定格式
$type=$_GET['type'];
switch($type){
//JSON返回
case 'json':
header('Content-type:text/json');
die(json_encode(['pic'=>$pic]