部署:上传项目代码 配置数据库
一、上传代码
1、使用git
可以使用Git Clone。使用前,在服务器上也要创建秘钥对。这里的密钥对,是专门用来读取Git仓库的。
在宝塔上,点击终端。进来后,运行
ssh-keygen
还是一路回车,密钥对就建好了。

接着用命令查看下,刚才生成的公钥。看到后,老规矩,直接复制一下。
cat ~/.ssh/id_rsa.pub

然后打开GItHub里自己的仓库,点击:设置,左侧找到部署密钥,再点击新增部署密钥

-
Title大家可以随便填写一个,只要自己知道是干什么的就行。
-
然后把刚才复制的密钥,粘贴到这里。
-
部署密钥只能用来克隆Clone和拉取Pull,但是不能用来推送Push代码。所以不要给写入权限。
-
最后提交一下

用GitHub的话,会要求用手机上的GitHub App输入验证码。用国内其他仓库的,则没有这一步。

现在部署密钥就添加好了,如果用其他 Git 仓库也是类似的添加操作。接着,回到仓库的代码这里。点击Code,确认当前选择的是SSH,复制一下地址。

再回到宝塔里,点击文件,确保现在所在的位置是:/www/wwwroot。这个路径是专门用来存放项目的位置,然后点击终端

注意,如果出现宝塔终端提示无法自动认证,这是自己生成的密钥与宝塔终端的密钥互相冲突导致的,按以下步骤操作:
- 点击文件,进入/root/.ssh目录,删掉所有密钥。
- 重新点击宝塔终端,就可以进去了。
- 再次回到/root/.ssh目录,会发现宝塔终端自己生成了新的密钥。
- 为了避免冲突,直接将此密钥传到Git即可,就不要自己生成密钥了。
里面输入
git clone 你的仓库地址

这样仓库就克隆下来了。关闭窗口后,刷新一下,就能看到自己的项目了。

2、使用宝塔直接上传
另外一种方式,大家可以直接使用宝塔的上传功能。将自己的本地项目打个zip压缩包。上传到服务器后,再解压,这样也是可以的。这种操作非常简单,我们这里就不演示了。

3、安装依赖包
接着在宝塔里,点击自己的项目。进入项目目录里后,再次打开终端。运行
npm i

4、 修改代码
我们还需要对服务器上的代码做个配置
4.1. 设置环境变量
在项目目录中,找到.env.example,右侧找到更多,选择复制

直接按Ctrl + V,进行粘贴。改为名.env后,点击确认

双击打开.env后,将环境改为生产环境。
NODE_ENV=production
4.2. 设置密钥
还需要设置密钥,大家打开自己电脑上的终端。运行:
node
进入交互模式后,依次运行
const crypto = require('crypto');
console.log(crypto.randomBytes(32).toString('hex'));

复制得到的秘钥,填写到.env文件中的SECRET配置中。

这个秘钥就专供生产环境使用,它不归 Git 仓库管理,更不要告诉其他人了。
4.3. 配置数据库连接
关闭编辑器后,接着点击宝塔左侧的数据库,点击root密码。这里默认已经有一个数据库密码了,大家可以自定义其他的,或者随机生成另一个新的。

我就不改了,直接复制一下。再点击文件,找到数据库配置的config/config.json

双击后,将刚复制的密码填写到production里。还有千万不要忘记了,密码要用双引号包裹起来。

接着保存,关闭编辑器。
5. 创建数据库
我们还要需要在服务器上创建数据库。回到项目根目录,位置千万不要搞错,点击终端,运行创建数据库的命令 参考node ORM (sequelize)使用、查询、验证及express 基础框架的搭建及实例的使用
npx sequelize-cli db:create --charset utf8mb4 --collate utf8mb4_general_ci --env production
第一次运行,会询问是否确认,直接回车。命令后面的--env production,表示要创建的是,生产环境的数据库,也就是clwy_api_production。

6. 创建数据表
接着创建数据表,直接运行迁移。同样需要指定是生产环境。
npx sequelize-cli db:migrate --env production

7. 生成初始数据
还可以用种子文件,生成初始数据。
npx sequelize-cli db:seed:all --env production

8.使用 MySQL 客户端,远程管理数据库
全都运行完毕后,关闭终端。我们可以用客户端,连接到服务器上的MySQL,查看一下数据库有没有什么问题。当然,想要导入导出SQL文件,使用客户端也非常方便。
- 新建一个连接

- 选择 SSH

- 选择私钥

- 打开后,已经能访问服务器上的数据库了。

