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

news2024/10/7 14:00:04

文章目录

      • 一、打包 uniapp h5 项目
        • (1) 打开 manifest.json 文件,修改相关配置
        • (2) 开始项目打包
      • 二、修改 express 相关配置
        • (1) 添加打包后的前端资源文件
        • (2) 修改 app.js 文件
        • (3) 修改项目启动命令
      • 三、使用宝塔面板部署项目
        • (1) 宝塔面板安装
        • (2) 项目环境搭建
      • 四、添加 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 相关配置

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

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

修改 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

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

宝塔面板安装

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

宝塔面板安装

安装成功后,在弹出的对话框中复制宝塔面板访问地址及相关账户信息(不小心关掉了也没关系,可以使用 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.coloradmin.cn/o/2194281.html

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

相关文章

之前各种炸裂的Flux更新了Flux1.1 pro,效果会不会依然“炸裂”呢?

🐠更新内容 Black Forest Labs,也就是黑森林工作室在国庆期间更新了新的模型,Flux1.1 Pro,官方公告大家也可以参考: announcements. - Black Forest Labs 那么这次更新主要讲了什么呢? FLUX1.1 [pro]&am…

系统架构设计师-下午案例题(2018年下半年)

1.某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设水平。该软件公司组织项目组完成了需求调研,现已进入到系统架构设计阶段。考虑到系统需求对架构设计决策的影响,项目组先列出了可能影响系统架…

企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)

EHR人力资源管理系统是现代企业提升人力资源管理效率的重要工具。该系统集成了多个功能模块,旨在实现人力资源管理的全面数字化和自动化。以下是对EHR系统主要功能的剖析,包括组织架构、人事管理、考勤管理、薪资管理、绩效管理、档案管理、招聘管理、培…

如何写出更系统的验证检查器

前言 芯片验证是为了发现芯片中的错误而执行的过程,它是一个破坏性的过程。有效激励灌入待测模块后,需要判断出不符合功能描述的行为。检查器(Checker)就是用于查看待测模块是否按照功能描述文档做出期望的行为,识别出所有的设计缺陷。 不同…

【PostgreSQL】PG数据库表“膨胀”粗浅学习

文章目录 1 为什么需要关注表膨胀?2 如何确定是否发生了表膨胀?2.1 通过查询表的死亡元组占比情况来判断膨胀率2.1.1 指定数据库和表名2.1.2 查询数据库里面所有表的膨胀情况 3 膨胀的原理3.1 什么是膨胀?膨胀率?3.2 哪些数据库元…

服贸会上的科技闪耀之星:璞华易研PLM系统引领产品研发潮流

2024年中国国际服务贸易交易会(以下简称为“服贸会”)于9月在北京盛大开幕,再次汇聚全球目光,共襄智慧服务的盛宴。本届服贸会秉承“全球服务、互惠共享”的核心理念,聚焦“共享智慧服务,共促开放发展”&am…

计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【路径规划】A*(A星)搜索路径规划教程

摘要 A算法是一种用于图形搜索的启发式搜索算法,广泛应用于路径规划、游戏AI和机器人导航等领域。本教程将深入介绍A算法的理论基础,展示其在路径规划中的应用,并通过Matlab代码实现A*算法的实际运行。同时,我们将结合实验结果进…

qsort函数及其使用的方法分解讲解

qsort函数 默认排序升序 void qsort(void* base,//指向待排序数组的第一个元素的地址 size_t num,//base指向数组中元素的个数 size_t size,//base指向的数组中一个元素的大小,单位是字节 int (*compar)(const void*,const void*…

YOLO11改进|卷积篇|引入线性可变形卷积LDConv

目录 一、【LDConv】卷积1.1【LDConv】卷积介绍1.2【LDConv】核心代码 二、添加【LDConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【LDConv】卷积 1.1【LDConv】卷积介绍 下图是【LDCNV】的结构图,让我们简单分析…

Mysql高级篇(下)——主从复制

主从复制 一、概述二、作用🎈 场景示例🎈 综合示例 三、原理🎈 主从复制基本原则🎈 主从复制存在的问题 四、一主一从架构搭建🌱准备工作🌞步骤1. 配置主库(Master)2. 配置从库&…

如何搭建基于大模型的智能知识库

自从2022年底ChatGPT横空出世引爆了大模型技术浪潮,时至今日已经一年有余,如何从技术侧向商业侧落地转化是一直以来业内普遍关注的问题。 从目前企业端观察到的情况来看,基于大模型的知识库是一个比较有潜力和价值的应用场景,能够…

落伍警告:不了解AI Agent,你可能会被编程界淘汰

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI…

UE5 武器IK瞄准系统

创建空项目 创建基础蓝图类My_GameMode,My_HUD,My_PlayChar,My_PlayController 项目设置地图模式 近裁平面 0.1 My_PlayChar蓝图中添加摄像机,角色骨骼网格体,武器骨骼网格体 编辑角色骨骼,预览控制器使用特定动画,动画选择ANM_ark-47-Idle hand_r 添加插槽WeaponMes…

Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(下篇)

在 人物角色保持一致性(上篇)中,我们已经得到了自己创造的角色的各个角度头像图片: 从中选择一个符合自己需求的角度,截图保存,例如下图: 更换人物表情 进入到「图生图」页面,把上一…

短视频时代,网站建设存在的意义还有多大?

在短视频时代,网站建设的存在意义依然具有多方面的价值和作用。尽管短视频作为一种新兴的传播方式迅速发展并受到广泛欢迎,但网站作为互联网的基础设施之一,仍然在许多领域发挥着不可替代的作用。以下是具体分析: 信息深度与完整性…

医院管理新思维:Spring Boot技术应用

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息,可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加,修改,…

开源项目带来的思考

分享一位在Hacker News上的一个帖子,该开源作者在Github上年收入达到10万美元,你不得不承认,个人开源项目的影响力还是很大的。 这条帖子讲述了一位Laravel的开发者,是如何在Github上做到年收入10万美元。该帖子一发布&#xff0c…

rust使用tokio

Rust 是一种系统编程语言,它强调安全、并发和高性能。tokio 是一个基于 Rust 的异步运行时库,专门用于构建异步应用程序。使用 tokio 可以轻松地管理异步任务,并实现高效的并发。 添加依赖: cargo add tokio -F full 示例: 示例1: fn main() {let rt = tokio::runti…

RabbitMQ事务模块

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