Markdown 图床搭建指南
现在,越来越多的自媒体从业者开始选择 Markdown 作为文章撰写的格式,得益于其排版速度快、兼容性强的优点,可以实现“一次排版,多处发布”。
但 Markdown 本身是纯文本格式,并不能储存图片,因此在文章发布后图片将无法访问,想要解决这个问题,只能手动上传图片,耗时较长,而且容易出错。
为了解决这个问题,我们需要将图片上传到“图床”,简单来说,就是把图片保存在网络上,通过链接替代 Markdown 图片语法中的本地目录,从而实现图片的正常访问。
哪些人需要用图床
使用富文本编辑器的作者自然是不需要图床的,富文本格式会一并存储图片。
非专业创作者不必使用图床,投入产出不成正比。
文章中很少出现图片的情况下大可不必使用图床,零星的几张图片手动上传即可。
只在一个平台发布文章的作者可以酌情使用图床,大部分写作平台都可以实现图片的自动上传,在平台自身的编辑器内完全可以不理会图片的存储问题。
所以,追求高效写作、同时在多平台发布文章的作者适合使用图床。
哪个图床好
大家要认清一个现实:免费的就是最贵的。
市面上有很多免费图床,看起来服务很稳定,实际上由于没有资金来源,不知道哪一天会停止运营,这时,你的图片会一并消失,另外还有服务商搞小动作造成数据泄露的风险。
而比较安全且稳定的免费图床,只剩下 GitHub 和 Gitee 两家。准确来说,它们是代码托管平台,只是没有对文件的访问设置限制,而且支持文件直链,所以被用作图床。
GitHub 服务器位于国外,速度慢而且不稳定,体验太差(当然你可以用 CDN 加速,这个不在本文讨论范围之内);Gitee 对大图片的访问有限制,而且将代码托管平台用作图床属于滥用,可能被官方封禁,并不能保证你的图片长期可访问。
这时,我们的目光投向了主流云服务平台。
云服务平台有一项服务叫做“对象存储”,简单来说就是将文件上传到平台服务器,这一功能本身是企业用户存放文件使用的,但对象存储可以存放任何文件,所以将对象存储用作图床并不属于滥用。
至于可靠性,看图(来自阿里云):

如果有一天你的图片丢了,估计是某个区所有数据中心全出问题了,这时更好的方案是赶紧跑......
说回正题,目前国内主流的云服务提供商有三家:阿里云、腾讯云和七牛云。
七牛云用作图床需要绑定自己的域名,而域名需要备案,流程很麻烦,直接放弃。
腾讯云注册后有实名认证,需要微信 / QQ 绑定银行卡或者人脸识别,我自己名下没有银行卡,所以没办法体验,有兴趣的小伙伴可以去试试。
阿里云是淘宝、天猫的基础设施,稳定性自然不用多说,而且个人使用的稳定性和企业完全一致,经过一番比较,我选择了阿里云。
费用估算
根据阿里云 OSS 的计费标准,我们可以估算出一定访问量时每月的成本。
下面的数据均按照华东 1 区(杭州),不开启 CDN 和同域冗余存储且图片流量均发生在忙时的情况计算。
如果你是一名普通自媒体从业者,图片总量 10GB,每月图片流量 10GB,图片访问 10 万次,图片上传 1 万次,你每月需要支付 6.31 元。
这个计费标准下,你可以上传三万四千张 300KB 的图片,每月图片访问共三万四千次。
如果你是知名自媒体平台的 KOL,图片总量 20GB,每月图片流量 100GB,图片访问 100 万次,图片上传 1 万次,你每月需要支付 54.01 元。
对于他们来说,这只是一篇文章收入的几分之一。
而对于普通创作者,这个价格也完全可以接受,而且对象存储是按量计费的,如果某个月你的文章浏览量急剧下降,相应的,你的对象存储成本也将下降。
用一点微不足道的金钱,换取用户体验的提升和未来迁移平台时节省的时间,何乐而不为呢?
实操
创建 Bucket
打开阿里云官网注册账号,根据提示完成实名认证,大家都是用过无数互联网服务的人,此步骤不详细叙述。身份信息对应的即使是未成年人也能顺利通过,这一点腾讯云表示真的做不到。
进入阿里云首页,产品 > 存储 > 对象存储 OSS:

别看到产品价格就直接点进去,预付费套餐不划算,先进入管理控制台:

之后你会看到开通提示,这一步是不需要付费的,直接开通。
之后在侧边栏找到“Bucket 列表”,点它:

