node部署之与阿里云服务器 ECS 的“斗智斗勇“
node部署之与阿里云服务器 ECS 的"斗智斗勇"
步骤
-
购买云服务器
这里选择的是 阿里云服务器 ECS (配置自选, 这里选的系统是 CentOs 版, 与后面宝塔安装命令有关)
-
进入云服务器管理控制台点击实例 ID
-
点击实例控制台的远程连接或下载使用
putty
工具或者宝塔面板的宝塔SSH连接进入服务器命令窗口,或者 windows terminal 等命令窗口输入ssh [email protected]<云服务器公网ip>
进行连接这都需要管理员账号和密码(账号:root;密码是你自己设置的登录密码)
-
这里选择
宝塔面板
服务器管理软件进行键鼠操作(毕竟是windows用户,熟悉Linux的可以直接全程命令操作),在打开的 shell 窗口直接运行下面代码安装宝塔管理软件 (Linux 版);可自行搜索 宝塔,进它官网去找对应命令下载 ==> 宝塔面板
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安装完成,命令行最下面会给出
服务器公有 ip 地址:8888/xxxx
的网址及宝塔面板登录账号和密码,打开此网址会进入此服务器运维管理页面忘记面板登录密码: 在命令行窗口输入
bt
命令,会提示选择操作项——重置面板密码即可这一步到这里就会受阻,你需要在安全组手动配置安全规则,添加服务器 8888 端口(宝塔面板默认 8888 端口)允许被访问(图示如下):
手动添加一条:端口范围为:
8888/8888
(仅 8888 端口); 授权对象为:0.0.0.0/0
(即允许所有 ip)
到这里,就能正常进入连接了服务器的宝塔面板了,初始进入需要安装一些运维管理软件(MySQL / PHP / Nginx 等)
因为我这里部署的是 nodejs 服务器,所以额外去软件商店 → 运行环境
→ 安装 PM2 管理器(如果需要其他软件,自行安装即可) -
到这里,前期准备工作基本完成,下面可以部署服务器了
-
通过宝塔面板 FTP 菜单或文件菜单面板(Filezilla,WinSCP也可)进行服务器相关代码的文件上传(推荐删掉不需要的文件,如 node_modules 目录,.git 文件等,再压缩上传压缩包会更快)
与本地一样,可以先通过 npm 安装 cnpm 包管理器并配置淘宝镜像 (这样做的原因相信不用多说)
-
默认站点部署在
/www/wwwroot/
目录下, 将文件放在此目录下。再解压上传的文件,就与本地运行没什么区别了,命令行运行cnpm install
安装所需依赖,node yourEntry.js
运行来测试一下吧~ -
到这步,与在本机运行服务器一样,命令行窗口一关,服务就断了,所以接下来需要去添加一个站点,服务程序后台运行,并能在崩掉后自动重启,这就要用到
PM2 管理器
了。 -
点击 PM2 管理器设置 → 填入服务器跑起来的文件入口根目录 → 填入启动文件名 → 自己随意起一个项目名称便于辨识 → 点击添加 => 再点击启动便跑起来了~~~
-
在到这一步的时候,满怀期待地去使用
公网ip:端口
的方式尝试去测试访问服务器。远程通过服务器测试命令curl http://127.0.0.1:9999
也能正常响应,本地通过ping <公网ip>
能通,也没有掉包情况,但通过浏览器访问就是一直 “转圈” => 不给你任何响应,貌似也没有解析请求… 这可纠结了 -
按道理来说,就算没去映射域名,通过 ip 直接访问服务器程序,也是能有相应的响应结果才对啊!!!当然,访问 80 端口它会给你提示
请求未找到对应的站点
,如下图所示:
因为没有绑定站点,没有程序响应请求,也没有映射域名去解析 80 端口
这里,像之前配置安全组规则开放 8888 端口一样 —— 开放服务器运行端口(我这里是 9999,你程序运行的没被服务器其他进程占用的端口),http 80 端口,https 443 端口全开了,就是不响应
-
网上去查了一圈,都是配置安全组规则,开放程序端口就可以访问了,但我这儿就是不行
-
再去看了下,发现我这里 nginx 没正常运行(可能是这个原因?)
-
systemctl status nginx.service
查看 nginx 服务状态 (下图是重启后的正常状态): -
systemctl start nginx.service
启动 -
systemctl stop nginx.service
停止 -
systemctl reload nginx.service
重载 -
也可使用此命令
kill -9 <PID>
挨个儿杀死对应的 nginx 服务进程,再重启 nginx 服务<PID>
---- nginx 对应的进程 id
-
netstat -lntp
可以查看 tcp 协议端口监听情况表;LISTEN
即为监听状态,你的端口呈类似tcp6 0 :::9999 :::* LISTEN
属正常状态(9999 替换为你服务程序运行的端口),一开始我也以为这有问题(后来正常访问后,还是这状态)
到这步依旧没能通过
公网ip:9999
的方式访问到,抓狂 … 提交工单又麻烦,算了,等我映射完域名再看!!! -
-
再进行映射域名操作,我之前就在阿里云购买过域名并备案过(我不知道为啥,我这备案至少历经了一个半月时间,可真是慢呐)
具体操作(域名解析 + 服务器映射):
-
在阿里云控制台进入域名控制台,你购买的域名列表中选择你要解析的域名,点击右侧的
解析
链接进入域名解析设置界面 -
手动
添加记录
,记录类型选择A-将域名指向一个 IPV4 地址
,因为是通过云服务器公网 ip 记录的,所以只能选择这项(我之前用虚拟主机部署过,就可以选CNAME
类型,指向虚拟主机的域名) -
主机记录,如果就是直接部署在当前域名就可以加一个
@
,另外加一条www
,这意思就是当任何人访问这个域名时,在浏览器地址栏输入时,加不加www
都能解析到你配置的云服务器(这是两条记录吼~) (我呢,因为之前的静态网站直接部署在虚拟主机,解析在这个域名上,我就加了个二级域名),如下图所示: -
到时候,我这里就直接访问
cloudecs.xxxxx.com
就能解析到我的服务器啦~~~
域名解析弄完了,别忘了云服务器还得映射哟~ 接着肝
-
还是回到亲爱的宝塔面板,
软件商店
=>PM2 管理器 设置
=> 选择你将映射的服务程序 点击映射
根目录会默认填充,不用改(如果不对,你去更改为
这个程序运行的根目录
即可)
域名,直接填你上面解析设置的域名,解析的一级就填一级域名(当前泛型解析好像不支持了)例如我的, 就添加两条:
www.cloudecs.xxxx.com
和cloudecs.xxxx.com
分别添加就行,默认端口是 80要改其他端口的话,就需要使用类似
xxxx.com:8080
的方式进行指定,如果想在访问的时候隐藏 8080 端口,就去 nginx 配置文件里面去修改一下更改完了,别忘了用 PM2 重启一下服务器吼~
-
-
到这里,我这个 node 服务就全部部署完了,但是没响应的状态依旧存在,算了,让服务器去冷静冷静吧!!!
小结
在整个过程中,唯独在放行端口后无法访问的问题!查了不少办法,但都不奏效,只能静观其变了。
最终的结果是:
只要前面的步骤你都确保无误(程序运行中、端口开放了、域名解析对、域名映射没问题),那就可能是 浏览器与服务器缓存
的问题了。反正我这是映射域名过了几个小时后,就能通过域名正常访问到服务器了,再通过 ip:端口
也能访问了。
就这么多啦!