9. 总结一下
- 上传代码,推荐使用Git Clone。或者用宝塔面板直接上传,但是不推荐。
- Linux上的npm包,有可能和Windows上不同。上传到服务器后,需要重新安装。
- 生产环境,有自己的环境变量、秘钥和数据库配置。
- 可以使用命令,创建生产环境的数据库、表和数据。
- 使用MySQL客户端,也可以远程管理服务器上的数据库。
相关文章:
部署:上传项目代码 配置数据库
一、上传代码 1、使用git 可以使用Git Clone。使用前,在服务器上也要创建秘钥对。这里的密钥对,是专门用来读取Git仓库的。 在宝塔上,点击终端。进来后,运行 ssh-keygen还是一路回车,密钥对就建好了。 接着用命令…...
C++—9、如何在Microsoft Visual Studio中调试C++
本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...
11. C 语言 作用域与变量使用技巧
本章目录: 前言一、作用域的分类局部变量示例: 全局变量示例:示例: 形式参数示例: 二、作用域的细节与常见误区块级作用域示例: 静态变量与全局变量的对比示例: 未初始化变量的影响示例: 三、实…...
【机器学习案列】学生抑郁可视化及预测分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
Perl语言的循环实现
Perl语言的循环实现 引言 Perl是一种强大的脚本语言,以其灵活的语法和强大的文本处理能力著称。无论是在系统管理、网络编程,还是在Web应用开发中,Perl都广泛应用于各种领域。循环是编程语言中一个极其重要的概念,它允许程序重复…...
SpringBoot项目——使用Spark对爬虫爬取下的数据进行清洗
随着互联网信息呈爆炸式增长,爬虫技术被广泛用于从海量网页中抓取有价值的数据。然而,爬取到的数据往往存在格式不规范、重复、噪声等诸多问题,需要高效的数据清洗流程来保障数据质量,Spark 在其中发挥了关键作用。 什么是Spark …...
分布式锁 Redis vs etcd
为什么要实现分布式锁?为什么需要分布式锁,分布式锁的作用是什么,哪些场景会使用到分布式锁?分布式锁的实现方式有哪些分布式锁的核心原理是什么 如何实现分布式锁redis(自旋锁版本)etcd 的分布式锁(互斥锁(信号控制)版本) 分布式锁对比redis vs etcd 总结 为什么要实现分布式…...
《深度剖析:开源与闭源模型,AI舞台上的不同角色》
在人工智能蓬勃发展的当下,模型的选择如同为一场战役挑选合适的武器,至关重要。开源模型与闭源模型作为AI领域的两大阵营,在性能和应用场景上展现出显著差异,深刻影响着开发者、企业以及整个行业的走向。 性能差异:实…...
Angular结合C#
在 Angular 2 及以上版本与 C#结合使用 REST API 的示例中,我们将分别展示前端 Angular 服务和后端 C# Web API 的实现。 一、前端:Angular 服务 生成 Angular 服务 使用 Angular CLI 生成一个新的服务,例如user.service.ts: ng…...
Spring——自动装配
假设一个场景: 一个人(Person)有一条狗(Dog)和一只猫(Cat),狗和猫都会叫,狗叫是“汪汪”,猫叫是“喵喵”,同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…...
Servlet与JSP:Java的秘密花园入口
1 Servlet概述 Servlet是Java Web应用中的一个核心组件,它是一个运行在服务器端的Java程序,可以响应客户端的请求并生成响应。Servlet为Web应用提供了一个统一的接口来处理HTTP请求。 2 Servlet的生命周期 Servlet的生命周期包括以下几个阶段ÿ…...
【Linux】Linux常见指令(上)
个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统,Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…...
ELFK日志采集实战
一、日志分析概述 日志分析是运维工程师解决系统故障,发现问题的主要手段 日志主要包括系统日志、应用程序日志和安全日志 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因 经常分析日志可以了解服务器的负荷&#x…...
Kubernetes 使用自定义资源(CRD)扩展API
K8s CRD 即 Kubernetes CustomResourceDefinition,是 Kubernetes 提供的一种扩展机制,允许用户在 Kubernetes 集群中定义和使用自定义的资源类型。通过定义 CRD,用户可以在 Kubernetes 集群中创建、读取、更新和删除自定义资源对象࿰…...
用户使用LLM模型都在干什么?
Anthropic 对用户与 Claude 3.5 Sonnet 的大量匿名对话展开分析,主要发现及相关情况如下: 使用用途分布 软件开发主导:在各类使用场景中,软件开发占比最高,其中编码占 Claude 对话的 15% - 25%,网页和移动应…...
MySQL常用命令之汇总(Summary of Commonly Used Commands in MySQL)
MySQL常用命令汇总 简介 MySQL是一个广泛使用的开源关系型数据库管理系统,由瑞典的MySQL AB公司开发,现属于Oracle公司。 MySQL支持SQL(结构化查询语言),这是数据库操作的标准语言,用户可以使用SQL进…...
六年之约day10
今日开心∶今天部门开了个颁奖大会,看着别人收获的荣誉,还真有些羡慕,什么时候,我也能拥有属于自己的荣誉啊. 今日不开心∶活没干多少,对业务也不是很懂 今日思考∶很多事情,存在即合理.工作,…...
springboot和vue配置https请求
项目场景: 代码发布到线上使用https请求需要配置ssl证书,前后端都需要修改。 问题描述 如图,我们在调用接口时报如下错误,这就是未配置ssl但是用https请求产生的问题。 解决方案: 前端:在vite.config.js文…...
selenium遇见伪元素该如何处理?
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 问题发生 在很多前端页面中,大家会见到很多::before、::after 元素,比如【百度流量研究院】: 比如【百度疫情大数…...
慧集通(DataLinkX)iPaaS集成平台-数据质量
1.什么是数据质量 介绍: 数据质量的主要作用就是记录组件写入的数据,及执行时的相关信息,如执行的最终状态(成功,失败,进行中等),执行的时间(创建时间,修改时…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
