為什么有了node還要安裝nginx?
可以使用nginx代理來(lái)實(shí)現(xiàn)負(fù)載均衡等功能,方法后續(xù)擴(kuò)展。
環(huán)境
我是購(gòu)買(mǎi)了一個(gè)騰訊云服務(wù),并且購(gòu)買(mǎi)了一個(gè)域名并且備案。
云臺(tái)灣服務(wù)器安裝的系統(tǒng)是Centos 7.6
安裝Nginx
yum -y install nginx
nginx -v
開(kāi)啟nginx
nginx
重啟nginx
nginx -s reload
停止nginx
nginx -s stop
安裝Node.js
Wafer 的 Demo 需要 7.6 以上版本的 Node.js 才能運(yùn)行,目前最新版本為 8.x,yum 本身不提供 Node.js 的源,所以首先我們得切換源:
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
可以把上面的8.x改為最新版本12.x,因?yàn)楝F(xiàn)在node的最新版本是12
yum -y install nodejs
node -v
查看到版本信息代表安裝成功
安裝Mysql
下載mysql安裝包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
安裝mysql源
yum localinstall mysql57-community-release-el7-8.noarch.rpm
安裝MySQL
yum install mysql-community-server
啟動(dòng)MySQL服務(wù)
systemctl start mysqld
查看MySQL的啟動(dòng)狀態(tài)
systemctl status mysqld
mysql安裝完成之后,在/var/log/mysqld.log文件中給root生成了一個(gè)默認(rèn)密碼。通過(guò)下面的方式找到root默認(rèn)密碼:
grep 'temporary password' /var/log/mysqld.log
登錄mysql:登錄后會(huì)進(jìn)入mysql的命令行模式
mysql -u root -p
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼!';
新建數(shù)據(jù)庫(kù)
新建一個(gè)數(shù)據(jù)庫(kù)名為 cAuth,排序規(guī)則為 utf8mb4_unicode_ci。數(shù)據(jù)庫(kù)名必須和臺(tái)灣小程序文件中的保持一致,可自行修改。命令結(jié)束別忘了寫(xiě)分號(hào);如果輸入命令后顯示的是 -> 提示符,很有可能是沒(méi)寫(xiě)分號(hào)。
mysql> CREATE DATABASE IF NOT EXISTS cAuth DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
開(kāi)啟SFTP
SFTP 是一種安全的文件傳輸協(xié)議,我們可以通過(guò) SFTP 把本地的文件上傳到臺(tái)灣服務(wù)器上,通過(guò)以下命令檢查 sftp 狀態(tài):
service sshd status
看到綠色的actiov(running)狀態(tài)表示服務(wù)已經(jīng)開(kāi)啟
配置Https
完成以上準(zhǔn)備工作,就要開(kāi)始配置 Nginx 和 HTTPS 了,首先需要申請(qǐng)一個(gè) SSL 證書(shū),可以到騰訊云申請(qǐng)免費(fèi)的 SSL 證書(shū),申請(qǐng)成功之后下載證書(shū),并把壓縮包中 Nginx 目錄下的證書(shū)文件通過(guò) SFTP 上傳到臺(tái)灣服務(wù)器的 /data/release/nginx 目錄,如果沒(méi)有這個(gè)目錄則新建:
上傳完證書(shū)以后,可以開(kāi)始配置 Nginx,進(jìn)入服務(wù)器的 /etc/nginx/conf.d 目錄,新建一個(gè) weapp.conf 文件,將文件拷貝到本地,打開(kāi)編輯,寫(xiě)入如下配置(請(qǐng)將配置里 wx.ijason.cc 修改為你自己的域名,包括證書(shū)文件):
upstream app_weapp { server localhost:5757; keepalive 8; } server { listen 80; server_name 替換成服務(wù)器域名; rewrite ^(.*)$ https://$server_name$1 permanent; } server { listen 443 ssl; server_name 替換成服務(wù)器域名; ssl_certificate /data/release/nginx/1_wx.ijason.cc_bundle.crt; ssl_certificate_key /data/release/nginx/2_wx.ijason.cc.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_prefer_server_ciphers on; location / { proxy_pass http://app_weapp; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
其中有一行是
listen 443 ssl;
官方版本是
listen 443;
ssl on;
是版本差異導(dǎo)致的。
修改完將這個(gè)文件上傳到服務(wù)器上,然后在 ssh 中輸入:
nginx -t
看結(jié)果是否OK
然后輸入nginx啟動(dòng)服務(wù)
測(cè)試一下接口是否可以,現(xiàn)在是應(yīng)該顯示502錯(cuò)誤頁(yè)面
上傳服務(wù)器代碼
Github倉(cāng)庫(kù)地址:Wafer2-startup ,使用臺(tái)灣小程序開(kāi)發(fā)工具開(kāi)發(fā)工具打開(kāi)Demo源碼(別忘了填寫(xiě)AppID)
配置server/config.js
const CONF = { port: '5757', rootPathname: '' /data/release/weapp' , //服務(wù)器上server文件夾地址與此處一致 // 填寫(xiě)微信臺(tái)灣小程序 App ID appId: 'wx33333', // 填寫(xiě)微信小程序 App Secret appSecret: 'wx22222', // 是否使用騰訊云代理登錄小程序 useQcloudLogin: false, // 可直接使用微信登陸小程序 因?yàn)槭褂冒⒗镌聘臑閒alse /** * MySQL 配置,用來(lái)存儲(chǔ) session 和用戶(hù)信息 * 若使用了騰訊云微信小程序解決方案 * 開(kāi)發(fā)環(huán)境下,MySQL 的初始密碼為您的微信小程序 appid */ mysql: { host: '服務(wù)器IP',//很多文檔都寫(xiě)的云數(shù)據(jù)庫(kù)內(nèi)網(wǎng)IP,關(guān)于這一點(diǎn)我寫(xiě)的服務(wù)器公網(wǎng)IP一樣可以用,不太了解 port: 3306, user: 'root', db: 'cAuth', pass: '服務(wù)器數(shù)據(jù)庫(kù)密碼',//之前操作修改過(guò) char: 'utf8mb4' }, cos: {//這個(gè)地區(qū)沒(méi)什么影響,可以不改 /** * 區(qū)域 * 華北:cn-north * 華東:cn-east * 華南:cn-south * 西南:cn-southwest * 新加坡:sg * @see https://cloud.tencent.com/document/product/436/6224 */ region: 'cn-south', // Bucket 名稱(chēng) fileBucket: 'qcloudtest', // 文件夾 uploadFolder: '' }, // 微信登錄態(tài)有效期 wxLoginExpires: 7200, // 其他配置 ... serverHost: '你的域名', //以下配置可以留空不填 但是參數(shù)一定要有 一定要有 一定要有 否則會(huì)報(bào)錯(cuò),node啟動(dòng)不了 tunnelServerUrl: '',//騰訊云信道服務(wù)地址 很多文檔里寫(xiě)的地址打開(kāi)直接404 tunnelSignatureKey: '', // 可以注冊(cè)一個(gè)騰訊云賬號(hào),獲取一下配置。騰訊云相關(guān)配置可以查看云 API 秘鑰控制臺(tái): https://console.cloud.tencent.com/capi qcloudAppId: '你的騰訊云 AppID', qcloudSecretId: '你的騰訊云 SecretId', qcloudSecretKey: '你的騰訊云 SecretKey', wxMessageToken: 'weixinmsgtoken', networkTimeout: 30000 } module.exports = process.env.NODE_ENV === 'local' ? Object.assign({}, CONF, require('./config.local')) : CONF;
都配置好以后,將server文件里的所有代碼上傳到服務(wù)器上的/data/release/weapp目錄下,要與前文的 rootPathname: '' /data/release/weapp' 一致。
服務(wù)器安裝依賴(lài)
進(jìn)入到weapp目錄里,輸入以下命令切換npm 源到淘寶鏡像,防止官方鏡像下載失敗:(不切換也無(wú)所謂)
npm config set registry https://registry.npm.taobao.org
使用npm全局安裝pm2
npm i -g pm2
然后常規(guī)操作,安裝package.json里的依賴(lài):
npm i
使用 Demo 代碼里的 tools/initdb.js 工具初始化數(shù)據(jù)庫(kù):
node tools/initdb.js
初始化成功則會(huì)提示“數(shù)據(jù)庫(kù)初始化成功”
啟動(dòng)項(xiàng)目
npm start
這里需要學(xué)習(xí) node 的一些插件 pm2 nodemon 這些都是干啥的,有什么洋的啟動(dòng)機(jī)制。
順利完成以上操作后,也就完成了 Wafer2 Demo 在自己服務(wù)器上的部署。
直接訪問(wèn) http://你的域名/weapp/login,會(huì)提示:{"code":-1,"error":"ERR_HEADER_MISSED"},則表示配置成功?,F(xiàn)在就可以使用開(kāi)發(fā)者工具來(lái)進(jìn)行聯(lián)調(diào)測(cè)試?yán)玻。ńK于完成了?。。。?br/>
以上文章來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!