在宝塔面板中部署 Express + MongoDB + Uniapp h5 项目(超详细!!!)

server/2024/10/20 11:05:27/

文章目录

      • 一、打包 uniapp h5 项目
        • (1) 打开 manifest.json 文件,修改相关配置
        • (2) 开始项目打包
      • 二、修改 express 相关配置
        • (1) 添加打包后的前端资源文件
        • (2) 修改 app.js 文件
        • (3) 修改项目启动命令
      • 三、使用宝塔面板部署项目
      • 四、添加 MongoDB 数据库
      • 五、部署 Express 项目

一、打包 uniapp h5 项目

(1) 打开 manifest.json 文件,修改相关配置

修改相关配置

注:此处的 运行基础路径 参数不要随意填写,此前根据网上分享的资料将其修改为 ./ 导致底部 tab 栏的图片显示异常,随后删除相关参数后重新打包才解决了该问题。

对应的源码:

"h5" : {"router" : {"base" : "","mode" : "history"}
}

更多详情可参见:https://uniapp.dcloud.net.cn/collocation/manifest.html#h5

(2) 开始项目打包

如图所示,点击 发行 中的网站选择:

项目打包

在弹出的对话框中直接点击 发行 (无需填写网站域名):

项目打包

打包成功后,控制台会显示导出的文件路径,打开目标文件夹:

项目打包

创建一个新的文件夹 dist,并将之前打包后的相关文件复制至 dist 文件夹中(此步骤为后续的 express 项目加载前端资源做准备):

项目打包


express__47">二、修改 express 相关配置

(1) 添加打包后的前端资源文件

将先前打包好的前端资源文件放在新创建的 dist 文件夹中,并将其放入 express 项目:

修改 <a class=express 相关配置" />

注:这里的 favicon.ico 图标需要自己制作,可以使用相关在线工具制作 ico 图标:https://www.bitbug.net/

(2) 修改 app.js 文件
// app.js
const express = require("express");
const app = express();
...
// 加载前端打包后的项目
app.use(express.static(path.join(__dirname, 'dist')));
...
module.exports = app;

此时启动项目后,可以通过访问 http://localhost:3000/ 来查看是否能够成功加载前端资源文件。

(3) 修改项目启动命令

由于项目在 windows 系统开发,可以通过 SET NODE_ENV=development&& node ./bin/www来启动项目,而云服务器是 linux,如果再使用该命令来启动则会报错,因此,此处引入 cross-env 这个第三方工具来帮助我们解决跨平台的环境变量设置。

安装 cross-env

npm i cross-env

修改 package.json 文件:

"scripts": {"start": "cross-env NODE_ENV=production node ./bin/www","dev": "cross-env NODE_ENV=development nodemon ./bin/www"
},

使用 cross-env 来设置环境变量后,无需修改命令即可在不同系统中执行(注:linux 上部署项目可能会有权限问题,后续将会说明)


三、使用宝塔面板部署项目

(1) 宝塔面板安装

可以使用在线安装方式,访问宝塔面板安装地址:https://www.bt.cn/new/download.html

填写相关信息后,点击安装:

<a class=宝塔面板安装" />

在弹出的对话框中根据自身实际选择要安装的环境:

<a class=宝塔面板安装" />

安装成功后,在弹出的对话框中复制宝塔面板访问地址及相关账户信息(不小心关掉了也没关系,可以使用 Xshell 相关工具访问服务器,然后执行 bt 查看相关命令获取账户信息)

(2) 项目环境搭建

访问上一步复制的宝塔面板访问地址,输入相应的账号密码登录后,点击左侧菜单栏的 软件商店 选项,下载所需的软件。此处项目使用了 Node.jsMongoDB,所以安装了相关软件,应根据自身实际安装相应的软件。

项目环境搭建

注:此处一定要注意安装的 Node.js 版本,最好是开发的时候使用的是什么版本,就安装什么版本,否则项目中使用的第三方依赖包可以会由于 Node.js 的版本太高或太低而出现报错,其他软件也一样,要注意版本的兼容性问题。(举例说明:比如我在 windows 操作系统下开发的项目,使用的 Node.js 版本为 18.16.0,项目中使用了 mongoose 这个第三方库,安装的版本是 8.7.0,而云服务器安装的 Node.js 版本为 14.17.6,此时如果将项目部署在云服务上将会出现报错,最终通过降低了 mongoose 的版本为 6.13.2 才解决了该问题。)

四、添加 MongoDB 数据库

安装完 MongoDB 后,点击左侧菜单栏的 安全 选项,添加端口规则,放行 27017 端口:

放行 27017 端口

注:购买的云服务器也要放行 27017 端口,此处以阿里云为例:

放行 27017 端口

点击左侧菜单栏的 首页 选项,选择并打开 MongoDB 服务:

打开 MongoDB 服务

点击左侧菜单栏的 数据库 选项,添加数据库:

添加数据库

开启安全认证,并设置密码和添加权限,此处的 权限 全部勾选(可根据自身实际做选择)

开启安全认证

由于我们需要使用本地的数据库管理工具连接该远程数据库,所以需要修改 MongoDB 的相关配置(记得保存):

修改 MongoDB 配置

