Flask服务部署与简单内网穿透
前言
最近学习部署的时候,想到深度学习里面通常用的部署方法是flask
做服务端,然后使用nginx
做负载均衡,貌似也能做内网穿透。不过我不太懂负载均衡,只想利用本地电脑搭建一个简单的服务器,实现外部调用API服务的功能。所以本文会介绍到的内容有:
flask
服务端与客户端的通信ngrok
简单地做内网穿透,使得非同一个局域网的电脑能够通过公网IP访问服务
国际惯例,参考博客:
flask官方文档
ngrok官方入口
ngrok的官方文档
Flask
服务端和客户端
基于flask
写一个上传文件的功能,不管你传输的是图像还是文字,都可以用这个代码接收,然后处理完毕再返回一些信息,比如深度学习的预测结果或者状态信息之类的。
本博客不介绍flask
的使用方法,可以去flask官方快速入门章节看到非常详细的教程。
服务端
仿照flask官方上传文件的例子,直接写如下内容:
- 路由:指示通过什么接口(ip+端口+入口)能够访问提供的功能函数
- 功能:接收客户端信息,处理,返回结果信息
@app.route('/upload',methods=['POST'],strict_slashes=False)
def api_upload():file_dir=os.path.join(basedir,app.config['UPLOAD_FOLDER'])if not os.path.exists(file_dir):os.makedirs(file_dir)f=request.files["myfile"] # 从表单的myfile字段获取文件,myfile为该表单的name值fname = request.form["name"]if f and allowed_file(fname): # 判断是否是允许上传的文件类型f.save(os.path.join(file_dir,fname)) #保存文件到upload目录 print(url_for('uploaded_file',filename=fname))return jsonify({"succeed":'True',"msg":"upload succeed"})else:return jsonify({"succeed":'False',"msg":"upload failed"})
这里的操作是:
- 路由:通过本地ip+端口+
/upload
访问此服务 - 功能:读取服务端发送的文件和文件名,然后保存在本地,返回状态
【注】
额外说一句,有时候我们要修改函数内容,就不得不重启服务,但是如果我们使用
app.run(debug=True,host='0.0.0.0',port=5555)
将debug
设置为True
,就可以不用重启服务,每次修改保存完毕后,服务会自动重启。
有时候会出现一句话:
WARNING: This is a development server. Do not use it in a production deployment.Use a production WSGI server instead.
改成:
serve(app, host="0.0.0.0", port=5555) #product
就没有这个warning
了
客户端
官方新建了一个html
作为服务端,我们也可以使用python
写一个客户端
实现的功能就是:
- 读取文件为二进制数据,并获取文件名
- 将文件和文件名发送到服务器
如果想要访问你的服务的人和你在同一个局域网,可以通过ipconfig
先看看自己的ip
地址,以下内容均假设我的是192.168.3.10
使用html作为客户端
这样就在服务端写一个html
的入口,用户访问这个端口的时候,显示一个上传界面,然后进行通信
@app.route('/test/upload')
def upload_test():return render_template('upload.html')
但是需要注意,这个html
存在一个名为templates
文件夹中
<form id="form1" method="post" action="/upload" enctype="multipart/form-data"><div><input id="File1" type="file" name="myfile"/><input id="name" type="text" name="name"/><input type="submit">提交</input></div>
</form>
打开服务端以后,直接在电脑上输入http://192.168.3.10:5555/test/upload
就可以进入传输界面
使用python写客户端
基本就是POST
通信方法
def upload_file(file_path):file_bin = open(file_path,'rb').read()upload_content = {"myfile":file_bin}upload_name = {"name":os.path.basename(file_path)}r = requests.post(REST_API_URL,data=upload_name,files=upload_content).json()if(r['succeed']):print("success")else:print("failed")
这里有一个REST_API_URL
参数,代表的是访问服务器的地址、端口、入口,所以本文的
REST_API_URL = 'http://192.168.3.10:5555/upload'
ngrok
内网穿透
有时候用户和你不在同一个局域网是无法通过上述ip访问到你的服务的(如果用"0.0.0.0"可以让用户访问你的服务,则无需穿透),所以需要将内网提供服务的端口映射到外网,网上有很多内网穿透的工具和教程,我只是Google
了一下ngrok
,然后进入第一个网址,看着像官方的,然后引入眼帘的就是这样一张图
就是这么简单,直接去下载你电脑对应的可执行文件,然后直接输入
ngrok http 5555
pause
这就是将内网的5555
端口映射到了http://48a7fd5eedbb.ngrok.io
,比如上面的那个html
网页,我们可以通过任意一台联网电脑访问,访问地址为
http://48a7fd5eedbb.ngrok.io/test/upload
后记
做算法的,能简单的快速验证提供API能力就行啦,至于什么服务分发,交给开发折腾就行。我问了一下身边的大佬,虽然网上说nginx
可以做服务穿透,但是它经常用于服务分发,比如有100个用户访问同时同一个服务,部署在一台电脑上可能会炸了,或者造成等待,那么我们可以通过nginx
把这些请求分发到不同服务器上去计算。后续有时间再研究。
完整的python
脚本实现放在微信公众号的简介中描述的github中,有兴趣可以去找找,同时文章也同步到微信公众号中,有疑问或者兴趣欢迎公众号私信。
Flask服务部署与简单内网穿透相关推荐
- 在安卓上部署服务器 - 解决内网穿透
原文地址:在安卓上部署服务器 - 解决内网穿透 本系列其他文章: 在安卓上部署服务器 在安卓上部署服务器 – 应用程序的配置 在安卓上部署服务器 – 解决内网穿透问题 在安卓上部署服务器 – 部署脚本 ...
- 简单内网穿透-利用树莓派-低成本建站 无需公网ip
很多人都想试试自己建站玩一玩 (比如博客.自建网盘.远程下载等),但家里宽带没公网 IP,特意买台服务器又显得浪费.那么有没成本小.可玩性高.又能长期稳定使用的方案呢? 其实,免费的内网穿透工具 (如 ...
- 免费搭建虚拟机Linux服务器,附带部署项目和内网穿透教程(亲测有效)cd
最近在学习Linux服务器上进行项目部署,大家都知道在云服务器上可以部署项目,这可以使得在任何地方都可以访问到项目.但购买服务器是要收费的,这使得我十分香菇....但是还有办法的,在VMware虚拟机 ...
- Ubuntu内网穿透搭建网站:设置跳转本地网页服务 6/17
系列文章 Ubuntu内网穿透搭建网站:建立本地数据库 1/17 Ubuntu内网穿透搭建网站:安装WordPress 2/17 Ubuntu内网穿透搭建网站:设置WordPress连接数据库 3/1 ...
- 如何升级cpolar内网穿透的套餐服务级别
系列文章 如何升级cpolar内网穿透的套餐服务级别 升级cpolar内网穿透能够获得的功能 cpolar作为一款安全高效的内网穿透软件,拥有众多应用场景,从网站开发的客户预览和测试.个人本地网页发表 ...
- 基于FRP反向代理工具实现内网穿透攻击
文章目录 前言 FRP反向代理 内网环境搭建 服务端的配置 客户端的配置 FRP内网穿透 FRP进阶使用 fscan内网神器 总结 前言 当我们拿下目标单位的一台外网服务器后,需要借助外网服务器作为跳 ...
- frp内网穿透—将kali代理在公网中进行渗透测试
文章目录 前言 Frp简介 准备工具 实现内网穿透 frp服务端配置 frp客户端配置 测试 HTTP服务测试 ssh服务测试 反弹shell测试 注意 前言 由于工作常需要用到kali,但是公网服务 ...
- ngrok 内网穿透+实现远程桌面
最近公司电脑的teamviewer经常被中断,基本上没办法使用了.而且破解越来越难,破解后没多久又被检测到.所以我想着换另一种方案来实现远程控制,公司内网服务器没有公网ip,所以只能进行内网穿透.内网 ...
- 内网穿透之使用神卓互联V8.5.9客户端访问用友ERP系统
由于工作原因平时经常帮客户安装神卓互联系列软件,最近神卓互联官方发布了内网穿透私有云V8.5.9版本的客户端,界面变化还是比较大的,从以前黑色变成了白色,按钮和布局也发送了改变,有必要写一篇记录一下, ...
最新文章
- /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference toTIFFIsTiled@LIBTIFF_4.0'
- 第8天:我用AI算法造了一些“网红”
- matlab常用命令参考
- 机器学习-算法背后的理论与优化(part5)--结构风险最小(下)
- ASP.NET Core依赖注入最佳实践,提示技巧
- thread.sleep是让哪个线程休眠_Java多线程:多线程基础知识
- powerquery加载pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了
- Google DeepMind 团队发布新算法,下一个被 AI 虐哭的是谁?
- 他山之石 可以攻玉-《海量数据库解决方案I》
- ios人脸识别_适用于Android和iOS的10种最佳人脸识别应用程序
- 【色彩管理】ICC曲线制作教程
- JAVA中RandomAccess接口
- 【黑苹果装机实践】从硬件选择到系统安装
- DRV8872直流电机驱动芯片简要的使用说明
- 模拟SPI驱动SD卡
- 最大公共字符串,最大公共子序列,编辑距离,myers等算法
- 计算机专业群名有内涵,好听的群名字来了 高雅有内涵
- 基于(plc)portal v14的三级传送带设计
- java里什么是三目表达式_浅谈Java三目运算
- [猿来小课]Python开发入门第三讲:Python的安装
热门文章
- java 开源so库_NDK使用之引用.so开源库
- [蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)
- [蓝桥杯]算法提高 道路和航路(spfa+deque+快读优化)
- 修改date格式 java_如何用Java更改日期格式?
- 免费时代的4种销售方式
- linux ubuntu ssh,Linux(Ubuntu)安装ssh服务
- oracle odbc 设置_Oracle删除不干净怎么办?
- 深度学习之卷积神经网络(10)CIFAR10与VGG13实战
- mysql group 分页_【MySQL】条件查询之排序聚合分组分页查询
- html修改原生checkbox选中的颜色_[三分钟小文]前端性能优化-HTML、CSS、JS部分