毕设的一部分是做一个微信小程序。需要公网IP,因此需要购买云服务器,并且申请域名。正赶上华为云搞活动,结结实实的薅了一把羊毛。(华为云操作教程参考我的另一篇博客:https://blog.csdn.net/abcd740181246/article/details/103381183。当然希望大家货比三家,看看哪个平台性价比高买哪个。)

后端小白经过摸索,终于完成了小程序的后台搭建,并做了一个小小的微信小程序demo。下面将详细记录整个搭建流程。

一、华为云端口放通

注意:若购买的腾讯云服务,是不需要这一步骤的。腾讯云是默认放通的,无需操作。但迁移到华为云之后,发现其他主机ping不通华为云(ICMP未通),并且无法访问域名(默认的80端口未开通)。因此需要手动放通端口才行。

1. 打开“控制台”——“弹性云服务器”,界面如下。点击服务名称进入。

2. 更改安全组规则

3. 选择“入方向规则”,将协议端口一键放通。

二、后台搭建

参考链接:https://cloud.tencent.com/developer/article/1453563 (参考链接的有些步骤可以省略,具体请往下看)

1.准备域名、SSL证书、服务器

准备域名、SSL证书、服务器。在华为云的控制台添加解析记录。这一步骤不再详述。

2. 配置反向代理

(1)安装 Nginx

利用Nginx作为反向代理,搭建https服务。

在 Ubuntu 上,可直接使用 apt-get 来安装 Nginx

sudo apt-get install nginx -y

安装完成后,使用 nginx 命令启动 Nginx:

sudo /etc/init.d/nginx start

此时访问  华为云的公网IP 可以看到 Nginx 测试页面

(2)配置 HTTPS 反向代理

修改 /etc/nginx 目录的读写权限

sudo chmod a+rw /etc/nginx

将之前下载的 SSL 证书(解压后 Nginx 目录分别以 crt 和 key 作为后缀的文件)通过拖动到左侧文件浏览器 /etc/nginx 目录的方式来上传文件到服务器上。

如何上传 SSL 证书到 /etc/nginx 目录

在 /etc/nginx/conf.d 目录创建 ssl.conf 文件

cd /etc/nginx/conf.d
sudo touch ssl.conf
sudo chmod a+rw ssl.conf

将 ssl.conf 文件修改为如下内容

示例代码:/etc/nginx/conf.d/ssl.conf

server {listen 443;  #监听443端口,这个是ssl访问端口server_name www.sybil-chocolate.cn; # 改为绑定证书的域名# ssl 配置ssl on;ssl_certificate 1_www.sybil-chocolate.cn_bundle.crt; # 改为自己申请得到的 crt 文件的名称ssl_certificate_key 2_www.sybil-chocolate.cn.key; # 改为自己申请得到的 key 文件的名称ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {proxy_pass http://127.0.0.1:5000; #默认端口为5000.可以根据flask后台做对应修改。}}server{listen 80;  # 80端口是http正常访问的接口server_name www.sybil-chocolate.cn;rewrite ^(.*) https://$host$1 permanent; # https全加密处理,在访问http的时候自动跳转到https}

按 Ctrl + S 保存配置文件,让 Nginx 重新加载配置使其生效:

sudo nginx -s reload

此时,访问绑定的域名 www.example.com,应该可以看到如下结果,表示反向代理设置成功。但还没有启动后台程序,因此返回502。

3. 基于Flask搭建后台服务

由于我们的程序是python语言编写,因此选用了flask框架作为我们的后端框架。以最简单的hello world 为例。

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':# app.run('127.0.0.1', port=5000, debug=True)  app.run(debug=True)   //默认为 127.0.0.1:5000, 可以进行修改

若没有上述的反向代理配置过程,在浏览器中输入 127.0.0.1:5000, 即可在页面中显示 “hello world”了。但只能在当前主机访问。

配置了反向代理之后,浏览器中输入域名 https://www.example.com,可达到同样的显示效果,可供所有人访问

至此,最naive的后台搭建成功。

4. Gunicorn+gevent配置

作为一个轻量级的后端框架,Flask仅完成接收请求并返回执行结果的过程。但是用于生产环境无论是处理高并发还是鲁棒性都有所欠缺,一般会配合WGSI容器来进行生产环境的部署。gunicorn结合gevent,是一种比较常用的部署方式。

(1)安装gunicorn和gevent

pip install gunicorn
pip install gevent

 (2)启动gunicorn

简单地,gunicorn可以通过

gunicorn -w 4 -b 127.0.0.1:5000 test:app

启动一个Flask应用。其中,

  • -w 4是指预定义的工作进程数为4,
  • -b 127.0.0.1:5000指绑定地址和端口
  • test是flask所在的python文件,app则是flask应用程序实例

(3)gunicorn配置文件

gunicorn有非常多的配置项,因此通常会写成一个配置文件来进行配置。我所用项目的配置项如下:

# 并行工作进程数
workers = 3
# 指定每个工作者的线程数
threads = 1
# 监听内网端口5000
bind = '127.0.0.1:5000'
# 设置守护进程,将进程交给supervisor管理
daemon = 'true'
# 工作模式协程
worker_class = 'gevent'
# 设置最大并发量
worker_connections = 2000
# 设置进程文件目录
pidfile = '/var/run/gunicorn.pid'
# 设置访问日志和错误信息日志路径
accesslog = 'log/gunicorn_acess.log'
errorlog = 'log/gunicorn_info.log'
# 设置日志记录水平
loglevel = 'info'

这样,可以将gunicorn的日志输出至 log/gunicorn_info.log 中,便于查看。若只想打印报错信息,只需修改loglevel = 'error'即可。

(4)合并Flask和gunicorn的日志输出

参考链接:https://zhuanlan.zhihu.com/p/36909560

我的路由入口代码如下:

@app.route('/vectorization', methods=['POST'])
def vectorization():app.logger.info('Vectorization Start!')img = request.files.get('file')img_path = images_path + "cartoon/" + time.strftime('%Y%m%d_%H-%M-%S_', time.localtime(time.time())) + str(round(round(random.random(),4)*10000)) + ".png"img.save(img_path)seg_path=img_path.replace(".png","_s.png")sketch_path=img_path.replace(".png","_t.png")svg_path=img_path.replace(".png","_svg.svg")gen_svg(img_path,seg_path,sketch_path,svg_path)app.logger.info("img_path:"+img_path+'\n'+"svg_path:"+svg_path)app.logger.info('Vectorization Succeed!')return svg_path.replace(images_path,"")

该文件中添加如下语句:

if __name__ != '__main__':gunicorn_logger = logging.getLogger('gunicorn.error')app.logger.handlers = gunicorn_logger.handlersapp.logger.setLevel(gunicorn_logger.level)

如此即可将Flask的日志也打印至 log/gunicorn_info.log中。如下:

[2019-12-09 19:16:13 +0800] [9225] [INFO] Starting gunicorn 19.4.5
[2019-12-09 19:16:13 +0800] [9225] [INFO] Listening at: http://127.0.0.1:5000 (9225)
[2019-12-09 19:16:13 +0800] [9225] [INFO] Using worker: gevent
[2019-12-09 19:16:13 +0800] [9228] [INFO] Booting worker with pid: 9228
[2019-12-09 19:18:01 +0800] [9228] [INFO] Parent changed, shutting down: <Worker 9228>
[2019-12-09 19:18:01 +0800] [9228] [INFO] Worker exiting (pid: 9228)
[2019-12-09 19:18:04 +0800] [10011] [INFO] Starting gunicorn 19.4.5
[2019-12-09 19:18:04 +0800] [10011] [INFO] Listening at: http://127.0.0.1:5000 (10011)
[2019-12-09 19:18:04 +0800] [10011] [INFO] Using worker: gevent
[2019-12-09 19:18:04 +0800] [10014] [INFO] Booting worker with pid: 10014
[2019-12-09 19:18:09 +0800] [10014] [INFO] Vectorization Start!
[2019-12-09 19:18:11 +0800] [10014] [INFO] img_path:/root/Vec_Server/static/cartoon/20191209_19-18-09_8533.png
svg_path:/root/Vec_Server/static/cartoon/20191209_19-18-09_8533_svg.svg
[2019-12-09 19:18:11 +0800] [10014] [INFO] Vectorization Succeed!
[2019-12-09 22:06:26 +0800] [10014] [INFO] Vectorization Start!
[2019-12-09 22:06:29 +0800] [10014] [INFO] img_path:/root/Vec_Server/static/cartoon/20191209_22-06-26_792.png
svg_path:/root/Vec_Server/static/cartoon/20191209_22-06-26_792_svg.svg
[2019-12-09 22:06:29 +0800] [10014] [INFO] Vectorization Succeed!

至此,完整的微信小程序后端搭建完毕。

三、小程序部署

笔者的小程序实现的功能为:拍照或从相册中选择图像,上传至服务器,进行图像风格化,并将风格化后的图像在小程序端展示,并提供保存功能。

目前小程序仍在制作中,完成后会release小程序端和客户端的关键代码。

微信小程序:Flask+Gunicorn+gevent后端搭建(基于华为云)与前端部署相关推荐

  1. 《微信小程序案例10》后端服务器与mysql数据库与前端微信小程序

    一.服务器配置mysql 1.下载数据库模块,直接在egg服务器里面下载:npm i --save egg-mysql 2.vscode打开服务器文件夹config里面的plugin.js ,开启刚刚 ...

  2. 【项目实战课】微信小程序图像识别模型前后端部署实战

    欢迎大家来到我们的项目实战课,本期内容是<微信小程序图像识别模型前后端部署实战>.所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解. ...

  3. 微信小程序之-Windows服务器端PHP搭建全攻略

    微信小程序之-Windows服务器端phpstudy搭建详细攻略 今年八月初接到一个项目,开始着手做一个有关部门运动排行的微信小程序.由于是初次接触这个领域,所以查了很多资料,也走了很多弯路.在此记录 ...

  4. 【小程序源码】检讨书生成微信小程序工具源码-安装搭建简单

    对于经常写检讨的小伙伴来说,福音来了 因为这是一款检讨书生成小程序 所以再也不用为了写检讨而烦恼了哦 支持自定义字数下线,主题自定义 支持多种类型检讨比如:学生党的,男朋友,领导演讲稿,共青团申请书等 ...

  5. 头像动漫化——微信小程序+Flask后端调用AnimeGanV2

    之前写了篇文章<超越前作,实现动漫风格迁移--AnimeGANv2>,里面提到使用AnimeGANv2实现人物动漫化,生成一个独一无二对自己价值珍贵的头像.不过操作起来有亿点点麻烦,所以希 ...

  6. 万粉博主推荐,微信小程序 +Flask 后端调用 AnimeGanV2

    作者 | Yunlord 博客 | Yunlord 做一个小程序,直接在手机端就能一键生成专属于自己的动漫头像,下面是展示效果!!! 核心功能设计 该小程序想要实现的是将微信头像或者选择相册中的照片动 ...

  7. 小程序服务器搭建前后端交互,手把手带你搭一个简单的微信小程序(包括前后端)...

    开发小程序除了大家能看到的客户端,前端小程序是如何与后端服务器进行数据交互的呢? 本文将通俗易懂的讲一下.这里以nodejs为例来进行讲解 1.首先要在服务器上安装nodejs服务器: ​ wget ...

  8. 2023全新纯净版本知识付费微信小程序源码_附搭建教程_亲测可用

    介绍: 主要功能 会员系统,用户登录/注册购买记录 收藏记录 基本设置 后台控制导航颜色 字体颜色 标题等设置 流量主广告开关小程序广告显示隐藏 广告主审核过审核 资源管理 后台可以添加5种类型资源灵 ...

  9. 微信小程序以SpringBoot作为后端开发遇到的问题及解决思路总结

    背景 关键字:微信小程序.SpringBoot 项目.腾讯云服务器.SSL.HTTPS.Tomcat 注:本文记录了一个菜鸟解决问题的思路,觉得啰嗦可以略过,解决方案在文末.技术不精,文章有错误烦请指 ...

最新文章

  1. GNU make 和 makefile
  2. mq系列传感器的程序_消息中间件(一)MQ详解及四大MQ比较
  3. go get 失败 no go files in_Go 每日一库之 dig
  4. centos6.x redhat6.x 升级openssh8.7
  5. 关于Hystrix的几个问题
  6. Tablet UI模式: 中心舞台
  7. ionic 父子组件传值
  8. 审计文件服务器的5个核心要素
  9. html文件变成巨大,巨大的JavaScript HTML5 blob(从大ArrayBuffers)在客户端构建一个巨大的文件...
  10. 《JavaScript高级程序设计》阅读笔记(十六):javascript检测浏览器和操作系统-detect.js...
  11. 电动汽车动力系统整车仿真模型,具有双向DCDC变换器实现能量反馈,带异步电机仿真,应用最大转矩电流比控制加独特的弱磁控制策略
  12. JAVA输入/输出流详细讲解
  13. 20170216.双目摄像机标定参数说明
  14. 大数据必学语言Scala(三十一):scala面向对象 特质(trait)
  15. 中位数/平均数/众数/方差/标准差
  16. 逻辑赋值(Logical Assignment)
  17. 信锐交换机配置_信锐无线AC,响应网监规定,助力连接安全
  18. Python3,1行代码,制作GUI图形界面,果然被种草了。
  19. js实现点击按钮图片自动切换_☆往事随風☆的博客
  20. 基于 Docker 搭建 MySQL 一主两从复制

热门文章

  1. 【宝塔面板建站】04. 设置消息通道,通过邮箱、钉钉、企业微信等形式动态提供网站信息(保姆级图文)
  2. 河北欧格教育:店铺权重的类型
  3. vue中 使用element-ui 图标和阿里字体图标结合使用
  4. 编写python手机充值代码_基于Python的天聚人合加油卡充值接口调用代码实例
  5. 牛顿法及Python实现
  6. 3G 4G 5G中的网络安全问题——文献汇总
  7. 视频教程-CCNP 思科认证网络工程师(美女讲师版)-思科认证
  8. 显卡风扇太吵_太吵了
  9. 伽马分布的期望与方差
  10. Coldfusion 2016出现The error occurred in scheduletasks.cfm: line 188