专栏首页小程序解决方案的专栏自己部署 Node.js 版本的 Wafer2 Demo
原创

自己部署 Node.js 版本的 Wafer2 Demo

自行部署适用于想将腾讯云 Wafer SDK 和 Demo 部署在自己的服务器上以获得更高的灵活性和操纵权限的用户。部署过程需要从 0 开始搭建线上环境,需要有一定的 Linux、Node.js 基础。如果您符合以上需求和条件,可以开始按本文自行部署。

本文基于以下环境:

Wafer SDK 的数据库仅支持 5.7 及以上版本的 MySQL。为了生产环境的稳定,采用云数据库而非自行搭建。
云服务器和云数据库必须在同一个腾讯云账号下,否则内网 IP 无法连通。

安装 Nginx

Node.js 是单进程的,我们可以通过多开 Node.js 并配合 Nginx 来实现多进程 Node.js 负载均衡,并且一些静态文件我们也可以直接通过 Nginx 代理,提高性能。其中第一步就是安装 Nginx。

通过 SSH 连接上云服务器,直接使用包管理工具 yum 安装 Nginx 即可:

yum -y install nginx

安装完成之后会显示 Complete!,可以通过如下命令检查 Nginx 是否安装成功:

nginx -v

这个命令会显示 Nginx 的版本号,如果显示如下信息,则安装成功:

安装 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 -

接着就可以直接通过 yum 安装了:

yum -y install nodejs

同理,我们可以通过如下命令验证 Node.js 是否安装成功:

node -v

该命令会返回当前 Node.js 的版本号,如果你看到了版本号大于 7.6,则 Node.js 安装成功:

开启 SFTP

SFTP 是一种安全的文件传输协议,我们可以通过 SFTP 把本地的文件上传到服务器上,通过以下命令检查 sftp 状态:

service sshd status

看到输出的信息中有 active (running) 则表示 sshd 进程已经开启,可以通过 sftp 连接:

接下来可以通过 FileZilla、Transmit 等 FTP 工具连接上服务器。

配置 Nginx 和 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 wx.ijason.cc;

    rewrite ^(.*)$ https://$server_name$1 permanent;
}

server {
    listen      443;
    server_name wx.ijason.cc;

    ssl on;

    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;
    }
}

修改完将这个文件上传到服务器上,然后在 ssh 中输入:

nginx -t

如果显示如下信息,则配置成功:

配置成功之后,输入 nginx 回车,即可启动 Nginx。

此时通过配置的域名访问服务器,会显示 Nginx 详情页:

如果访问 http://你的域名/weapp/a 会自动跳转到 HTTPS 上,并显示 502 Bad Gateway,则表示配置成功:

上传 Demo 和启动

Wafer2-quickstart 仓库下载最新的 Demo 代码,修改 server/config.js

