V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wuhaoworld
V2EX  ›  程序员

国内部署基于 Next.js 的项目,最优雅的方案是什么?

  •  
  •   wuhaoworld · 7 天前 · 2605 次点击

    小项目,一天可能几百个访问,希望能最低成本跑起来:

    方案 1:传统方式,pm2 管理

    双 11 活动 ¥99 买了阿里云便宜的 2 核(vCPU) 2 G 的机器,采用传统方式部署,在服务器上 build ,然后用 pm2 管理,nginx 代理,组件稍微多了点,build 过程直接就不响应断连了... 看来可能得 4G 内存起步。

    所以合理方式应该先本地 build 好,直接将 build 后的代码传到生产服务器?

    方案 2:自己在服务器上跑 Docker

    更规范一些,但配置要求比方案 1 更高

    方案 3:

    国内有没有像 Vercel 、Netlify 、Onrender 之类的服务或平台?求推荐

    31 条回复    2024-11-11 22:06:34 +08:00
    wentx
        1
    wentx  
       7 天前
    Github Action + Local Runner ?
    magicflower
        2
    magicflower  
       7 天前 via Android
    目前用的是方案一
    服务器上打包部署 2h2g 完全够用,组件数量 100 左右。
    wuoty
        3
    wuoty  
       7 天前 via Android
    各类 serverless 平台,比如阿里云函数计算,腾讯云的 serverless
    Alexf4
        4
    Alexf4  
       7 天前
    CF ?
    IvanLi127
        5
    IvanLi127  
       7 天前   ❤️ 1
    在生产环境 build 可太偷懒了...
    Gilfoyle26
        6
    Gilfoyle26  
       7 天前
    国内为啥没有像 Vercel 、Netlify 、Onrender 之类的服务或平台呢?
    shiny
        7
    shiny  
       7 天前
    推荐在方案 2 上用 kamal-deploy.org ,在本地 build 好后,服务器上拉下来部署,内存占用不多
    还有几个好用的功能:
    服务器自动部署 SSL 证书
    平滑部署
    回滚

    但只在国外服务器上用过,不知道国内体验如何
    shiny
        8
    shiny  
       7 天前
    也可以自建类似 vercel 的平台,比如 coolify 、dokploy ,但内存消耗就有点多了。
    alansfinal
        9
    alansfinal  
       7 天前
    zeabur
    amlee
        10
    amlee  
       7 天前   ❤️ 1
    自部署一个 dokploy ,不过推荐 2c4g 的机器
    shui14
        11
    shui14  
       7 天前
    静态资源放 cloudflare ,api 放自己 vps ,几百个访问的话,搬瓦工最丐的 1 核 0.5g 都可以了
    maxmeng936
        12
    maxmeng936  
       7 天前
    不是内存的问题,是因为磁盘存储空间太小,应该只有 40G 吧,下载项目依赖时,磁盘读写很容易卡死
    COW
        13
    COW  
       7 天前 via Android
    没太明白,本地 build 不行么,另外方案 1 和 2 不冲突啊
    crackidz
        14
    crackidz  
       7 天前
    1 和 2 的资源差距没那么大,不过 2 要省事很多。如果你有 CI/CD pipeline 的话,这种安装依赖 build 过程可以在 pipeline 里执行,无需在服务器上运行。
    madtwilight
        15
    madtwilight  
       7 天前 via Android
    自建 dokploy.com +1 ,很好用
    huijiewei
        16
    huijiewei  
       6 天前
    @COW 本地 build 有些二进制依赖并不能兼容。一般都是建议和服务器同平台 build
    TheWalkingDead
        17
    TheWalkingDead  
       6 天前
    2G 内存服务器 build next.js ?想多了,我之前有个 8G 的都够呛。
    Sunzehui
        18
    Sunzehui  
       6 天前
    build 产物传 git 上,打包后 push 触发在服务器执行 pm2 reload
    COW
        19
    COW  
       6 天前
    @huijiewei 毕竟 OP 资源紧张,没法同平台 build 。如果没有调用 native 方法的话,先在本地弄个 docker 环境,直接把代码放在 docker 环境下,在本地 docker 里按方案 1 的方式 build 就行了,至于 nginx 、pm2 也放到 docker 里,服务端只需要一个镜像。
    leo72638
        20
    leo72638  
       6 天前
    @Gilfoyle26 #6 因为国内网站都要备案
    sfdev
        21
    sfdev  
       6 天前 via Android
    用 Github Action 自动构建上传到服务器。
    xiaoming1992
        22
    xiaoming1992  
       6 天前
    @magicflower 我去,老哥项目有 github 方便看一下吗?在我的 1h2g 小鸡上试过,随便写一点东西,就爆内存了,看看你有没有做什么优化
    xiaoming1992
        23
    xiaoming1992  
       6 天前
    @sfdev Github Action 能传到国内服务器上吗?我试过被墙了
    sfdev
        24
    sfdev  
       6 天前 via Android
    @xiaoming1992 现在不知道,我之前做过是可以上传的。
    magicflower
        25
    magicflower  
       6 天前   ❤️ 1
    vacker
        26
    vacker  
       6 天前 via iPhone
    @xiaoming1992 可以上传
    hugepizza
        27
    hugepizza  
       5 天前 via iPhone
    github action 3 步
    1. build docker image
    2. push 到阿里云的免费仓库
    3. ssh 到你的🐔上 触发更新镜像脚本
    WinstonCharles
        28
    WinstonCharles  
       5 天前
    可以试试 dokploy
    wuhaoworld
        29
    wuhaoworld  
    OP
       5 天前
    @amlee @shiny @madtwilight @WinstonCharles 感谢各位,尝试安装 dokploy ,因为是国内环境,还需要在服务器上配置科学上网,由此导致各种莫名其妙的问题,太心累...
    amlee
        30
    amlee  
       5 天前
    @wuhaoworld 国内机器不要配科学环境,容易被 ban 机器和账号。
    去 GitHub 上找一下使用 cloudflare woker 搭建 docker hub 代理的脚本,然后自己搭一个自己用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2883 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:45 · PVG 16:45 · LAX 00:45 · JFK 03:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.