CentOS8安装redis、mysql、nginx、nodejs、pm2
一、服务器准备就绪
我是在华为云上买的“HECS(云耀云服务器)”
接下来就是购买域名、域名备案、SSL证书等等这些动作配置,就不一一介绍了,我均 是用的华为云的。
准备工具:
- Xshell
一款强大的安全终端模拟软件。可在windows界面下访问不同 系统下的远程终端服务器,并且进行操作控制。
- XFtp
灵活、轻便的SFTP/FTP客户端。可在网络中安全传输软件, 实现多窗口编辑,进行文件同步。
- Navicat
一套数据库开发工具,让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、 PostgreSQL 和 SQLite 数据库。可以快速轻松地创建、管理和维 护数据库。
二、服务器安装相关依赖和配置
安装Reids
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编 写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
下载Redis
进入官网找到下载地址 https://redis.io/download
上图中右键Download按钮,选择复制链接。 进入到Xshell控制台(默认当前是root根目录),输入wget 将上面复制的下载链接粘贴上,
输入(使用Xshell工具连接服务器)
wget http://download.redis.io/releases/redis‐5.0.7.tar.gz
执行后如下图:
等待下载完成。
解压并安装Redis
解压
下载完成后需要将压缩文件解压,输入以下命令解压到当前目录
tar -zvxf redis-5.0.7.tar.gz
解压后在根目录上输入ls 列出所有目录会发现与下载redis之前多了一个redis-5.0.7.tar.gz文件和
redis-5.0.7的目录。
移动redis目录
一般都会将redis目录放置到 /usr/local/redis目录,所以这里输入下面命令将目前在/root目录下的redis-5.0.7文件夹更改目录,同时更改文件夹名称为redis。
mv /root/redis-5.0.7 /usr/local/redis
cd 到/usr/local目录下输入ls命令可以查询到当前目录已经多了一个redis子目录,同时/root目录下已经没有redis-5.0.7文件夹
编译
cd到/usr/local/redis目录,输入命令make执行编译命令,接下来控制台会输出各种编译过程中输出的内容。
make
最终运行结果如下:
安装
make PREFIX=/usr/local/redis install
这里多了一个关键字 <font color="#dd0000">PREFIX=</font> 这个关键字的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,
库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。
执行结果如下图:</br>
启动redis
根据上面的操作已经将redis安装完成了。在目录/usr/local/redis 输入下面命令启动redis
./bin/redis-server& ./redis.conf
上面的启动方式是采取后台进程方式,下面是采取显示启动方式(如在配置文件设置了daemonize属性为yes则跟后台进程方式启动其实一样)。
./bin/redis-server ./redis.conf
两种方式区别无非是有无带符号&的区别。 redis-server 后面是配置文件,目的是根据该配置文件的配置启动redis服务。redis.conf配置文件允许自定义多个配置文件,通过启动时指定读取哪个即可。
redis.conf配置文件
在目录/usr/local/redis下有一个redis.conf的配置文件。我们上面启动方式就是执行了该配置文件的配置运行的。我么可以通过cat、vim、less等Linux内置的读取命令读取该文件。
也可以通过redis-cli命令进入redis控制台后通过CONFIG GET * 的方式读取所有配置项。 如下:
redis-cli
CONFIG GET *
回车确认后会将所有配置项读取出来,如下图
这里列举下比较重要的配置项
这里我要将daemonize改为yes,不然我每次启动都得在redis-server命令后面加符号&,不这样操作则只要回到Linux控制台则redis服务会自动关闭,同时也将bind注释,将protected-mode设置为no。
这样启动后我就可以在外网访问了。
更改方式:
vim /usr/local/redis/redis.conf
通过 /daemonize 查找到属性,默认是no,更改为yes即可。 (通过/关键字查找出现多个结果则使用 n字符切换到下一个即可,查找到结果后输入:noh退回到正常模式)
如下图:
其他两个属性也是同样方式查找和编辑即可。
至此,redis安装配置完成。可执行netstat -lanp | grep 6379
查看redis端口
redis-cli说明
redis-cli是连接本地redis服务的一个命令,通过该命令后可以既然怒redis的脚本控制台。如下图
输入exit可以退出redis脚本控制台
输入redis-cli 进入控制台后输入命令shutdown即可关闭运行中的Redis服务了。如下图:
安装mysql
1.输入
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
2、安装数据源
yum install mysql80-community-release-el8-1.noarch.rpm
3、检查数据源
查看mysql源是否安装成功:
yum repolist enabled | grep "mysql.*-community.*"
4、配置数据源(可不配置)
修改yum源,可不配置。
配置yum源:cat /etc/yum.repos.d/mysql-community.repo
5、禁用CentOS8自带mysql模块
禁用CentOS8自带的mysql模块
yum module disable mysql
6、安装数据库
真正安装mysql,安装语句:
yum install mysql-community-server
Is this ok [y/Y] 一路 y到底
7、启动mysql
service mysqld start
service mysqld status
8、显示mysql的随机密码/修改密码
grep 'temporary password' /var/log/mysqld.log
修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_21root';
查看密码策略:SHOW VARIABLES LIKE 'validate_password%';
修改密码长度:(长度)set global validate_password.length=1;
修改密码等级:(等级)set global validate_password.policy=0;
修改后再次查看
设置自己想要的密码ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
9、设置mysql可以远程访问
默认情况下,我们的mysql只可以在服务器的本地访问,远程是没法访问的,今天就来教大家如何设置mysql的远程访问。
- 同样还是先登陆mysql,这时登陆记得用我们新设置的密码。 如我们的
mysql -uroot -p'Qc123456!';
这里的Qc123456!就是我的新密码 - 登陆成功后用
show databases;
来显示所有的数据库 use mysql;
来更改管理员信息select user,host from user;
查询所有的管理员update user set host = '%' where user = 'root';
更新root用户的本地访问为% ,即代表可以远程访问。通常情况下我们的root用户应该只能本地访问,但是我们今天是为了学习方便,所以就设置root可以远程访问了。- 设置完,一定要记得 flush privileges;刷新下权限。
- 再来看user表,root后面的信息就改变了。
10、添加mysql数据库的子管理员
我们上面直接用root来操作数据库,有些危险,所以我们再来教大家添加一个子管理员。</br>
如上图所示:
- 添加用户名为xiaoshitou,密码为Xiaoshitou123!的子用户
create user 'lhy'@'%' identified with mysql_native_password by 'lhy123!';
- 设置xiaoshitou这个用户可供远程访问
grant all privileges on *.* to 'lhy'@'%' with grant option;
- 刷新权限
flush privileges;
可以看到我们的xiaoshitou用户的host也变成了 % - 可以看到我们的xiaoshitou子用户也可以供远程访问了(远程访问前,要记得设置下服务器的安全组)
- 后面的生产环境里我们也可以给这个xiaoshitou用户设置一些权限,比如只可以增加和修改mysql数据库,不可以删除数据...
11、设置完以后不要忘记设置你服务器的安全组
出站和入站规则都要设置3306端口
12、idea远程访问服务数据库。
- 进入mysql链接
- 输入信息链接服务器mysql数据库
-
查看链接效果</br>
到这里我们就完整的在linux服务器里安装好mysql了,并且可以通过远程访问到。
安装nginx
1、安装各种依赖
#gcc安装,nginx源码编译需要
yum install -y gcc-c++
#PCRE pcre-devel 安装,nginx 的 http 模块使用 pcre 来解析正则表达式
yum install -y pcre pcre-devel
#zlib安装,nginx 使用zlib对http包的内容进行gzip
yum install -y zlib zlib-devel
#OpenSSL 安装,强大的安全套接字层密码库,nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http)
yum install -y openssl openssl-devel
2、下载nginx
使用 wget 命令下载:官网地址
wget -c https://nginx.org/download/nginx-1.20.0.tar.gz
3、安装
#根目录使用ls命令可以看到下载的nginx压缩包,然后解压
tar -zxvf nginx-1.20.0.tar.gz
#解压后进入目录
cd nginx-1.20.0
#使用默认配置
./configure
#编译安装
make
make install
#查找安装路径,默认都是这个路径
[root@VM_0_12_centos ~]# whereis nginx
nginx: /usr/local/nginx
#启动、停止nginx
cd /usr/local/nginx/sbin/
./nginx #启动
./nginx -s stop #停止,直接查找nginx进程id再使用kill命令强制杀掉进程
./nginx -s quit #退出停止,等待nginx进程处理完任务再进行停止
./nginx -s reload #重新加载配置文件,修改nginx.conf后使用该命令,新配置即可生效
#重启nginx,建议先停止,再启动
./nginx -s stop
./nginx
#查看nginx进程,如下返回,即为成功
[root@VM_0_12_centos ~]# ps aux|grep nginx
root 5984 0.0 0.0 112708 976 pts/1 R+ 14:41 0:00 grep --color=auto nginx
root 18198 0.0 0.0 20552 612 ? Ss 11:28 0:00 nginx: master process ./nginx
nobody 18199 0.0 0.0 23088 1632 ? S 11:28 0:00 nginx: worker process
4、开机自启动
#在rc.local增加启动代码即可
vi /etc/rc.local
#增加一行 /usr/local/nginx/sbin/nginx,增加后保存
#设置执行权限
cd /etc
5、配置域名映射
#进入nginx配置文件目录,找到nginx的配置文件nginx.conf
cd /usr/local/nginx/conf/
下面是我的配置,有普通 web 和 nodejs
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
server_names_hash_bucket_size 64;#这个需要配置,否则启动不起来
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
limit_conn_log_level error;
limit_conn_status 503;
limit_conn_zone $binary_remote_addr zone=one:10m;#one=one或allips 表示设置了名为“one”或“allips”的存储区,大小为10兆字节
limit_conn_zone $server_name zone=perserver:10m;
limit_req_zone $binary_remote_addr zone=allips:100m rate=10r/s;#rate=10r/s 的意思是允许1秒钟不超过10个请求。其中$binary_remote_addr有时需要根据自己已有的log_format变量配置进行替换
server {
listen 80;
server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。
rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。
# location / {
# root html;
# index index.html index.htm;
# }
}
server {
listen 443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。
server_name localhost; #localhost修改为您证书绑定的域名。
ssl_certificate cert/server.crt; #替换成您的证书文件的路径。
ssl_certificate_key cert/server.key; #替换成您的私钥文件的路径。
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5; #加密套件。
ssl_prefer_server_ciphers on;
charset utf8;
#access_log logs/host.access.log main;
location / {
root html/coolyiman-fe/dist;
index index.html index.htm;
}
#后端服务接口代理
location ^~/apis/ {
proxy_pass http://127.0.0.1:8099/;
limit_conn one 100; #limit_conn one 100表示最大并发连接数100
limit_conn perserver 1000;#limit_conn perserver 1000表示该服务提供的总连接数不得超过1000,超过请求的会被拒绝
limit_req zone=allips burst=50 nodelay; #burst=50 表示最大延迟请求数量不大于50。 如果太过多的请求被限制延迟是不需要的 ,这时需要使用nodelay参数,服务器会立刻返回503状态码。
# limit_conn one 40; #连接数限制
#带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k
#limit_rate 500k;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
修改完成后,重新加载配置文件
cd /usr/local/nginx/sbin/
./nginx -s reload
安装nodejs
- 安装必要的编译软件包
sudo yum install gcc gcc-c++
- 从源码下载 Nodejs(安装 12.X,确保 forever 可以运行)
cd /usr/local/src
wget https://npm.taobao.org/mirrors/node/latest-v12.x/node-v12.8.0-linux-x64.tar.gz
- 解压
tar xvf node-v12.8.0-linux-x64.tar.gz
- 移动并改名文件夹(规范点)
cd /usr/local/
mv /var/ftp/pub/node-v12.8.0-linux-x64 . //后面的.表示移动到当前目录
mv node-v12.8.0-linux-x64/ nodejs
- 让 npm 和 node 命令全局生效
环境变量方式:
- 加入环境变量,在 /etc/profile 文件末尾增加配置
vi /etc/profile
export PATH=$PATH:/usr/local/nodejs/bin
- 执行命令使配置文件生效
source /etc/profile
- 查看 nodejs 是否安装成功
node -v
npm -v
安装PM2
-
PM2(Process Manager 2 )是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。 它允许您永久保持应用程序活跃,无需停机即可重新加载它们,并促进常见的Devops任务。
-
linux安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 安装pm2
cnpm install pm2 -g // 或者就用npm install pm2 -g
- 启动服务
pm2 start app.js //启动app.js应用
pm2 start app.js --name demo //启动应用并设置name
- 创建开机自启动
pm2 startup
- 保存当前应用列表
pm2 save
- 查看是否启动项目在列表中
pm2 list
- 其他pm2的使用
- 停止服务
pm2 stop all //停止所有应用
pm2 stop [AppName] //根据应用名停止指定应用
pm2 stop [ID]
- 删除应用
pm2 delete all / /关闭并删除应用
pm2 delete [AppName] //根据应用名关闭并删除应用
pm2 delete [ID] //根据应用ID关闭并删除应用
- 更新PM2
pm2 updatePM2
pm2 update
- 监听模式
pm2 start app.js --watch //当文件发生变化,自动重启
- 静态服务器
pm2 serve ./dist 9090 / /将目录dist作为静态服务器根目录,端口为9090
- 启用群集模式(自动负载均衡)
pm2 start app.js -i max
- 重新启动pm2
pm2 restart app.js
- 0秒停机重新加载
pm2 reload app.js //重新启动所有进程,始终保持至少一个进程在运行
pm2 gracefulReload all //优雅地以群集模式重新加载所有应用程序
- 日志查看
m2 logs / /查看所有应用日志
pm2 logs [Name] //根据指定应用名查看应用日志
pm2 logs [ID] //根据指定应用ID查看应用日志
- 重启保存的应用列表
pm2 resurrect
- 清除保存的应用列表
pm2 cleardump
linux 开机启动:
-
输入
pm2 start
启动名称 (启动名称如www、app.js) (启动项目) -
输入
pm2 save
(保存启动服务) -
输入
pm2 startup
(设置开机启动) -
输入
pm2 save
(保存启动服务) -
可输入
pm2 list
查看是否启动项目在列表中 -
可输入
reboot
重启后netstat -ntlp
查看你的nodejs项目端口是否开启启动成功
注意:pm2 startup之后可能会在/etc/systemd/system中生成一个pm2-root.service文件,而不是在/etc/init.d中生成pm2-root.sh文件。可以在/etc/init.d中README中查看详情