如何利用CDN和轻量级应用服务器为自己搭建一个图床?

  公司新闻     |      2023-09-07
如何利用CDN和轻量级应用服务器为自己搭建一个图床?

作者:最小

博客:https://www.mintimate.cn

Mintimate的博客,仅供分享给您

图床

有些人可能对图床不了解。所谓图床的英文名称应该是:ImageHost,是存储图片的中心。可以理解为:用户存储图片后,系统提供改图片的直接链接,用来通过网络访问显示该图片

使用图床可以更好的管理图片,方便图片打包和备份;与CDN合作,更好地优化网站加载。

使用场景

Markdown和HTML都是很好的图床使用场景:Markdown和HTML插入图片,并使用标记显示图片:

# Markdown![图片描述](图片地址)# HTMLimg src='图片地址'/复制一下,图片地址可以使用图片的绝对路径或相对路径,例如:

/img/Mintimate_Logo.png:进入网站根目录的img文件夹,找到Mintimate_Logo.png图片进行显示。/Mintimate_logo.png:在父目录中找到Mintimate_Logo.png图像进行显示。然而,在某些网站上操作时,当没有明确的绝对路径和相对路径时,就需要使用网络地址图片了。这时,你可以使用图床提供的直接链接,如:评论回复

当然更多的是用于文字创作。比如我在写这篇文章的时候,使用的是腾讯云的镜像床:

实现思路

图床的实现非常简单。归根结底,上次图片发送到服务器时,服务器提供了图片的链接地址。一般来说,它会使用:

OSS(对象存储):存储图片并提供公共图片地址。 CDN(内容分发网络):加速镜像床域名的绑定,使OSS中镜像的加载更快、更安全。实现图床功能。

但考虑到成本和后期管理的方便性,我们采用:

Lighthouse(轻量级应用服务器):存储图像的服务器。与OSS存储相比,服务器存储可以存储文件地址结构(例如:IMG/banner/Logo.png)。 CDN(内容分发网络):加速图床域名的绑定,同时防止Lighthouse真实地址暴露,避免DDOS攻击。因此,我们构建的图床流程就围绕着这个大主题:

Lighthouse 的具体实现:

部署Git:在服务器上部署Git,用于快速上传本地图片到服务器;同时避免操作失误时,可以回滚操作,图片数据丢失。部署Nginx:在服务器用于使服务器变为Web网站,提供图片的直链上部署Nginx。

准备工具

轻量应用服务器(Lighthouse)

首先我们需要一个轻量级的应用服务器;因为需要配合CDN,带宽无所谓。建议购买打折产品:

腾讯云秒杀活动的学生用户建议使用Linux系统服务器,可享受0.6折优惠购买轻量级应用服务器。这次我将使用Linux的Debian发行版来演示:

内容分发网络(CDN)

CDN,需要备案域名。如果您还没有域名或者域名尚未备案,您可以参考:

域名注册域名备案域名备案很简单,大概7-14天可以备案完成。详情请参考备案文档

后期需要内容分发:腾讯云内容分发网络

搭建Nginx

首先,我们需要SSH来连接服务器。后来为了方便,我们使用宝塔来快速搭建Nginx。我们先安装Pagoda:

之后,复制到SSH 控制台:

之后,安装宝塔后,进入宝塔面板,在软件商店下载:

这样Nginx就已经安装好了。

设置图床网站

我们需要通过Nginx建立一个网站来显示我们的图片,因为我们刚刚通过宝塔安装了Nginx,所以这里再建立一个网站:

我们这里设置的镜像床网站地址是:/www/wwwroot/imagehost.flyinbug.cn:

现在,让我们把它放在一边。首先配置Git。

配置Git

因为我们使用本地文件同步到服务器的Git仓库来上传图片,所以服务器需要安装Git

安装Git

首先我们需要安装Git,在SSH中输入:

# Ubuntu/Debiansudo apt-get install git# Centossudo yum install git copy 因为,我是Debian发行版Linux。因此使用sudo apt-get install git 来安装Git:

我之前安装过,所以详细日志不多,小伙伴们第一次安装Git,输出的日志应该会比我多

创建Git用户

首先我们看看我们是否提前创建了Git用户,输入命令:

cat /etc/passwd|grep -v nologin|grep -vhalt|grep -v shutdown|awk -F':' '{ print $1'|'$3'|'$4 }'|more 复制我们创建一个git 用户:

sudo adduser git copy 按照提示设置密码和信息即可完成创建:

之后我们可以在/home目录下看到新添加的git用户:

至此,Git的配置已经完成。有兴趣的可以:

设置git用户不允许Shell登录设置authorized_keys

创建图床仓库

切换用户

为了避免权限问题,我们切换到刚刚创建的git用户:

# 切换到git用户sudo su git copy:

创建仓库

进入git用户主目录(/home/git),创建mySource文件夹,用于存放git仓库:

# 将环境切换到/home/git 中cd ~# 创建mySource 文件夹mkdir mySource 复制后进入mySource 文件夹,初始化一个名为imagehost.git 的git 仓库:

cd mySource# 初始化名为imagehost.git的仓库sudo git init --bare imagehost.git 复制后会多出一个项目文件夹

输入项目文件夹查看初始化内容:

这时候我们的镜像床仓库就已经创建完成了。

设置hooks

我们来设置一下hooks,用于每次将本地仓库推送到云端时,自动将最新版本的镜像床覆盖到Nginx网站上。我们刚刚用Nginx创建的镜像床网站地址:/www/wwwroot/imagehost.flyinbug.cn,所以:

# (当前在项目文件夹中)进入hooks文件夹cd hooks# 创建并编辑钩子vim post-receive 复制它:

--work-tree:填写Nginx网站地址。 --git-dir:图床仓库地址。解压后,分配执行权

chmod +x post-receive copy

本地同步仓库

我们刚刚创建了镜像床仓库,本地需要安装Git。我这里就不详细说了。安装后,选择以下方法之一:

在powershell或终端同步仓库到本地。中使用GitHub Desktop可视化并同步仓库到本地。本文演示了在Terminal上的操作:

git clone git@server-IP:/home/mySource/imagehost.git 复制一下,server-IP是你服务器的IP或者域名:

之后本地就出现这个仓库:

使用图床

之后,我们将图片添加到本地仓库:

之后我们在终端中进行操作:

服务器:

chmod 777 /www/wwwroot/imagehost.flyinbug.cn 复制本地:

# 添加所有文件git add # 创建提交git commit -m 'init'. # 推送到服务器主分支git push origin HEAD Copy 此时我们服务器上的Nginx 文件夹中有文件(图片):

如果你的域名直接解析到服务器IP,则可以直接使用域名查看图片:

然而,这很危险:

容易暴露服务器IP加载慢,需要使用CDN加速。

启动CDN加速

我们进入CDN控制台,选择域名管理-添加域名:

之后,填写信息:

即可开启CDN,在CDN控制台可以看到效果:

查看域名对应的IP,可以看到是CDN节点服务器的IP,而不是我们轻量级应用服务器的IP:

笔记:

CDN可能会有延迟,全局缓存刷新最多需要72小时。注意配置图片防盗链,防止流量被恶意脚本消耗。适合个人或小团队。同时使用Git方便备份和回滚。

但一定要注意对CDN域名设置防盗链和IP响应限制。如果搭建有什么不清楚的地方,欢迎在文章下留言哦~

点击关注作者并阅读全文