使用数据库管理工具 MongoDB Compass 来连接该远程数据库(也可以使用其他数据库管理工具,根据自身实际选择):

 连接数据库

连接的 url

mongodb://root:你设置的密码@你的服务器地址:27017/
// 例:
mongodb://root:123abc@192.168.1.1:27017/

补充:如果要在 express 项目中使用 mongoose 连接该远程数据库,则需要写成:

// 导入模块
const mongoose  = require("mongoose");
// 数据库连接地址
let DB_URL = 'mongodb://root:你设置的密码@你的服务器地址:27017/数据库名称?authSource=admin'mongoose.connect(DB_URL).then(res => {console.log('-- Connection successful. --');},err => {console.log('-- Connection failed. --');}
)
module.exports = mongoose;

至此,数据库相关的准备工作基本结束,可以先使用本地的数据库管理工具测试是否能够正常运行,MySQL 数据库也是通过类似的方式来添加。

五、部署 Express 项目

先在本地将整个 express 项目压缩成 zip 文件,并上传至服务器。点击左侧菜单栏的 文件 选项,在 www 目录下上传项目文件:

上传项目文件

解压项目文件:

解压项目文件

点击左侧菜单栏的 网站 选项,点击添加 Node 项目(阿里云也要放行 3000 端口,同数据库端口放行方法一致):

上传项目文件

为项目绑定域名,并开启外网映射:

为项目绑定域名

修改反向代理配置(记得保存):

修改反向代理配置

注:此处的 proxy_pass 端口后不能与项目的启动端口号相同,第一次部署的时候不清楚,导致无法通过绑定的域名访问,虽然我还不知道原理≡(▔﹏▔)≡

注意:项目启动的时候, cross-env 可能会出现报错 cross-env: Permission denied,它提示权限不够,在网上查找了相关资料后,在项目终端中使用了命令 chmod -R a+x node_modules 解决了该问题。

参考资料:https://stackoverflow.com/questions/54831494/sh-1-cross-env-permission-denied-on-laravel-mix

该命令执行路径(进入该项目文件夹,点击顶部菜单栏的 终端 选项):

命令执行路径

项目如果无法正常执行,可以通过查看 项目日志 来查看报错信息:

查看项目日志

启动项目后,即可通过 绑定的域名:3000 访问网站。


http://www.ppmy.cn/server/128296.html

相关文章

简单介绍Wiki和历史

Wiki 是一种基于网络的协作工具&#xff0c;它允许多个用户创建、编辑和分享信息。Wiki 的特点是页面内容可以由用户自由修改&#xff0c;并且这些修改会立即生效&#xff0c;促进了集体协作和知识共享。Wiki 的本质是一种内容管理系统&#xff0c;支持版本控制&#xff0c;使得…

c++继承(下)

c继承&#xff08;下&#xff09; &#xff08;1&#xff09;继承与友元&#xff08;2&#xff09;继承与静态成员&#xff08;3&#xff09;多继承及其菱形继承问题3.1 继承模型3.2 虚继承3.3 多继承中指针偏移问题 &#xff08;4&#xff09;继承和组合&#xff08;9&#xf…

DolphinScheduler 资源中心无法上传大文件

服务&#xff1a;dolphinscheduler 版本&#xff1a;v3.16 问题描述&#xff1a;资源中心-文件管理中使用文件上传是出现中断或上传失败 排除思路&#xff1a; 测试小文件或其他类型文件时是否正常&#xff1b;F12查看接口调用成功以及失败时的对比&#xff0c;发现接口调用…

2-114 基于matlab的CA模型

基于matlab的CA模型&#xff0c;Singer模型对单机动目标进行跟踪算法&#xff0c;具有10页实验文档。采用蒙特卡罗方法对一个二坐标雷达对一平面上运动的目标进行观测&#xff0c;得到跟踪滤波结果。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-114 …

RabbitMQ事务模块

目录 消息分发​​​​​​​ 负载均衡 幂等性保障 顺序性保障 顺序性保障方案 二号策略:分区消费 三号策略:消息确认机制 四号策略: 消息积压 RabbitMQ集群 选举过程 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制&#xff0c;要么全部成功&#xff0c;要么全…

【JavaEE】【多线程】进程与线程的概念

目录 进程系统管理进程系统操作进程进程控制块PCB关键属性cpu对进程的操作进程调度 线程线程与进程线程资源分配线程调度 线程与进程区别线程简单操作代码创建线程查看线程 进程 进程是操作系统对一个正在运行的程序的一种抽象&#xff0c;可以把进程看做程序的一次运行过程&a…

【Python游戏开发】贪吃蛇游戏demo

准备步骤 项目开发使用【Mu 编辑器】 1.新建项目&#xff0c;并导入游戏图片 游戏编写 1.创建场景 SIZE 15 # 每个格子的大小 WIDTH SIZE * 30 # 游戏场景总宽度 HEIGHT SIZE * 30 # 游戏场景总高度def draw():screen…

win11下AMD CPU支持WSL2

除开常规的配置&#xff1a; 1.打开虚拟机 2.打开hyper-v 3.bios启用虚拟机 还需要做如下操作: 管理员方式进入Powershell: bcdedit /set hypervisorlaunchtype auto 成功案例&#xff1a; win11: cpu: amd