原始文档在 https://github.com/developerw... 如今搬过来.学习 Next.js: 入门
学习 Next.js: 页面之间的导航
学习 Next.js: 使用共享组件
学习 Next.js: 建立动态内容
学习 Next.js: 使用路由掩码建立干净的URL
学习 Next.js: 干净URL的服务器支持
学习 Next.js: 获取数据
学习 Next.js: 部署node
要部署一个Next.js应用程序, 固然咱们首先须要一个可部署的, 已经开发完成的应用程序. 如下面这个Next.js开发的小型博客为例, 来讲明如何部署一个Next.js应用程序.
git clone https://github.com/developerworks/next.js-blog.git cd next.js-blog yarn build yarn start
这样咱们就就实现了一个Next.js应用程序的部署. 简单吧. 可是, 实际的产品环境可没有这么简单, 要解决不少问题, 好比:git
随操做系统的Reboot, 自动启动Next.js应用程序, 咱们这里使用PM2来管理咱们的Next.js进程, 首先咱们使用下面的命令启动这个Next.js应用程序.github
# 自定义Express服务器 # https://github.com/zeit/next.js/tree/master/examples/custom-server-express NODE_ENV=production pm2 start ./server.js --interpreter ./node_modules/.bin/babel-node --watch src --name next-blog # 默认Next.js内置的方式 NODE_ENV=production pm2 start npm --name "next-blog" -- start
其次, 运行 pm2 save
保存进程启动信息, 最后, 运行pm2 startup
建立系统启动服务. 以Ubuntu 16.04为例, 它会建立一个名为pm2-www.service
的SYSTEMD服务.express
经过 systemctl status pm2-www.service
能够查看PM2管理的Next.js应用程序状态.npm
➜ ~ systemctl status pm2-www.service ● pm2-www.service - PM2 process manager Loaded: loaded (/etc/systemd/system/pm2-www.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2017-08-31 15:17:30 CST; 3 days ago Docs: https://pm2.keymetrics.io/ Process: 695 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS) Main PID: 1195 (PM2 v2.6.1: God) CGroup: /system.slice/pm2-www.service ├─ 1195 PM2 v2.6.1: God Daemon (/home/www/.pm2) ├─ 1215 node ./node_modules/.bin/babel-node /usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js ├─ 1221 node ./node_modules/.bin/babel-node /usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js ├─ 1234 node ./node_modules/.bin/babel-node /usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js ... ... ... Aug 31 15:17:30 iZwz99do2ak2kdy3324r6bZ systemd[1]: Started PM2 process manager.
到这儿, Next.js 应用程序就部署完成了.json
Next.js 应用程序默认跑在3000
端口上, 若是咱们运行一个Web门户站点, 那么咱们须要把端绑定在80
, 或443
端口上.segmentfault
注意:
$PORT
在1024如下, 须要ROOT权限, 建议使用以sudo方式启动Nginx, 让Ngnix做为Next的反向代理监听80,或443端口, Next监听其余端口. 并且对于HTTPS配置Nginx的证书也要比Next简单得多, 而且能够做为一个通用的HTTPS解决方案, 下降后端应用服务器的复杂度.
首先配置 package.json
, 修改 scripts 为:后端
"scripts": { "start": "next start -p $PORT" }
而后在项目目录中启动:服务器
PORT=8000 yarn start
固然, 也能够不直接指定端口, 让Next.js 应用程序在Nginx反向代理后面跑.babel
location / { # default port, could be changed if you use next with custom server proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; # if you have try_files like this, remove it from our block # otherwise next app will not work properly # try_files $uri $uri/ =404; }