CentOS8 部署 Node 环境、Nginx(ECS系列一)

登录ECS

使用公共镜像 CentOS8.0 创建 ECS 之后,在实例详情中,先重置实例密码,然后远程连接 Workbench.
首次登陆,可使用:
用户名: root, 密码即刚刚创建

后续可创建子账户后登陆...
创建用户:

useradd -m 用户名

-m 表示创建用户目录,然后给这个用户名创建密码

passwd 用户名

输入密码回车后,再次输入密码确认即可。通过 su 用户名 可以切换用户。
本文中,依然采用root账户进行以下操作

点菜单栏 - 视图 - 文件树,打开文件夹目录,这样看起来更清晰

部署Node

登录后处于 root 文件夹下(用户文件夹。若是通过其他账户登录,进入时处于home下的账户文件夹),可进入 opt 文件夹下安装 node
阿里云教程中,安装的是 node-v6.9.5-linux-x64.tar.xz 版本,显然是很久以前的版本了,我们可以根据实际的当前稳定版本进行安装,官网上目前最新的是 12.18.1,所以这里作调整

cd /opt
wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz

解压安装

tar xvf node-v12.18.1-linux-x64.tar.xz

创建软链接

ln -s /opt/node-v12.18.1-linux-x64/bin/node /usr/local/bin/node
ln -s /opt/node-v12.18.1-linux-x64/bin/npm /usr/local/bin/npm

查看版本

node -v
npm -v

随后安装 cnpm,并创建软链接

npm install cnpm -g --registry=https://registry.npm.taobao.org
ln -s /opt/node-v12.18.1-linux-x64/bin/cnpm /usr/local/bin/cnpm

查看是否安装正确

cnpm -v

部署测试

在 home 文件夹中写入测试文件,这里可以直接沿用 阿里云教程demo

cd /home
touch example.js
vim example.js

i 进入编辑,输入以下内容


const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => { 
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
}); 

server.listen(port, hostname, () => { 
    console.log(`Server running at http://${hostname}:${port}/`);
});

随后按 Esc 退出编辑模式,输入 :wq 并回车。
当然,也可以直接在左侧文件树中进行以上操作,右键home文件夹,新建文件 example.js,双击打开,复制以上代码,随后点击右上角保存即可,更为简单。

运行

node example.js

在实例详情中,点左侧本实例安全组,配置安全组,入方向,手动添加,授权对象 源设为当前设备IP,0.0.0.0/0 表示允许所有ip.
在浏览器中打开 http://<ECS实例公网IP地址>:端口号,本例中端口为 3000。即可运行。
可安装 pm2 代替 forever 做进程守护

cnpm i -g pm2

关于 pm2 的相关命令
启动进程: pm2 start example.js
重启: pm2 restart example.js
停止: pm2 stop app_name|app_id
停止所有: pm2 stop all
查看进程: pm2 list
查看日志: pm2 logs
查看具体进程日志: pm2 logs app_id

执行 npm 命令
npm run dev 等同于 pm2 start npm -- run dev
npm start 等同于 pm2 start npm -- start

对进程命名
pm2 start app.js --name ThisIsAppName
pm2 start npm --name ThisIsAppName -- run dev

pm2 使用过程中会发生崩溃,可在启动服务的时候加个 -i 参数设置启动工作线程的个数
pm2 start app.js -i max

安装Git

yum命令安装:

sudo yum install -y git

-y 表示自动选择 yes, 检查安装成功 git --version

Git 配置

配置提交代码的用户账号

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

生成公钥和私钥(用于github):

ssh-keygen -t rsa -C "youremail@example.com"

过程中会询问存储位置,选择默认位置即可,如/root/.ssh/id_rsa.pub,将生成的公钥(id_rsa.pub文件中的内容)拷贝到github SSH keys中,即可开始使用。

安装 Nginx

安装依赖

  • gcc 环境可以编译 C,C++,Ada,Object C和Java等语言
yum install -y gcc
  • pcre和pcre-devel是一个perl库,nginx的http模块使用pcre来解析正则表达式
yum install -y pcre pcre-devel
  • zlib zlib-devel,nginx各种模块中需要使用gzip压缩,zlib库提供了开发人员的压缩算法
yum install -y zlib zlib-devel
  • openssl openssl-devel,openssl是web安全通信的基石,用于安全通信
yum install -y openssl openssl-devel

当然,可以一句命令概括

yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

安装 nginx

切换到 opt 文件夹。
进入nginx 下载页 http://nginx.org/en/download.html,选择合适版本,右键 - 复制链接地址
回到系统中,下载并解压文件

wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz

进入 nginx-1.18.0 文件下,使用默认配置进行编译

cd nginx-1.18.0
./configure

注意,若需启用HTTPS,需要确保 Nginx 编译时包含了 SSL 模块,此处修改编译命令为

./configure --with-http_ssl_module

执行编译并安装

make && make install

没有报错的话,表示nginx已成功安装。
nginx 默认运行在 80 端口,在ecs防火墙中授权 80 端口,然后执行nginx安装目录下面的sbin/nginx 开启 nginx

/usr/local/nginx/sbin/nginx

在浏览器中打开ECS公网IP,就能看到 Nginx 欢迎界面了

nginx 相关命令

关闭nginx

nginx -s quit
nginx -s stop

重启nginx

nginx -s reload      # 重新载入配置文件
nginx -s reopen      # 重启 Nginx

查询nginx主进程号

ps -ef | grep nginx

停止

kill -QUIT 主进程号
kill -TERM 主进程号
kill -9 nginx       # 强制停止

netstat 命令参数:

-a:列出所有网络状态,包括 Socket 程序;
-c秒数:指定每隔几秒刷新一次网络状态;
-n:使用 IP 地址和端口号显示,不使用域名与服务名;
-p:显示 PID 和程序名;
-t:显示使用 TCP 协议端口的连接状况;
-u:显示使用 UDP 协议端口的连接状况;
-I:仅显示监听状态的连接;
-r:显示路由表;

如:查看80端口使用情况可用 netstat -ntlp |grep 80

开机自启

很多教程中使用 systemcel enable nginx.service 命令设置自动启动。然而执行的时候提示 nginx.service 不存在。
若用 yum install 命令安装 nginx,会自动创建nginx.service文件。而上文中用的压缩包源码编译安装,所以需要自建此服务文件。

  • 创建nginx.service文件 vi /usr/lib/systemd/system/nginx.service
  • 写入

[Unit]
Description=nginx
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

设置开机启动,并查看状态


systemctl enable nginx.service
systemctl status nginx.service

显示 inactive,杀掉程序再重新启动


pkill -9 nginx
systemctl start nginx

systemctl status nginx.service

再次查看状态,显示 active

posted @ 2020-06-28 11:02  晨の风  阅读(765)  评论(0编辑  收藏  举报