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

nextjs 有更优雅的自部署方案么?

  •  
  •   ethusdt ·
    FaiChou · 13 小时 13 分钟前 · 1713 次点击

    官方文档 Nextjs Deploying

    用 nextjs 部署到自己服务器有点麻烦的,必须部署到 vercel 这种 serverless 才方便。

    我使用过笨办法,在服务器上克隆整个项目,服务器执行 build ,然后 start ( tmux/screen/systemctl )。

    或者麻烦一点用 docker 打包一个镜像,配置 github action 的 ci ,某个打包分支有提交会自动打包镜像,服务器再 pull 镜像就比较方便了。但还是要折腾一下 ci 和 docker 。

    或者自己本地打包后 rsync 到服务器,但要踩一下 standalone 之类的坑( node runtime 依赖 node_modules )。

    难道就没优雅一点的么?

    web 页面和 server api 都在一块确实好用,对前端入门后端来讲也算个不错的选择。

    18 条回复    2026-01-01 00:12:51 +08:00
    GzhiYi
        1
    GzhiYi  
       13 小时 5 分钟前   ❤️ 1
    github + docker 不是很好了吗?推送后就自动构建部署无感部署
    rocmax
        2
    rocmax  
       12 小时 59 分钟前 via Android
    ethusdt
        3
    ethusdt  
    OP
       12 小时 55 分钟前
    @rocmax 之前这个官方的镜像模板有 Docker volumes 权限问题。不确定是否有改好没。
    NNNNzs
        4
    NNNNzs  
       11 小时 32 分钟前
    @GzhiYi 我就是这么部署的,具体的配置可以参考我的项目
    @ethusdt https://github.com/NNNNzs/react.nnnnzs.cn
    kulove
        5
    kulove  
       11 小时 20 分钟前 via Android
    不太有 我现在 vercel 每月两百刀左右的费用 上个月找了两三种替代方案 比如 railway 都差点意思 有的测试没问题 但生产一切换就不行了
    woodchen
        6
    woodchen  
       11 小时 16 分钟前
    我一般就是 github 打包 docker, nextjs 使用 standalone 模式, 稳定后还是比较方便的. 也可以集成 dokploy 自动构建部署.

    https://www.sunai.net/t/topic/352

    https://github.com/woodchen-ink/ipinfo/blob/master/Dockerfile

    供参考
    doveyoung
        7
    doveyoung  
       11 小时 2 分钟前
    最近才试过,standalone + docker ,Dockerfile 里要注意把静态文件也拷贝一份,用的 node:22-alpine 镜像,最终大小在 300M 。
    在 vercel 部署的话,好像不遵循 standalone ,我单独做了个 build:vercel 的编译命令
    334132462
        8
    334132462  
       9 小时 42 分钟前
    如果能解决网络问题 dokku 是一个很不错的方案
    56way
        9
    56way  
       9 小时 36 分钟前
    我都是免费蹭 cloudflare 的额度,比 vercel 方便多了。。
    lscho
        10
    lscho  
       9 小时 25 分钟前
    github + docker 就是最好的方式
    cqx2005
        11
    cqx2005  
       8 小时 58 分钟前
    frontend:
    container_name: frontend
    command: /bin/bash -c "cd /app && ./node_modules/.bin/next start"
    restart: always
    image: node:20.18.0
    environment:
    TZ: Asia/Shanghai
    NODE_ENV: production
    logging:
    options:
    max-size: "10m"
    max-file: "10"
    ports:
    - "3000:3000"
    volumes:
    - "./frontend:/app"
    C64NRD
        12
    C64NRD  
       8 小时 48 分钟前
    给全栈项目写了个部署的命令行工具( github+docker ) https://nodebbs.com/topic/58
    wuzhanggui
        13
    wuzhanggui  
       8 小时 41 分钟前
    我是前后端一起的,github 上配个 ci ,配的时候是麻烦,但是一劳永逸,提交代码了就部署上去了
    参考我的 https://github.com/wurencaideli/dumogu-admin
    bbbblue
        14
    bbbblue  
       7 小时 41 分钟前
    我几个全是官方 docker 模版部署的
    但是自己部署就是坑。。
    很多特性自部署是负优化 比如 static 生成(不是全部 static 导出) ppr 这类 缓存相关( vercel 会把他们部署到边缘节点去 自己 docker 部署就全在内存里了) 都会导致内存大量增加。。。一个总共加起来不到 100 个页面,十来个 route 的 nextjs 服务开着这些功能能吃掉上 G 内存。。。
    rocmax
        15
    rocmax  
       6 小时 3 分钟前 via Android
    @ethusdt 我司从 nextjs13 开始就使用 standalone 模式部署在 eks ,你说的 volume 权限是什么场景?
    如果愿意折腾的话有开源的部署方案 https://opennext.js.org/ 但我觉得这么搞不如给 vercel 交钱。
    ethusdt
        16
    ethusdt  
    OP
       5 小时 28 分钟前
    @rocmax #15 依稀记得之前踩过的坑是这样的:docker build 时候用的 root 权限,但是最终 dockercompose 运行时候镜像内部用户降权无法访问一些资源。并且 volumn 卷权限问题表现不一致,服务器经常用 root 来跑,而本地 mac 环境又不是 root 运行 docker 。可能是 Dockerfile 内部这个 nextjs user 权限导致的,即使配置了 gid/uid 也是有点问题。忘记当时是怎么解决了,可能 AI 给解决了,当时没查下到底是啥问题。
    minmaxflow
        17
    minmaxflow  
       4 小时 17 分钟前
    我最近也碰到一样的问题,我是因为用户在国内,项目部署在阿里云上,使用 ansible(rsync) 配合 standalone 模式, 使用 nginx+pm2, 是比较繁琐。
    frayesshi1
        18
    frayesshi1  
    PRO
       1 分钟前
    直接 tmux+npm run
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1693 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
    ♥ Do have faith in what you're doing.