记录Nuxt 3 官网项目的一次部署

本来以为就是一次简单的部署,之前也是部署过几次nuxt项目了,所以,并没有要记录的想法。但是过程出现了很多问题,最后考虑还是写下来吧。留个记录(完整的配置部署过程)

这里我将要说明两种部署方式以供选择,直接开始...

一、工程相关

由于官网内容较少,无需单独运营,而且给的时间也比较少,故而,没有后端接口,没有后台管理,无需跟后端进行接口交互,静态资源也都是在工程里面

1. 工程配置 -- package.json

平平无奇,最开始的时候,我连 "start": "nuxt start", 都没有加入

{
  "name": "my-nuxt-app",
  "private": true,
  "type": "module",
  "scripts": {
    "build": "nuxt build",
    "dev": "nuxt dev",
    "start": "nuxt start",
    "generate": "nuxt generate",
    "preview": "nuxt preview",
    "postinstall": "nuxt prepare"
  },
  "dependencies": {
    "axios": "^1.6.8",
    "nuxt": "^3.11.1",
    "vue": "^3.4.21",
    "vue-router": "^4.3.0"
  },
  "devDependencies": {
    "less": "^4.2.0"
  }
}

2.工程配置 -- nuxt-config.ts

网上有很多文章介绍这个nuxt.config 的相关配置,如何如何修改,如何如何部署,我这只介绍最简单、最少的配置来实现部署,如果想要学习,可以看看官方文档或者其他的问题,很多

这里没有配置server,所以默认都是在 3000 端口

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: {enabled: true},
  pages: true
})

二、开始部署

阿里云服务器 ubuntu 24

1.基础环境 -- node npm

云服务器使用的是和本地相同版本的 node-v18.20.3,尽量保持一致

// nodejs官网下载 node-v18.20.3-linu-x64.tar.xz
// ftp 上传到服务器 /usr/local/src/ 

// 解压
tar -xvf node-v18.20.3-linu-x64.tar.xz

// 重命名
mv node-v18.20.3-linux-x64 nodejs

// 软连接
npm: ln -s /usr/local/src/nodejs/bin/npm /usr/local/bin
ln -s /usr/local/src/nodejs/bin/node /usr/local/bin

// 检查
npm -v
node -v

2.基础环境 -- pm2

利用pm2来启动nuxt项目,所以需要安装

// 安装
npm install -g pm2

// 软连接
ln -s /usr/local/src/nodejs/bin/pm2 /usr/local/bin

// 检查
pm2 -v

3.工程上传

我这里 将本地工程的所有文件压缩,上传到服务器

// 新建路径 /root/workspace/website/

// 解压缩
unzip my-nuxt-app.zip

// 进入文件夹
cd my-nuxt-app

// 删除 pnpm-lock.yaml or npm-lock.yaml
rm -rf pnpm-lock.yaml

// 删除 node_modules
rm -rf node_modules/

// 安装依赖
pnpm install // npm install

// 运行工程
npm run dev

能够看到工程已经运行在了 3000 端口 

问题来了,这样只是作为了一个前台进程运行,关闭了终端或命令行,进程就会被终止。

三、借助PM2 -- 第一种方式

前面已经安装了pm2,这里先说一下第一种方式,已经验证成功

// 进入工程根目录
cd /root/workspace/website/my-nuxt-app/

// 执行 hll是pm2的实例名称,2 代表实例数量,用于负载均衡,如果-i 0或者-i max,则根据当前机器核数确定实例数目
pm2 -i 2 -n hll start ./node_modules/.bin/nuxt -- start

// 查看
pm2 list

// 保存
pm2 save

到这里,也就成功了,这就是我第一次的部署过程,nginx、https、自启动 放到后面 

参考了这篇文章 nuxt pm2使用、启动、问题解决方案_pm2启动nuxt-CSDN博客

四、借助PM2 -- 第二种方式

为什么会有第二种,其实都是一样的;原因是,第一次部署完成后,也能正常使用,但是服务器发生了迁移,系统还是ubuntu24,我还是按照第一次的操作,发现不行了

pm2 list

pm2 log hll

这个错误可能是由于几个原因造成的:

脚本损坏:nuxt 脚本可能已损坏。这可能是由于不正确的 npm 安装、网络问题或其他原因导致

