部署微信小程序服务器

部署微信小程序服务器

这篇文章是 自行部署 官方Wafer框架 到自己的服务器的步骤指引。

由于小程序的登录功能需要服务器配合,所以官方有个配置服务器的解决方案。 这个解决方案有两种部署方式,一站式部署和自行部署。一站式部署由于文档比较老,很久没有更新。并且微信开发者工具好像已经不支持服务器代码自动部署到云这个功能了。好像已经行不通了,官方现在使用的方式是云开发方式。但是有时候我们不想使用云开发。所以我们自行把这个框架部署到自己购买的云服务器中。官方文档建议我们购买一个云服务器和一个云数据库。这里由于我们是学习,为了省钱,我们只购买一个云服务器,然后自己在云服务中安装一个mysql数据库。

另外大家有什么其他部署方案,也请指点。

配置服务器过程中我遇到的一些疑问

为什么有了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"},则表示配置成功。

参考文章

官方文档

自行部署微信小程序生产环境(node.js)-阿里云服务器

微信小程序开发环境(阿里云服务搭建+可运行的demo)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355