為什么有了node還要安裝nginx?
可以使用nginx代理來實現(xiàn)負(fù)載均衡等功能,方法后續(xù)擴(kuò)展。
環(huán)境
我是購買了一個騰訊云服務(wù),并且購買了一個域名并且備案。
云梁山服務(wù)器安裝的系統(tǒng)是Centos 7.6
安裝Nginx
yum -y install nginx
nginx -v
開啟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,因為現(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
啟動MySQL服務(wù)
systemctl start mysqld
查看MySQL的啟動狀態(tài)
systemctl status mysqld
mysql安裝完成之后,在/var/log/mysqld.log文件中給root生成了一個默認(rèn)密碼。通過下面的方式找到root默認(rèn)密碼:
grep 'temporary password' /var/log/mysqld.log
登錄mysql:登錄后會進(jìn)入mysql的命令行模式
mysql -u root -p
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼!';
新建數(shù)據(jù)庫
新建一個數(shù)據(jù)庫名為 cAuth,排序規(guī)則為 utf8mb4_unicode_ci。數(shù)據(jù)庫名必須和梁山小程序文件中的保持一致,可自行修改。命令結(jié)束別忘了寫分號;如果輸入命令后顯示的是 -> 提示符,很有可能是沒寫分號。
mysql> CREATE DATABASE IF NOT EXISTS cAuth DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
開啟SFTP
SFTP 是一種安全的文件傳輸協(xié)議,我們可以通過 SFTP 把本地的文件上傳到梁山服務(wù)器上,通過以下命令檢查 sftp 狀態(tài):
service sshd status
看到綠色的actiov(running)狀態(tài)表示服務(wù)已經(jīng)開啟
配置Https
完成以上準(zhǔn)備工作,就要開始配置 Nginx 和 HTTPS 了,首先需要申請一個 SSL 證書,可以到騰訊云申請免費(fèi)的 SSL 證書,申請成功之后下載證書,并把壓縮包中 Nginx 目錄下的證書文件通過 SFTP 上傳到梁山服務(wù)器的 /data/release/nginx 目錄,如果沒有這個目錄則新建:
上傳完證書以后,可以開始配置 Nginx,進(jìn)入服務(wù)器的 /etc/nginx/conf.d 目錄,新建一個 weapp.conf 文件,將文件拷貝到本地,打開編輯,寫入如下配置(請將配置里 wx.ijason.cc 修改為你自己的域名,包括證書文件):
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)致的。
修改完將這個文件上傳到服務(wù)器上,然后在 ssh 中輸入:
nginx -t
看結(jié)果是否OK
然后輸入nginx啟動服務(wù)
測試一下接口是否可以,現(xiàn)在是應(yīng)該顯示502錯誤頁面
上傳服務(wù)器代碼
Github倉庫地址:Wafer2-startup ,使用梁山小程序開發(fā)工具開發(fā)工具打開Demo源碼(別忘了填寫AppID)
配置server/config.js
const CONF = { port: '5757', rootPathname: '' /data/release/weapp' , //服務(wù)器上server文件夾地址與此處一致 // 填寫微信梁山小程序 App ID appId: 'wx33333', // 填寫微信小程序 App Secret appSecret: 'wx22222', // 是否使用騰訊云代理登錄小程序 useQcloudLogin: false, // 可直接使用微信登陸小程序 因為使用阿里云改為false /** * MySQL 配置,用來存儲 session 和用戶信息 * 若使用了騰訊云微信小程序解決方案 * 開發(fā)環(huán)境下,MySQL 的初始密碼為您的微信小程序 appid */ mysql: { host: '服務(wù)器IP',//很多文檔都寫的云數(shù)據(jù)庫內(nèi)網(wǎng)IP,關(guān)于這一點(diǎn)我寫的服務(wù)器公網(wǎng)IP一樣可以用,不太了解 port: 3306, user: 'root', db: 'cAuth', pass: '服務(wù)器數(shù)據(jù)庫密碼',//之前操作修改過 char: 'utf8mb4' }, cos: {//這個地區(qū)沒什么影響,可以不改 /** * 區(qū)域 * 華北:cn-north * 華東:cn-east * 華南:cn-south * 西南:cn-southwest * 新加坡:sg * @see https://cloud.tencent.com/document/product/436/6224 */ region: 'cn-south', // Bucket 名稱 fileBucket: 'qcloudtest', // 文件夾 uploadFolder: '' }, // 微信登錄態(tài)有效期 wxLoginExpires: 7200, // 其他配置 ... serverHost: '你的域名', //以下配置可以留空不填 但是參數(shù)一定要有 一定要有 一定要有 否則會報錯,node啟動不了 tunnelServerUrl: '',//騰訊云信道服務(wù)地址 很多文檔里寫的地址打開直接404 tunnelSignatureKey: '', // 可以注冊一個騰訊云賬號,獲取一下配置。騰訊云相關(guān)配置可以查看云 API 秘鑰控制臺: 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ù)器安裝依賴
進(jìn)入到weapp目錄里,輸入以下命令切換npm 源到淘寶鏡像,防止官方鏡像下載失?。?不切換也無所謂)
npm config set registry https://registry.npm.taobao.org
使用npm全局安裝pm2
npm i -g pm2
然后常規(guī)操作,安裝package.json里的依賴:
npm i
使用 Demo 代碼里的 tools/initdb.js 工具初始化數(shù)據(jù)庫:
node tools/initdb.js
初始化成功則會提示“數(shù)據(jù)庫初始化成功”
啟動項目
npm start
這里需要學(xué)習(xí) node 的一些插件 pm2 nodemon 這些都是干啥的,有什么洋的啟動機(jī)制。
順利完成以上操作后,也就完成了 Wafer2 Demo 在自己服務(wù)器上的部署。
直接訪問 http://你的域名/weapp/login,會提示:{"code":-1,"error":"ERR_HEADER_MISSED"},則表示配置成功?,F(xiàn)在就可以使用開發(fā)者工具來進(jìn)行聯(lián)調(diào)測試?yán)玻。ńK于完成了?。。。?br/>
以上文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!