环境差异:虽然不太可能,但您的服务器上的 shell 环境可能与脚本预期的不同

PM2 配置:PM2 启动脚本的方式可能不正确,导致无法正确解释 nuxt 脚本

重新安装依赖,发现没什么卵用

好...好...好...,我直接一个大跳,直接运行 node_modules/.bin/nuxt

什么情况啊,直接给 ssh 干掉了???报错找不到文件???

进入 node_modules/.bin

 

要解决这个问题,你可以尝试以下:

检查 nuxt 脚本内容
进入 node_modules/.bin/ 目录,检查 nuxt 文件的内容。这通常是一个指向 nuxt 包中某个可执行文件的符号链接或脚本。确保脚本中的路径和命令是正确的。

重新安装依赖
删除 node_modules 文件夹和 package-lock.json 文件(如果你使用的是 npm),然后重新运行 npm install

使用全局安装的 nuxt
如果你全局安装了 nuxt(通过 npm install -g nuxt),你可以尝试直接运行 nuxt 命令,而不是通过 node_modules/.bin/ 目录。

检查环境变量
确保 PATH 环境变量没有包含可能导致路径解析错误的条目。特别是,如果 PATH 中包含了一个名为 nuxt 的目录,这可能会干扰 Node.js 的模块解析。

使用 npm scripts
在 package.json 文件中定义一个 start 脚本,例如 "start": "nuxt start",然后通过 npm start 命令来启动你的 Nuxt 应用。这通常是一个更安全、更可移植的方法,因为它不会依赖于特定于项目的 node_modules/.bin/ 目录。

检查文件权限
确保 node_modules/.bin/nuxt 文件具有执行权限。你可以使用 chmod +x node_modules/.bin/nuxt 命令来添加执行权限。


这里采用  npm scripts

// package.json 加入start

"start": "nuxt start",

// 执行
pm2 start npm --name "my-nuxt-app" -- run start

到这里,完成部署

五、PM2自启动

创建 systemd 服务文件
在 /etc/systemd/system/ 目录下创建一个新的 systemd 服务文件,例如 pm2-my-nuxt-app.service

编辑服务文件
将以下内容添加到服务文件中(你可能需要根据你的实际情况进行调整):注意:替换 your-usernameyour-groupvX.X.X 和 /path/to/your/project/package.json 为你的实际值。

[Unit]  
Description=PM2 process manager  
After=syslog.target network.target  

[Service]  
Type=simple  
User=your-username # 替换为你的用户名  
Group=your-group   # 替换为你的用户组名,通常与用户名相同  
Environment=PATH=/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin:/home/your-username/.nvm/versions/node/vX.X.X/bin:/home/your-username/.npm-global/bin  
Environment=NODE_ENV=production  
ExecStart=/usr/local/bin/pm2 start /path/to/your/project/package.json --name "my-nuxt-app"  
ExecStop=/usr/local/bin/pm2 stop my-nuxt-app  
ExecReload=/usr/local/bin/pm2 reload my-nuxt-app  
Restart=always  

[Install]  
WantedBy=multi-user.target

重新加载 systemd 配置
运行 sudo systemctl daemon-reload 以重新加载 systemd 配置文件。

启用并启动服务

运行 sudo systemctl enable pm2-my-nuxt-app.service 和 sudo systemctl start pm2-my-nuxt-app.service 来启用并启动服务。

六、Nginx 配置

// 更新升级
apt-get update

// 安装nginx
apt install nginx

// 进入
cd /etc/ngxin/

// 编辑 nginx.conf
vim nginx.conf

这里比较重要的点 user root 

user root;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
		        ##
        # Virtual Host Configs
        ##

        # include /etc/nginx/conf.d/*.conf;
        # include /etc/nginx/sites-enabled/
        server {
                listen    80;
                server_name    hetingtech.com;
                rewrite ^(.*) https://$server_name$1 permanent; # 这里重定向到https
                }

        server {
                listen       443 ssl;
                server_name  xxxx.com; # 域名或ip
                #charset koi8-r;
                #access_log  logs/host.access.log

                ssl_certificate /root/workspace/website/hetingtech.com.pem;   # ָ证书
                ssl_certificate_key /root/workspace/website/hetingtech.com.key;  # ָ证书
                ssl_session_cache    shared:SSL:1m; # 开启缓存 1M
                ssl_session_timeout  5m; # 指定客户端可以重用会话参数的时间
                #ssl_protocols TLSv1.2 TLSv1.3;
                ssl_ciphers HIGH:!aNULL:!MD5; # 选择加密套件
                ssl_prefer_server_ciphers on; # 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件

                location / {
                        proxy_buffer_size 4096k;
                        proxy_buffers 4 4096k;
                        # proxy_busy_buffers_size 64k;
                        client_max_body_size 1000m;
                        proxy_pass http://localhost:3000;
                }

                #error_page  404              /404.html;

                # redirect server error pages to the static page /50x.html
                #
                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                    root   html;
                }
        }
}
// 检查
nginx -t

