node部署之与阿里云服务器 ECS 的“斗智斗勇“

node部署之与阿里云服务器 ECS 的"斗智斗勇"

步骤

  1. 购买云服务器

    这里选择的是 阿里云服务器 ECS (配置自选, 这里选的系统是 CentOs 版, 与后面宝塔安装命令有关)

  2. 进入云服务器管理控制台点击实例 ID

  3. 点击实例控制台的远程连接或下载使用 putty 工具或者宝塔面板的宝塔SSH连接进入服务器命令窗口,或者 windows terminal 等命令窗口输入 ssh root@<云服务器公网ip> 进行连接

    这都需要管理员账号和密码(账号:root;密码是你自己设置的登录密码)

  4. 这里选择 宝塔面板 服务器管理软件进行键鼠操作(毕竟是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 的网址及宝塔面板登录账号和密码,打开此网址会进入此服务器运维管理页面

    非第一次进入,终端输入 /etc/init.d/bt default 查看 http://<公网ip:8888>/xxxxx 即宝塔面板登录地址

    忘记面板登录密码: 在命令行窗口输入 bt 命令,会提示选择操作项——重置面板密码即可

    这一步到这里就会受阻,你需要在安全组手动配置安全规则,添加服务器 8888 端口(宝塔面板默认 8888 端口)允许被访问(图示如下):
    安全组配置

    手动添加一条:端口范围为: 8888/8888(仅 8888 端口); 授权对象为: 0.0.0.0/0(即允许所有 ip)
    到这里,就能正常进入连接了服务器的宝塔面板了,初始进入需要安装一些运维管理软件(MySQL / PHP / Nginx 等)
    因为我这里部署的是 nodejs 服务器,所以额外去 软件商店 → 运行环境 → 安装 PM2 管理器(如果需要其他软件,自行安装即可)

  5. 到这里,前期准备工作基本完成,下面可以 部署程序

  6. 通过宝塔面板 FTP 菜单或文件菜单面板(Filezilla,WinSCP也可)进行服务器相关代码的文件上传(推荐删掉不需要的文件,如 node_modules 目录,.git 文件等,再压缩上传压缩包会更快)

    与本地一样,可以先通过 npm 安装 cnpm 包管理器并配置淘宝镜像 (这样做的原因相信不用多说)

  7. 默认站点部署在 /www/wwwroot/ 目录下, 将文件放在此目录下。再解压上传的文件,就与本地运行没什么区别了,命令行运行 cnpm install 安装所需依赖,运行 node <yourEntry>.js 来测试一下吧~

  8. 到这步,与在本机运行服务器一样,命令行窗口一关,服务就断了,所以接下来需要去添加一个站点,服务程序后台运行,并能在崩掉后自动重启,这就要用到 PM2 管理器 了。

  9. 点击 PM2 管理器设置 → 填入服务器跑起来的文件入口根目录 → 填入启动文件名 → 自己随意起一个项目名称便于辨识 → 点击添加 => 再点击启动便跑起来了~~~

    • 在到这一步的时候,满怀期待地去使用 公网ip:端口 的方式尝试去测试访问服务器。远程通过服务器测试命令:

      curl http://127.0.0.1:9999
      

      也能正常响应,本地通过 ping <公网ip> 能通,也没有掉包情况,但通过浏览器访问就是一直 “转圈” => 不给你任何响应,貌似也没有解析请求… 这可纠结了

    • 按道理来说,就算没去映射域名,通过 ip 直接访问服务器程序,也是能有相应的响应结果才对啊!!!当然,访问 80 端口它会给你提示 请求未找到对应的站点,如下图所示:
      not_found_website
      因为没有绑定站点,没有程序响应请求,也没有映射域名去解析 80 端口

      这里,像之前配置安全组规则开放 8888 端口一样 —— 开放服务器运行端口(我这里是 9999,你程序运行的没被服务器其他进程占用的端口),http 80 端口,https 443 端口全开了,就是不响应

      网上去查了一圈,都是配置安全组规则,开放程序端口就可以访问了,但我这儿就是不行。再去看了下,发现我这里 nginx 没正常运行(可能是这个原因?)

    • systemctl status nginx.service 查看 nginx 服务状态 (下图是重启后的正常状态):
      查看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),一开始我以为这里应该类似 0.0.0:9999 才属于正常状态,但后来正常访问后,还是这状态

    到这步依旧没能通过 公网ip:9999 的方式访问到,抓狂 … 提交工单又麻烦,算了,等我映射完域名再看!!!

  10. 再进行映射域名操作,我之前就在阿里云购买过域名并备案过(我不知道为啥,我这备案至少历经了一个半月时间,可真是慢呐)

    具体操作(域名解析 + 服务器映射):

    • 在阿里云控制台进入域名控制台,你购买的域名列表中选择你要解析的域名,点击右侧的 解析 链接进入域名解析设置界面

    • 手动 添加记录,记录类型选择 A-将域名指向一个 IPV4 地址,因为是通过云服务器公网 ip 记录的,所以只能选择这项(我之前用虚拟主机部署过,就可以选 CNAME 类型,指向虚拟主机的域名)

    • 主机记录,如果就是直接部署在当前域名就可以加一个 @,另外加一条 www,这意思就是当任何人访问这个域名时,在浏览器地址栏输入时,加不加 www 都能解析到你配置的云服务器(这是两条记录吼~) (我呢,因为之前的静态网站直接部署在虚拟主机,解析在这个域名上,我就加了个二级域名),如下图所示:
      域名解析-添加记录

    • 到时候,我这里就直接访问 cloudecs.xxxxx.com 就能解析到我的服务器啦~~~ 网页正常打开

    • 域名解析弄完了,别忘了云服务器还得映射哟~ 接着肝

      还是回到亲爱的宝塔面板,软件商店 => PM2 管理器 设置 => 选择你将映射的服务程序 点击 映射

      根目录会默认填充,不用改(如果不对,你去更改为 这个程序运行的根目录 即可)
      域名,直接填你上面解析设置的域名,解析的一级就填一级域名(当前泛型解析好像不支持了)

      例如我的, 就添加两条: www.cloudecs.xxxx.comcloudecs.xxxx.com 分别添加就行,默认端口是 80

      要改其他端口的话,就需要使用类似 xxxx.com:8080 的方式进行指定,如果想在访问的时候隐藏 8080 端口,就去 nginx 配置文件里面去修改一下

      更改完了,别忘了用 PM2 重启一下服务器吼~

  11. 到这里,我这个 node 服务就全部部署完了,但是没响应的状态依旧存在,算了,让服务器去冷静冷静吧!!!

小结

在整个过程中,唯独在放行端口后无法访问的问题!查了不少办法,但都不奏效,只能静观其变了。

最终的结果是:

只要前面的步骤你都确保无误(程序运行中、端口开放了、域名解析对、域名映射没问题),那就可能是 浏览器与服务器缓存 的问题了。反正我这是映射域名过了几个小时后,就能通过域名正常访问到服务器了,再通过 ip:端口 也能访问了。

就这么多啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值