const CONF = {
    port: '5757',
    rootPathname: '',

    // 微信小程序 App ID
    appId: '',

    // 微信小程序 App Secret
    appSecret: '',

    // 是否使用腾讯云代理登录小程序
    useQcloudLogin: true,

    /**
     * MySQL 配置,用来存储 session 和用户信息
     * 若使用了腾讯云微信小程序解决方案
     * 开发环境下,MySQL 的初始密码为您的微信小程序 appid
     */
    mysql: {
        host: '云数据库内网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: '你的域名',
    tunnelServerUrl: 'http://tunnel.ws.qcloud.la',
    tunnelSignatureKey: '27fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89',
  	// 腾讯云相关配置可以查看云 API 秘钥控制台:https://console.cloud.tencent.com/capi
    qcloudAppId: '你的腾讯云 AppID',
    qcloudSecretId: '你的腾讯云 SecretId',
    qcloudSecretKey: '你的腾讯云 SecretKey',
    wxMessageToken: 'weixinmsgtoken',
    networkTimeout: 30000
}

module.exports = CONF

接着将 server 目录下的所有文件都上传到 /data/release/weapp 目录下:

使用 SSH 切换到代码目录:

输入以下命令切换 npm 源到腾讯云镜像,防止官方镜像下载失败:

npm config set registry http://mirrors.tencentyun.com/npm/

接着安装全局依赖:

npm install -g pm2

然后安装本地依赖:

npm install

接着对数据库进行初始化,进入云数据库控制台,点击要使用的云数据库进去,再点击右上角“登录数据库”按钮。在弹出的页面中输入数据库账号密码进入数据库管理控制台,点击菜单栏的“返回 PMA”,在界面中点击左侧栏中的“新建”,输入数据库名为 cAuth,排序规则为 utf8mb4_unicode_ci,点击“创建”创建数据库:

接着返回 SSH,使用 Demo 代码里的 tools/initdb.js 工具初始化数据库:

node tools/initdb.js

初始化成功则会提示“数据库初始化成功!”

最后启动 Node.js 程序

node app.js

完成

顺利完成以上操作,就完成了 Wafer Demo 在自己服务器上的部署。直接访问 http://你的域名/weapp/login,会提示:

{"code":-1,"error":"ERR_HEADER_MISSED"}

则表示配置成功。你现在可以使用开发者工具来进行联调测试啦!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Wafer2 Node.js QuickStart 架构分析

    Wafer2 的 Node.js QuickStart 采用了 Koa.js 框架编写,Koa 将整个请求过程看做全异步的操作,使用 Node.js 7.6 开...

    Jason
  • 3 元购买 Wafer1 指南

    进入微信公众平台,点击右上角的【立即注册】,按照流程注册小程序账号。

    Jason
  • 基于 Wafer 2.0 搭建自己的第一个小程序

    临近 2017 年末尾了,距离微信小程序上线也已经一年多了,随着微信在上半年放开了个人申请微信小程序的限制,越来越多的开发者选择开发微信小程序而不是开发一个 A...

    Jason
  • 使用node小技巧之通过监管员supervisor工具实现热更新

    当你通过Node.js来创建HTTP服务并运行后,由于Node.js只有在第一次引用时才会解析你的脚本,以后的访问均是在内存当中进行的,所以当你不管修改了代码的...

    用户1272076
  • 不谈赋能谈助力,腾讯云要实现什么

    近日,马化腾第三次参加云+未来峰会,提出了人联网、物联网、智联网的“三网”的概念,腾讯“超级大脑”也正式亮相。马化腾还提出了“一三五七”四个数字,其中“一”指的...

    用户2908108
  • 腾讯云与谷歌云达成合作?产品思维转变亦是王道!

    据The Information援引消息人士,谷歌云和腾讯云正探索在云计算领域进行合作,双方探讨谷歌云在中国市场的落地,包括谷歌云的产品与服务(例如数据库管理分...

    大数据在线
  • 苏宁的Node.js实践:不低于Java的渲染性能、安全稳定迭代快

    苏宁的技术架构,由苏宁云、基础支撑、后台、中台和前台组成。苏宁云主要为业务开发提供云服务。基础支撑,包括数据连接协议、防火墙、日志、中间件、短信等。在苏宁云和基...

    五月君
  • 重磅!腾讯5G探索地图揭秘

    导语 | 本文中,腾讯未来网络实验室5G技术专家俞一帆老师将对腾讯的5G探索地图进行了详细的讲解,以下是俞一帆老师演讲的整理(编辑:尾尾)。关注「云加社区」公众...

    尾尾
  • 重磅!腾讯5G探索地图揭秘

    导语 | 本文中,腾讯未来网络实验室5G技术专家俞一帆老师将对腾讯的5G探索地图进行了详细的讲解,以下是俞一帆老师演讲的整理(编辑:尾尾)。 本文主要分三个部...

    腾讯大讲堂
  • 腾讯SDN/ODL的探索、创新与开源实践

    "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

    鹅厂网事

扫码关注云+社区

领取腾讯云代金券