赞
踩
微信小程序向后台发送请求,需要https+域名。
域名在阿里云买的,服务器在腾讯云。(一开始没注意,最好还是买在一个地方吧)
购买域名->域名ICP备案->腾讯云申请一年免费的SSL证书-->域名解析、服务器部署SSL证书->后端项目部署到云服务器上->前端小程序代码上传、审核
去阿里云或腾讯云买一个域名。阿里云的话,需要提前填个信息模板,然后审核,大概要几小时。
然后不要着急解析。
先去对域名进行ICP备案,先是腾讯云那边审核(1-2天),然后送到工信部审核(15天)。
按照指示,先悬挂网站备案号。(PS:我也不清楚,微信小程序如果只是用一下域名,不做网站,要不要进行后面的网站备案和公安备案,反正我弄了一下)
- <div style="position:fixed; bottom: 20px; text-align: center">
- <a href="https://beian.miit.gov.cn/" target="_blank">你的网站备案号</a>
- </div>
- # 重启一下flask应用和nginx
- systemctl stop flask
- systemctl start flask
- systemctl restart nginx
再进行公安备案(前提是你的网站能通过域名正常访问)。反正就是填各种信息,然后等审核。(大概1-2个工作日)
审核通过之后,点击网站详情,根据指示下载备案图标,复制备案HTML代码添加到网站主页。(我的网页是用Flask开发的,备案图标应放于static目录中,引用格式:/static/xx.png)
- # 重启一下flask应用和nginx
- systemctl stop flask
- systemctl start flask
- systemctl restart nginx
使用ssl证书实现https请求。腾讯云申请一年免费的SSL证书。
①首先需要手动为域名添加一条解析记录。(由于我在阿里云上买的域名,所以在阿里云上添加的解析记录)。
②验证完了,等审核(很快,几分钟),审核完了证书就可以下载了。此时域名和SSL已绑定。
可以看到,绑定了两个域名,一个是主域名xxx,一个是主域名下面的子域名www.xxx
①分别对主域名xxx和子域名www.xxx进行解析
②Nginx 服务器 SSL 证书安装部署
参考官方文档 链接
下载证书,文件内容:
xxx.crt
证书文件
xxx.pem
证书文件(可忽略该文件)
xxx.key
私钥文件
xxx.csr
CSR 文件(CSR 文件是申请证书时系统在线生成的,提供给 CA 机构。安装时可忽略该文件)
利用Xshell连接服务器,利用rz指令将 xxx.
crt
证书文件和 xxx.key
私钥文件上传到 Nginx 服务器的/etc/nginx
目录(Nginx 默认安装目录)下。
修改nginx.conf配置文件。(nginx版本为1.18.0)
在我的项目中,修改的是flask.conf文件:vi /etc/nginx/conf.d/flask.conf
由于直接输入域名默认还是用的http,所以要配置重定向,让HTTP 自动跳转 HTTPS
- server {
- # SSL 默认访问端口号为 443
- listen 443 ssl;
- # 请填写绑定证书的域名(一个主域名、一个子域名)
- server_name xxx www.xxx;
- # 请填写证书文件的相对路径或绝对路径
- ssl_certificate /etc/nginx/designtuesday.top_bundle.crt;
- # 请填写私钥文件的相对路径或绝对路径
- ssl_certificate_key /etc/nginx/designtuesday.top.key;
- ssl_session_timeout 5m;
- # 请按照以下协议配置
- ssl_protocols TLSv1.2 TLSv1.3;
- # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
- ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
- ssl_prefer_server_ciphers on;
- location / {
- include proxy_params;
- proxy_pass http://127.0.0.1:5000;
- }
- }
-
- server {
- listen 80;
- server_name xxx www.xxx; # 一个主域名、一个子域名
- return 301 https://www.xxx;
- }
然后把nginx.conf配置文件中关于ssl的配置注释掉。
- nginx -t // 测试配置文件有没有问题
- nginx -s reload // 重载Nginx配置文件
- systemctl restart nginx // 重启nginx
③效果(服务器的443端口要放开)
- sudo su - # 切换为root用户
- # 安装mysql
- apt install mysql-server mysql-client libmysqlclient-dev -y
- # 登录,不用输入password,直接回车就能进去
- mysql -u root -p
- # 看一下root用户的密码,默认使用插件保存了密码
- select user,Host, plugin from mysql.user;
- # 修改root用户密码
- mysql>update mysql.user set plugin = 'mysql_native_password' where user = 'root' and host='localhost';
- mysql>use mysql;
- mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
- mysql>flush privileges;
- mysql>exit;
-
- mysql -u root -p
- # 首先创建数据库
- create database fruit_veg_dish;
- # 进入数据库
- use fruit_veg_dish;
- # 创建info表
- create table info
- (
- id INT(10) primary key,
- category VARCHAR(100),
- description VARCHAR(1000)
- );
- # 退出
- exit;
- rz # 上传项目
- unzip xx # 解压
- python3 -m venv final # 在项目根目录下创建虚拟环境final
- source final/bin/activate # 激活虚拟环境
- # 安装项目依赖
- pip install wheel gunicorn flask gevent pillow torch torchvision pymysql xlrd==1.2.0 flask_cors opencv-python
- # 执行以下脚本,往数据库中导入数据
- python Import_Data_Into_Database.py
Import_Data_Into_Database.py
- # 我希望不仅能识别出种类名称,还要能够展示对应种类的介绍信息。
- # 首先收集每个种类对应的介绍信息,整理成一个excel表格,并将excel表格导入到数据库中。
- import pymysql # pip install pymysql
- import xlrd # 需要指定安装旧版本pip install xlrd==1.2.0
-
- """
- 一、连接mysql数据库
- """
- # 打开数据库连接
- conn = pymysql.connect(
- host='localhost', # MySQL服务器地址
- user='root', # 用户名
- password='xxxx', # 密码
- charset='utf8',
- port=3306, # 端口
- db='fruit_veg_dish', # 数据库名称
- )
- # 使用cursor()方法获取操作游标
- c = conn.cursor()
-
- """
- 二、读取excel文件
- """
- FilePath = './info.xlsx'
-
- # 1.打开excel文件
- wkb = xlrd.open_workbook(FilePath)
- # 2.获取sheet
- sheet = wkb.sheet_by_index(0) # 获取第一个sheet表
- # 3.获取总行数
- rows_number = sheet.nrows
- # 4.遍历sheet表中所有行的数据,并保存至一个空列表cap[]
- cap = []
- for i in range(rows_number):
- x = sheet.row_values(i) # 获取第i行的值(从0开始算起)
- cap.append(x)
-
- # print(cap)
- """
- 三、将读取到的数据批量插入数据库
- """
- for item in cap:
- no = int(item[0])
- category = item[1]
- description = item[2]
- # 格式化字符串,对sql进行赋值
- sql = "insert into info(`id`,`category`,`description`) value ({},'{}','{}')"
- c.execute(sql.format(no, category, description))
- conn.commit()
- conn.close()
- print("插入数据完成!")
瞅一眼数据库。没问题。
- mysql -u root -p
- use fruit_veg_dish;
- select * from info;
配置Gunicorn并为flask应用创建一个Systemd Service File,使用Systemd来管理
- # 退出虚拟环境
- deactivate
- # 新建flask2.service
- vi /etc/systemd/system/flask2.service
[Unit]
Description=Gunicorn instance to serve Flask
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/root/Graduation_Design_v3.2/backend
Environment="PATH=/root/Graduation_Design_v3.2/final/bin"
ExecStart=/root/Graduation_Design_v3.2/final/bin/gunicorn --bind 0.0.0.0:3000 app:app
[Install]
WantedBy=multi-user.target
- # 设置文件使用者和使用者组,和上面flask.service中的User和Group对应
- # -R参数表示指定目录及其子目录下的所有文件
- chown -R root:www-data /root/Graduation_Design_v3.2/backend
- # 设置项目读、写、执行的权限
- chmod -R 775 /root/Graduation_Design_v3.2/backend
- # 重载systemd daemon(守护进程)
- systemctl daemon-reload
- # 启动flask应用并设置开机自启
- systemctl start flask2
- systemctl enable flask2
- # 查看flask应用的状态
- systemctl status flask2
配置Nginx,为flask项目做反向代理(443端口给上面那个网站,453端口用来对接微信小程序)
vi /etc/nginx/conf.d/flask2.conf
- server {
- # SSL 默认访问端口号为 453
- listen 453 ssl;
- # 请填写绑定证书的域名
- server_name xxx;
- # 请填写证书文件的相对路径或绝对路径
- ssl_certificate /etc/nginx/xxx_bundle.crt;
- # 请填写私钥文件的相对路径或绝对路径
- ssl_certificate_key /etc/nginx/xxx.key;
- ssl_session_timeout 5m;
- # 请按照以下协议配置
- ssl_protocols TLSv1.2 TLSv1.3;
- # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准
- ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
- ssl_prefer_server_ciphers on;
- location / {
- include proxy_params;
- proxy_pass http://127.0.0.1:3000;
- }
- }
- nginx -t # 测试nginx配置文件有无语法错误
- systemctl restart nginx # 重启nginx
在微信小程序管理页面中配置合法域名
刷新微信开发者工具
开启域名,https校验
自行测试效果(服务器的453端口要打开,修改小程序中发送请求的url为https+域名)
在微信开发者工具上直接上传代码。然后就是填信息,等审核。(不到一天)
审核完了就发布,发布之后不能立马搜到,得过段时间(几个小时)。下载小程序码如下图。
提交审核之前可利用体验版本进行效果预览。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。