node服务器且链接微信公众号接口配置超详细教程

2019-06-2217:48:03WEB前端开发Comments3,424 views字数 5787阅读模式

配置node服务器

在购买好服务器后,用Xshell链接到服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

1、安装nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
复制代码

安装完,关闭重新启动一下Xshell文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

2、用nvm安装node

// 查看当前可安装node版本
nvm ls-remote

// 选择'nodejs.org'官网LTS稳定版本
nvm install v10.16.0

// 出现这样的显示表示安装好了,默认的是v10.16.0的node版本,6.9.0的npm版本
Now using node v10.16.0 (npm v6.9.0)
Creating default alias: default -> v10.16.0

// 可以使用命令查看版本
node --version 

// nvm可以安装多个node版本
nvm install v10.11.0

// 可以使用命令查看安装了多少个node版本
nvm ls

// 可以使用命令指定默认的node版本,如果安装了多个node版本,一定要指定一个默认的版本
nvm alias default v10.11.0

// 如果你不想使用默认,只是零时用一下,可以使用命令
nvm use v10.11.0
复制代码

3、安装nginx

// 查看服务器系统版本
$ cat /etc/redhat-release 

// 安装epel-release 源
yum  install epel-release -y

// 打开源配置
vim /etc/yum.repos.d/nginx.repo

// 在配置中设置nginx安装源,具体可以参考nginx官网文档('http://nginx.org/en/linux_packages.html#stable')
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

// 安装nginx
yum install nginx -y

// 查看nginx是否安装成功,成功的话会显示路径
 whereis nginx
复制代码

4、设置nginx

// 设置开机启动
systemctl enable nginx

// 启动服务,重启是'systemctl restart nginx',停止是 'stop'
systemctl start nginx

// 重新加载,因为一般重新配置之后,不希望重启服务,这时可以使用重新加载
systemctl reload nginx

// 查看服务器状态
systemctl status  nginx

// 如果CentOS7 系统打开了防火墙,还需打开防火墙端口
firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
firewall-cmd --list-service

// 如果要使用反向代理,CentOS7 需要打开网络访问权限
setsebool httpd_can_network_connect 1
复制代码

5、部署测试项目

// 创建文件夹
mkdir server

// 进入文件夹
cd server

// 创建js文件
vim home.js

// 编写测试代码,注意,这里的ip地址一定要配置成0.0.0.0,如果配置成127.0.0.1,外网会报错端口3000链接不通
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(`服务器运行在 http://${hostname}:${port}/`);
});

// 启动
node home.js

// 如果报错'Unhandled 'error' event',可能是端口被占用了,先查看端口占用情况
ps -ef|grep node

// 如果有占用,删除占用,'xxxx''root'后的数字
skill -9 xxxxx
复制代码

出现:服务器运行在 http://0.0.0.0:3000/ 即表示node运行成功,运行成功后,登录阿里云后台配置安全组规则文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

配置成功如下显示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

允许	自定义 TCP	3000/3000	IPv4地址段访问	0.0.0.0/0   node后台端口
复制代码

然后就可以在浏览器地址栏输入你的服务器公网ip地址加上:3000,成功出现Hello World即表示安全组配置成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

6、配置nginx

// 进入 '/etc/nginx' 文件夹,查看下 'nginx.conf' 配置文件
cd /etc/nginx
ls
vim nginx.conf

// 低版本的nginx 'nginx.conf' 文件夹里有以下内容
// # include /etc/nginx/conf.d/*.conf;
// # include /etc/nginx/sites-enabled/*;
// 去掉 '#' 号

// 创建nginx配置文件,文件名随意,我一般喜欢用项目名加端口号,比如 'wxServer-3000'
vim /etc/nginx/conf.d/wxServer-3000.conf

// 编写配置文件代码
# 项目名字
upstream wxServer {
    # 需要代理的node端口号,也就是你写的端口号
    server 0.0.0.0:3000;
    # nginx最大连接数
    keepalive 8;
}

# nginx服务器实例
server {
    # 代理出去的端口号,默认Http协议的80端口,如果配置其它端口需要更改 SELinux 的设置
    listen 0.0.0.0:80;
    # 别人访问的域名或者ip地址,多个用空格隔开
    server_name lzf.fun www.lzf.fun;
    # 错误日志存放地址
    access_log /var/log/nginx/wxServer-3000.log;

    location / {
      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 设置反向代理用服务器域名,不使用反向代理,直接用上面upstream的名字就可以了
      proxy_pass http://wxServer/;
      proxy_redirect off;
    }
 }
 
// 保存配置文件后,检查是否编写错误
nginx -t
 
// 出现以下内容为正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

// 重新加载nginx服务器
systemctl reload nginx

// 在阿里云后台开启80端口的安全组,然后在浏览器输入域名,可以看到 'Hello World' 就表示nginx配置成功了
复制代码

7、配置PM2

// 安装PM2
npm install pm2 -g

// 进入你的node项目存放的文件夹,pwd是你的文件夹路径
cd pwd

