V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
levelworm
V2EX  ›  程序员

网站开发小白设想了一个存储在 s3 上的静态照片/视频网站,仅供家人访问,请问是否可行?

  •  
  •   levelworm · 8 天前 · 3540 次点击

    我从来没做过网站开发,最近在看 s3 的文档的时候,发现可以直接在上头 host 静态网站,同时可以用 policy 限制访问白名单,于是有了一个构建照片/视频网站的偷懒的想法。

    s3 的结构大致是这样的:

    .../my-static-website/webpage/ -> 这里存储的是网页的 html 和脚本(我也没做过网站开发,不知道需要多少脚本)

    .../my-static-website/photo/ -> 这里存储的是所有照片和视频,底下还有多余的 yyyy-mm-dd 前缀,比如说.../my-static-website/photo/2025-06-01/photo1.jpg

    用白名单策略来限制家人的访问,需要他们的公开 ip 。我感觉这里比较粗糙,因为他们的 ip 很可能经常变化,但是反正就那几个人,直接让他们访问一个给出访问者公网 ip 的网站,把结果告诉我,我手动修改策略就行了。具体如何自动化还没想好,我觉得如果做成手机 apk ,让 app 检测手机的公网 ip ,然后自动更新策略,也应该可行。

    主页的内容大致是:

    就是一张最简单的网页,上面罗列了每个 yyyy-mm-dd 前缀,点进去可以访问一个直接动态生成的、以 yyyy-mm-dd.html 为名字的网页,上面罗列了每个.../my-static-website/photo/yyyy-mm-dd/ 目录下面的图片和视频的缩略图(每一天应该不会超过 10 个物体),再点就可以直接在浏览器中打开图片和视频。

    yyyy-mm-dd 的列表应该可以从 s3 里的前缀中获取,至于如何自动生成网页,我从来没开发过网页,但是想来应该不会太难,可能要写点 javascript 。

    主页上还有一个“上传”按钮,访问者可以点击然后上传文件,直接自动存储到以当天为前缀的 s3 文件里,比如说 2025-06-01 上传,那么直接就进到.../my-static-website/photo/2025-06-01/ 下面。这个估计要修改策略,目前还不知道行不行,得看看文档。“上传”本身肯定也是需要一个脚本的,到时候查查看怎么写。

    整个“产品”就是这样了。使用者不会超过 10 人,他们对界面也无所谓,最重要的是能看到儿子照片和视频。大家觉得可行性如何?安全性的话,如果白名单策略有效的话,还会有什么漏洞吗?

    多谢!

    60 条回复    2025-06-11 11:55:54 +08:00
    SeaTac
        1
    SeaTac  
       8 天前 via iPhone   ❤️ 1
    为啥不用正常的照片分享服务呢 比如 iCloud
    levelworm
        2
    levelworm  
    OP
       8 天前 via Android
    @SeaTac #1
    我还真没这个,目前的 google photo 空间不够,得买。

    我还不知道 s3 存储的费用,我找找看。
    duzhuo
        3
    duzhuo  
       8 天前   ❤️ 1
    @levelworm 你可以用 Cloudflare R2 存 10GB 以下免费
    levelworm
        4
    levelworm  
    OP
       8 天前 via Android
    @duzhuo 多谢,这个空间估计不够,我已经有 20gb 了,我看看多出来的如何计费。另外就是能不能在 CF 上 host 静态网页。
    cue
        5
    cue  
       8 天前 via iPhone   ❤️ 1
    s3 存储只能存原图,你这样的随便加载一下就几个 G 了,钱包根本齁不住,存储费用+CDN 费用+图像处理费用,你就知道云盘的好了。
    abc612008
        6
    abc612008  
       8 天前   ❤️ 1
    喜欢 self hosted 的话可以看 https://immich.app/之类的。公网 IP 可能是 nat 过的,别人也可能会有权限访问。一直需要改的话使用体验也不大好。缩略图的话需要专门生成适用于缩略图的小图片。
    duzhuo
        7
    duzhuo  
       8 天前   ❤️ 1
    @levelworm 我觉得不如部署动态网站了,考虑一下 Cloudflare Workers 或者 Vercel 这种 免费的 Serverless 服务。你还可以更好搞鉴权(比如第三方登录或者单纯的账号密码)而不是访问 IP 白名单。
    facebook47
        8
    facebook47  
       8 天前 via Android   ❤️ 1
    这个网站不难,但是有一点,就是在线看视频,这个对带宽有要求,这就对服务器有要求了,这个不便宜
    cj323
        9
    cj323  
       8 天前 via iPhone   ❤️ 1
    可以。我已经能想象到楼主给家人分发 apk 时满满的成就感了,家人也会感受到楼主的心意。
    billccn
        10
    billccn  
       8 天前   ❤️ 1
    IP 白名单的话等于也对运营商、网安、墙等都白名单了。另外现在独立 IP 很少了,不排除运营商的 NAT 的 IP 地址会经常变换,楼主人工操作感觉不实际。

    如果你和客户之间有可信度通信方式的话(不是微信之类要上报的),可以用 Pre-signed URL ,就是 URL 内嵌入授权。要不然可以在把对象储存藏在一个支持访问控制的 CDN 后面,比如 Cloudflare Access 。
    Actrace
        11
    Actrace  
       8 天前   ❤️ 1
    为啥不用钛盘直链?
    levelworm
        12
    levelworm  
    OP
       8 天前 via Android
    @cue #5
    多谢,看了朋友们的回复,我觉得我想的还是太简单了。。。
    levelworm
        13
    levelworm  
    OP
       8 天前 via Android
    @duzhuo #7
    多谢!我研究一下~~自己在这块的确是什么也不懂。
    levelworm
        14
    levelworm  
    OP
       8 天前 via Android
    @billccn #10
    多谢这些我都不懂,多谢坛贤提醒。
    levelworm
        15
    levelworm  
    OP
       8 天前 via Android
    @facebook47 #8
    多谢,看来我还是考虑少了,我看很多朋友推荐 CF ,我去研究一下。
    levelworm
        16
    levelworm  
    OP
       8 天前 via Android
    @cj323 #9
    多谢鼓励,没有朋友们提醒我是真不懂。
    webs
        17
    webs  
       8 天前   ❤️ 1
    这个得禾斗学上网,才能稳定访问 S3 吧,得加钱
    Aicnal
        18
    Aicnal  
       8 天前 via iPhone   ❤️ 1
    文件名可以用 sha 进行加密
    但是 s3 你要是在公网中访问 得设置好桶策略或者是预签名
    直接用框架的 fileserver 可能更好我觉得
    linuxsir2020
        19
    linuxsir2020  
       8 天前   ❤️ 1
    NAS .../doge
    cpstar
        20
    cpstar  
       8 天前   ❤️ 1
    上 HTTPS 并且加自定义 HEADER 就可以搞定 IP 的问题。但是这么一整套下来,完全是脱裤子放屁,显然有别的便捷的方案。
    akiyamamio
        21
    akiyamamio  
       8 天前   ❤️ 1
    你还不如直接买个极空间,你想要的这个功能都有,并且都是全自动的,可以自动从你手机传上去,然后人脸识别把小孩放到你指定的共享相册里,让家人都可以看到,我就是这么用的
    96
        22
    96  
       8 天前   ❤️ 1
    我推荐微信里的腾讯相册小程序。
    levelworm
        23
    levelworm  
    OP
       8 天前 via Android
    @webs #17
    提醒我了,我在北美,但是家人在境内,是不是不好访问? CF 呢?
    levelworm
        24
    levelworm  
    OP
       8 天前 via Android
    @akiyamamio #21
    多谢,我研究一下,我在北美不知道能不能买得到,不过也许大多数 nas 都有这个功能?他们是怎么让公网其他人访问本机的呢?毕竟我这里也未必有公网 ip 。
    coldle
        25
    coldle  
       8 天前   ❤️ 1
    技术上可行,但是总感觉有点折腾 😂

    如果特指 aws s3 的话得考虑境内访问加速,如果是境内对象存储的话托管网站基本得有个备案过的域名;
    不建议把 ip 白名单作为唯一鉴权方式,不靠谱。作为辅助倒是能轻松筛掉挺多恶意访问;
    直接从 s3 查看照片视频的公网流出费用不会太低。也许可以套 cdn ?如果又用 cdn 又自己计算签名的话,可能必须用 s3 里支持 v2 签名的区域,不然 v4 签名请求起来就很麻烦;

    其他的生成网页 or 上传啥的倒是小事了,纯业务调用,估计你放 ai 里分分钟搓出来
    margoxlive
        26
    margoxlive  
       8 天前   ❤️ 1
    如果是国内的用户访问,阿里云腾讯云等云存储也可以试试,如果需要绑定自定义域名,就用香港的桶,如果是在 app 里面访问则不需要自定义的域名,那就用国内的桶也可以。
    相比 AWS S3 ,国内的云存储提供的图片处理能力无痛实现缩略图功能,以降低访问流量,而且每月的免费处理额度也不少。
    S3 需要借助 lambda 来做,麻烦得很。
    gorvey
        27
    gorvey  
       7 天前   ❤️ 1
    我给你说一个另类的方法,
    用 notion ,底层也是用的 aws s3 ,pro 会员无大小和数量限制,免费版限制 5MB
    好处就是不用开发网页,支持一键发布内容。支持共享编辑
    也支持 API 调用,一个 Pro 给多人使用没问题
    Jianrry
        28
    Jianrry  
       7 天前 via iPhone   ❤️ 1
    不可行,我推荐的方案是 onedrive + alist 。

    onedrive 家庭版有 1T 存储空间,可以上传图片和视频。

    alist 可以挂载 onedrive ,使用 onedrive 的流量。还可以设置密码,限制公开访问。
    fox0001
        29
    fox0001  
       7 天前 via Android   ❤️ 1
    很多 NAS 系统都支持接入 S3 ,例如 Nextcloud
    ETiV
        30
    ETiV  
       7 天前 via iPhone   ❤️ 1
    看来 Lz 有想法但没实操经验😂

    一般不直接用 s3 (或同类服务)做下载:bucket endpoint 域名被暴露的话,有可能被恶意刷爆账单。而且没啥经验的话,很容易配错权限而不自知,很多数据泄露都是因为这个导致的。

    照片都是可以压缩的,原图质量 20GB 的内容,照片可以存一个“高质量”、WebP 压完估计也就 6 ~ 8GB 。视频同理,有个 500 ~ 800Kbps 码率,够看就行了。

    就……你这些需求还是推荐用 Cloudflare 存,赛博菩萨。再买个 VPS ,对接 R2 ,不要直接暴露存储端的信息。

    其实海外做存储最便宜的是 https://www.backblaze.com/cloud-storage/pricing ,但跟 cloudflare 比它业务太单一。

    不过既然要把文件存在海外,你也可以买个 Google One 什么的(不是 GCP )把照片存进去,然后对接 Google Drive API (这个需要 GCP 、也可能会需要付费)来读写照片视频。
    x86
        31
    x86  
       7 天前 via iPhone   ❤️ 1
    直接 qq 相册我 08 年的照片都还在
    importmeta
        32
    importmeta  
       7 天前   ❤️ 1
    流量费很贵啊.
    esee
        33
    esee  
       7 天前   ❤️ 1
    用手机自带的家庭相册服务不行么?学习成本为 0 ,体验也完美契合。比如小米的家庭组 8 个人 2T 空间 450 一年,你自己组 s3 存储,花费贵太多
    ntedshen
        34
    ntedshen  
       7 天前   ❤️ 1
    我用过阿里的 ip 白名单。。。在 ecs 上做个登录页,验证通过则用阿里的 sdk 开端口墙。。。
    痛是不痛,但是最后不还是要绕回到鉴权问题上,最多也就是防点野生爬虫吧。。。
    MFWT
        35
    MFWT  
       7 天前   ❤️ 1
    S3 (如果特指 AWS S3 )价格可能会比较高,千万要注意流量费(网上应该有不少 S3 被刷爆账单的案例)
    rocmax
        36
    rocmax  
       7 天前 via Android   ❤️ 1
    aws 的官方解法肯定是 cloudfront 配合 s3 部署界面,cognito 处理认证,api gateway+lambda 提供 api ,上传照片后自动触发 lambda 生成缩略图,并将元信息存储到 rds 或 dynamo
    RicardoY
        37
    RicardoY  
       7 天前   ❤️ 1
    @levelworm 对象存储比 icloud 要贵
    ranran
        38
    ranran  
       7 天前   ❤️ 1
    好像很少这么搞的,一般是家里搞个便宜的 NAS
    SeaTac
        39
    SeaTac  
       7 天前   ❤️ 1
    @levelworm
    iCloud Photo share album 不占 iCloud 空间 国内访问也没什么问题 权限管理也够用
    但是需要你的家人也用苹果设备
    我觉得对小白来说这是最好的办法了
    monmon
        40
    monmon  
       7 天前   ❤️ 1
    家里的台式电脑 docker 一键启动 immich ( https://immich.app/)就行了,自带账户和存储配额管理,Google 商店和 App Store 都可以下下载开源的 App ,直接连到本地的服务,内网备份照片超级快,如果需要外网访问搞搞内网透传就 OK 了
    emma3
        41
    emma3  
       7 天前   ❤️ 1
    如果大家都是 ios 设备的话,用共享相册功能即可,免费/跨平台不用担心权限问题不用维护。
    总比你肝这种无谓的代码还未必能给家人带来更好的体验。时间不是成本?剩下的时间用来陪一下家人吧。
    liprais
        42
    liprais  
       7 天前   ❤️ 1
    icloud 或者类似的云服务,不然一个不小心被人薅羊毛了就是裤衩亏光
    akira
        43
    akira  
       7 天前   ❤️ 1
    这么搞不是不行,但是体验不是很好。 我反正是直接搞了个白裙,懒得折腾
    lyz1990
        44
    lyz1990  
       7 天前   ❤️ 1
    @levelworm 为啥不像我一样买一个 1 代的 pixel 来无限原始尺寸备份 google photos 呢?
    manateelazycat
        45
    manateelazycat  
       7 天前   ❤️ 2
    老板,懒猫微服了解一下,自带穿透 Tailscale+Cloudflare,自带 MFA 认证, 比 VPS 更安全

    https://x.com/manateelazycat/status/1928628562887889072

    阿里云顶尖黑客评价 http://post.smzdm.com/p/aprqvvl9/

    懒猫微服 = 传统 NAS + Cloudflare + Tailscale + VPN 虚拟专网 + Authy + Nginx + AI 大模型 + 微信小程序 + AppStore + KVM/Docker/PVE + iCloud/TimeMachine + Chrome 电视

    兼顾 iCloud 备份和 AI 相册, 相册体验比 iCloud 好, 内网穿透比 NAS 牛逼

    更多产品详情请看 https://lazycat.cloud
    goodryb
        46
    goodryb  
       7 天前   ❤️ 1
    不如搞台最便宜的成品 nas ,或者网络有公网搞个飞牛 os 也够用了,手机装个 app 分享多方便
    clocean
        47
    clocean  
       7 天前   ❤️ 1
    innei.in 大佬新的项目,昨天逛他博客刚好看到了,效果很好,你可以看看喜欢不

    预览: https://gallery.innei.in

    仓库: https://github.com/Iris-Photo-Gallery/Iris
    qqqyh
        48
    qqqyh  
       7 天前   ❤️ 1
    @duzhuo #3 Cloudflare 有自己的静态网页托管服务 Pages
    DianQK
        49
    DianQK  
       7 天前 via Android   ❤️ 1
    你是否在寻找 https://help.ente.io/self-hosting/ ,private s3 bucket 缓解被刷流量,e2ee 。
    之前用的阿里云 s3 ,但是要打几个 patch ,我换成 cloudflare r2 可以直接用
    Junzh
        50
    Junzh  
       7 天前   ❤️ 2
    如果这里的 S3 是指 AWS S3 ,不建议在 S3 上实现业务逻辑控制,比如权限控制。用 IP 来做 policy 可行,但维护起来并不方便也不安全。你可以找一些开源的 NAS 软件,比如有 v 友提到的 nextcloud , 就支持 S3 作为存储引擎,由 nextcloud 来负责业务层,包括权限。
    一般静态 S3 网站需要配合 CloudFront 来做分发,否则 S3 的 request 和 transfer out 的费用会比较高。
    charles0
        51
    charles0  
       6 天前 via iPhone   ❤️ 1
    对象存储恐怕成本不低,还是用云盘或 NAS 吧
    davin
        52
    davin  
       6 天前   ❤️ 1
    OP 可以考虑使用老牌的照片在线分享网站 flickr ,免费版支持 1000 个项目。创建群组,把家人拉进来就行了。根据需求可以考虑开通 Pro 版服务,不限制数量和存储空间。也不用去费心维护一个自建的网站了。

    PS: flickr 几经易主,目前底层也是用的 AWS 服务,它比 iCloud 和 Google Photos 诞生早个好几年。
    levelworm
        53
    levelworm  
    OP
       6 天前
    @coldle #25
    多谢,这些我都不懂,还得仔细研究一下。。。很多朋友都说了费用的问题,这个的确有点吓人。
    levelworm
        54
    levelworm  
    OP
       6 天前
    @margoxlive #26
    多谢,我目前在北美,家人在中国,所以之前没考虑到中国到北美这里可能遇到的问题。如果我访问国内不太慢的话,用国内的云也成。
    levelworm
        55
    levelworm  
    OP
       6 天前
    @gorvey #27
    这个的确比较另类,我没想过,哈哈。
    levelworm
        56
    levelworm  
    OP
       6 天前
    @Jianrry #28
    这个倒是没想到过,1TB 的内容怎么说也够用了。不过我目前没有家庭版,我去看看。
    009694
        57
    009694  
       6 天前 via iPhone   ❤️ 1
    大多数程序员最需要改的一点是什么都想手搓一个。 手上有了锤子,看什么都是钉子。
    levelworm
        58
    levelworm  
    OP
       6 天前
    @009694 #57
    其实对我来说,手搓才是真正目的,我想转行所以搞点项目。。。不过看楼上的介绍,似乎的确不用手搓。至少不用从头搓。
    Jackm
        59
    Jackm  
       5 天前
    腾讯主机+微信小程序

    有开源的源码,还可以加微信 id 的白名单,别的微信去了只展示广告,白名单去了看照片。

    你的亲戚在华东,就用华东区域的主机,在华北用华北,腾讯在国内的服务器覆盖地域还是蛮多的。

    阿里云什么的都可以,区别在于计费问题(用户超多需要考虑)
    Jianrry
        60
    Jianrry  
       4 天前 via iPhone
    @levelworm

    我上一条回复作废,不再推荐使用 alist 。

    alist 项目已经被国内公司收购,将来可能会进行投毒。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:45 · PVG 10:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.