后台部署
參數
- 服務器 騰訊 linux
- 語言 node
- 部署 pm2
部署流程
-
ssh遠端連接服務器
會經常碰到
Permission denied, please try again.- link
- 注意登錄時用得用戶名跟自己需要的是否一致
-
pm2配置
目前而言,pm2需要開發跟生產都需要安裝,開發用來部署,生產用來記錄日志等- 安裝
npm i pm2 -S pm2 ecosystem|pm2 init生成ecosystem.config.js- 配置
ecosystem.config.js` - 發布
pm2 deploy production setup - 更新
pm2 deploy production update
- 安裝
微信后台代碼
因為需要調用微信的api,因而需要一台服務器,目前可以兩種選擇。
- vue開發環境配置 node 代理(這樣也可以請求到想要的數據,但是沒有挑戰性,同時也不符合微信開發要求)
- 購買一台公網服務器(下述都是圍繞這進行開展的)
微信開發准備
- 綁定公網

此處需要注意, 端口號需要是
80,同時騰訊服務器可以訪問到,主要是為了確保騰訊服務器能跟自己的服務器進行正常溝通
- api (獲取用戶信息)
- 利用前台傳入的
code來換取 tokenhttps://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code - 利用上面請求回來的 token等參數來獲取用戶信息
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
- 利用前台傳入的
- node 代碼所在位置
code
const Hapi = require('hapi')
const Axios = require('axios')
const init = async () => {
const server = Hapi.server({
port: 80,
host: '172.16.0.6'
// port: 8080,
// host: 'localhost'
})
server.route({
method: 'GET',
path: '/',
handler: (request, h) => {
// 此處用來保證騰訊服務器跟自己的服務器通訊正常
/**
* 此處做了簡化操作
*/
const { echostr = 7777 } = request.query
return echostr
}
})
server.route({
method: 'post',
path: '/login',
handler: async (request, h) => {
const { code } = request.payload
try {
const Url = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxe77d6963852aebca&secret=447b96c081d99e68b192b491412a1900&code=${code}&grant_type=authorization_code`
const res1 = await Axios.get(Url)
const { access_token, openid } = res1.data
const UserUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN`
const data = await Axios.get(UserUrl)
return data.data
} catch (e) {
throw new Error(e)
}
}
})
await server.start()
console.log('Server running on %s', server.info.uri)
}
process.on('unhandledRejection', (e) => {
process.exit(1)
})
init()
代碼短短幾十行但是需要跑通,以及沒有問題,確實有些困難
一些問題
- 無權限
{ Error: listen EACCES 172.16.0.6:80 at Object._errnoException (util.js:1022:11) at _exceptionWithHostPort (util.js:1044:20) at Server.setupListenHandle [as _listen2] (net.js:1350:19) at listenInCluster (net.js:1408:12) at doListen (net.js:1517:7) at _combinedTickCallback (internal/process/next_tick.js:141:11) at process._tickCallback (internal/process/next_tick.js:180:9) at Function.Module.runMain (module.js:695:11) at startup (bootstrap_node.js:188:16) at bootstrap_node.js:609:3 code: 'EACCES', errno: 'EACCES', syscall: 'listen', address: '172.16.0.6', port: 80 }
添加
sudo
error listen EADDRINUSElink
解決辦法,關閉對應端口的進程
sudo fuser -k 3000/tcp
注意微信服務返回的數據結構,之前一直以為是直接獲取,沒想到還有
data包裹了一層
總結
- node下載包太慢了,即使使用了淘寶鏡像,可能與自己購買的服務器有關吧
- linux 權限問題還是麻煩,有些命令需要使用
sudo來執行,這就導致自動化部署,命令執行了,卻因為權限而沒有成功 - pm2 的使用還是很粗淺,還是需要多多了解一下才可以
- 雖然有了域名和服務器,奈何域名審核好麻煩,對服務器購買時長有要求,后期再處理了,這次只當是練練手
