在 AMH 面板中使用 Node.js 的一些记录

前言

最近开始接触 Node.js,做一些记录,方便日后查找

测试环境

  • 基础环境是一台装了 Debain9 的 VPS
  • 预期未来会将 Node.js 的项目和 PHP 的项目部署在一起,所以搭建测试环境的逻辑如下

    • 使用 AMH 面板搭建基础的 LNMP 环境,在此基础上增加 Node.js 的环境,这样可以复用 AMH 提供的各种管理能力和插件体系
    • 既然已经有了 Nginx,那么就可以顺带用 Nginx 反代 Node.js
  • 所以这篇文章可以简单总结为 “如何在 AMH 面板中部署并用好 Node.js 环境

在 VPS 中使用 NVM 安装 Node.js

  • AMH 面板的软件中心曾经出现过 Node.js 的身影,不过已经是 N 个大版本之前的事情了
  • 此时此刻,想要在 AMH 中使用 Node.js,只能手搓了

安装过程如下

  1. 下载并运行脚本
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
  1. 设置环境变量
source ~/.profile
  1. 列出所有可用的 Node.js 版本
nvm ls-remote
  1. 选择一个版本安装,nvm install ,例如
nvm install v16.17.0
  1. 指定使用该版本
nvm use v16.17.0

关于 NVM 的更多介绍,可以参见:https://github.com/nvm-sh/nvm

使用 Nginx 反代 Node.js

# 由于下面配置了文件不存在则代码到 Node.js 中,那么直接访问目录(不带默认主页)的话会有问题,这里做下判断
# 如果访问目录下有 index.html 文件,则直接重写到该文件
# break 表示重写且停止,但 url 不变,而 permanent 表示301重定向,url 会更新
if ( -f $request_filename/index.html ){
    rewrite (.*) $1/index.html break;
}

# 如果请求的文件不存在,则代理到 Node.js
if ( !-f $request_filename ){
    rewrite (.*) /index.js;
}

# 代理node服务 8001
location = /index.js {
    # 设置一些代理的header信息,这些信息将被透传到 Node.js 服务的header信息里
    proxy_set_header Connection "";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    # 代理服务
    proxy_pass http://127.0.0.1:8001$request_uri;

    # 忽略其他重写
    proxy_redirect off;
}