前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >部署Flask项目至远程服务器中的Docker容器内

部署Flask项目至远程服务器中的Docker容器内

作者头像
花猪
发布2023-03-08 17:33:36
1.4K0
发布2023-03-08 17:33:36
举报

前言

需求如标题,需要将Flask项目部署至远程服务器中的Docker容器内,并实现远程访问。本文将从零开始进行操作。

利用虚拟机(Ubuntu 20.04)模拟服务器:

  • 服务器(虚拟机):Ubuntu 20.04
  • 服务器ip:192.168.75.138
  • Docker容器:Ubuntu 23.04

操作

Docker容器创建并初始化

首先利用Xshell远程连接服务器

拉取Ubuntu 23.04的镜像

代码语言:javascript
复制
sudo docker pull ubuntu:23.04

建立容器

代码语言:javascript
复制
sudo docker run -it -d -p 9510:22 -p 12340:12340 --name flask_demo --shm-size 4g ubuntu:23.04 /bin/bash

容器id为:d900b1fc6b78b0a125ee37cabd5ee31b829075eeaa38a8df7e6e61fbf9cda601

说明:

启动容器

代码语言:javascript
复制
sudo docker container start d90

进入容器

代码语言:javascript
复制
sudo docker exec -it d90 bash

根据文章远程连接服务器中的Docker容器 | 花猪のBlog (cnhuazhu.top)建立外部与容器的ssh连接,如果不需要请忽略此步骤。

Flask项目环境搭建

从Anacoda官网www.anaconda.com下载Anaconda3(.sh安装包),并将其移至Docker容器内的/root目录下

安装Anaconda3

代码语言:javascript
复制
sh Anaconda3-2022.10-Linux-x86_64.sh

默认安装即可。

可以通过添加系统文件路径默认启动(base)虚拟环境,也可以通过如下命令快速启动:

代码语言:javascript
复制
source $HOME/anaconda3/bin/activate

创建名为flask_demo的虚拟环境:

代码语言:javascript
复制
conda create -n flask_demo python=3.7

激活该虚拟环境:

代码语言:javascript
复制
conda activate flask_demo

使用pip安装如下依赖:

代码语言:javascript
复制
Flask==1.1.4
Flask-Cors==1.10.0
Flask-Migrate==2.0.0
Flask-Script==2.0.6
Flask-SQLAlchemy==1.0
Jinja2==2.10.1
MarkupSafe==2.0.1
SQLAlchemy==1.4.18
Werkzeug==1.0.1

注意:

  • 经测试这些依赖版本不冲突,且可以满足基本的数据库操作。
  • 安装时可以更换镜像源,或者直接在其后添加 -i 参数,如: pip install Flask==1.1.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 按照以上方式安装依赖会报以下错误:

ModuleNotFoundError: No module named 'flask.ext' 主要原因是新版的flask抛弃了flask.ext这种引入扩展的方法,需要更改为:flask_扩展名 需要根据报错路径将flask_sqlalchemy依赖中__init__.py文件的第30行做如下修改:

启动Flask项目并访问

首先将一个Demo项目传送至容器中的/home路径下,并进入该项目:

app.py文件如下:

代码语言:javascript
复制
app = create_app()
CORS(app, supports_credentials=True)  #配置全局路由

manager = Manager(app=app)

migrate = Migrate(app=app, db=db)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

本项目是使用manager.run()的方式启动。

编写一个简单的视图文件:

代码语言:javascript
复制
test_bp = Blueprint('test', __name__)

# 测试
@test_bp.route('/test', methods=['GET','POST']) # 正常走的GET请求
def test():
    if request.method == 'POST':
        print("收到并返回post请求")
        return "post请求"
    if request.method == 'GET':
        print("收到并返回get请求")
        return "get请求"

启动项目:

代码语言:javascript
复制
flask run -h 0.0.0.0 -p 12340

说明:

  • 访问ip必须设置为:0.0.0.0
  • 端口需设置为之前Docker容器的映射端口

在外部浏览器访问:http://192.168.75.138:12340/test服务器ip:容器映射端口),便可以访问该项目。

后记

Flask依赖更新的很难受,各种版本不兼容,找了好多帖子,试了很多遍才最终确定。记录可行依赖也是此篇的目的之一。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 操作
    • Docker容器创建并初始化
      • Flask项目环境搭建
        • 启动Flask项目并访问
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档