vue+express、gitee pm2部署轻量服务器(20230923)

news2024/11/20 9:39:27

一、代码配置

前后端接口都保持 127.0.0.1:3000

vue 项目 创建文件 pm2.config.cjs

module.exports = {
  apps: [
    {
      name: 'xin-web', // 应用程序的名称
      script: 'npm', // 启动脚本
      args: 'run dev', // 启动脚本的参数
      cwd: '/home/vue/xin_web', // Vite 项目的根目录
      interpreter: 'none', // 告诉 PM2 不使用解释器
      autorestart: true, // 如果应用程序崩溃,自动重新启动
      watch: false, // 监视文件变化
      max_memory_restart: '1G', // 如果应用程序占用的内存超过 1GB,则重新启动
      env: {
        NODE_ENV: 'production', // 设置环境变量
      },
    },
  ],
};

serve 创建文件 pm2.config.cjs

module.exports = {
  apps: [
    {
      name: 'xin-service', // 应用程序的名称
      script: 'npm', // 启动脚本
      args: 'run start', // 启动脚本的参数
      cwd: '/home/server/xin_serve', // Vite 项目的根目录
      interpreter: 'none', // 告诉 PM2 不使用解释器
      autorestart: true, // 如果应用程序崩溃,自动重新启动
      watch: false, // 监视文件变化
      max_memory_restart: '1G', // 如果应用程序占用的内存超过 1GB,则重新启动
      env: {
        NODE_ENV: 'production', // 设置环境变量
      },
    },
  ],
};

记得 bd.js 配置好数据库的名称密码

二、服务器购买、安装系统

腾讯云:登录 - 腾讯云

服务器重装系统选择 CentOS stream 8 版本。

三、nginx 静态服务器配置

登录 root 最高权限

这里有个 centOS 7.6 - 8 stream - 安装步骤 我用这个方法

#安装 yum 仓库管理
sudo yum install yum-utils
 
#创建文件
sudo touch /etc/yum.repos.d/nginx.repo
 
#编辑文件
sudo vim /etc/yum.repos.d/nginx.repo
 
#进入编辑模式之后按下 i 复制以下内容进入
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
 
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
 
#按 ESC 退出编辑模式
 
#按 :wq 退出并保存
 
#安装 nginx
sudo yum install nginx -y

校验是否安装成功,运行下面命令,能正确输出nginx版本号就OK。

nginx -v

查看配置文件安装目录, 在启动 Nginx 服务之前,可以检查它的配置语法是否正确。尤其是当你修改或添加配置时很有用。 命令如下:

sudo nginx -t

 显示:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

启动 nginx

sudo systemctl start nginx.service


#开机自启动

sudo systemctl enable nginx 
OR
sudo service nginx enable  

在浏览器中输入服务器的公网IP地址,能正确输出 nginx welcome 页面即可。

四、搭建 node.js 环境、上传项目、安装 git 工具

搭建 node.js 环境

首先,确保您已经安装了 Node.js 和 npm。如果已经安装了,请跳过此步骤。否则,运行以下命令安装它们:

sudo yum install -y nodejs

接下来,使用 npm 全局安装 n 版本管理器:

sudo npm install -g n

安装完成后,使用以下命令安装 Node.js 18.16.0:

sudo n 18.16.0

等待安装过程完成后,您可以使用以下命令检查所安装的 Node.js 版本:

node -v

上面那一步走完可能无法使用 n,则进行操作

打开终端,并使用 npm 全局安装 n 版本管理器:

npm install -g n

安装完成后,您可以通过运行以下命令检查 n 是否已成功安装:

n --version

接下来,使用 n 命令安装和切换到所需的 Node.js 版本。例如,要安装 Node.js 18.16.0 版本,可以执行以下命令:

n 18.16.0

等待安装完成后,可以通过运行以下命令来验证 Node.js 版本:

node -v

如果在使用 n 命令安装 Node.js 后,node 命令仍然指向旧的位置,您可能需要更新您的 shell 缓存或重新启动 shell 才能使更改生效。

1.重新启动 shell:关闭当前终端窗口,然后打开一个新的终端窗口。这将确保刷新任何已缓存的位置。

2.清除 shell 缓存:运行以下命令以清除缓存并重新加载更新的路径:

hash -r

应该就可以了,记得打开新的终端窗口进行测试。确保新的窗口可以使用到你所需要的 node 版本。

sudo chmod 777 文件

sudo chmod -R 777 文件

这样 -R 的意思是 文件夹下面的所有内容

sudo chmod -R 777 /home

修改文件夹权限

到 /home 文件夹下面创建 vue server 文件夹

可以通过 mkdir vue 和 mkdir server 创建 也可以一下页面中直接创建

安装 git,以便拉取代码

yum install git -y

获取版本号
git -v

切换到 vue 文件夹下 拉取 前端代码

切换到 server 文件夹下 拉取 后端代码

分别 npm i 对应依赖

五、搭建数据库 Mysql - Centos steam 8

执行如下命令查看 有无 已经安装 的 mysql

rpm -qa|grep -i mysql

若有,则:

执行如下命令卸载所有mysql软件包

