ECS 部署 node 环境

Posted 晨の风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECS 部署 node 环境相关的知识,希望对你有一定的参考价值。

登录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

此时,运行命令为


# 启动参数
# --watch
#   监听变化,自动重启
pm2 start example.js --watch

关于 pm2 的相关命令
重启: pm2 restart example.js
查看进程状态: pm2 list
停止: pm2 stop app_name|app_id
停止所有: pm2 stop all

安装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

执行编译并安装

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

以上是关于ECS 部署 node 环境的主要内容,如果未能解决你的问题,请参考以下文章

node.js项目部署

Linux环境部署Node.js

Hexo部署到阿里云服务器ECS

Hexo部署到阿里云服务器ECS

在阿里云上部署的node服务器不能通过公网IP访问的解决办法

阿里云CentOS部署小笔记