将 Next.js 部署到 Apache 服务器
Posted
技术标签:
【中文标题】将 Next.js 部署到 Apache 服务器【英文标题】:Deploying Next.js to Apache server 【发布时间】:2020-03-24 12:13:08 【问题描述】:我一直在本地开发 Next.js 网站,现在想在我的 Apache 服务器上设置它(使用 cPanel)。但是,我对 Next.js 和 Node 应用程序非常陌生,不太清楚如何去做。
有没有人成功做到这一点?您能否列出所需的步骤以及服务器上应包含哪些文件?
另外,这可以在子域上完成吗?
谢谢!
【问题讨论】:
您需要在服务器上安装节点(Apache 不会为节点应用程序提供服务)。并使用node dist/index.js
启动服务器
@felixmosh 你能详细说明一下吗?我在哪里运行 node dist/index.js?这样做会对服务器上不使用节点的其他任何东西产生影响吗?
Apache是机器上的一个进程,node可以是同一机器上的另一个进程。
【参考方案1】:
为了让我们在同一个页面上使用一些明确的术语,人们说“服务器”时有两到三个非常不同的意思:
服务器计算机是连接到互联网的计算机,您打算使用它为互联网上的人们提供服务。
服务器程序是您在服务器计算机上运行的一些软件。服务器程序的工作是实际计算对各种请求的响应。
服务器即服务是由公司提供的 Web 应用程序,它存储您的代码,然后根据需要将其通过正确的服务器程序放到服务器计算机上。
在这里,我们还要定义:
编程语言是编写您的网站所使用的语言。有些网站没有语言(并且只是旨在直接返回给用户的原始 html/CSS 文件)。但是,许多网站都有一些代码应该在服务器上运行,然后这些代码的结果应该返回给用户。在您的情况下,您有一台 Machine,除了它正在运行 Program Apache(或者可能是“Apache HTTP Server”)之外,我们不知道它的状况. Apache HTTP 服务器非常古老且经过验证,非常擅长将原始文件返回给用户。它还可以运行一些编程语言如php并返回结果。
但是,Next.JS 是建立在 编程语言 javascript 之上的,而 Apache 不 能够运行这种 JavaScript。 Next.JS 希望它的服务器程序是Node。
所以这里的问题基本上是你有一把锤子,但只有螺丝。您不能使用您拥有的工具 Apache 来解决您需要解决的问题,运行 Node 代码并返回结果。要解决这个问题,您有两种选择:
首先,您可以找到一种访问当前正在运行 Apache 的 Server Machine 的方法,并告诉它在启动时运行指向 Next.JS 代码的 Node。这可能是不可能的,这取决于谁拥有这台机器以及他们如何设置它。
第二个可能更简单的方法是放弃这台机器,转而使用服务器即服务。 Heroku、AWS 和 Netlify 都支持 Next.JS 并有免费套餐。不过,最简单的解决方案可能是将其部署在 Vercel 上,这是一个服务器即服务,由制作 Next.JS 的同一团队运行,它有一个非常慷慨的免费层供您开始使用。
不过,好消息是,是的,next.js 确实完全支持从子域托管。
【讨论】:
以上是关于将 Next.js 部署到 Apache 服务器的主要内容,如果未能解决你的问题,请参考以下文章
使用现有函数将 Next.js 应用部署到 Firebase Functions
如何将带有 Mongodb 的 Next.js 应用程序部署到 Heroku?
使用 getStaticProps() 将 Next.js 部署到 Vercel 的速率限制问题
如何在 aws ec2(linux 实例)上部署 Next js