// 启动 nginx
systemctl start nginx

// 检查
systemctl status nginx

七、阿里云

1.安全组规则修改

如果没有配置安全组,端口将无法访问

2.DNS域名解析配置

记录值修改为你的阿里云的公网ip

3. ICP备案

备案需要填写公司的信息,主体负责人需要生物验证,需要经过 阿里云APP 上传主体负责人的身份证,公司的运营执照,为了便于通过验证,上传的材料要直接拍照原件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

electron-Vue: Module parse failed: Unexpected character ‘ ‘

​ electron-Vue项目中,我自己写了一个node的C扩展(xx.node),然后在.vue文件里import它,然后运行npm run electron:serve,报错如下: ​​ electron-Vue打包默认使用webpack,默认情况下webpack没…

Vue2.0项目搭建流程(一步一步教你如何初始化一个前端项目)

文章目录 1.环境准备2.项目初始化3.删除不必要的初始化文件 1.环境准备 1.winr在cmd终端界面输入node -v,检测node环境是否安装成功 2.cmd终端界面输入vue -V,检测前端脚手架vue/cli是否安装成功 没有显示则终端输入以下指令 //以下内容三选一 cnpm …

vue的elementUI的el-tree的选择

有一棵树型的数据,需要实现:在外部加一个 全选和不全选的按钮,去全部勾选树结构里面每一项的选框。 当点击勾选全选的时候,树的每一项都勾选; 当取消全选的时候,树的每一项都不勾选; 当选树的其中一项时,全选按钮是半选状态; 实现效果如下: <template><…

骨传导耳机哪个牌子好?精选5大品质上乘的尖货骨传导耳机推荐!

作为一名数码博主&#xff0c;我已有十余年的行业经历&#xff0c;其中&#xff0c;骨传导耳机作为近年来新兴的技术产品&#xff0c;凭借特殊的传声方式和佩戴方式吸引到了不少消费者&#xff0c;我也是亲自体验并评测了数十款。基于这些经验&#xff0c;我深感有必要提醒大家…

玩转Matlab-Simscape(初级)- 09 - 在Simulink中创建曲柄滑块机构的控制模型

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 09 - 在Simulink中创建曲柄滑块机构的控制模型 ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 09 - 在Simulink中创建曲柄滑块机构的控制模型 前言一、问题描述二、创建模型2.1 识别机构中的刚体2.2 确定刚…

标准发布 | 反渗透和纳滤水处理膜修复再利用技术指南

一、编制单位 本文件由浙江大学、中华环保联合会水环境治理专业委员会提出。 本文件由中华环保联合会归口。 本文件主编单位&#xff1a;浙江大学、河南一膜环保技术有限公司、安徽精高水处理有限公司、国能龙源环保有限公司、湖南沁森高科新材料有限公司。 本文件参编单位&…

C++ | Leetcode C++题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> getRow(int rowIndex) {vector<int> row(rowIndex 1);row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row;} };

简搭云可视化大屏设计器:前端技术探索与实践

一、引言 随着数字化时代的到来&#xff0c;数据可视化已经成为企业决策和业务分析不可或缺的一部分。为了满足用户对于数据展示的直观性、便捷性和高效性需求&#xff0c;简搭云可视化大屏设计器应运而生。本文旨在探讨简搭云可视化大屏设计器的前端技术实现&#xff0c;并通…

店匠科技亮相VivaTech,新零售解决方案引关注