右侧唯一一个蓝色按钮就是“创建 Bucket”,点进去,打开一个看起来有点复杂的页面:

红框圈出的内容需要修改,其它选项保持默认。
Bucket 名称:只能用小写字母和数字,可以随便填(没人关心),填好之后更改会导致所有图片失效,相当于不能更改。
地域:你的自媒体平台有数据统计的可以看一下,尽量选择离主要受众近的位置,没有则可以随便选一个,注意不要选海外位置,不然延迟会急剧增大,选择后不能更改。
中间的“同域冗余存储”:开启后略微提高成本,同时提高可用性和可靠性,鉴于我们的图床不需要太高的标准,可以关闭。
读写权限:一定要选“公共读”,选择“私有”会导致图片无法访问,选择“公共读写”别人就可以修改你存储的内容,这里设置时会弹出警告,无视即可。
后面还有几个选项,保持默认即可,直接点击确定。
现在你已经完成了三分之一的工作。
配置访问权限
先不用理会我们刚刚创建的 Bucket,将目光投向页面右上角,点击 头像 > AccessKey 管理。
新页面弹出的提示可不是让你直接无视的,这里我们需要选择“开始使用子用户 AccessKey”。
熟悉的蓝色按钮,直接“创建用户”。

一个小建议,如果你打算用 Windows 平台写作,登录名称和显示名称都填“PicGo”,如果用安卓手机,填“Xiaobai”和“小白图床”,如果用苹果设备,填“uPic”,后面会解释为什么。
这里一定要在访问方式中勾选“编程访问”,不然你只会创建一个无法登录的账号。
这一步需要手机验证。
之后弹出的这个页面非常重要,一定不要直接关掉!
这个页面有后期配置使用的重要信息,而且只显示一次,关掉了就需要重头再来了。

看到后面的 AccessKey ID 和 AccessKey Secret 了吗?复制下来,保存在一个安全的地方。
为了更直观地演示,这里我没有打码,请大家记住,拥有这两个字符串相当于拥有了账号密码,千万不要泄露!(当然,我在文章发布前就删掉了这个用户,所以这里泄露了也没事)
记录好这两个关键信息后,我们不要直接返回,点击下面的“添加权限”。

在权限列表中选择“AliyunOSSFullAccess”,也就是对象存储的管理权限,注意不要选只读权限,否则会导致上传图片失败。
完成权限选择后,点击“确定”。
用相同的方式,完成其它几个账号的权限设置。为了确保安全,建议在不同图床软件上使用不同的账号。
直到现在,我们已经完成了所有阿里云部分的设置。
接下来,让我们配置各平台的图床软件。
配置图床软件
Windows 端:PicGo
在这里下载 PicGo 的安装文件,由于是国外网站,下载速度可能比较慢。
安装好软件后,它大概长这样:

为了方便之后使用,我们先在侧边栏找到“PicGo 设置”,打开开机自启和时间戳重命名,同时取消勾选掉除阿里云 OSS 外的所有图床。
之后,我们在图床设置中,点击阿里云 OSS。

-
KeyId:填写前面记录的 AccessKey ID
-
KeySecret:填写前面记录的 AccessKey Secret
-
存储空间名:你 Bucket 的名称
这时,你会发现,“存储区域”这一项的示例是一段文本。
我们还得回到阿里云控制台去解决这个问题。
在控制台首页的侧边栏中,点击“对象存储 OSS”。

在对象存储页面的侧边栏中,展开“我的访问路径”,找到你创建的 Bucket。

继续找到侧边栏,点击“文件管理”,蓝色按钮“上传文件”。

任意选择一个文件上传,对象存储理论上可以上传无限大的文件,而且上传是不收费的,但考虑到这个 Bucket 的权限是“公共读”,建议选择一个小文件上传,可以是图片之外的文件。
上传完成后,点击该文件右侧的“详情”。

在文件的 URL 中就可以找到需要填写的区域字符串了,这也是手动上传图片并复制链接的流程,但这个流程太过繁琐,所以我们用图床软件来简化它。
复制完区域代码之后,点击这个文件右侧的“更多”>“彻底删除”,删掉它。
回到 PicGo,把区域字符串填入,然后回到“上传区”。
如果没有意外发生,你的上传区应该是这样的:

