部署 Flask 应用
前言¶
Flask 是使用 Python 作为后端语言的 Web 微框,旨在帮助开发者快速开发出一个小型网站。个人示例项目就采用了 Flask 框架,前端直接使用 Flask 自带的 Jinja2 进行渲染,数据库采用 MySQL。项目地址 YunJinWeb,下面为以此项目为 demo 进行云服务器部署的过程
远程连接服务器¶
服务器信息
连接方法
- 方法一:利用阿里云自带的服务器连接入口,远程连接服务器。输入 username 和 password
- 方法二:使用 MobaXterm 端口连接工具并使用
yum update
命令更新全局软件。输入 username 和 password
配置 MySQL¶
(1) 放通端口¶
服务器放通端口 3306
(2) 安装 MySQL 并启动¶
CentOS:Linux 安装 mysql8.0(官方教程!)
Ubuntu:在Ubuntu 22.04 LTS 上安装 MySQL两种方式:在线方式和离线方式
(3) 配置 MySQL¶
-
在服务器中连接 MySQL
-
重置密码
-
使用数据库
-
允许远程登录数据库
-
刷新更新配置
(4) 构造数据库信息¶
由于数据库相关的资源已经被我存储在了本地 Windows,故直接在本地开发环境中利用 DataGrip 数据库管理工具将相应的信息复制到这台服务器的 MySQL 数据库中即可。
配置 Nginx¶
(1) 放通端口¶
服务器安全组放通 80 端口
(2) 安装 Nginx 并启动¶
进入 nginx 官网 并找到以下内容:
可以通过 wget 命令下载压缩包
也可以直接通过 MobaXterm 拖拽上传服务器,解压到当前目录下并进入 nginx 文件夹
配置 nginx 并编译安装。
Ubuntu 需要额外手动安装 Nginx 的依赖库,详见 ubuntu下安装nginx时PCRE库、zlib库、OpenSSL库的安装
进入 /usr/local/nginx-1.24.0/sbin/ 目录,启动 nginx
{% fold info @解决:80 端口被占用的问题 %}
解决:端口被占用的问题
解决方案:
killall -9 nginx
杀掉 nginx 的进程,然后重启最终结果:然后浏览器通过 http 协议默认的 80 端口访问公网 ip,就可以看到欢呼雀跃的一幕
{% endfold %}
配置 Python¶
(1) 安装 python¶
命令集合
vim 的编辑指令
(2) 安装 python 环境管理包¶
安装 python 虚拟环境管理依赖
配置虚拟环境
{% fold info @解决:virtualenvwrapper.sh: There was a problem running the initialization hooks. 报错 %}
解决
virtualenvwrapper.sh: There was a problem running the initialization hooks.
报错
- 解决方案二:注意上述
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python311
中的路径是否正确- 解决方案一:virtualenvwrapper.sh 报错: There was a problem running the initialization hooks.解决
{% endfold %}
运行项目¶
以实际项目为例:https://github.com/Explorer-Dong/YunJinWeb
首先有一个整体的服务逻辑:
sequenceDiagram
participant User
participant Nginx
participant uWSGI
participant App as Python应用
User->>Nginx: 发送HTTP请求
Nginx->>uWSGI: 转发请求
uWSGI->>App: 处理请求
App-->>uWSGI: 返回响应
uWSGI-->>Nginx: 返回响应
Nginx-->>User: 返回HTTP响应
(1) 创建 py 虚拟环境¶
创建虚拟 py 环境
启动虚拟环境
退出虚拟环境
(2) Git 版本管理¶
进入 python 虚拟环境目录 \
-
初次部署:拉取远程源文件
-
后续更新:覆盖原始代码并重新运行应用
(3) 配置 Flask 运行环境¶
安装所需 py 模块
(4) 导入 .env 环境变量配置文件¶
(5) 运行 Flask 应用¶
{% fold light @内测阶段 %}
内测阶段:使用 Flask 内置服务器运行应用
运行 Flask 主接口文件 app.py
,之后就可以通过 ip 地址 + 端口号的方式进行访问了
解决:Flask 的 5000 端口被占用的问题
windows 使用 git bash
查找占用指定端口的进程 PID:
根据 PID 杀死所有的进程:
一行解决:
ubuntu 使用 bash
查找占用指定端口的进程 PID:
根据 PID 杀死所有的进程:
一行解决:
{% endfold %}
公测阶段:使用 uwsgi 应用服务器运行应用
(一)安装 uwsgi 包
(二)创建 uwsgi.ini 文件并编辑
(三)启动 uwsgi 服务器
(四)终止或重启 uwsgi 服务器
如果想要终止 uwsgi 服务器,逻辑就是找到该服务器的所有进程并全部终止即可。如果因为项目更新等原因需要重启应用,需要先终止 uwsgi 服务器后再重新启动 uwsgi 服务器。
之后就可以通过 ip 地址 + 端口号的方式进行访问了,如果配置了域名和 Nginx 的端口代理,则可以直接用域名访问 Python 应用啦。