在中法建交60周年之际,两国关系持续发展并共同推动双方在人工智能和全球治理领域达成重要合作。同时,浙江-法国高新产业创新合作对接会在巴黎顺利举行,进一步促进了中法两国在高新技术领域的交流与合作。 紧跟此次访问的步伐,众多中国科技创新企业齐聚巴黎,于5月22日至25日在法…

计算机SCI期刊,中科院3区,专业性强,审稿专业

一、期刊名称 Frontiers in Neurorobotics 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;3.1 中科院分区&#xff1a;3区 三、期刊征稿范围 神经机器人前沿在体现自主系统的科学和技术及其应用方面发表了严格的同行评审…

笔记 | 软件工程01:从程序到软件

1 软件工程知识域 2 程序 2.1 何为程序及程序的质量要求 何为程序&#xff1a; 理解&#xff1a;软件工程可能就是在弥补OOP语言与自然语言之间还存在的鸿沟 2.1.1 程序质量的内在和外在体现 2.1.2 程序质量的语法和语义体现 2.2 编写代码的基本原则 2.3 程序质量保证方法 …

JAVA-学习

一、垃圾回收机制 1、为什么要进行垃圾回收机制 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收…

领夹麦克风什么牌子好?2024无线领夹麦克风十大品牌排行榜推荐

​如今&#xff0c;无线麦克风已逐渐渗透到我们日常生活的各个角落&#xff0c;无论是专业的自媒体创作者、带货主播&#xff0c;还是日常拍摄记录生活的我们&#xff0c;都可能用到它。在挑选无线麦克风时&#xff0c;收音降噪效果和性价比无疑是两大核心考量因素。为此&#…

学生问的一道CSS3媒体查询,实现响应式设计的题

目录 题目要求&#xff1a; 解题思路&#xff1a; 解题&#xff1a; 1&#xff09;大屏、3个DIV水平排列 2&#xff09;中屏、前2个DIV水平占一半&#xff0c;第三个另起一行&#xff0c;宽度占满 3&#xff09;小屏&#xff0c;3个DIV铺满&#xff0c;垂直排列 题目要求&…

106.从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&#xff1a; 思路&#xff1a; 后序遍历&#xff0c;最后一个元素一定是根…

市场凌乱,智能算法哪种效果好?

当我们在面对市场波动&#xff0c;个股震荡&#xff0c;无从下手的时候&#xff0c;不懂算法的朋友就只懂做t&#xff1b;懂算法的朋友这会儿就迷茫并不知道选择哪种智能算法交易&#xff1f;今天小编给大家整理一套性价比高的&#xff0c;适合个人投资者搞的算法交易&#xff…

成功的期货交易当然离不开自我调节!!!

期货交易的成功不仅仅取决于技术和市场分析&#xff0c;还取决于交易者的心理素质。市场波动和交易决策可能会导致交易者感到压力、恐惧、贪婪等情绪&#xff0c;这可能会影响其决策和行为。因此&#xff0c;交易者需要学会自我调节&#xff0c;以保持心态平稳和冷静&#xff0…

如何在Weblogic环境中启动认证方式对接Zabbix监控

在WebLogic Server中&#xff0c;启动认证可用于确保只有经过授权的用户和系统能够访问WebLogic Server及其应用程序&#xff0c;通过合理配置认证提供者和安全领域&#xff0c;管理员可以有效管理和控制用户访问。 本文将详细介绍如何在Weblogic环境中配置启动认证并对接Zabb…

Opencv Python图像处理笔记二:图像变换、卷积、形态学变换

文章目录 前言一、几何变换1.1 缩放1.2 平移1.3 旋转1.4 翻转1.5 仿射1.6 透视 二、低通滤波2.1 均值滤波2.2 高斯滤波2.3 中值滤波2.4 双边滤波2.5 自定义滤波 三、高通滤波3.1 Sobel3.2 Scharr3.3 Laplacian3.4 Canny 四、图像金字塔4.1 高斯金字塔4.2 拉普拉斯金字塔 五、形…

眼底照 + OCT图 + 精神状态 ,预测阿尔兹海默症

眼底照片和OCT图像&#xff0c;预测阿尔兹海默症 数据多模态网络模型集成可视化分析 论文&#xff1a;https://www.ophthalmologyretina.org/action/showPdf?piiS2468-6530%2824%2900045-9 目前&#xff0c;认知障碍的诊断依赖于血清和蛋白质生物标志物的检测、脑脊液检查和正…