【问题标题】:How to deploy NextJS application to Linux Server (CentOS 7) - VPS如何将 NextJS 应用程序部署到 Linux 服务器 (CentOS 7) - VPS
【发布时间】:2020-06-02 11:56:12
【问题描述】:

我有一个关于构建应用程序的问题。我正在使用支持 node.js 的简单 VPS。现在我不知道如何将我的 next.js 应用程序构建到生产环境中。

我想将我的应用程序部署为静态文件。

我认为我应该使用next build && next export 然后将 dir 复制到服务器,但在此过程中,我遇到了一些问题 - 当我更改路由时 - 一切正常,但如果我刷新页面 - 找不到页面因为服务器正在目录中寻找这个文件。那么如何在生产模式下使用 VPS 服务器和静态文件部署我的 nextjs 应用程序呢?

我尝试了一件可能无法正常工作的事情,或者我做错了什么。 我添加了 nodejs express 服务器与

const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';

const app = next({dev});
const router = express.Router();
const handle = app.getRequestHandler();

app.prepare()
    .then(() => {

        const server = express();

        server.get('*', (req, res) => {
            return handle(req, res);
        });

        server.listen(3000, (err) => {
            if (err) throw err;
            console.log('> Ready on http://localhost:3000');
        });
    });



并使用永久库NODE_ENV=production node server.js 启动服务器,它工作正常,但似乎这是以错误的方式工作 - 似乎它是像开发模式一样的普通服务器 - 所以不应该那样。 (我在右下角看到了雷声图标,并且我看到了所有与开发模式相同的文件)。

我想将所有内容部署为静态文件。

感谢您的帮助!

【问题讨论】:

    标签: node.js reactjs linux deployment next.js


    【解决方案1】:

    在您buildexport 之后,您需要以某种方式提供这些文件。 Express 服务器工作的原因是因为您正在启动一个 HTTP 服务器来提供文件。

    因此,您需要使用静态托管服务提供商(即Vercel 或 Amazon S3)来提供这些文件。否则你应该在你的linux机器上启动一个服务器,使用serve之类的东西在一个端口上提供服务,类似于你的Express服务器将它作为localhost:3000服务,然后暴露在你的VPS上。

    【讨论】:

    • 好的 :) 但在这种情况下,这不会是静态页面,对吧?我想要的只是使用静态页面来改善 SEO。如果我要使用这个库,我应该在没有开发模式的情况下使用哪个命令来正确地提供它?
    • 我按照本教程正确地做所有事情并通过 Amazon S3 ([link]medium.com/@kyle.galbraith/…) 托管静态 HTML,但不幸的是,当我要去某个页面并刷新它时 - 我仍然遇到同样的问题- 找不到文件。
    • 从这个问题看来,另一个人也遇到了这个问题stackoverflow.com/questions/57438566/…我没有将 S3 与 Next 一起使用,所以很抱歉我没有任何进一步的帮助。
    • 我遇到了问题。问题出在 config 和 out dir 没有正确的文件...奇怪的事情,非常感谢您的帮助和时间!
    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2011-11-02
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多