『亚马逊云科技产品测评』活动征文|搭建Squoosh图片在线压缩工具
搭建Squoosh图片在线压缩工具
- 前言
- 一、Squoosh是什么?
- 二、准备一台Lightsail实例
- 1.进入控制台
- 2.创建实例
- 3.开放端口
- 4.部署Squoosh
- 5.预览
- 三、搭建反向代理
- 1. 安装宝塔
- 2. 配置反向代理
- 3. 预览代理效果
提示:授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
前言
兄弟们,跟你们分享一个重要的技能—网络图片优化。现在大家上传和传送图片,尤其是手机 App,图片大小一大就很卡顿很耗流量。作为全栈开发人员,我们必须掌握如何高效优化图片资源。之前我一直在用在线的 Squoosh.app 工具,但是访问国外网站不免会有延迟。后来我想,不如直接部署 Squoosh 到自己的云服务吧,就能快速高效地处理大量图片需求了!
于是我选定了 AWS Lightsail 这个简单高性价比的服务。前期准备工作包括购买实例,安装 Nginx、运行时等。然后从 Github Clone 原 Squoosh 代码,进行一些配置优化。部署成功后,就可以通过内网 IP 使用 Squoosh 服务了。测试效果很不错,压缩效率比外网高出一截,而且付费模型简单。
如果你也有类似图片处理需求,不妨考虑这个方案,跟我一起来实践一下吧!

提示:以下是本篇文章正文内容,下面案例可供参考
一、Squoosh是什么?
Squoosh是一个图像压缩Web应用程序,压缩效率非常给力,可以让我们深入研究各种图像压缩器提供的高级选项。图像压缩在本地处理,并且没有其他数据发送到服务器。平时我写博客的图片都会通过这个处理一下,可以做到无损或低损压缩,大大减小图片空间,并且可以节省带宽,加快页面渲染速度,建议大家写文章上传图片时进行无损压缩。
- Github:https://github.com/GoogleChromeLabs/squoosh
- Gitee:https://gitee.com/mirrors/Squoosh
这是一个开源的,大家可以通过官方的在线网站使用,也可以自己搭建一个私有的,官网网站是:
- https://squoosh.app/
二、准备一台Lightsail实例
1.进入控制台
如果控制台直接有 Lightsail 那可以直接点击进入,如果没有,直接通过上面的搜索即可

我们会到达这么一个页面,第一次来,咱们的实例列表是空的,等会我们就需要去创建一台实例了

2.创建实例
点击 create instance 进入实例创建页面,里面有一些关于实例的选项,比方说操作系统,平台等,因为我们是自己部署,所以我们选择 OS Only,平台选择 Linux,操作系统选择擅长的 ubuntu20.04

滑到最下面点击创建,创建好后,返回列表就可以看到实例了

3.开放端口
为了更方便我们进行调试和预览,我们先要把安全组打开,因为默认这个流量是不支持其他端口的,我们在开发的过程中可以先暂时接受所有的流量,调试完成之后再把服务对应的端口一个个放开,方便我们进一步调试
进入实例详情 -> networking -> add rule

这样就是放入所有流量了
4.部署Squoosh
完成准备工作后,我们就要开始部署我们的程序了,这里我们通过 git 直接拉取即可
git clone https://github.com/GoogleChromeLabs/squoosh.git
- 进入项目目录
cd squoosh
- 切换到稳定版本
git checkout v1.12.0
- 安装依赖
npm install
如果没有 npm 的 可以先运行 apt install npm,然后再执行

这里大家还有可能出现一个问题就是 node 和 npm的版本不行了,可以通过 nvm来切换 node,操作如下:
运行下面命令安装NVM工具。
curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh -o install_nvm.sh
bash install_nvm.sh
重新加载bashrc文件,以便使更改在用户配置文件中生效。
source ~/.bashrc
运行下面命令查看节点的可用版本。
nvm ls-remote
找到您要下载安装的Node.js最新版本,然后运行下面命令。
nvm install 10.0
新的Node.js版本安装成功后,运行下面命令查看当前版本号。
node –version
5.预览
依赖安装完成之后可以直接使用开发模式进行预览:
npm start

开发环境使用的是8080端口,我们通过 公网IP访问一下

上面的访问方式已经实现可以正常使用了
三、搭建反向代理
如果直接通过服务端口访问的话不利于我们扩展和管理,比方说我们要做一些负载均衡,或者在接收到请求时需要进行一些过滤操作,直接将流量导入应用是非常不方便的,所以我们一般会增加一个反向代理,便于之后扩展,我们主要采用宝塔来一键安装 Nginx
1. 安装宝塔
我们这里直接使用万能安装脚本
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
安装好后弹出宝塔登录入口和账号密码

我这里之前安装过,通过 bt default 也可以查看默认的信息,这里密码隐藏了,可以通过 bt 然后输入 5 进行密码修改,然后通过入口登入即可
2. 配置反向代理
通过宝塔的站点管理

这里我们主要配置代理名称和url
- 代理名称:image
- 目标url:http://127.0.0.1:8080

3. 预览代理效果
可以看到,现在不用端口也可以正常代理到我们的程序上了

