非常小的成本实现一个图床(远远不止) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
int64ago
V2EX    分享创造

非常小的成本实现一个图床(远远不止)

  •  1
     
  •   int64ago
    int64ago 2020-03-02 08:06:14 +08:00 5755 次点击
    这是一个创建于 2117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    可以直接先体验 https://302.at/

    手机也可以扫码体验(用浏览器打开):

    下面就嗦下介绍下

    应该很多人都跟我一样有图床的需求,我几年前其实就做了,实现也很简单,就是找个对象存储服务商(比如七牛、阿里云 OSS 等)通过 SDK 实现,但是一直很别扭。周末重新梳理了下,我个人对此类需求有以下诉求:

    • 好用,好看,在 PC 和手机上体验都要好
    • 可控,依赖可靠服务商
    • 金钱成本少,除了对象存储这个钱不得不花,其它尽量不花钱
    • 人力成本少,尽可能使用已有能力,服务无状态,可随意换机器或横向扩展

    然后,周末我就把上面的需求都实现了,并且还扩展了很多其它实用的功能

    特性

    • Image/Video/File uploading (图片 /视频 /文件上传,CDN 支持)
    • Image placeholder (图片占位符)
    • QR Code generator (二维码生成)
    • URL shortener (短链接)
    • Responsive (响应式设计)
    • PWA support ( PWA 支持)
    • ...

    技术栈及依赖

    一些预览图

    有兴趣的话代码在 GitHub,可以 fork 过去自己改改就能部署,绝大多数配置我都抽离成环境变量了,当然直接用也可以,不过最好登录下,非登录态会有些限制

    56 条回复    2020-03-03 16:16:45 +08:00
    iiduce
        1
    iiduce  
       2020-03-02 08:18:01 +08:00
    没看懂,文件究竟存储到什么地方了?
    int64ago
        2
    int64ago  
    OP
       2020-03-02 08:23:28 +08:00 via Android
    @iiduce 文件在阿里云 OSS,当然换其他也很简单

    数据储存在 LeanCloud,主要是云数据库太贵,自己 VPS 搭的感觉也不靠谱
    int64ago
        3
    int64ago  
    OP
       2020-03-02 08:25:31 +08:00 via Android
    @iiduce 为了横向扩展,基本上应用都是用的外部服务,所以机器基本就只有纯计算逻辑,我对这点诉求很高,因为要应对随时可能被封的主机
    Cbdy
        4
    Cbdy  
       2020-03-02 08:47:35 +08:00
    从一个设计师的角度,Logo 可以再设计一下,页面字号可以适当调整一下(感觉文字和按钮不协调字号)
    int64ago
        5
    int64ago  
    OP
       2020-03-02 08:49:20 +08:00 via Android
    @Cbdy 求具体点的指导
    lhx2008
        6
    lhx2008  
       2020-03-02 08:53:25 +08:00 via Android
    项目是不错的,阿里云要注意账单
    sofarx
        7
    sofarx  
       2020-03-02 08:53:31 +08:00
    你图床上传的图在我这里都是显示问号
    fengbjhqs
        8
    fengbjhqs  
       2020-03-02 08:56:40 +08:00
    如果只是图库,感觉可以不需要数据库, 可以自建 cdn,文件放本地
    7gugu
        9
    7gugu  
       2020-03-02 08:56:49 +08:00 via Android
    噢,不错哦!会长久运营吗?
    luckyrayyy
        10
    luckyrayyy  
       2020-03-02 09:19:27 +08:00
    常见的图库都是放到第三方的,就没有能放到本地的么...
    int64ago
        11
    int64ago  
    OP
       2020-03-02 09:20:38 +08:00
    @7gugu #9 我自己要用的东西肯定会长久,而且代码里有黑名单机制,如果有滥用的人会直接点对点拉黑

    而且针对访问频率我也做了限制


    当然,以上只要是正常使用都不会感知
    int64ago
        12
    int64ago  
    OP
       2020-03-02 09:23:11 +08:00
    @luckyrayyy #10 放本地:

    - 不便于迁移
    - 可靠性不好保证(除非自己做三备份)
    - 磁盘性能不行(当然 SSD 好点)
    - 没法使用到一些高级特性(比如三方都会支持图片裁剪压缩等)
    chenxiaoyan
        13
    chenxiaoyan  
       2020-03-02 09:25:34 +08:00
    测试了一下,上传挺快的,可老哥,怎么删掉我上传的图片??
    int64ago
        14
    int64ago  
    OP
       2020-03-02 09:28:10 +08:00 via Android
    @chenxiaoyan 登录状态下是可以删的,匿名为了不干扰别人测试,禁了删除
    iiduce
        15
    iiduce  
       2020-03-02 10:21:24 +08:00
    一直想做一个自用放照片的网盘,觉着这个界面功能挺合适。

    我有空闲的阿里云服务器 ECS,求教把文件和数据存储都放在阿里云上,容易改么? 主要需做哪些工作。

    希望能得到您的指教,谢谢! @int64ago
    opengps
        16
    opengps  
       2020-03-02 10:28:37 +08:00 via Android   1
    目前看来并不是低成本,oss 的流量费问题你没有提到,这个往往是最贵的支出
    int64ago
        17
    int64ago  
    OP
       2020-03-02 10:35:13 +08:00 via Android
    @opengps 我提到了

    金钱成本少,除了对象存储这个钱不得不花,其它尽量不花钱

    这个没办法,不得花这个钱
    int64ago
        18
    int64ago  
    OP
       2020-03-02 10:38:02 +08:00 via Android
    @iiduce 部署这块我没多说,因为每个人部署方式可能都不一样

    我可以说下我的:

    - GitHub Actions 自动 Docker build && push

    - 搞台 VPS,装好 Docker,然后便排好应用和 Caddy 即可
    ryV60s
        19
    ryV60s  
       2020-03-02 10:48:28 +08:00
    一打开就有黄图 (/ □ \)
    int64ago
        20
    int64ago  
    OP
       2020-03-02 10:59:58 +08:00 via Android
    @ryV60s 不要慌,我接了鉴黄服务,我看到黄图确实貌似已经被自动冻结了 :-)
    miao666
        21
    miao666  
       2020-03-02 11:04:26 +08:00 via Android   1
    楼主,图床的精髓是白嫖其他大厂的资源啊,你用到自己的 OSS 就已经输了。
    哪天你的帖子火了,流量费用好几百你不肉疼吗
    int64ago
        22
    int64ago  
    OP
       2020-03-02 11:08:36 +08:00 via Android
    @miao666 不要慌,我都有考虑

    资源是小事,免费资源多得很,主要是易用度很重要,再说不觉得我这个很快么

    最后,放心,火不起来的
    d5
        23
    d5  
       2020-03-02 11:12:00 +08:00
    很酷,star 一下!

    另外,图床的精髓是白嫖其他大厂的资源啊,这个还是十分有道理 hhh
    cmdOptionKana
        24
    cmdOptionKana      2020-03-02 11:15:33 +08:00
    刚刚上传了个视频,上传速度奇快无比!
    cmdOptionKana
        25
    cmdOptionKana  
       2020-03-02 11:16:51 +08:00
    @int64ago 鉴黄服务贵不贵?
    xinxing260
        26
    xinxing260  
       2020-03-02 11:17:52 +08:00
    可以都放自己的 nas 上
    int64ago
        27
    int64ago  
    OP
       2020-03-02 11:19:44 +08:00 via Android
    @cmdOptionKana 还好,基本可以忽略
    xinxing260
        28
    xinxing260  
       2020-03-02 11:21:35 +08:00
    @d5 你说的很对,图床的精髓是白嫖
    ostrichb
        29
    ostrichb  
       2020-03-02 11:25:49 +08:00 via Android
    @int64ago 刚刚看到有敏感资源,建议筛查一下
    qk1683518
        30
    qk1683518  
       2020-03-02 11:52:36 +08:00
    我日 打开一看都是黄图
    Ev1s
        31
    Ev1s  
       2020-03-02 11:56:24 +08:00
    刚看了一下 你这没有内容筛查的吗,怎么什么奇奇怪怪的东西都有 -_-||
    qiguai2017
        32
    qiguai2017  
       2020-03-02 11:57:16 +08:00
    第一眼看到黄图了
    6IbA2bj5ip3tK49j
        33
    6IbA2bj5ip3tK49j  
       2020-03-02 11:59:22 +08:00
    这个鉴黄意思就是把非黄色图片全部过滤掉吗?
    NeinChn
        34
    NeinChn  
       2020-03-02 11:59:27 +08:00   1
    看了楼上几楼,突然觉得现在图床最大的开销在机器学习判断图片是否合规上
    xxx027
        35
    xxx027  
       2020-03-02 12:33:25 +08:00 via Android
    网站打不开:-(
    ERR_CONNECTION_REFUSED
    duoduo1x
        36
    duoduo1x  
       2020-03-02 12:35:14 +08:00
    无法访问此网站 302.at 拒绝了我们的连接请求。
    int64ago
        37
    int64ago  
    OP
       2020-03-02 12:50:10 +08:00
    @ostrichb
    @qk1683518
    @Ev1s
    @qiguai2017
    @xgfan
    @NeinChn
    @xxx027
    @duoduo1x

    刚刚停服清理违规内容,并且上了新规则,必须登录才能上传
    ShundL
        38
    ShundL  
       2020-03-02 12:56:34 +08:00
    一直好奇想你这么个服务的 oss 每月开销多少。。。
    int64ago
        39
    int64ago  
    OP
       202-03-02 13:05:49 +08:00 via Android
    @ShundL 看情况,目前块把钱
    HereApp
        40
    HereApp  
       2020-03-02 14:10:38 +08:00
    Mac 上可以做成 Here 插件试试
    t/643399
    heiheidewo
        41
    heiheidewo  
       2020-03-02 14:50:53 +08:00   1
    用爱发电吧,最后发现只有自己再用
    dmjob2015222
        42
    dmjob2015222  
       2020-03-02 16:13:58 +08:00
    antd
    azh7138m
        43
    azh7138m  
       2020-03-02 17:24:44 +08:00
    cdn.int64ago.org
    无法在海外访问
    int64ago
        44
    int64ago  
    OP
       2020-03-02 17:45:15 +08:00 via Android
    @azh7138m 感谢提醒,我就说我搭梯子看不到图片呢,CDN 回源参数设置问题,已修改
    marcomarco
        45
    marcomarco  
       2020-03-02 17:48:41 +08:00 via iPhone   2
    千万别发到隔壁 hostloc,不然你现在要准备卖房了
    bigbigeggs
        46
    bigbigeggs  
       2020-03-02 18:28:59 +08:00
    试了试,速度够快。但小心后续的流量,免费流量用完了就得续费了。
    bigbigeggs
        47
    bigbigeggs  
       2020-03-02 18:29:30 +08:00
    再次感谢分享,希望别哪一天服务突然挂了
    wpblank
        48
    wpblank  
       2020-03-02 22:38:08 +08:00   1
    刚试了下,速度还不错。Copy MD 出来的文字 ![] 中能加上图片名字就更好了
    registered
        49
    registered  
       2020-03-03 00:00:05 +08:00
    表示手中有各种免费好用的图床。你这个产品定位不是图床吧,感觉是私人多媒体中心。
    int64ago
        50
    int64ago  
    OP
       2020-03-03 08:18:11 +08:00 via Android
    @registered 我也不知道叫什么,所以标题后面有个 远远不止
    int64ago
        51
    int64ago  
    OP
       2020-03-03 09:41:33 +08:00   1
    @wpblank #48 已加
    chinesestudio
        52
    chinesestudio  
       2020-03-03 09:59:42 +08:00 via Android
    @int64ago 有了 vps 反代就好了 费那么多事
    试试我的搜爱图床 https://i.sofever.com 图都存在本地 freenas 上
    no1xsyzy
        53
    no1xsyzy  
       2020-03-03 12:57:12 +08:00
    @d5 想起那个 google 相册套 cloudflare 的……
    d5
        54
    d5  
       2020-03-03 13:47:38 +08:00
    @no1xsyzy 鬼才,这也可以
    no1xsyzy
        55
    no1xsyzy  
       2020-03-03 14:40:04 +08:00   1
    @d5 看了下准确地说是 Google Drive 套 Cloudflare workers,前端抄的 sm.ms
    某个人站上发布的,看了下,该站用户们用的图床好多换了这个的样子…… 我看到那个帖子没太在意结果发现后来好多用的图床都是那个域名…… (bgm38)
    csdreamdong
        56
    csdreamdong  
       2020-03-03 16:16:45 +08:00
    qr code 其实可以 js 来生成
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2803 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 14:26 PVG 22:26 LAX 06:26 JFK 09:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86