Linux——centos7搭建node + Nginx + vue + mysql 的服务安装详细步骤

2023-05-16

一、安装所需的软件
二、进行具体配置
三、使用

以下配置及安装为已运行实测的笔记整理,严格按照该步骤进行配置,大概率上不会有问题。不懂linux的小白也可配置使用。当然,最好还是了解一些linux基本的命令和文件的作用,可能会更好一些。欢迎评论区交流!!!

配置centos镜像源整理

1、先将原文件备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

2、下载阿里源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、建立cache

yum makecache

4、更新源包

yum -y update

5、更新epel源

因为标题一中换好源后,依旧没有特定的软件。
yum install epel-release

Node

Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/,
你可以根据不同平台系统选择你需要的 Node.js 安装包,这里选择的是Linux Binaries (x64)。

1、下载

# 进入到安装目录
cd /usr/local/src

# 下载指定版本的 node 文件
wget https://nodejs.org/dist/v18.15.0/node-v18.15.0-linux-x64.tar.xz    

2、解压

tar xf node-v18.15.0-linux-x64.tar.xz   

3、进入解压目录

cd node-v18.15.0-linux-x64   

// 解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以修改linux系统的环境变量(profile)来设置直接运行命令:

4、进入系统变量页面进行配置

系统变量配置文件路径:/etc/profile     编辑命令:vi /etc/profile
最初进入时为默认的只读模式,
进去之后按i开始编辑,编辑完后按Esc,再按Shift+zz组合键保存退出】:
tip:如遇到使已设定选项 'readonly' (请加 ! 强制执行)警告时      用 :wq! 保存退出、
在最后一一行加入node、npm命令所在的地址(根据你把node解压到的文件地址为准),这里我放到root目录
export PATH=$PATH:/usr/local/src/node-v18.15.0-linux-x64/bin

5、立即生效

source /etc/profile

6、检测是否安装成功

node -v   // 显示版本号,即为成功安装

欢迎关注公众号:前端学海

PM2

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

https://pm2.keymetrics.io/docs/usage/quick-start/

1、下载

npm install pm2@latest -g

基于终端的仪表板

pm2 monit

常用操作

1、 pm2需要全局安装
npm install -g pm2
2、进入项目根目录
2.1 启动进程/应用 pm2 start bin/www 或 pm2 start app.js
2.2 重命名进程/应用 pm2 start app.js --name wb123
2.3 添加进程/应用 watch pm2 start bin/www --watch
2.4 结束进程/应用 pm2 stop www
2.5 结束所有进程/应用 pm2 stop all
2.6 删除进程/应用 pm2 delete www
2.7 删除所有进程/应用 pm2 delete all
2.8 列出所有进程/应用 pm2 list
2.9 查看某个进程/应用具体情况 pm2 describe www
2.10 查看进程/应用的资源消耗情况 pm2 monit
2.11 查看pm2的日志 pm2 logs
2.12 若要查看某个进程/应用的日志,使用 pm2 logs www
2.13 重新启动进程/应用 pm2 restart www
2.14 重新启动所有进程/应用 pm2 restart all

Nginx

NGINX是一个高效的HTTP和反向代理的服务器:https://nginx.org/en/
Centos 7下安装nginx,使用yum install nginx,提示没有可用的软件包。
原因是nginx位于第三方的yum源里面,而不在centos官方yum源里面很多软件包在yum里面没有的

解决的方法: 使用epel源,也就是安装epel-release软件包。EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS等系统。可以找到对应的系统版本,架构的软件包

解决办法,安装epel

yum install epel-release

1、查看可以安装的源

yum list nginx

2、更新

yum update

3、安装

yum install nginx -y

4、检测是否安装成功

nginx -v

5、配置

vim /etc/nginx/nginx.conf 修改server部分

新添加部分:由于默认端口被占用,需重新配置一个 server 服务,此处设置了不同的端口。

