前言
实验环境为: 阿里云/腾讯云服务器 Ubuntu 16.04 x64系统.
使用普通用户操作.
阿里云的Ubuntu系统默认是root用户, 可以新建一个名为ubuntu的普通用户哦.
需要注册一个域名.
安装docker
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv \
--keyserver hkp://ha.pool.sks-keyservers.net:80 \
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get upgrade
# apt-cache policy docker-engine
sudo apt-get install -y docker-engine
sudo apt-get clean
sudo usermod -aG docker $(whoami) # 将当前用户加入到docker用户组, 这样以后使用docker就不需要root权限了.
sudo systemctl daemon-reload
sudo systemctl restart docker
# sudo reboot
配置docker镜像加速
腾讯云docker镜像加速
编辑 /etc/systemd/system/multi-user.target.wants/docker.service
在ExecStart=/usr/bin/dockerd -H fd:// 这行后面加上如下部分.
ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://mirror.ccs.tencentyun.com
sudo systemctl daemon-reload
sudo systemctl restart docker
阿里云docker镜像加速
sudo tee /etc/docker/daemon.json <
{
"registry-mirrors": ["https://系统分配的前缀.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
设置域名解析记录
在阿里云/腾讯云控制台添加一条域名解析记录. 将下面的zhoujin7.com换成你自己的域名.
wx.zhoujin7.com
下载容器相关的配置文件
cd ~
mkdir -p ~/development/docker
mkdir -p ~/development/phpdev
git clone https://github.com/zhoujin7/docker-auto-build.git
cp docker-auto-build/lamp ~/development/docker/wx -R
下载wafer2-quickstart-php并进行相关配置
下载服务端代码
cd ~
git clone https://github.com/tencentyun/wafer2-quickstart-php.git
cp wafer2-quickstart-php/server ~/development/phpdev/wx -R
配置数据库密码
编辑~/development/phpdev/wx/config.php
将下面的yourPassword123456换成你想设置的数据库密码
'mysql' => [
'host' => '172.28.0.3',
'port' => 3306,
'user' => 'root',
'db' => 'cauth',
'pass' => 'yourPassword123456',
'char' => 'utf8mb4'
],
编辑~/development/phpdev/wx/application/config/database.php
将下面的yourPassword123456换成你的数据库密码, 和上面设置的保持一致.
$db['default'] = array(
'dsn'=> '',
'hostname' => '172.28.0.3',
'username' => 'root',
'password' => 'yourPassword123456',
'database' => 'cauth',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8mb4_unicode_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
设置SDK配置文件
创建文件~/development/docker/wx/sdk.config.json
将下面的wx.zhoujin7.com换成你的域名, 和上面设置域名解析记录的域名一致.
登录腾讯云控制台, 打开https://console.cloud.tencent.com/cam/capi, 新建密钥.
将下面yourAPPID, yourSecretId和yourSecretKey换成你的APPID, SecretId和SecretKey.
tee ~/development/docker/wx/sdk.config.json <
{
"serverHost": "wx.zhoujin7.com",
"qcloudAppId": yourAPPID,
"qcloudSecretId": "yourSecretId",
"qcloudSecretKey": "yourSecretKey"
}
EOF
创建docker容器
创建自定义网络用于固定容器IP
docker network create --subnet=172.28.0.0/16 mynetwork
创建容器时, 加上--network mynetwork --ip 172.28.0.x --dns 114.114.114.114 (x为数字)
创建nginx-proxy容器
docker run -d -p 80:80 -p 443:443 \
--name nginx-proxy \
--network mynetwork --ip 172.28.0.2 --dns 114.114.114.114 \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
-v /usr/share/nginx/html \
-v /home/ubuntu/development/docker/nginx/certs:/etc/nginx/certs \
-v /home/ubuntu/development/docker/nginx/conf.d:/etc/nginx/conf.d \
--restart=always \
jwilder/nginx-proxy
创建letsencrypt-nginx-proxy-companion容器
docker run -d \
--name nginx-proxy-letsencrypt \
-v /home/ubuntu/development/docker/nginx/certs:/etc/nginx/certs \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--volumes-from nginx-proxy \
--restart=always \
jrcs/letsencrypt-nginx-proxy-companion
创建mysql容器
将下面的yourPassword123456换成你的数据库密码, 和上面设置过的保持一致.
docker run -d \
--name mysql \
--network mynetwork --ip 172.28.0.3 --dns 114.114.114.114 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_ROOT_HOST=172.28.0.% \
-v /home/ubuntu/development/docker/mysql57:/var/lib/mysql \
--restart=always \
mysql/mysql-server:5.7
创建wx微信小程序后端运行环境容器
将下面的wx.zhoujin7.com换成你的域名, 和上面设置域名解析记录的域名一致.
将下面的yourEmail@qq.com换成你的个人邮箱.
docker run -d \
--name wx \
-e "VIRTUAL_HOST=wx.zhoujin7.com" \
-e "LETSENCRYPT_HOST=wx.zhoujin7.com" \
-e "LETSENCRYPT_EMAIL=yourEmail@qq.com" \
--restart=always \
--network mynetwork --ip 172.28.0.5 --dns 114.114.114.114 \
-v /home/ubuntu/development/phpdev/wx:/var/www/html \
-v /home/ubuntu/development/docker/wx/php.ini:/etc/php/7.0/apache2/php.ini:rw \
-v /home/ubuntu/development/docker/wx/apache2/000-default.conf:/etc/apache2/sites-enabled/000-default.conf:rw \
-v /home/ubuntu/development/docker/wx/sdk.config.json:/data/release/sdk.config.json:rw \
registry.cn-shenzhen.aliyuncs.com/jin7/lamp
将cAuth.sql导入数据库
进入数据库容器mysql控制台.
将下面的yourPassword123456换成你的数据库密码, 和上面设置过的保持一致.
docker exec -it mysql bash -c 'mysql -uroot -pyourPassword123456'
执行下面的sql语句.
CREATE DATABASE `cauth` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
use cauth;
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `csessioninfo`
-- ----------------------------
DROP TABLE IF EXISTS `csessioninfo`;
CREATE TABLE `csessioninfo` (
`open_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`uuid` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`skey` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_visit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`session_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_info` varchar(2048) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`open_id`),
KEY `openid` (`open_id`) USING BTREE,
KEY `skey` (`skey`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会话管理用户信息';
SET FOREIGN_KEY_CHECKS = 1;
注意在Windows上, MySQL的数据库名、表名、字段名大小写不敏感, 但在Linux上则大小写敏感.
项目可能同时在Windows和Linux环境运行, 为了避免由于大小写造成的麻烦, 这里将原来的数据库名cAuth和数据表名cSessionInfo都改成了小写.
同时需要修改代码文件, 将里面的cAuth替换为cauth, cSessionInfo替换为csessioninfo
需要修改的文件:
~/development/phpdev/wx/vendor/qcloud/weapp-sdk/lib/Model/User.php
在微信公众平台中设置服务器域名
将下面的wx.zhoujin7.com替换成你的域名.
在微信开发者工具中设置小程序的服务器地址
登录测试