现在,随便选择一张图片上传,或者复制图片后使用“剪贴板上传”。
你会看到一个蓝色进度条,如果它走到最右端后消失,证明你之前的设置一切正常,现在剪贴板里已经有了这个图片的 Markdown 链接,直接粘贴到编辑器中即可显示图片。
如果你看到错误:
-
检查你选择的图床类型是否正确
-
确认是否输入了正确的密钥
-
确认是否正确配置了权限
现在,你已经完成了 Windows 端图床的配置,现在让我们转战手机端。
Android 端:小白图床
其实还有个同类软件叫 PicPlus,但这个软件支持时间戳重命名,可以和电脑端保持命名格式的一致。
软件最初上传在酷安,使用阿里云图床不需要购买付费版。
在软件主界面点击右上角设置 > 图床 > 阿里云 OSS。

按照和 PicGo 几乎一致的填写方式,填好所有字段,注意这里的区域是下拉选项,最后的保存路径保持不变。
之后返回设置界面,选择“链接”,进行时间戳命名的设置。

点击“文件名规则”,清除输入框中的所有内容,点击下方的“时间戳”按钮,确定。你应该会在输入框中看到一个时钟图标,且预览内容应该是一串数字。
之后打开“链接命名规则”,以便使用我们的自定义设置。
返回,将“图片上传质量”更改为“高质量”。
回到主界面,选择一张图片上传,然后在支持 Markdown 的编辑器中粘贴,如果看到图片正常显示,恭喜你,你已经完成了 Android 端图床的配置。
苹果全家桶:uPic
uPic 配合阿里云 OSS 是需要购买付费版的,鉴于我没有对应设备,这里无法给大家演示,同时,PicGo 也有 Mac 版本,而且一样是免费的,大家可以尝试一下,配置过程与 Windows 端的 PicGo 基本一致。
MWeb 也有配置阿里云图床的功能。
可选操作
这些操作可以提升图床的安全性或操作效率,请根据实际情况选择进行。
配置防盗链
防盗链可以防止你的图片被引用到他人的网站上使用,从而避免了不必要的流量消耗,同时在一定程度上遏制了未授权转载行为。
登录阿里云控制台,在对象存储 OSS 中找到你需要设置防盗链的 Bucket,点击权限管理 > 防盗链。

之后,输入你所有内容发布平台的主域名。

注意,如果漏掉了一个平台,对应平台的图片将会无法正常显示。
空 Referer 打开后,可以让读者正常下载你的图片,建议开启,毕竟你要让读者正常保存你的文章。
当然,这项设置的变更并不会更改已上传的图片链接,所以你可以在需要时再去设置。
配置预警
在阿里云控制台搜索“报警规则”并开通云监控,这项服务是免费的。

之后,点击“创建报警规则”。

-
产品:选择“对象存储 OSS 监控”
-
资源范围:选择“Bucket 维度”
-
Bucket:选择你要监控的 Bucket
接下来是最重要的报警规则设置。
一般情况下,一个作为图床的 OSS 需要设置两个报警:高流量报警和高访问量报警。
高流量报警的推荐设置如下:公网流出流量 5 分钟周期持续 1 个周期大于 400 MBytes。
高访问量报警的推荐设置如下:Get 类请求数 60 分钟周期持续 1 个周期大于 3000 个。
当然,这套配置适用于知名度一般的创作者,如果你是平台大 V,这两个数值需要适当调高,这里给出一个参考数据:高流量警告设置为你文章的平均图片数的 100 倍,高访问量警告阈值设置为你文章平均访问量的 5 倍。

通道沉默周期设置为 30 分钟,如果你在平台的影响力很高可以适当延长,生效时间当然是 24 小时。
通知方式需要创建一个新的联系人组,并将你自己的联系方式添加到该组中,这里不再演示了。
报警级别选择“Warning”,其它选项保持默认。
最后,完成设置后你会收到一条短信和一封邮件,需要点击链接才能激活推送。
结语
有人说对象存储不适合用来做图床,因为它是按照使用量付费,一旦有人恶意高频访问就可能导致大量欠费,但现在的平台对高频访问都做了限制,结合可选设置中的防盗链和报警,基本可以避免这种情况。
至于安全性,可以说如果阿里云出了问题,你可以去买彩票了,当然,自己泄露登录密码之类的情况除外。
无论如何,至少你的图片存在自己手中,如果要迁移平台可以一键下载 Markdown,不需要重复上传图片,这一点可以在未来给你节省大量的时间。
哦,顺便说一下,对象存储欠费 24 小时后服务就会停止,图片会无法访问,但数据还在,续费后就可以恢复。
希望这篇文章不要让我的对象存储欠费。