相关文章:
『亚马逊云科技产品测评』活动征文|搭建Squoosh图片在线压缩工具
搭建Squoosh图片在线压缩工具 前言一、Squoosh是什么?二、准备一台Lightsail实例1.进入控制台2.创建实例3.开放端口4.部署Squoosh5.预览 三、搭建反向代理1. 安装宝塔2. 配置反向代理3. 预览代理效果 提示:授权声明:本篇文章授权活动官方亚马…...
基于亚马逊云科技大语言模型等服务打造企业知识库
背景 大语言模型是自然语言处理领域的一项重要技术,能够通过学习大量的文本数据,生成具有语法和意义的自然语言文本。目前大语言模型已经成为了自然语言处理领域的一个热门话题,引起了广泛的关注和研究。 知识库需求在各行各业中普遍存在&a…...
FFmpeg 使用
添加关键帧 被压缩过的视频丢失关键帧导致seekTo无效,需要给视频添加关键帧 ffmpeg -i 2.mp4 -c:v libx264 -x264opts keyint5 -y keyint10.mp4修改分辨率 -i /sdcard/bankinfo/-484870439.mp4 -vf scale1920:1080 -threads 5 -preset ultrafast -y /sdcard/ban…...
NLP的使用
参考: Apache openNLP 简介 - 链滴 (ld246.com) opennlp 模型下载地址:Index of /apache/opennlp/models/ud-models-1.0/ (tencent.com) OpenNLP是一个流行的开源自然语言处理工具包,它提供了一系列的NLP模型和算法。然而,Open…...
Navicat DML 操作
在表格种插入 列信息 -- 修改数据 update 表名 set 列名 值1, 列名值2,[where 条件]; -- 注意:如果update语句没有加where 表里对应行的全部信息都会被改; -- 删除数据 delecte from 表名 [where 条件]; 未删除前: 执行删除后为: DQL - 条…...
Springboot-热部署-IDEA2023
方式一:jrebel 方式二: 1、导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <…...
人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?
增强现实技术和虚拟现实技术(AR/VR)发展前景广阔,备受各大企业关注。事实上,近四分之三的行业领导者表示,他们预计这些沉浸式技术将于未来五年内成为主流。高盛公司报告称,到2025年,AR/VR行业值…...
Linux进程通信之共享内存
文章目录 共享内存原理申请共享内存函数(shmget)参数key生成key值示例申请共享内存 挂接到进程地址空间函数(shmat)去关联函数(shmdt)控制共享内存(shmctl)IPC_STATIPC_RMID ipcs其余进程获取该共享内存进程间通信 进程间通信:IPC,…...
接口自动化测试:pytest基础讲解
为什么要做接⼝测试? 只靠前端测试很难确保很⾼的覆盖率。接⼝测试,可以模拟出各种类型的⼊参,包括⼀些在前端模拟不出来的⼊参,还能根据接⼝⽂档的定义,设计出相对完善的⼊参值,在接⼝层保证质量…...
基于JavaWeb+SpringBoot+Vue医院管理系统小程序的设计和实现
基于JavaWebSpringBootVue医院管理系统小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏[Java 源码获取 源码获取入口 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 …...
收藏这几个开源库,写css你会笑出声
你是否遇到过写css没灵感,写不出酷炫的效果,那这篇文章你一定要看完。知道这几个开源库,它能让你写出炸天的效果并且有效地增加你的摸鱼时长。 1.CSS Inspiration 网址:https://chokcoco.github.io/CSS-Inspiration/#/ CSS Insp…...
给localStorage缓存添加全局监听器
需求:在做单应用页面的时候,每个组件都是独立的,有时候我们a组件里面的东西修改了,需要b组件进行在a组件修改的同时进行响应,就需要监听器,这种时候我们需要定义监听器并且在b组件里面监听,然后…...
blk_mq_init_queue函数学习记录
blk-mq编程,主要要调用两个函数进行初始化工作,blk_mq_init_queue这是第二个。该函数先是申请了struct request_queue结构,这个请求队列后面用于赋值给磁盘那个结构体的相应成员。 struct request_queue *blk_mq_init_queue(struct blk_mq_t…...
高防服务器的工作原理
在当今互联网时代,网络安全问题日益突出,各种网络攻击层出不穷。为了保护企业的网络安全,高防服务器应运而生。那么,你是否了解高防服务器的工作原理呢?下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种…...
2023.11.19使用flask制作一个文件夹生成器
2023.11.19使用flask制作一个文件夹生成器 实现功能: (1)在指定路径上建立文件夹 (2)返回文件夹的路径和建立成功与否的提示 main.py import os from flask import Flask, request, jsonify, render_templateapp F…...
【04】ES6:字符串的扩展
一、模板字符串 模板字符串是可以插入表达式的字符串字面量。模板字符串和传统字符串比较,存在以下特点: 1、使用反单引号 传统字符串字面量使用单引号 ‘’ 或者双引号 “”,模板字符串使用反单引号(backquote) …...
Docker可视化管理界面工具Portainer安装
Portainer是Docker容器管理界面工具,可以直观的管理Docker。 部署也很简单: 官方安装文档地址 1、创建数据卷 docker volume create portainer_data2、下载允许容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /v…...
css实现水波纹效果
css实现水波纹效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…...
一种全新且灵活的 Prompt 对齐优化技术
并非所有人都熟知如何与 LLM 进行高效交流。 一种方案是,人向模型对齐。 于是有了 「Prompt工程师」这一岗位,专门撰写适配 LLM 的 Prompt,从而让模型能够更好地生成内容。 而另一种更为有效的方案则是,让模型向人对齐。 这也是…...
8:kotlin 类型检查和转换(Type checks and casts)
在运行时可以执行类型检查以检查对象的类型。类型转换将对象强制转换为不同的类型 is 和 !is 可以使用is或者!is来判断实例是不是指定的类型 fun main() {var obj : Any "cast"if (obj is String) {println(obj.length) // 4}obj 123if (obj !is String) { pr…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