// 启动pm2,--watch监听,每次改动代码自动启动,-i 1 启动一个实例,根据服务器又几个核心设置
// -i 0 则会根据机器当前核数自动开启尽可能多的进程
// 为了安全性和性能考虑,--watch 这个指令最好不要在线上使用
pm2 start home.js --watch -i 1

// 查看pm2
pm2 ls

// 查看错误日志
pm2 logs

// 重启
pm2 restart home.js

// 停止,id通过查看获得
pm2 stop home|id

// 删除
pm2 delete home|id

// 了解程序的详细信息
pm2 describe home|id

// 关闭Xshell,刷新域名,还可以看见 'Hello World' 表示配置成功
复制代码

tips: 经过大佬提醒,PM2对ES6的代码可能需要兼容,具体兼容方案可参考Using transpilers with PM2nodejs之使用babel支援es6和pm2下使用babel文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

链接微信公众号接口配置

8、编写本地node代码

const Koa = require('koa')
const cors = require('koa2-cors')
const Router = require('koa-router')
const crypto = require('crypto')

const app = new Koa()

// 微信配置
const config = {
  wechat: {
    appID: 'appID',
    appsecret: 'appsecret',
    token: 'Maya'
  }
}

// 使用koa2-cors解决跨域问题
app.use(
  cors({
    origin: ctx => {
      if (ctx.url === '/test') {
        return false
      }
      return '*'
    },
    exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
    maxAge: 5,
    credentials: true,
    allowMethods: ['GET', 'POST', 'DELETE'],
    allowHeaders: ['Content-Type', 'Authorization', 'Accept']
  })
)

// 给微信验证的
const wxServer = new Router()
wxServer.get('/', async ctx => {
  const { signature, timestamp, nonce, echostr } = ctx.query
  const token = config.wechat.token
  let hash = crypto.createHash('sha1')
  const arr = [token, timestamp, nonce].sort()
  hash.update(arr.join(''))
  const shasum = hash.digest('hex')
  if (shasum === signature) {
    return (ctx.body = echostr)
  }
  ctx.status = 401
  ctx.body = 'Invalid signature'
})

// 装载所有路由
const router = new Router()
router.use('/forWx', wxServer.routes(), wxServer.allowedMethods())

// 加载路由中间件
app.use(router.routes()).use(router.allowedMethods())

app.listen(3000)
console.log('[demo] start-quick is starting at port 3000')

复制代码

9、通过内网穿透的方式测试本地代码是否ok

1、通过localtunnel启动内网穿透,不推荐,有可能启动成功,但是域名链接失败文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

// 安装
npm install -g localtunnel

// 开启本地服务器
lt --port 3000
复制代码

2、通过natapp启动内网穿透,配置需要花费一点时间文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

可以通过内网穿透工具natapp!这篇文章安装配置,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

如果你代码写的是开启3000端口,那么最好也配置成3000端口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

tips:如果看到隧道链接成功,但是127.0.0.1:3000端口链接失败的提示,不代表安装配置失败,是需要你启动一下代码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

安装配置成功后,启动文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

node home.js
复制代码

能够成功在浏览器上看到 Invalid signature 表示内网穿透成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

10、开启一个微信公众平台测试账号

微信公众平台测试管理页面,接口配置信息,URL填写你natapp启动的域名加上forWx,比如我的域名是文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

http://qf7rja.natappfree.cc/forWx
复制代码

Token是你自己自定义的,可以随便写,但是要和你本地代码里的Token一致,我这里用的是Maya文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

点击提交,显示配置成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

11、服务器链接微信公众号接口配置

通过上面的测试账号,验证了代码没有问题,可以配置成功接口配置,剩下的就是把代码上传到服务器了,安装选择rz和sz,当然,使用xftp更好文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

// 安装
yum  install lrzsz -y

// 上传,执行命令,选择打包文件
rz

// 下载,filename是你打包的服务器文件夹,或者单个文件
sz filename
复制代码

上传成功后,解压缩,清除前面的 Hello World 代码,清空 PM2 ,重新把现在代码挂到 PM2 上文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

在浏览器上输入域名 + forWx 能出现 Invalid signature 表示成功,如果没有出现,配置不成功,需要排查原因文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

在微信公众平台登录账号,选择基本配置-->服务器配置,然后按照配置测试账号的方式去配置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

点击提交,显示配置成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

尾声

嘘~~~长出了一口气,研究了老久,node服务器总算配置成功了,而且已经链接到公众号接口配置,并且我还有一个测试账号文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

可以用测试账号本地写代码,然后再上传到服务器验证的方式去开发文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

这样的做的原因是,测试账号玩坏了不心疼,转眼又弄好了一个,服务器玩坏了,配置起来可就麻烦了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

剩下的就是开发具体业务了,什么拿到AccessToken啊,自动回复消息啊,自定义菜单啊,等等等等文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

作者:Maya本尊
链接:https://juejin.im/post/5d09864b6fb9a07f0052ddfe
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/13783.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/13783.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定