server {
    listen       80;
    server_name  121.196.177.219;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    root      /opt/tutou/dist;
    index     index.html;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

// 保存后执行以下命令
 /usr/sbin/nginx -t 验证conf文件是否配置正确
 /usr/sbin/nginx -s reload 重新加载NGINX配置生效

Git

yum安装git被安装在/usr/libexec/git-core目录下

yum -y install git
输入 git --version查看Git是否安装完成以及查看其版本号

yum安装缺点: 版本你不好控制。如果想要使用最新版的git,那还是得自己下载源码安装。git中没有更新命令

源码安装 (推荐)

1、进入git在GitHub上发布版本页面

https://github.com/git/git/releases,这里我们选择最新版的tar.gz包,复制下载地址
wget https://github.91chifun.workers.dev//https://github.com/git/git/archive/v2.28.0.tar.gz

2、解压缩

tar -zxvf git-2.22.0.tar.gz

3、进入到解压后的文件夹

cd git-2.22.0

4、拿到解压后的源码以后我们需要编译源码了,不过在此之前需要安装编译所需要的依赖。

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

耐心等待安装完成,中途出现提示的时候输入y并按回车。

5、提示,安装编译源码所需依赖的时候,yum自动帮你安装了git,这时候你需要先卸载这个旧版的git。

yum -y remove git

6、编译git源码

make prefix=/usr/local/git all

7、安装git至/usr/local/git路径

make prefix=/usr/local/git install

8、配置环境变量

vi /etc/profile 
 在底部加上
export PATH=$PATH:/usr/local/git/bin
( 输入 :wq! 保存修改)

9、刷新环境变量

source /etc/profile

10、查看Git是否安装完成

git --version

MariaDB

安装mariadb-server,默认依赖安装mariadb,一个是服务端、一个是客户端。

1、下载

yum install mariadb-server

2、配置MariaDB
安装完成后首先要把MariaDB服务开启,并设置为开机启动

[root@mini ~]# systemctl start mariadb  # 开启服务
[root@mini ~]# systemctl enable mariadb  # 设置为开机自启动服务

首次安装需要进行数据库的配置,命令都和mysql的一样

[root@mini ~]# mysql_secure_installation

配置时出现的各个选项

Enter current password for root (enter for none):  # 输入数据库超级管理员root的密码(注意不是系统root的密码),第一次进入还没有设置密码则直接回车

Set root password? [Y/n]  # 设置密码,y

New password:  # 新密码
Re-enter new password:  # 再次输入密码

Remove anonymous users? [Y/n]  # 移除匿名用户, y

Disallow root login remotely? [Y/n]  # 拒绝root远程登录,n,不管y/n,都会拒绝root远程登录

Remove test database and access to it? [Y/n]  # 删除test数据库,y:删除。n:不删除,数据库中会有一个test数据库,一般不需要

Reload privilege tables now? [Y/n]  # 重新加载权限表,y。或者重启服务也许


测试是否能够登录成功,出现  MariaDB [(none)]> 就表示已经能够正常登录使用MariaDB数据库了
[root@mini ~]# mysql -u root -p
Enter password: // 在这里输入刚刚设置的密码

3、设置MariaDB字符集为utf-8(可选)
vi /etc/my.cnf 编辑改文件

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

#该值指在服务器中创建数据库的默认设置--新增该项
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

#该项值使用客户端连接改数据库时的客户端默认设置--新增该项
[client] 
default-character-set=utf8

[mysql]
default-character-set=utf8

4、重启服务

[root@mini ~]# systemctl restart mariadb

5、登录进入mariadb查看字符集,如value一行大多为utf-8 则设置成功

show variables like "%character%";

远程链接mariadb数据库

mariadb默认是拒绝 root 远程登录的。这里用的是 navicat 软件连接数据库

1、查看开启端口3306(数据库默认端口)

[root@mini ~]# firewall-cmd --query-port=3306/tcp  # 查看3306端口是否开启
no
[root@mini ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent  # 开启3306端口
success
[root@mini ~]# firewall-cmd --reload  # 重启防火墙
success
[root@mini ~]# firewall-cmd --query-port=3306/tcp  # 查看3306端口是否开启
yes

2、先查看mysql数据库中的user表

[root@mini ~]# mysql -u root -p  # 先通过本地链接进入数据库

MariaDB [(none)]> use mysql;

MariaDB [mysql]> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| ::1       | root |
| localhost      | root |
+-----------+------+
3 rows in set (0.00 sec)

3、将与主机名相等的字段改为 “%” ,我的主机名为localhost(默认的主机名),

MariaDB [mysql]> update user set host='%' where host='localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| %         | root |
| 127.0.0.1 | root |
| localhost | root |
+-----------+------+
3 rows in set (0.00 sec)

4、刷新权限表,或重启mariadb服务,一下二选一即可

1、MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

注意:刷新权限表是在数据库中,重启服务是在外部命令行中

2[root@mini ~]# systemctl restart mariadb // 刷新权限表

6、重新远程链接mariadb,正确输入账号密码即可

Firewalld 防火墙

CentOS 7及更高版本,中使用firewalld作为默认防火墙管理工具https://firewalld.org/ ,可在官网查看当前系统是否支持默认安装
提供了动态托管的防火墙,并支持定义网络连接或接口的信任级别的网络/防火墙区域。它支持IPv4,IPv6防火墙设置,以太网桥和IP集。运行时和永久配置选项分开。它还为服务或应用程序提供了一个接口,以直接添加防火墙规则。

基本使用:

启动: systemctl start firewalld
查看状态: systemctl status firewalld / firewall-cmd state 这个命令也可以,只是信息会简单点
停止: systemctl disable firewalld
禁用: systemctl stop firewalld

常用命令:

添加
firewall-cmd --zone=public --add-port=80/tcp --permanent   (--permanent永久生效,没有此参数重启后失效)
重新载入,添加端口后重新载入才能起作用
firewall-cmd --reload
查看端口
firewall-cmd --zone=public --query-port=80/tcp
删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
查看开启了哪些服务
firewall-cmd --list-services
查看开启了哪些端口
firewall-cmd --list-ports
查看还有哪些服务可以打开
firewall-cmd --get-services
查看所有打开的端口:
firewall-cmd --zone=public --list-ports
更新防火墙规则:
firewall-cmd --reload

这里我开启了80和443端口使用,tip:每次设置好打开后关闭的端口后,都需要重新载入才可生效

自动化构建 (这里指的是前端项目及node项目)

监听gitee 或github等代码仓库的 push请求,自动构建项目

// 这里我没有用webhook的npm包,是自己接收到指定接口发过来的数据,过滤push请求,然后使用shell脚本处理
// 这会有安全隐患,因为只是自己使用,所以这里只管实现
// 这里以拦截vue项目的push为主,进行项目的更新和重新构建,
// 旨在最简单的实现自动构建项目的目的,node项目也可按此方式,
// 进行项目更新和重启运行
var http = require('http')
var shell = require('shelljs')

http.createServer(function (req, res) {
    console.log(req.headers['x-git-oschina-event'],req.headers['x-git-oschina-event'] === 'Push Hook', '接收')
   if(req.headers['x-git-oschina-event'] === 'Push Hook'){
    	console.log('接受到push请求')
	rebuild()
   }
}).listen(443,() =>{
    console.log('WebHooks Listern at 443');
})

 // shell脚本处理,重新构建项目
function rebuild () {

	shell.cd('/opt/tutou')
	console.log('开始执行git!')
	//即同步运行外部工具
	if (shell.exec('git pull').code !== 0){ // 拉取最新代码
   	  shell.echo('Error: Git pull failed');
 	  shell.exit(1);
 	}

	if (shell.exec('npm install').code !== 0){ // 下载依赖
  	  shell.echo('Error: installt failed');
  	  shell.exit(1);
	}
	
	console.log('开始构建!')

	if (shell.exec('npm run build').code !== 0){ // 构建项目
  	  shell.echo('Error: installt failed');
  	  shell.exit(1);
	}

	console.log('构建成功!')
}

nodemailer 邮箱通知

自动化构建之后,我使用nodejs处理nodemailer的npm包,在构建完成或失败之后,发送详细的代码执行情况的邮件到我的邮箱,通知我
理论上支持所有主流邮箱,但我只测试了 QQ 和 163,都成功了。若其他邮箱出问题请留言交流。

1、安装:

npm install nodemailer -D

2、代码实现

 //引入模块 nodemailer
 const nodemailer = require('nodemailer')

 const config = {
    // 163邮箱 为smtp.163.com
    // 其他邮箱也可,详细可问度娘这里只管实现
    host: 'smtp.163.com',
    //端口必要
    port: 465, 
    auth: {
        // 发件人邮箱账号
        user: '*******@163.com', 
        //发件人邮箱的授权码 需要开启邮箱的 POP3/SMTP 服务。
        // 改服务的开启可问度娘,这里不展开了,只管实现
        pass: '*****'  // 我这里隐藏的自己的授权码
    },
    tls: {
      rejectUnauthorized: false
  }
 }

 const transporter = nodemailer.createTransport(config)

  const mail = {
    // 发件人 邮箱  '昵称<发件人邮箱>' 这里要记住,是 昵称 后面跟 <邮箱> 
    from: '超<*****@163.com>',
    // 主题
    subject: '测试',
    // 收件人 的邮箱 可以是其他邮箱 不一定是qq邮箱
    to: '****@qq.com',
    // 内容
    text: `123` ,
    //这里可以添加html标签
    html: '<a href="https://www.baidu.com/">百度</a>'
 }

 transporter.sendMail(mail, function(error, info){
    if(error) { // 发送失败,打印错误
        return console.log(error);
    }
    transporter.close()
    console.log('mail sent:', info.response) // 发送成功
 })

常见错误:
535 错误:可能是账号密码错误
553 错误:发件人和认证的邮箱地址不一致,auth.user 需要与 from 中的邮箱一致

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux——centos7搭建node + Nginx + vue + mysql 的服务安装详细步骤 的相关文章

随机推荐

  • NVIDIA Jetson Xavier NX 深度学习相关组件安装

    一 tensorflow的安装 写在前面的牢骚话 xff08 可选择直接跳过 xff09 在写安装tensorflow的教程之前 xff0c 我一定要放出当时我安装tensorflow时所遇到的那些莫名其妙的错误 xff0c 具体错误如下图
  • Python - Decorator(装饰器) - 带参数的

    我们通过以示例来看看带参数的装饰器到底怎么回事 from time import perf counter from functools import wraps def repeated times def outer fn 64 wra
  • 2020塔式起重机司机考试及塔式起重机司机考试软件

    题库来源 xff1a 安全生产模拟考试一点通公众号小程序 2020塔式起重机司机考试及塔式起重机司机考试软件 xff0c 包含塔式起重机司机考试答案解析及塔式起重机司机考试软件练习 由安全生产模拟考试一点通公众号结合国家塔式起重机司机考试最
  • 2020煤炭生产经营单位(安全生产管理人员)操作证考试及煤炭生产经营单位(安全生产管理人员)模拟考试软件

    题库来源 xff1a 安全生产模拟考试一点通公众号小程序 2020煤炭生产经营单位 xff08 安全生产管理人员 xff09 操作证考试及煤炭生产经营单位 xff08 安全生产管理人员 xff09 模拟考试软件 xff0c 包含煤炭生产经营
  • 嵌入式系统 Boot Loader 技术内幕

    内容 xff1a 1 引言 2 Boot Loader 的概念 3 Boot Loader 的主要任务与典型结构框架 4 关于串口终端 5 结束语 关于作者 对于本文的评价 在 Linux 专区还有 xff1a 教程 工具与产品 代码与组件
  • PADS VX2.8 PCB版本的降低方法

    在PCB设计过程中 xff0c 可能会遇到不同版本的PCB文件 xff0c 高版本软件可以兼容低版本 xff0c 反之则不能 为了提高兼容性 xff0c 可以将拿到的高版本PCB文件降低为低版本 xff0c 以配合使用低版本软件打开 打开P
  • Ubuntu16.04 速腾rslidar-32线激光雷达使用详细记录

    0 rslidar 32线激光雷达参数 线束 xff1a 32线波长 xff1a 905nm激光等级 xff1a class1精度 xff1a 5cm xff08 典型值 xff09 测量距离 xff1a 0 2m 200m xff08 目
  • useradd 与 adduser

    useradd 选项 用户名 参数如下 xff1a c comment 指定一段注释性描述 d 目录 指定用户主目录 xff0c 如果此目录不存在 xff0c 则同时使用 m选项 xff0c 可以创建主目录 g 用户组 指定用户所属的用户组
  • Python——sqlalchemy.exc.ArgumentError

    报错信息 xff1a sqlalchemy exc ArgumentError Mapper mapped class XmjbqZby gt xmjbq zby could not assemble any primary key col
  • VirtualBox虚拟机ping不通主机,但是主机可以ping通虚拟机

    解决VirtualBox虚拟机不能ping通宿主机的问题 问题描述 在VirtualBox虚拟中 xff0c 无法ping通宿主机 xff0c 宿主机可以ping通虚拟机 虚拟机的网络已经设置为 桥接网卡 xff0c 也可以正常上网 解决方
  • RTThread-W25Q128的驱动基于SPI和SFUD

    文章目录 前言一 kconfig的配置1 配置对应的SPI和SFUD 二 SFUD的使用W25Q128的读写操作 三 关于写入的问题 前言 本文是一个初学者的学习记录 xff0c 可能有误 SFUD是针对flash的一种通用的组件 xff0
  • RT-Thread 基于QSPI驱动LY68L6400-SRAM

    前言 使用的是RTThread 标准版 xff0c 主控是STM32H743 xff0c SRAM是LY68L6400 xff0c 使用QSPI QSPI和SPI的区别 个人理解最大的区别就是SPI是串行 xff0c 数据输出 xff0c
  • 关于学习RTThread的随笔

    认识操作系统 关于单片机的学习是从51到ARM xff0c 慢慢的接触到了操作系统 xff0c 开始也不明白是什么 xff0c 就跟着原子哥的例程学 xff0c 也不知道哪个好 xff1f 开始学UCOS xff0c 后来又用学了FreeR
  • RT-Thread 串口的使用

    1 配置选用的串口 在kconfig文件中增加ENV的串口选项 xff0c 这边选择的是uart2 menuconfig BSP USING UART bool span class token string 34 Enable UART
  • 关于驱动中景园LCD和LVGL踩的一些坑

    背景介绍 我使用的是中景园的1 3寸 xff0c 240 240的LCD xff0c 主控是STM32L152系列 https item taobao com item htm spm 61 3688y 1 14 16 1916264bJ5
  • 使用物联网卡无法通讯

    在使用阿里云的物联网卡时 xff0c 遇到一个电信卡无法通讯的问题 xff0c 数据只能发不能收 xff0c 后来客服跟踪调查后发现 xff0c 物联网卡有一个IP地址的白名单 xff0c 需要让客服把通讯平台的IP地址加到这个白名单才行
  • ESP32+PIO+LGVL+gui_guider

    简介 本文基于VScode上安装platform插件 xff08 简称PIO xff09 来开发ESP32 xff0c 屏幕显示使用LVGL 43 gui guider 关于VScode上使用platfrom也是一把辛酸泪 很多朋友会安装不
  • ESP32+PIO+LGVL+gui_guider之【BUTTON实体按键】

    LVGL的Button外部按键 这个Button是没有触摸屏的情况下用外部的按键来对应屏幕上的按键 xff0c 比如屏幕上有个确定键 xff0c 你按下外部某个按键 xff0c 屏幕的确定键也相应显示按下 工作原理其实就是LVGL把外部按键
  • KEIL工程报错问题解决记录

    1 no section to be FIRST LAST 在一次下载了别人的工程后 xff08 来自51黑论坛STm32L低功耗测试的一个工程 xff09 xff0c 由于其他工程用的DPF包有所不同 xff0c 记得是按照提示更新了固件
  • Linux——centos7搭建node + Nginx + vue + mysql 的服务安装详细步骤

    一 安装所需的软件 二 进行具体配置 三 使用 以下配置及安装为已运行实测的笔记整理 xff0c 严格按照该步骤进行配置 xff0c 大概率上不会有问题 不懂linux的小白也可配置使用 当然 xff0c 最好还是了解一些linux基本的命