在linux上通过nginx配置微信小程序服务器

1. 云服务器准备:

可在阿里云购买轻量应用服务器或者ECS服务器,系统镜像选择CentOS 目前用的比较多的免费Linux系统,和ubuntu基本一样,可以根据自己需要购买


图1.1:阿里云首页的ECS服务器购买

2. 域名准备:

域名购买后,添加域名解析到前面购买的服务器IP地址上,然后需要申请ssl证书,如果大家安装的不是纯净的centos环境,阿里云配套安装的软件不是很好用,可以重置系统(这里使用centos7.3

3. 使用ssh工具连接服务器,安装需要的环境:(node.js、nginx、mysql5.7)

(1) 安装node.js

  • 新建目录www
mkdir /www
cd /www
  • 下载nodejs
wget https://npm.taobao.org/mirrors/node/v8.2.1/node-v8.2.1-linux-x64.tar.xz
  • 解压
tar -xvf node-v8.2.1-linux-x64.tar.xz
  • 测试是否安装成功

进入解压目录下的 bin 目录,执行 ls 命令:

cd node-v8.2.1-linux-x64/bin && ls  

有node 和 npm 测试 ./node -v 安装成功,现在 node 和 npm 还不能全局使用,做个链接,就可以全局使用了

[root@joyitsai bin]# ln -s /www/node-v8.2.1-linux-x64/bin/node /usr/local/bin/node
[root@joyitsai bin]# ln -s /www/node-v8.2.1-linux-x64/bin/npm /usr/local/bin/npm
[root@joyitsai bin]# cd ~
[root@joyitsai ~]# npm -v
5.3.0
[root@joyitsai ~]# node -v
v8.2.1

(2) 安装nginx

Node.js 是单进程的,我们可以通过多开 Node.js 并配合 Nginx 来实现多进程 Node.js 负载均衡,并且一些静态文件我们也可以直接通过 Nginx 代理,提高性能。其中第一步就是安装 Nginx。 通过 SSH 连接上云服务器,直接使用包管理工具 yum 安装 Nginx 即可:yum -y install nginx,安装完成之后会显示 Complete!,可以通过如下命令检查 Nginx 是否安装成功: nginx -v

(3) 安装mysql5.7

配置YUM源:

  • 下载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 repolist enabled | grep "mysql.*-community.*"
  • 安装MySQL
yum install mysql-community-server 
  • 启动MySQL服务
 systemctl start mysqld 
  • 查看MySQL的启动状态
systemctl status mysqld
图3.1: 查看mysql运行状态
  • 开机自启动mysql服务
systemctl enable mysqld
systemctl daemon-reload
  • 修改Mysql的root本地登录密码
    mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
grep 'temporary password' /var/log/mysqld.log
2018-12-07T03:59:27.284766Z 1 [Note] A temporary password is generated for root@localhost: hy&dw(Tsp0GY
  • 登录并修改默认密码

通过上面获取的本地默认密码进行初始登录

mysql -u root -p
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'yournewpassword'; 

在设置密码时,可能会报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements这是 mysql 初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题。

解决办法:
(1)、查看 mysql 初始的密码策略:
输入语句 SHOW VARIABLES LIKE 'validate_password%';进行查看:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 8     |
| validate_password_mixed_case_count   | 2     |
| validate_password_number_count       | 1     |
| validate_password_policy             |MEDIUM |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

上面的语句可能会报错,因为你还没有设置自己的密码,不过我们知道有这样一个默认的密码策略就好。

(2)、然后需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
输入设值语句 set global validate_password_policy=LOW;进行设置:

mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

(3)、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length为全局参数为 6 即可,输入设值语句 set global validate_password_length=6;进行设置:

(4)、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,

set password = '123456'; 

可以看到修改成功,表示密码策略修改成功了!

  • 新建一个数据库名为 cAuth,排序规则为 utf8mb4_unicode_ci,小程序后台会用到
mysql>CREATE DATABASE IF NOT EXISTS cAuth DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 服务端使用的工具软件已经安装好了,下面导入ssl证书
    去阿里云官方,查看你的域名:
    图3.2:查看域名

    然后点击域名,进入域名基本信息页面:
    图3.3:域名基本信息

    点击免费开启SSL证书:
    图3.4:申请免费的SSL证书

    申请时需填写相关申请信息,通过验证即可下发SSL证书,下载已下发的SSL证书:
    图3.5:下载SSL证书

新建/data/release/nginx

使用sftp软件(FileZilla)或者用WinSCP软件连接服务器,把ssl证书放到/data/release/nginx目录下:

注意:可以将.pem证书文件重命名为.crt文件,二者都可在nginx.conf配置文件中配置ssl安全证书。

图3.6:将ssl安全证书上传到服务器

4.开始配置nginx:

上传完证书以后,可以开始配置 Nginx,修改/etc/nginx/nginx.conf,写入如下配置(请将配置里www.joyitsai.com修改为你自己的域名,包括证书文件,关于Nginx的基本功能和原理,请查看文档《Nginx基本功能及其原理》)


upstream app_weapp {
    server localhost:5757;
    keepalive 8;
}

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  www.joyitsai.com;
        root         /usr/share/nginx/html;
        rewrite ^(.*)$ https://$server_name$1 permanent;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
        location /images/ {
                root /data/release/weapp/uploadFiles/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.

server {

   listen 443;

   # listen[::]:  443 ssl http2 default_server;
   server_name www.joyitsai.com;
   root /data/release/weapp /uploadFiles;
   ssl on;
   ssl_certificate /data/release/nginx/ 1535530361992.pem;
   ssl_certificate_key /data /release/nginx / 1535530361992.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
   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;
  }

   location /images/ {
     autoindex on;
   }

   location ~ \.(png|jpg) {
     root /data/release/weapp/uploadFiles;
   }

   error_page 404 /404.html;
   location = /40x.html {

   }

   error_page 500 502 503 504 /50x.html;
   location = /50x.html {

   }

}
  • 然后在 ssh 中输入:nginx -t

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

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

如果访问 http://你的域名/weapp/a 会自动跳转到 HTTPS 上,并显示 502 Bad Gateway,则表示配置成功。
如果没有成功,使用netstat -ntpl查看下 nginx的https监听是否启动(443端口)

[root@joyitsai nginx]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23909/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      4126/sshd
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      23909/nginx: master
tcp6       0      0 :::3306                 :::*                    LISTEN      19158/mysqld
tcp6       0      0 :::80                   :::*                    LISTEN      23909/nginx: master

至此,微信小程序服务端的环境已经完全搭建好了。

5. 上传小程序demo服务端源码并测试

登陆小程序官网,注册账号,获取AppID(小程序ID),AppSecret(小程序密钥),配置服务器域名,域名需要备案后才能填写,备案全部操作可以在阿里云网上进行,大概2周左右。

下载小程序开发工具,下载demo源码

使用开发工具打开demo源码。

编辑server中的config.js(先在服务器上创建一下目录/data/release/weapp,也就是下面的rootPathname):

const CONF =  {
 port:  '5757',
 rootPathname:  '/data/release/weapp',

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

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

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

 /**
 * MySQL 配置,用来存储 session 和用户信息
 * 服务器将通过MySQL配置参数与MySQL数据库进行连接
 */

 mysql:  {
   host:  '127.0.0.1', // 指定mysql主机在本地
   port:  3306, // 指定要连接的端口
   user:  'root', // 指定连接mysql的用户身份
   db:  'cAuth', // 数据库名
   userdb:  'test', // 数据库表名
   pass:  'yourmysqlpassword', // 数据库连接密码
   char:  'utf8mb4' // 数据库类型
 },

 cos:  {
   // 地区简称
   region:  'ap-guangzhou',

   // Bucket 名称
   fileBucket:  'qcloudtest',

   // 文件夹
   uploadFolder:  ''
 },

 // 微信登录态有效期
 wxLoginExpires:  7200,

 // 其他配置 ...
 serverHost:  'https://www.joyitsai.cn',
 tunnelServerUrl:  'https://tunnel.ws.qcloud.la',
 tunnelSignatureKey:  '27fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89',

 // 腾讯云相关配置可以查看云 API 秘钥控制台:https://console.qcloud.com/capi
 qcloudAppId:  '1257399680',
 qcloudSecretId:  'AKID3zkLp9xL9nFdp2MyfCaFl6Tjz4yhNuKc',
 qcloudSecretKey:  'HOK7i8MTWP6e4Zq471lKix868zgEcqto',
 wxMessageToken:  'weixinmsgtoken',
 networkTimeout:  30000
}

// 通过module.exports = CONF将接口暴露出去,require(../js文件名)调用接口

// 在其他js文件中,通过const config = require('../config') 可将CONF的接口赋给config

module.exports = CONF

修改好server后,修改下client中的host:"你申请的域名":

/**
 * 小程序配置文件
 */

// 此处主机域名修改成你服务器的域名
var host = 'https://www.joyitsai.com';

var config = {

    // 下面的地址配合云端 Demo 工作
    service: {
        host,

        // 登录地址,用于建立会话
        loginUrl: `${host}/weapp/login`,

        // 测试的请求地址,用于测试会话
        requestUrl: `${host}/weapp/user`,

        // 测试的信道服务地址
        tunnelUrl: `${host}/weapp/tunnel`,

        // 上传图片接口
        uploadUrl: `${host}/weapp/upload`
    }
};

module.exports = config;

都配置好以后,现在需要将server端的代码上传的服务器上的/data/release/weapp目录下:

图3.4:将server端源码上传到服务器

server代码上传后,cd 到/data/release/weapp,查看目录下的文件:

[root@joyitsai weapp]# ll
total 48
-rw-r--r-- 1 root root  509 Dec 11  2017 app.js
-rw-r--r-- 1 root root  983 Dec 11  2017 config.js
drwxr-xr-x 2 root root 4096 Dec  9 21:56 controllers
drwxr-xr-x 2 root root 4096 Dec  9 21:56 middlewares
-rw-r--r-- 1 root root  311 Dec 11  2017 nodemon.json
-rw-r--r-- 1 root root  946 Dec 11  2017 package.json
-rw-r--r-- 1 root root  240 Dec 11  2017 process.prod.json
-rw-r--r-- 1 root root 1023 Dec 11  2017 qcloud.js
-rw-r--r-- 1 root root 3771 Dec 11  2017 README.md
drwxr-xr-x 2 root root 4096 Dec  9 21:56 routes
drwxr-xr-x 2 root root 4096 Dec  9 21:56 tools
-rw-r--r-- 1 root root  926 Dec 11  2017 tools.md

代码传完后做如下操作:

  • 输入以下命令切换npm 源到淘宝镜像,防止官方镜像下载失败:
npm config set registry https://registry.npm.taobao.org 
  • 使用npm安装全局依赖
npm install -g pm2
  • 然后安装本地依赖:
 npm install
  • 接着使用 Demo 代码里的 tools/initdb.js 工具初始化数据库:
 node tools/initdb.js

初始化成功则会提示“数据库初始化成功!” 。
顺利完成以上操作,就完成了微信小程序在自己服务器上的部署。直接访问 https://你的域名/weapp/login,会提示: {"code":-1,"error":"ERR_HEADER_MISSED"} 则表示配置成功。你现在可以使用开发者工具来进行联调测试啦!

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