V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
int64ago
V2EX  ›  分享创造

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

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

    可以直接先体验 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
    第一眼看到黄图了
    xgfan
        33
    xgfan  
       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
       2020-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   ·   我们的愿景   ·   实用小工具   ·   1346 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 23:33 · PVG 07:33 · LAX 16:33 · JFK 19:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.