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

news2025/1/19 3:26:42

本来以为就是一次简单的部署,之前也是部署过几次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 上传主体负责人的身份证,公司的运营执照,为了便于通过验证,上传的材料要直接拍照原件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ingress规则

一 k8s 对外服务之 Ingress LB ingress 1 Ingress 简介 service的作用体现在两个方面 ? ① 对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制; ② 对集群外部&#xff0c…

针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT)的准物理等效电路模型,包含基板中射频漏电流的温度依赖性

来源:Quasi-Physical Equivalent Circuit Model of RF Leakage Current in Substrate Including Temperature Dependence for GaN-HEMT on Si(TMTT 23年) 摘要 该文章提出了一种针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT&…

逐步掌握最佳Ai Agents框架-AutoGen 九 RAG应用

在最近的几篇文章里,我们使用AutoGen实现了一些Demo。这篇文章,我们将使用AutoGen来完成RAG应用开发。 RAG应用 RAG全称"Retrieval-Augmented Generation",即检索增强生成,它是自然语言处理中的一项技术。这种模型结合了检索式&a…

【操作系统】(详细理解进程的状态)执行状态、就绪状态、阻塞状态、挂起状态

下面是进程的几种状态的概念: 执行状态:当一个进程已获得必要资源,并占有CPU进行执行。 就绪状体:进程已分配到除CPU外的所有必要资源,只要获取CPU允许就可立即执行。 阻塞状态:正在执行的进程,…

【NLP开发】Python实现聊天机器人(微信机器人)

🍺NLP开发系列相关文章编写如下🍺:1🎈【小沐学NLP】Python实现词云图🎈2🎈【小沐学NLP】Python实现图片文字识别🎈3🎈【小沐学NLP】Python实现中文、英文分词🎈4&#x1…

元宇宙3D品牌营销虚拟场景提升客户对企业的黏性

在这个充满创意与想象的3D元宇宙时代,我们为您推出了全新的3D元宇宙场景在线制作编辑平台,让您轻松构建专属的虚拟展厅,展现无限可能。 3D元宇宙场景在线制作编辑平台允许您快速完成空间设计,根据您的个性化需求,自由设…

云计算如何赋能工业数字化转型?

云计算在工业数字化转型中发挥着至关重要的作用,通过提供安全的数据存储与备份、强大的数据处理和分析能力、以及降低IT成本,为企业的数字化转型提供了坚实的技术支撑,助力企业实现数字化转型目标。 一、什么是云计算技术?有哪些基…

连锁品牌企业的税务策略,创业者的盈利秘籍!

随着全球经济的不断发展,连锁品牌企业已成为商业竞争中的重要力量。然而,在追求利润最大化的道路上,税务策略成为了企业不容忽视的一环。商淘云和你一起探讨连锁品牌企业的税务策略及创业者的盈利秘籍,着重介绍税务合规管理、税务…

适合初学者人手一本的LLM大语言模型综述,爆火全网

今天给大家推荐一本大模型(LLM)这块的一本外文书,经过整理已经出中文版了,就是这本《大型语言模型综述》!本书在git上有9.2k star,还是很不错的一本大模型方面的书。 本教程内容主要内容:中文版…

防火墙是什么?探讨部署Web防火墙的必要性

如今,多云环境、API安全功能扩展、合作伙伴集成即时可用、可用性和可视化增强以及提高自动化程度已经成为基本要求。伴随企业应用架构的迁移,在用户端,需要在部署环境不断扩展但人员技能有限的情况下,保护数量日益增长的应用安全。…

libsystemctlm-soc项目分析

概述 libsystemctlm-soc项目是Xilinx的SystemC库。 环境安装 verilator安装 # Prerequisites: #sudo apt-get install git help2man perl python3 make autoconf g flex bison ccache #sudo apt-get install libgoogle-perftools-dev numactl perl-doc #sudo apt-get insta…

vulhub中PHP利用GNU C Iconv将文件读取变成RCE(CVE-2024-2961)

GNU C 是一个标准的ISO C依赖库。在GNU C中,iconv()函数2.39及以前存在一处缓冲区溢出漏洞,这可能会导致应用程序崩溃或覆盖相邻变量。 如果一个PHP应用中存在任意文件读取漏洞,攻击者可以利用iconv()的这个CVE-2024-2961漏洞,将…

Ubuntu20.04 Mysql基本操作知识

#Mysql基本知识 运行环境Ubuntu20.04 1.开启mysql服务 sytemctl start mysql不然,命令行进入myql交互行提交命令后,就会出现4200错误。 2.显示所有数据库 SHOW DATABASES;注意复数s,毕竟很多数据库 3.新建数据库test CREATE DATABASE …

算法训练营第四十六天 | 卡码网52 携带研究材料、LeetCode 518 零钱兑换II、LeetCode 377 组合总和IV

写在前面 这次算法训练营题目,其实完全是按照代码随想录一路跟着来的,上面也有更好的、讲得更清楚的题解,有需要的小伙伴可以去那里看。 我这里是之前已经大体刷过一遍,为了应对有可能会考到的面试题,现在在跟着一个专…

WordPress电脑版+手机版自动识别切换主题插件优化版

下载地址:WordPress电脑版手机版自动识别切换主题插件优化版 插件介绍: 电脑访问自动显示电脑版 手机访问自动显示手机版

Python编程学习第一篇——制作一个小游戏休闲一下

到上期结束,我们已经学习了Python语言的基本数据结构,除了数值型没有介绍,数值型用的非常广,但也是最容易理解的,将在未来的学习中带大家直接接触和学习掌握。后续我们会开始学习这门语言的一些基础语法和编程技巧,在这之前我们休闲一下,写一个小游戏娱乐一下。 小戏用…

深入理解可燃气体报警器检验标准:守护工业安全新举措

在工业生产领域,可燃气体报警器扮演着至关重要的角色。它能在气体浓度达到危险水平之前发出警报,为工作人员争取宝贵的逃生时间。 为了确保可燃气体报警器的准确性和可靠性,我们需要遵循一系列严格的检验标准。 在这篇文章中,佰…

TCP协议的核心机制

TCP协议的核心机制 一:确认应答机制1.2:超时重传接收缓冲区 超时重传时间重置连接 一:确认应答机制 对于TCP协议来说,要解决的一个很重要的问题,就是可靠传输 可靠传输,不是指发送方能够100%的把数据发送给接收方,而是尽可能. 尤其是让发送方知道,接收方是否收到. 举个例子: …

AI菜鸟向前飞 — LangChain系列之十六 - Agent系列:从现象看机制(下篇)一款“无需传递中间步骤“的Agent

前言 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列:从现象看机制(中篇)一个Agent的“旅行” 回顾前两篇文章,大家会…

QT 信号和槽教程,窗体和控件对象之间的沟通一般都使用信号和槽

Qt的信号和槽(Signals and Slots)机制是一种强大的对象间通信方式,它允许对象在完全解耦的情况下相互通信。以下是关于Qt信号和槽的简明教程: 基本概念 信号(Signal):信号是由Qt对象发出的通知…