宝塔面板安装NodeJS程序并配置https教程

之前没有用宝塔面板安装过NodeJS程序,在网上寻找了一番资料后发现这方面的教程比较少,于是去宝塔论坛发帖,但是没有获得帮助。最后终于花了一下午和晚上的时间在网上寻找了一番资料后将需要实现的功能都实现了,在此记录一下安装教程。这里以当时折腾的BWmelonAPI程序为例。

准备

0、替换https证书

将https证书放到certificate文件夹中,然后将根目录的index.js文件中xxxxx换成自己证书的文件名。如果是其他程序不需要配置https可以忽略这一步。

证书文件

1、安装PM2管理器

在宝塔面板中的软件管理-运行环境中安装PM2管理器和MongoDB数据库(其他程序如果没有用到MongoDB可以不用安装)。

2、放行NodeJS服务端口

BWmelonAPI中默认的http端口为3000,https端口为444,所以需要在宝塔面板的安全-端口控制中将这两个端口放行(如果没有https只需放行一个端口):
放行端口
需要注意的是,有些服务器还需要在防火墙中放行相应端口(例如阿里云),这时也要在服务器中放行3000和444端口才行。例:阿里云安全组如何放行端口?

安装

1、上传文件到服务器

将所有文件打包成压缩包,在宝塔面板文件管理中新建一个文件夹,这里以api.no0a.cn为例,然后将这个压缩包上传到文件夹中并解压。

2、安装淘宝NPM镜像

为了更快的下载程序依赖文件,打开宝塔面板的SSH终端,输入下面命令安装淘宝NPM镜像:

npm install -g cnpm --registry=https://registry.npm.taobao.org

3、安装依赖

在宝塔面板的SSH终端进入第一步新建的文件夹,进入目录的命令为cd

进入文件夹

在宝塔面板的SSH终端输入cnpm install并按回车键安装依赖文件,由于使用了淘宝镜像,几秒就把所有依赖下载完成了,不然需要很长时间:

安装依赖

4、新建NodeJS程序

打开PM2管理器,点击文件夹图标按钮选择上一步的文件夹,输入NodeJS程序的启动文件,然后输入项目名称并点击添加按钮,这时下方列表就会出现刚才添加的NodeJS程序。
新建NodeJS程序

5、映射程序

点击映射按钮,然后在弹出的窗口中输入需要映射到的域名和端口号:
映射程序
映射完成后就可以在面板的网站列表中看到一个多出来的站点,这时就可以用过域名+端口号访问程序了:

6、设置前台运行目录

如果程序有前台静态文件,可以设置程序的运行目录。点击设置按钮,在弹出的窗口左侧点击网站目录,将运行目录选择为public并保存。这时即可通过域名+端口号访问程序前台了:
设置运行目录

域名反代

通过上面的安装,现在已经可以通过域名+端口使用安装的程序,但是域名+端口访问程序不太美观,可以使用域名反代方式直接通过域名访问程序。
点击配置文件按钮,将

listen 3000;

改为

listen 80;

然后在server_name 域名;下面添加

location / {
    proxy_pass http://127.0.0.1:3000;
}

域名反代
这时即可通过域名直接访问程序。

配置https

这一步是花了最长时间去折腾的,按上面的方法应该是将

listen 80;

改为

listen 443;

然后在server_name 域名;下面添加

location / {
    proxy_pass http://127.0.0.1:444;
}

但是这样做没有程序,最终发现面板里面会生成错误日志,看了日志才将问题解决。ε=(´ο`*)))唉。

下面说正确的配置方法,将配置文件里面现有的文本复制,然后在最下面粘贴一份,将

listen 80;

改为

listen 443 ssl;

然后在server_name 域名;下面添加

location / {
    proxy_pass https://127.0.0.1:444;
}

再添加

ssl_certificate /www/wwwroot/api.no0a.cn/certificate/xxxxxx.pem;
ssl_certificate_key /www/wwwroot/api.no0a.cn/certificate/xxxxx.key;

这两个文件是ssl证书文件,就是第0步中替换的证书文件,需要要先从证书提供商下载并将证书上传到文件夹中,同样将上面代码中的xxxxx替换成自己证书文件的文件名。
这时可以通过http和https访问程序。

配置https

强制https访问

如果想让http访问强制转到https访问,可以在图中位置添加代码:

return 301 https://$host$request_uri;

强制https

结束

到这里折腾就结束了,实在写不下去了,眼睛睁快不开了,最后附上演示网站:https://api.no0a.cn/,晚安。

最后修改:2019 年 08 月 14 日 09 : 29 PM
如果觉得我的文章对你有用,请随意赞赏

11 条评论

  1. 李life

    博主pm2管理器获取不到端口号 一直为off 能否请教一下 微信18737061903

    1. BWmelon
      @李life

      加qq1454490647吧,微信用得太累了

  2. freebreaker

    博主,第五步的时候就没成功,留个微信13160300173 请教下呢

    1. BWmelon
      @freebreaker

      已加

  3. gg

    设置前台运目录后怎么访问的?? 我设置了访问不到 是怎么回事的大佬, 在线等 急急急

    1. BWmelon
      @gg

      通过域名+端口号访问,确保端口已经放行

  4. 执手的承诺

    小编请问我可以加你个微信请教下你吗,我微信是13229559941,⌇●﹏●⌇我用nodejs+express框架搭建里一个博客,可是还是部署不成功,无从下手的感觉

    1. BWmelon
  5. SSS

    不知道用这个教程部署meanTorrent可以吗?

    1. BWmelon
      @SSS

      这个不清楚,没有用过你说的这个程序

  6. 很棒

发表评论