为什么有了node还要安装nginx?
可以使用nginx代理来实现负载均衡等功能,方法后续扩展。
环境
我是购买了一个腾讯云服务,并且购买了一个域名并且备案。
云仁兴镇服务器安装的系统是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 才能运行,目前最新版本为 8.x,yum 本身不提供 Node.js 的源,所以首先我们得切换源:
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
可以把上面的8.x改为最新版本12.x,因为现在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服务
systemctl start mysqld
查看MySQL的启动状态
systemctl status mysqld
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码:
grep 'temporary password' /var/log/mysqld.log
登录mysql:登录后会进入mysql的命令行模式
mysql -u root -p
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码!';
新建数据库
新建一个数据库名为 cAuth,排序规则为 utf8mb4_unicode_ci。数据库名必须和仁兴镇小程序文件中的保持一致,可自行修改。命令结束别忘了写分号;如果输入命令后显示的是 -> 提示符,很有可能是没写分号。
mysql> CREATE DATABASE IF NOT EXISTS cAuth DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
开启SFTP
SFTP 是一种安全的文件传输协议,我们可以通过 SFTP 把本地的文件上传到仁兴镇服务器上,通过以下命令检查 sftp 状态:
service sshd status
看到绿色的actiov(running)状态表示服务已经开启
配置Https
完成以上准备工作,就要开始配置 Nginx 和 HTTPS 了,首先需要申请一个 SSL 证书,可以到腾讯云申请免费的 SSL 证书,申请成功之后下载证书,并把压缩包中 Nginx 目录下的证书文件通过 SFTP 上传到仁兴镇服务器的 /data/release/nginx 目录,如果没有这个目录则新建:
上传完证书以后,可以开始配置 Nginx,进入服务器的 /etc/nginx/conf.d 目录,新建一个 weapp.conf 文件,将文件拷贝到本地,打开编辑,写入如下配置(请将配置里 wx.ijason.cc 修改为你自己的域名,包括证书文件):
upstream app_weapp { server localhost:5757; keepalive 8; } server { listen 80; server_name 替换成服务器域名; rewrite ^(.*)$ https://$server_name$1 permanent; } server { listen 443 ssl; server_name 替换成服务器域名; 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;
是版本差异导致的。
修改完将这个文件上传到服务器上,然后在 ssh 中输入:
nginx -t
看结果是否OK
然后输入nginx启动服务
测试一下接口是否可以,现在是应该显示502错误页面
上传服务器代码
Github仓库地址:Wafer2-startup ,使用仁兴镇小程序开发工具开发工具打开Demo源码(别忘了填写AppID)
配置server/config.js
const CONF = { port: '5757', rootPathname: '' /data/release/weapp' , //服务器上server文件夹地址与此处一致 // 填写微信仁兴镇小程序 App ID appId: 'wx33333', // 填写微信小程序 App Secret appSecret: 'wx22222', // 是否使用腾讯云代理登录小程序 useQcloudLogin: false, // 可直接使用微信登陆小程序 因为使用阿里云改为false /** * MySQL 配置,用来存储 session 和用户信息 * 若使用了腾讯云微信小程序解决方案 * 开发环境下,MySQL 的初始密码为您的微信小程序 appid */ mysql: { host: '服务器IP',//很多文档都写的云数据库内网IP,关于这一点我写的服务器公网IP一样可以用,不太了解 port: 3306, user: 'root', db: 'cAuth', pass: '服务器数据库密码',//之前操作修改过 char: 'utf8mb4' }, cos: {//这个地区没什么影响,可以不改 /** * 区域 * 华北: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: '' }, // 微信登录态有效期 wxLoginExpires: 7200, // 其他配置 ... serverHost: '你的域名', //以下配置可以留空不填 但是参数一定要有 一定要有 一定要有 否则会报错,node启动不了 tunnelServerUrl: '',//腾讯云信道服务地址 很多文档里写的地址打开直接404 tunnelSignatureKey: '', // 可以注册一个腾讯云账号,获取一下配置。腾讯云相关配置可以查看云 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文件里的所有代码上传到服务器上的/data/release/weapp目录下,要与前文的 rootPathname: '' /data/release/weapp' 一致。
服务器安装依赖
进入到weapp目录里,输入以下命令切换npm 源到淘宝镜像,防止官方镜像下载失败:(不切换也无所谓)
npm config set registry https://registry.npm.taobao.org
使用npm全局安装pm2
npm i -g pm2
然后常规操作,安装package.json里的依赖:
npm i
使用 Demo 代码里的 tools/initdb.js 工具初始化数据库:
node tools/initdb.js
初始化成功则会提示“数据库初始化成功”
启动项目
npm start
这里需要学习 node 的一些插件 pm2 nodemon 这些都是干啥的,有什么洋的启动机制。
顺利完成以上操作后,也就完成了 Wafer2 Demo 在自己服务器上的部署。
直接访问 http://你的域名/weapp/login,会提示:{"code":-1,"error":"ERR_HEADER_MISSED"},则表示配置成功。现在就可以使用开发者工具来进行联调测试啦!(终于完成了!!!)
以上文章来源于网络,如有侵权请联系创一网的客服处理。谢谢!