云托管体验——部署ThinkPHP商城后台到微信云托管

发布于 4 年前作者 yan165760 次浏览最后编辑 4 年前来自 share

云托管体验——部署ThinkPHP商城后台到微信云托管(含本地云调试配置)

2022年的今天,云计算蓬勃发展,除了强大的云平台建设经验的支持外,差异化竞争也很重要。微信云托管背靠腾讯云,坐拥微信生态的优势使其在同类云容器托管产品中让人眼前一亮,以微信为接入点的业务向微信云托管靠拢在安全、用户体验、运维、开发上都具备优势。微信云托管的能力已经上线不少,趁着最近云托管有活动,不花钱体验一下云托管的魅力。
本文包括两块主要内容:(Thinkphp项目容器构建思路及实践、在本地搭建模拟云环境完成调试)开始前请在本地开发环境部署好Docker与Vscode

一、开通云服务

(一)云环境开通

系统响应一般比较快,遇到转圈圈超过1分钟可以直接刷新页面。

微信云托管 (qq.com)里,扫码登录,选择自己所需要的账号进行开通

WXOPEN Club 内容图片

选择自定义部署

WXOPEN Club 内容图片

点击确定或者绑定腾讯云账号

WXOPEN Club 内容图片

如果需要绑定腾讯云账号,绑定授权完成后跳转回来可以先点一下取消,再点“自定义”部署

一般来说,点一次确定即可,如果响应慢可以等一下,避免造成环境重复创建

WXOPEN Club 内容图片

WXOPEN Club 内容图片

(二)数据库创建

创建数据库并创建子账号

WXOPEN Club 内容图片

WXOPEN Club 内容图片

二、容器构建

如果您已经打包成容器,请跳过这一步~这一步主要是根据项目本身的需求去对运行环境作相应的配置,这里列举了本次项目所需依赖,记得最后记录一个清单。

(一)收集待迁移项目所需依赖

所需依赖的话,如果是新建项目的话可以从文档去找

1、项目所需运行环境

  • 操作系统:这里因为需要作PHP的版本适配,选择了Alpine:3.10
  • Nginx/Apache:本次项目选择了engineX;
  • PHP: 7.1 ~ 7.3;
  • PHP-FPM:配套即可;
  • PHP插件:如php7-pcntl php7-posix等等,这里比较多,详细插件会放在Dockerfile

2、 项目所需数据库

  • MySQL:因为云环境提供了数据库,我们就不在本地部署数据库了~
  • Redis:因为当前云托管还没推出,如果是不是测试,强烈建议使用云Redis数据库!

3、项目运行脚本

  • Nginx启动脚本:

nginx -g 'daemon off;'

  • 文件目录权限:
chmod -R 777 /app/runtime \
chmod -R 777 /app/public \
chmod -R 777 /app/ \
  • Redis启动脚本:
EXEC=/usr/bin/redis-server
CLIEXEC=/usr/bin/redis-cli
/usr/bin/redis-server /etc/redis.conf
  • PHP-FPM启动脚本:
php-fpm -D
  • Think的Workerman和 Timer
/usr/bin/php /app/think workerman start --d
/usr/bin/php /app/think timer start --d

(二)检查依赖

在构建之前,我们还需要检查一下这些依赖是否能够轻松引入,方法很简单,去Alpine依赖包管理搜索对应依赖,并记录一下他们的一些必要信息:在容器内安装位置、配置文件位置,方便后续覆盖容器内的配置文件

1、前往Alpine依赖包管理

依次搜索所需插件

    nginx
    php
    php-fpm
# 此处省略...
    php7-gd \

WXOPEN Club 内容图片

2、 搜索Nginx、PHP、PHP-FPM、Redis的软件内容

别忘了看一看软件在文件内的安装目录,以及一些配置文件的地址,覆盖默认配置的时候会用到。同时,里面包含一些软件所依赖的包,因为本次所选用的Alpine体积很小,如果缺少了依赖包导致无法安装的话,可以安装一下