yum -y remove mysql*

执行如下命令查找mysql的相关安装目录

find / -name mysql

通过rm -rf xxx 命令将上述步骤查询到的目录依次删除(注意分辨)

删除mysql配置文件

rm -rf /etc/my.cnf

删除mysql默认密码

rm -rf /root/.mysql_history
 
rm -rf /root/mysql_secret

开始安装MySQL

安装
sudo yum install mysql-server -y
启动
sudo systemctl start mysqld
查看状态
sudo systemctl status mysqld

设置 MySQL root 密码

我们自己进行测试时使用的 root 密码不必太复杂,通过设置my.cnf,可以设置简单密码(对mysql 8.0适用)

vi /etc/my.cnf

vi 进入后,按 i 移动上下左右键到,你想插入的位置,然后打字。这时跟记事本是一样的。

打完字后,按 ESC 然后输入 :wq 就保存退出了。

把下面写入( 设置的是一些密码长度策略什么的 )

validate_password.check_user_name = 0
validate_password.policy = 0
validate_password.mixed_case_count = 0
validate_password.number_count = 0
validate_password.special_char_count = 0
validate_password.length = 0
设置完这些策略之后,必须执行 

sudo systemctl restart mysqld

才可使之生效
mysql -uroot -p

进入 sql,无密码。修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

最后面的 root 就是你的密码

数据库允许远程连接,设置权限,允许远程连接root用户。

执行

SHOW DATABASES;

再执行

use mysql;

在 mysql 数据库的 user 表中查看当前 root 用户的相关信息

select host, user, authentication_string, plugin from user; 

执行完上面的命令后会显示一个表格,查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。

授权 root 用户的所有权限并设置远程访问

update user set host='%' where user='root';

再次执行

select host, user, authentication_string, plugin from user; 

发现 GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。

ctrl + d 退出 mysql

打开端口

打开3306端口


开放端口需要先开启防火墙
systemctl start firewalld
 
开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
 
重新载入防火墙使设置生效
firewall-cmd --reload
 
查看是否开放端口
firewall-cmd --zone=public --query-port=3306/tcp
 
关闭已开放端口(如无须关闭 不用执行)
firewall-cmd --zone=public --remove-port=3306/tcp --permanent

Navicat 导出数据库备份 db.sql 文件,通过腾讯云上传工具上传到 home 目录下

进入 mysql 控制台  登录 root

mysql -u root -p

创建数据库

create database xin;

显示数据库

show databases;

使用数据库

use xin;

导入数据库

SOURCE /home/xin.sql;

开放防火墙 80 端口

# 查看当前已经开放的端口
sudo firewall-cmd --list-ports
 
# 开放 80 端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
 
# 重新加载防火墙配置
sudo firewall-cmd --reload

六、pm2 守护进程、负载均衡

PM2 是 node 进程管理工具,可以利用他来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。而且使用非常简单。

目前使用 node server.js 在服务器启动服务之后,不能随意去做其他的操作。

在服务器上全局安装

npm install -g pm2

切换到对应位置 (vue 和 server 项目下)  用 pm2 启动 项目

运行以下命令来使用 PM2 启动应用程序

pm2 start pm2.config.cjs

使用以下命令来查看应用程序的状态

pm2 list

查看日志 0 为 list 表出现的 ID

pm2 log 0

七、https 协议域名设置

腾讯云 ssl 证书申请,下载

将 crt 和 key 上传到 /etc/nginx/nginx.conf 文件同级目录,nginx 代理配置,配置nginx.conf 文件

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
    server {
    	listen  443 ssl;
	    ssl_certificate mengxin666888.asia_bundle.crt;
	    ssl_certificate_key mengxin666888.asia.key;
	    server_name mengxin666888.asia www.mengxin666888.asia;
	    location / {
	       proxy_pass http://127.0.0.1:8888; 
	       proxy_set_header X_FORWARDED_PROTO https;
           proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header  Host $http_host;
           proxy_set_header  X-Url-Scheme $scheme;
           proxy_redirect    off;
           proxy_max_temp_file_size 0;
        }
    } 
    server{
	    listen 80;
        server_name mengxin666888.asia www.mengxin666888.asia;
	    location / {
		    proxy_pass http://127.0.0.1:8888;
	    }
	}
}

这里还要检查你的 ssl 证书,要删掉 443 那个

nginx -t

重启 nginx
bash复制代码nginx -s reload

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

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

相关文章

Matlab图像处理-模式识别

模式识别 模式识别就是用计算的方法根据样本的特征将样本划分到一定的类别中去。模式识别就是通过计算机用数学技术方法来研究模式的自动处理和判读,把环境与客体统称为“模式”。模式识别以图像处理与计算机视觉、语音语言信息处理、脑网络组、类脑智能等为主要研…

奇舞周刊第507期:通过 View Transition API 在状态之间添加丰富的过渡动画

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 通过 View Transition API 在状态之间添加丰富的过渡动画 W3C 2023 年度全球技术大会 (TPAC2023) 于今年9月 11 - 15 日召开。W3C CSS 工作组成员 Bramus Van Damme(Google) 为本届…

学习ssh配置

