• Nuxtjs在linux环境下部署笔记


    问题:Nuxtjs在linux环境下部署,ip+端口无法访问?

    一 、解决方案

    方案一:修改package.json文件

    添加如下配置:

    1. "config": {
    2. "nuxt": {
    3. "host": "0.0.0.0",
    4. "port": "3000"
    5. }
    6. }

    方案二:修改nuxt.config.js

    添加如下配置:

    1. server: {
    2. port: 3000, // default: 3000
    3. host: '0.0.0.0', // default: localhost
    4. }

    方案三:自建server.js进行服务端口监听(下文会涉及)

    二、原因分析

    127.0.0.1是本机环回地址,只能在本机进行传输,不进行外部网络传输。而本机IP是本机的局域网IP地址,可以在局域网中进行传输。

    这里的port选项是指定服务器监听的端口号,host选项是指定服务器监听的地址。如果不指定host选项,则默认监听localhost地址。

    0.0.0.0是一个特殊的IP地址,代表的是本机所有IP地址,不管你有多少个网口,多少个IP,如果监听本机的0.0.0.0上的端口,就等于监听机器上的所有IP端口。

    三、拓展知识

    Nuxt脚手架server文件与nuxt.config.js中server配置

    create-nuxt-app现在已经升级到3.2.0版本了,该版本在构建项目时已经不会自动搭建server文件了。如果需要server文件夹,需要指定对应版本的create-nuxt-app脚手架创建,才有server文件夹。

    如果需要server.js文件,可以按照以下模板创建,并在nuxt.config.js中添加自定义配置:

    1. // 使用custom选项来指定自定义的server.js文件的路径。这个选项可以用来配置一些自定义的选项,例如自定义的插件、自定义的中间件
    2. server: {
    3. custom: {
    4. serverPath: './server.js'
    5. }
    6. }

    1. const express = require('express')
    2. const { Nuxt, Builder } = require('nuxt')
    3. const app = express()
    4. // Import and Set Nuxt.js options
    5. const config = require('./nuxt.config.js')
    6. config.dev = process.env.NODE_ENV !== 'production'
    7. async function start() {
    8. // Init Nuxt.js
    9. const nuxt = new Nuxt(config)
    10. const { host, port } = nuxt.options.server
    11. // Build only in dev mode
    12. if (config.dev) {
    13. const builder = new Builder(nuxt)
    14. await builder.build()
    15. } else {
    16. await nuxt.ready()
    17. }
    18. // Give nuxt middleware to express
    19. app.use(nuxt.render)
    20. // Listen the server
    21. app.listen(port, host)
    22. console.log(`Server listening on http://${host}:${port}`)
    23. }
    24. start()

    nuxt.config.js文件中的server选项可以替代自己创建的server.js文件,除了port和host选项之外,还可以配置以下选项:

    详细的配置项参考:配置 · 开始使用Nuxt3 Nuxt中文站

    ● timing: Boolean类型,是否在控制台输出服务器响应时间,默认为false。

    ● https: Object类型,用于配置HTTPS服务器,包括key和cert两个选项。

    ● proxy: Object类型,用于配置代理服务器,包括target、pathRewrite、changeOrigin等选项。

    ● host: String类型,指定服务器监听的地址,默认为localhost。

    ● port: Number类型,指定服务器监听的端口号,默认为3000。

    如果使用自己创建的server.js文件,可以使用Node.js内置的http模块来创建服务器,例如:

    1. const http = require('http')
    2. const server = http.createServer((req, res) => {
    3. // 处理请求
    4. })
    5. server.listen(3000, '0.0.0.0', () => {
    6. console.log('Server is running at http://0.0.0.0:3000')
    7. })

    如果需要配置HTTPS服务器,可以使用Node.js内置的https模块,例如:

    1. const https = require('https')
    2. const fs = require('fs')
    3. const options = {
    4. key: fs.readFileSync('server.key'),
    5. cert: fs.readFileSync('server.cert')
    6. }
    7. const server = https.createServer(options, (req, res) => {
    8. // 处理请求
    9. })
    10. server.listen(3000, '0.0.0.0', () => {
    11. console.log('Server is running at https://0.0.0.0:3000')
    12. })

    如果需要配置代理服务器,可以使用http-proxy-middleware中间件,例如:

    1. const http = require('http')
    2. const httpProxy = require('http-proxy-middleware')
    3. const proxy = httpProxy.createProxyMiddleware({
    4. target: 'http://localhost:8080',
    5. changeOrigin: true,
    6. pathRewrite: {
    7. '^/api': ''
    8. }
    9. })
    10. const server = http.createServer((req, res) => {
    11. if (req.url.startsWith('/api')) {
    12. proxy(req, res)
    13. } else {
    14. // 处理请求
    15. }
    16. })
    17. server.listen(3000, '0.0.0.0', () => {
    18. console.log('Server is running at http://0.0.0.0:3000')
    19. })

    package.json,nuxt.config.js,server.js配置优先级

    在Nuxt.js中,配置服务器可以使用package.json,nuxt.config.js,server.js;

    nuxt.config.js文件中的server选项 与 package.json文件中的config.nuxt选项这两种配置的优先级是相同的,但是nuxt.config.js文件中的server选项更加灵活,可以配置更多的服务器选项。而在package.json文件中的config.nuxt选项中,只能配置host和port两个选项。

    如果在server.js文件中定义了服务器设置,则它将覆盖nuxt.config.js中的server选项。

    pm2 + nuxt部署流程

    Nuxt根目录新建ecosystem.config.js文件

    内容如下: 注意instances,官网是Max,一般cpu几个核就启动几个,我只需要1个就够了,所以改成了1。name也改成你自己应用的名字就可以。

    1. module.exports = {
    2. apps: [
    3. {
    4. name: 'NuxtAppName',
    5. exec_mode: 'cluster',
    6. instances: '1', // Or a number of instances
    7. script: './node_modules/nuxt/bin/nuxt.js',
    8. args: 'start'
    9. }
    10. ]
    11. }

    启动

    调用pm2 start就可以了。这时候Nuxt就可以访问了。使用pm2 list也可以查看到nuxt进程相关的信息。

    未来就可以使用pm2管理Nuxt的启动、重启和终止了。

    详细配置可以参考如下文档

    PM2 配置文件(ecosystem.config.js 字段详细介绍)_卡尔特斯的博客-CSDN博客

  • 相关阅读:
    js中的基础知识点 —— 事件
    【学习笔记】(数学)线性代数-矩阵的概念和特殊矩阵
    解决在 Spring Boot 中运行 JUnit 测试遇到的 NoSuchMethodError 错误
    如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇
    “可信区块链运行监测服务平台TBM发展研讨会”将于11月23日在北京召开
    vue2和vue3有哪些区别和不同
    力扣946:验证栈序列
    shell脚本学习笔记02(小滴课堂)
    Python爬虫selenium安装谷歌驱动解决办法
    HBase概念入门
  • 原文地址:https://blog.csdn.net/zhangyun1107892254/article/details/132807158