tencentyun / wafer

Wafer - 快速构建具备弹性能力的微信小程序
https://github.com/tencentyun/wafer
Other
2.16k stars 334 forks source link

自行部署 Wafer 的一点心得 #8

Open ITJaye opened 7 years ago

ITJaye commented 7 years ago

自行部署 Wafer 的一点心得

最近以官方的demo为例配置部署wafer,实现了小程序的授权登陆、获取用户信息以及小程序websocket聊天室功能。这个过程中踩了几个小坑,特分享出来,让大家少碰壁。自行部署前最好是要弄明白wafer的业务流程,需要准备相应的服务器环境、所需的代码,以及清楚明白你需要配置什么。

一、准备工作

二、配置文件

1. 配置以支持https访问

如何配置免费的https,自行百度

2. 配置wafer的SDK配置文件sdk.config

新建个文本文件粘贴如下代码:

{
    "serverHost": "www.xx.com",
    "authServerUrl": "http://www.xx.com/itjaye/wafer-session-server/",
    "tunnelServerUrl": "https://ws.qcloud.com",
    "tunnelSignatureKey": "xxxxxx",
    "networkTimeout": 30000
}

将文件保存为sdk.config并上传到/etc/qcloud/sdk.config (需要在/etc/下面自己创建下qcloud这个目录)

3. 配置会话服务调用的数据库连接配置文

上线前需要在服务器如下配置

a.在数据库中创建cAuth数据库并导入根目录下的mina_auth/db.sql

b.修改wafer-session-server/system/db/db.ini代码

[db]
host = 数据库服务器IP
port = 3306
user_name = 用户名
pass_wd = 密码
data_base = cAuth

4. 配置小程序管理平台

登陆微信小程序管理平台https://mp.weixin.qq.com/ 在 『设置』-『开发设置』 里添加如下url

wss://ws.qcloud.com、https://ws.qcloud.com

5. 配置客户端代码

修改下客户端demo中的/config.js的host为你的业务服务器上wafer SDK地址

var host = 'www.xx.com/itjaye/wafer-php-server-demo';

6. 配置wafer-php-server-demo

针对 wafer-php-server-demo代码,记得先在该文件夹下执行composer install操作来安装wafer SDK

需要分配配置下SDK本身所采用的CI框架来支持伪静态,隐藏index.php

修改代码中application/config/config.php里的配置 修改26行为

    $config['base_url'] = 'https://www.xx.com/itjaye/wafer';

修改38行为

    $config['index_page'] = '';

同时,在Nginx服务器的配置文件中增加如下设置以支持ci框架的伪静态

location /itjaye/wafer/ {
            index  index.html index.php;
            if (!-e $request_filename) {
                rewrite  ^(.*)$  /tjaye/wafer/index.php?s=$1  last;
                break;
            }
        }

三、上传代码

在服务器上web根目录下创建一个文件夹,我的文件夹名为itjaye,把上面wafer-php-server-demo文件夹和wafer-session-server文件夹上传到该文件夹下即可。

四、其他问题

针对会话服务由于是php7 需要如下修改,

五、参考资料

https://github.com/tencentyun/wafer/wiki

有疑问的可以加官方qq群交流 216602757

xiaoyun94 commented 7 years ago

这个大佬在sdk.config里面对tunnelserver是对的,官方默认设置是有问题的 正确的是 "tunnelServerUrl": "https://ws.qcloud.com", 官方的是 "tunnelServerUrl": "https://ws.qcloud.com/", 自己好好体会一下吧

techird commented 7 years ago

@xiaoyun94 谢谢提醒,Wiki 已经更正过来了

techird commented 7 years ago

感谢 @ITJaye ,真是干货资料

edwardguo commented 7 years ago

@techird @ITJaye 请问这是什么原因引起的呢? 调用鉴权服务失败:#1012 - NO_APPID default 我的小程序未认证,是这个原因引起的吗?

dedecom commented 7 years ago

dlin8600_1491026705234_18 腾讯云服务内存持久化存储(CMEM)CMEM服务介绍 要购买cmem才行咯,云缓存Memcached

wynsto commented 7 years ago

费劲啊。。。中间搞个授权服务器也是醉了

dedecom commented 7 years ago

@ITJaye 看看我上面的问题怎么解决

hdwmp123 commented 7 years ago

这个是不是已经过期了?现在2017-4-18 23:07:00,我刚部署了一套,发现代码和楼主说的不一样

BEIBEI123 commented 7 years ago

很奇怪,长链接为什么不用wss,而是用https

owendswang commented 7 years ago

唉……基础比较差……高了两天,没搞出来……唉……

yujianchi commented 7 years ago

@edwardguo 同样的问题。请问你的已经解决掉了吗?

huangyuan commented 6 years ago

@yujianchi @edwardguo http://www.wxapp-union.com/article-1912-1.html

aimin commented 6 years ago

我的为什么总,签名错误吗? 求大神帮助,指教! { "serverHost": "1111.qcloud.la", "authServerUrl": "http://192.168.1.101:8002/mina_auth", "tunnelServerUrl": "https://ws.qcloud.com", "tunnelSignatureKey": "ddddd ", "networkTimeout": 30000 }

报错如下:

A PHP Error was encountered

Severity: Notice

Message: Undefined index: signature

Filename: Tunnel/TunnelService.php

Line Number: 94

Backtrace:

File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php
Line: 94
Function: _error_handler

File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php
Line: 17
Function: handleGet

File: /home/songaimin/www/cs-server/application/controllers/Tunnel.php
Line: 11
Function: handle

File: /home/songaimin/www/cs-server/index.php
Line: 328
Function: require_once

File: /home/songaimin/www/cs-server/webServer.php
Line: 17
Function: require_once

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: Tunnel/Signature.php

Line Number: 11

Backtrace:

File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/Signature.php
Line: 11
Function: _error_handler

File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/Signature.php
Line: 23
Function: compute

File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php
Line: 97
Function: check

File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php
Line: 17
Function: handleGet

File: /home/songaimin/www/cs-server/application/controllers/Tunnel.php
Line: 11
Function: handle

File: /home/songaimin/www/cs-server/index.php
Line: 328
Function: require_once

File: /home/songaimin/www/cs-server/webServer.php
Line: 17
Function: require_once

{"error":"签名校验失败"}
zhaodifangsi commented 6 years ago

{"error":"签名校验失败"}可以绕过,但是还是无法发送信息。 TunnelService.php 95行,加判定绕过,代码如下: if (@$body['signature']) { $signature = $body['signature'];

            // 校验签名
            if (!Signature::check($data, $signature)) {
                throw new Exception('签名校验失败');
            }

            $data = json_decode($data, TRUE);
        }
xiaoyun94 commented 6 years ago

@zhaodifangsi 如果你用的免费开放版,免费版本缺少签名参数,并且发送的格式有问题,比如发送的是JSON OBJECT但实际应该是JSON STRING。我这里有一个信道服务器DEMO, 不过是JAVA的,爱折腾可以看看

ProfessorC commented 6 years ago

appid 都不用设置吗?

khs1994 commented 6 years ago

最新版变动较大,正在尝试中