三台设备ar1、ar2、ar3 ar1 通过ssh密码方式登陆ar3 ar2 通过免密码方式登陆ar3 ar3的配置如下:进入路由器 rsa local-key-pair creat 选择y(yes) Input the bits in the modulus[default 512]:2048 //需要创建密钥的长度user-interface v…

RocketMQ生产环境常见问题分析与总结

一、 RocketMQ 如何保证消息不丢失 这个是在面试时,关于 MQ ,面试官最喜欢问的问题。这个问题是所有 MQ 都需要面对的一个共性问题。大致的解决思路都是一致的,但是针对不同的MQ 产品又有不同的解决方案。分析这个问题要从以下几个角度入手&…

【C++】bitset位图的简单模拟实现及常见面试题

文章目录 前言一、 bitset模拟实现二、 常见面试题1.给你一百亿个整数,找到只出现一次的数字2. 给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集? 前言 快速查找某个数据是否在一个集合中排序 去重…

Java Fluent编程

背景 Fluent Api最早是由Martin Fowler1提出的一种简洁的编程风格, 其每一步的执行都返回一个对象并可用于进一步的方法调用. 这样的编程风格可以很好的简化某些领域的开发, 并显著地提高代码的可读性和可维护性. 无论是在Java的流式api中, 还是众多DLS中都有它的身影. 原因主…

应急响应学习

网站 首先确定网站的基本信息,如语言,数据库,中间件,CMS,系统等。对网站可能存在的漏洞有初步判断 基于时间分析 询问管理员,确定网站发生异常的时间 查看日志,查看状态码,200为成…

Avl树(有详细图解)

目录 介绍 引入 概念 特点 模拟实现 思路 插入 旋转 左旋 无子树 有子树 右旋 无子树 有子树 左右旋 引入(也就是有子树版本的抽象图解) 解决方法(也就是左右旋) 总结 无子树(也就是curright的位置就是newnode) 有子树 模型高度解释 旋转 更新三个…

如何像开发人员一样思考_成为一个问题解决者

程序员在处理大问题时通常会将其分解成多个小问题来解决。这个过程通常被称为“分解”或“分治”,它是一种将复杂问题分解成可管理的小问题的方法。 以下是程序员思考如何将大问题分解成小问题的一些步骤: 确定问题域:程序员需要了解和理解问…

Kettle REST Client获取token调用接口解析JSON入文件实战

Kettle REST Client通过GET获取token以POST方式请求接口解析JSON入文件完整实例 需求说明 通过kettle组件调用接口并解析JSON成结构化数据入文件。 完整实例 解决方法 利用生成记录组件定义URL参数通过REST ClENT组件请求得到TOKEN通过JSON INPUT组件解析接口请求的结果通过…

vue3新语法糖<script setup>

各种使用方法参考:(184条消息) 【vue3学习系列】组合式api中,替代setup()函数的<script setup>特性写法_庞囧的博客-CSDN博客https://blog.csdn.net/pagnzong/article/details/121733394 一、参考:Vue3 script setup …

Git版本控制:入门到精通

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

简单的自托管书签服务NeonLink

什么是 NeonLink ? NeonLink 是一个简单且开源的自托管书签服务。它是轻量级的,使用最少的依赖项,并且易于通过 Docker 安装。由于系统要求较低,该应用程序非常适合部署在 RaspberryPI 上。 安装 在群晖上以 Docker 方式安装。 …

图片可变码怎么做?可编辑二维码制作教程

现在很多人会将拍摄的图片转二维码来展示,这种方法能够有效的让更多人更快的查看图片内容,那么图片生成二维码该怎么做呢?有些小伙伴知道现在二维码可以在图案不变情况下修改内容,如果我们需要不断填充照片,那么这种类…

4.基本IO口操作

CC2530端口资源:三个端口,表示为 P0、P1 和 P2。P0 和 P1 是完全的 8 位端口,而 P2 仅有 5 位可用 CC2530的IO口的一些功能: 通用IO口、外设IO口(定时器、USART、ADC) 输入引脚、输出引脚 当输入时&#…

奇安信天擎Linux客户端部署相关事项

奇安信天擎Linux客户端部署 一 Linux天擎客户端部署在线部署离线部署 二 Linux 单机部署需要开放的端口三 Linux天擎客户端停止和启动天擎的命令四 Linux天擎客户端卸载五 卸载后检查六 Linux天擎客户端病毒库更新操作步骤七 Linux客户端是否有补丁库? 一 Linux天擎…

设备巡检电力水利物业巡检小程序开源版开发

设备巡检电力水利物业巡检小程序开源版开发 以下是设备巡检电力水利物业巡检小程序开源版的可能功能列表: 用户登录/注册:用户可以通过手机号或其他方式进行登录和注册。 首页展示:展示设备巡检电力水利物业巡检小程序的基本信息和操作指南…

6.1 KMP算法搜索机器码

KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与…

【力扣】83. 删除排序链表中的重复元素

题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2] 示例 2: 输入:head [1,1,2,3,3] 输…

笔试强训Day(一)

T1:组队竞赛 链接:组队竞赛__牛客网 牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员…