配置node服務器而且連接微信公衆號接口配置(超詳細)

配置node服務器

在購買好服務器後,用Xshell連接到服務器。html

一、安裝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
複製代碼

安裝完,關閉從新啓動一下Xshellnode

二、用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
複製代碼

三、安裝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
複製代碼

四、設置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
複製代碼

五、部署測試項目

// 建立文件夾
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運行成功,運行成功後,登陸阿里雲後臺配置安全組規則linux

配置成功以下顯示:nginx

容許	自定義 TCP	3000/3000	IPv4地址段訪問	0.0.0.0/0   node後臺端口
複製代碼

而後就能夠在瀏覽器地址欄輸入你的服務器公網ip地址加上:3000,成功出現Hello World即表示安全組配置成功git

六、配置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配置成功了
複製代碼

七、配置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下使用babeles6

連接微信公衆號接口配置

八、編寫本地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')

複製代碼

九、經過內網穿透的方式測試本地代碼是否ok

一、經過localtunnel啓動內網穿透,不推薦,有可能啓動成功,可是域名連接失敗github

// 安裝
npm install -g localtunnel

// 開啓本地服務器
lt --port 3000
複製代碼

二、經過natapp啓動內網穿透,配置須要花費一點時間shell

能夠經過內網穿透工具natapp!這篇文章安裝配置,npm

若是你代碼寫的是開啓3000端口,那麼最好也配置成3000端口vim

tips:若是看到隧道連接成功,可是127.0.0.1:3000端口連接失敗的提示,不表明安裝配置失敗,是須要你啓動一下代碼

安裝配置成功後,啓動

node home.js
複製代碼

可以成功在瀏覽器上看到 Invalid signature 表示內網穿透成功

十、開啓一個微信公衆平臺測試帳號

微信公衆平臺測試管理頁面,接口配置信息,URL填寫你natapp啓動的域名加上forWx,好比個人域名是

http://qf7rja.natappfree.cc/forWx
複製代碼

Token是你本身自定義的,能夠隨便寫,可是要和你本地代碼裏的Token一致,我這裏用的是Maya

點擊提交,顯示配置成功

十一、服務器連接微信公衆號接口配置

經過上面的測試帳號,驗證了代碼沒有問題,能夠配置成功接口配置,剩下的就是把代碼上傳到服務器了,安裝選擇rz和sz,固然,使用xftp更好

// 安裝
yum  install lrzsz -y

// 上傳,執行命令,選擇打包文件
rz

// 下載,filename是你打包的服務器文件夾,或者單個文件
sz filename
複製代碼

上傳成功後,解壓縮,清除前面的 Hello World 代碼,清空 PM2 ,從新把如今代碼掛到 PM2 上

在瀏覽器上輸入域名 + forWx 能出現 Invalid signature 表示成功,若是沒有出現,配置不成功,須要排查緣由

在微信公衆平臺登陸帳號,選擇基本配置-->服務器配置,而後按照配置測試帳號的方式去配置

點擊提交,顯示配置成功

尾聲

噓~~~長出了一口氣,研究了老久,node服務器總算配置成功了,並且已經連接到公衆號接口配置,而且我還有一個測試帳號

能夠用測試帳號本地寫代碼,而後再上傳到服務器驗證的方式去開發

這樣的作的緣由是,測試帳號玩壞了不心疼,轉眼又弄好了一個,服務器玩壞了,配置起來可就麻煩了

剩下的就是開發具體業務了,什麼拿到AccessToken啊,自動回覆消息啊,自定義菜單啊,等等等等

參考

阿里雲配置 node.js + Nginx 反向代理 CentOS 7 下 yum 安裝和配置 Nginx nodejs微信公衆號開發——1.接入微信公衆號

相關文章
相關標籤/搜索