您好,我使用 NextJs 创建我的项目,它已准备好用于生产,但我有点困惑我们如何托管我已经运行以下命令的项目
npm run build
npm run start
现在我不确定我们需要上传哪个文件夹到服务器,我们需要上传完整的项目还是只上传 .next 文件夹,您可以帮助我吗?如何托管 NextJs 应用程序。
提前致谢。
您好,我使用 NextJs 创建我的项目,它已准备好用于生产,但我有点困惑我们如何托管我已经运行以下命令的项目
npm run build
npm run start
现在我不确定我们需要上传哪个文件夹到服务器,我们需要上传完整的项目还是只上传 .next 文件夹,您可以帮助我吗?如何托管 NextJs 应用程序。
提前致谢。
此链接可能对您有用。
这非常简单!首先,您希望 Nodejs 知道它正在生产中运行。因此,您可以像这样在生产环境中运行该应用程序NODE_ENV=production npm run start
:
但是您可以进行一些增强,以使您的服务器更好地做好生产准备。使用压缩或快速代理(例如 nginx)会做很多额外的工作,使服务器更快、更小。
请在此处发布您的问题:https://spectrum.chat/next-js,按照问题模板
看起来“下一个导出”在“out”文件夹上创建/导出静态页面,我想将其部署到 nginx,这是在生产服务器中部署它的正确方法吗?或者我在这里遗漏了什么吗?顺便说一句,我们正在使用 nodejs/mongodb 作为 api/后端。我不知道为什么我们有“下一个构建”以及“下一个导出”和“下一个构建”之间有什么区别。
只需将“导出”任务添加到 package.json 并运行“npm run-script prod”或您命名的任何名称即可。它会生成一个“out”文件夹,其中包含您需要的所有内容。只需将“out”文件夹中的内容复制到您的服务器即可。
包.json
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start",
"prod": "next export"
},
下一个导出是使用 nginx 在生产中运行下一个构建的唯一方法吗?
嘿,我对 next.js 很陌生,我正在尝试将我的项目部署到 Windows Web 服务器。我已经安装了node和iisnode,但我真的不知道如何让它工作。
@rezaHashemi8139 你能在 iis 上部署下一个 js 应用程序吗?
这个官方页面关于在生产中运行 Next.js 的内容非常薄弱。
例如:如何启用访问日志?是否需要前端 Web 服务器 (nginx)?为什么/为什么不?有哪些权衡?在 Kubernetes 中运行 next.js 的参考架构是什么?
有人可以向我指出有关这些主题的任何文献吗?
https://nextjs.org/docs/deployment#self-hosting
它托管一个 Node.js 应用程序,实际上没有什么特别需要的。
@timneutkens 您链接的自托管文档表示,要将混合页面节点服务器部署到生产环境,您应该“可能将 .next、node_modules 和 package.json 复制到您的服务器”。
这里的“潜在”是什么意思?特别是,什么决定了何时node_modules
需要?我的node_modules
文件很大,将其复制到服务器似乎无法达到 Webpack 的 tree-shaking 的目的,所以我想知道是否有办法解决这个问题。
您的项目依赖的所有node_modules都需要安装,包括next。树摇动应用于客户端捆绑,而不是服务器端。服务器端所有的node_modules都被标记为外部的。
感谢您及时的回复!新serverless
目标是否可以解决这个问题并在服务器上拥有较小的版本?
取决于您的部署方式,使用无服务器,您必须将每个页面部署为单独的功能(而不是一台服务器),否则它将否定无服务器目标的优化
这是我部署 Next.JS 应用程序的方法,也许会对某人有所帮助。
这是我的 bash 脚本,它正在运行Jenkins
以构建必要的文件
rm -rf $WORKSPACE/my-nextjs-project
git clone git@gitlab.com:me/my-nextjs-project.git $WORKSPACE/my-nextjs-project
cd $WORKSPACE/my-nextjs-project
git checkout master
yarn install
yarn build
mkdir my-nextjs-project
mv public/ my-nextjs-project/
NEXT_BUILD_ID=$(cat build/BUILD_ID)
LAST_COMMIT=$(git rev-parse HEAD)
# That's just for debugging purposes
echo "{git: ${LAST_COMMIT}, ci: ${BUILD_ID}, next: ${NEXT_BUILD_ID}}" > my-nextjs-project/CI
# trim package.json and leave only things that you need in production
cat package.json | jq '. | {name: .name, private: true, version: .version, scripts: {start: .scripts.start}, dependencies: .dependencies}' > my-nextjs-project/package.json
# I'm using next-compose-plugins, so here we need to dump config. If you have next.config.js as an object then just copy config file
NEXT_CONFIG=$(node -e 'var configFile = require("./next.config.js"); var config = configFile([], {}); delete config.webpack; console.log(JSON.stringify(config));')
echo "module.exports = ${NEXT_CONFIG}" > my-nextjs-project/next.config.js # result => {distDir: "build", poweredByHeader: false}
mv build my-nextjs-project/
cd my-nextjs-project
yarn install
cd $WORKSPACE/my-nextjs-project
# dump folder tree structure just for Jenkins console output logs
tree -h -L 1 build/
tar czf $WORKSPACE/my-nextjs-project.tar.gz my-nextjs-project
cd $WORKSPACE
rm -rf $WORKSPACE/my-nextjs-project
将结果上传到您的服务器(scp
例如,将您的客户端 ssh 密钥添加到.ssh/authorized_keys
服务器端以绕过密码验证),解压上传的存档(例如/var/www/my-nextjs-project
)并运行它。
您可以将节点应用程序安装为systemd
服务。这是我的/etc/systemd/system/nextjs.service
[Unit]
Description=My Next.JS app
[Service]
ExecStart=node ./node_modules/.bin/next start -p 6200
Restart=always
User=www-data
Group=www-data
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/my-nextjs-project
StandardOutput=append:/var/log/www/my-nextjs-project/common.log
StandardError=inherit
[Install]
WantedBy=multi-user.target
既然现在是一项服务,您可以sudo systemctl start|stop|restart nextjs
我使用 Java 作为我的项目的 API,因此我将nginx
API 请求路由到 Java。 Next.js 在 port 上运行6200
,Java 在62000
.
server {
listen 80;
server_name my-nextjs-project.com www.my-nextjs-project.com;
access_log /var/log/nginx/my-nextjs-project/access.log;
error_log /var/log/nginx/my-nextjs-project/error.log;
root /var/www/my-nextjs-project/public;
location / {
proxy_pass http://localhost:6200;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host 127.0.0.1;
}
location ~ ^/api/v1/ {
proxy_pass http://localhost:62000; # Pass API calls to Java api
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host 127.0.0.1;
}
}
非常有爱❤️
我如何访问.next/server
Vercel?
我有一个package.json
像这样的脚本:
{
"export": "next export",
"build": "next build && npm run export && npm run build:rss",
"build:rss": "node ./.next/server/scripts/build-rss.js",
"start": "next start",
}
它有build:rss
指向./.next/server/scripts/build-rss.js
但在 Vercel 上找不到它。如何在 Vercel 上正确指向它?我收到以下错误并且无法部署我的网站:
> node ./.next/server/scripts/build-rss.js
15:14:05.786 internal/modules/cjs/loader.js:968
15:14:05.786 throw err;
15:14:05.786 ^
15:14:05.786 Error: Cannot find module '/vercel/workpath0/.next/server/scripts/build-rss.js'
15:14:05.786 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
15:14:05.786 at Function.Module._load (internal/modules/cjs/loader.js:841:27)
15:14:05.786 at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
15:14:05.786 at internal/main/run_main_module.js:17:47 {
答案是使用.serverless
而不是.server
因为 Vercel 有一个.serverless
目录,所以我将build:rss
脚本更改为:
{
"export": "next export",
"build": "next build && npm run export && npm run build:rss",
"build:rss": "node ./.next/serverless/scripts/build-rss.js",
"start": "next start",
}
@message 谢谢老兄!你救了我)