WXOPEN Club 内容图片

三、本地测试及云发布

(一)本地测试

1、拉取待迁移项目源码,准备配置文件

本次需要两个项目的源码,一个是微信云托管官方的ThinkPHP+Nginx示例项目,另一个是电商项目-CRMEB (gitee.com)的源码。

WXOPEN Club 内容图片

需要自己的配置文件有:redis.conf,百度一下redis-5.0的配置文件即可,其余的话放在官方项目里面的conf目录里。因为篇幅原因,源码会放在附录的仓库里。然后导入一下项目并打开Dockerfile

WXOPEN Club 内容图片

2、制作Dockerfile及启动脚本

(1)添加redis.conf到/conf、增加nginx反向代理规则
该步主要是为了让redis-server以守护模式去运行,配置文件在dockerfile中被指定去覆盖掉redis原有的配置

WXOPEN Club 内容图片

依照商城要求,在/conf/nginx.conf中加入反向代理的配置,主要是为了即时通讯模块
    location /notice {
        proxy_pass http://127.0.0.1:20002/;  
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    #提示:v4.3.0 以前版本,可不用配置一下代码
    location /msg {
        proxy_pass http://127.0.0.1:20003/;  
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
(2)Dockerfile制作
  • 更改基础镜像alpine3.10版本
  • 在php7插件添加的地方,补充了待移植项目特定的一些依赖
  • (可选)添加redis
  • 配置redis的文件覆盖
  • 按照商城的要求更改特定目录的权限
# 为了兼容php7.3,alpine更改为3.10
FROM alpine:3.10# 安装依赖包,如需其他依赖包,请到alpine依赖包管理(https://pkgs.alpinelinux.org/packages?name=php7**&branch=v3.10)查找。RUN apk add --update --no-cache \
    nginx \
    
# php及其插件    
    php7 \
    php7-fpm \    
    php7-json \    
    php7-ctype \
    php7-exif \
    php7-pdo \
    php7-pdo_mysql\
    
# =======商城所需依赖=========
    php7-pcntl\
    php7-posix\
    php7-mysqli \
    php7-pecl-redis\
    php7-fileinfo \
    php7-curl \
    php7-bcmath \
    php7-gd \
# =======END==========  
​
​
    
# ====(可选)Redis====
    redis \
# =======END==========   # 结束后清空缓存
    && rm -f /var/cache/apk/*
​
# 设定工作目录
WORKDIR /app
​
# 将当前目录下所有文件拷贝到/app
COPY . /app
​
# 替换nginx、fpm、php配置
RUN cp /app/conf/nginx.conf /etc/nginx/conf.d/default.conf \
    && cp /app/conf/fpm.conf /etc/php7/php-fpm.d/www.conf \
    && cp /app/conf/php.ini /etc/php7/php.ini \
    
# =======redis配置覆盖==========
    && cp /app/conf/redis.conf /etc/redis.conf \    
# =======END==========
​
    && mkdir -p /run/nginx \
    && chmod -R 777 /app/runtime \
    
# =======商城要求的特定目录权限=======
    && chmod -R 777 /app/public \
    && chmod -R 777 /app/ \
# =======END==========
​
    && mv /usr/sbin/php-fpm7 /usr/sbin/php-fpm
​
# 暴露端口
EXPOSE 80# 容器启动执行脚本
CMD ["/bin/sh", "/app/run.sh"]
然后在同目录下新增.dockerignore文件,用于忽略无需构建的东西
.git
.dockerignore
Dockerfile*
composer*
container.config.json
LICENSE
README.md
(3)启动脚本run.sh制作
也就是把刚刚我们在找出来的脚本粘贴进去即可
#!/bin/sh
# 后台启动
php-fpm -D
# 关闭后台启动,hold住进程
nginx -g 'daemon off;'

#Think Workerman
/usr/bin/php /app/think workerman start --d
/usr/bin/php /app/think timer start --d

EXEC=/usr/bin/redis-server
CLIEXEC=/usr/bin/redis-cli
/usr/bin/redis-server /etc/redis.conf

3、(可选)composer依赖处理

去找个composer.phar放在根目录,然后更新一下即可,然后可以看到/vendor里面有新装的包

php composer.phar update

4、构建镜像

首先请确保你的开发环境有Docker

在根目录上,使用命令行运行

docker build -t crmeb-on-wxcloud:1.0 .

WXOPEN Club 内容图片

大概一分钟后,构建完成,跑一下

docker run -p 80:80 -d crmeb-on-wxcloud:1.0

全绿!过关

WXOPEN Club 内容图片

5、(额外)如果是第一次创建,可以在微信云托管连接控制台,然后把示例数据创建在云数据库上

WXOPEN Club 内容图片

可以看到,数据库连接成功,如果不成功,检查一下数据库外网是否放开,是否为非Root账号。

WXOPEN Club 内容图片

(二)云发布

1、发布前的测试

成功创建演示数据后,我们需要在上线前清空/public/install目录,最后在目录 建立install.lock,并在根目录下创建.env环境配置文件。

WXOPEN Club 内容图片

配置文件里面,把我们一些数据库连接写好,但这次数据库主机地址我们写内网的即可

APP_DEBUG = true

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 10.0.224.16
HOSTPORT = 3306
USERNAME = crmeb
PASSWORD = xeWmJ466f3
DATABASE = crmeb
PREFIX = eb_
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

[REDIS]
REDIS_HOSTNAME = 127.0.0.1
PORT = 6379
REDIS_PASSWORD = 
SELECT = 0

[QUEUE]
QUEUE_NAME = 322f1860c16e7

然后再次重复镜像构建过程,确保能跑即可,然后准备发布!

2、上云托管!

这里是大伙各显神通的地方了

  • 你可以在本地构建并发布镜像到镜像仓库
  • 不在本地构建,通过Git仓库建立工作流或者直接压缩文件上传
直接上传

这里演示直接压缩文件上传

WXOPEN Club 内容图片

进入云托管控制台,点击左侧“服务管理-服务列表”,新建服务,打开公网访问,然后选择“版本列表-新建版本”,选择一个自己喜欢的方式,这里选择“上传代码包”

WXOPEN Club 内容图片

通过Git仓库构建流水线
第一次选择仓库时,可能需要授权,授权后返回即可
建议勾选发布策略中的通过webhook触发构建,这样每次Git推送到仓库的时候就会触发构建

WXOPEN Club 内容图片

发布版本

服务构建完成后,直接发布版本,全量发布

WXOPEN Club 内容图片

两端同时跑通,大功告成!

WXOPEN Club 内容图片

3、(非必要仅为拓展)本地云调试开放接口服务

在Vscode里安装两款插件,下面会从安装到配置再到使用进行介绍:

Docker:Docker插件
Weixin Cloudbase Docker Extension - Visual Studio Marketplace:微信云托管本地调试插件
配置微信云托管调试插件

打开设置,搜索"wxcloud"进入配置页面,按照上面的信息进行配置

WXOPEN Club 内容图片

前往微信云托管控制台打开及配置云调试

WXOPEN Club 内容图片

安装完后重启vscode,在左侧栏打开Docker

WXOPEN Club 内容图片

然后我们进入业务容器的命令行体验一下无需鉴权信息cloudbase_access_token的请求!(这边偷懒,就从DockerDesktop进了敲指令也可)

WXOPEN Club 内容图片

开放接口调用成功!
这里如果调用失败,请返回上一步,检查控制台检查一下接口是否在云调用的白名单内

WXOPEN Club 内容图片


1 回复
juanyao
juanyao1 楼2 个月前

???