deploy-flask
本文最后更新于 2024年9月21日 晚上
部署 Flask
Flask 是使用 Python 作为后端语言的 Web 微框,旨在帮助开发者快速开发出一个小型网站。个人示例项目就采用了 Flask 框架,前端直接使用 Flask 自带的 Jinja2 进行渲染,数据库采用 MySQL。项目地址 YunJinWeb,下面为以此项目为 demo 进行云服务器部署的过程
远程连接服务器
服务器信息
1 |
|
连接方法
- 方法一:利用阿里云自带的服务器连接入口,远程连接服务器。输入 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
1
mysql -uroot -p
-
重置密码
1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
-
使用数据库
1
use mysql
-
允许远程登录数据库
1
update user set host = '%' where user = 'root';
-
刷新更新配置
1
FLUSH PRIVILEGES;
(4) 构造数据库信息
由于数据库相关的资源已经被我存储在了本地 Windows,故直接在本地开发环境中利用 DataGrip 数据库管理工具将相应的信息复制到这台服务器的 MySQL 数据库中即可。
-
首先我们需要在本地的 DataGrip 上连接服务器的 MySQL 数据库
-
然后我们拷贝本地资源至数据库即可
配置 Nginx
(1) 放通端口
服务器安全组放通 80 端口
(2) 安装 Nginx 并启动
进入 nginx 官网 并找到以下内容:
可以通过 wget 命令下载压缩包
1 |
|
也可以直接通过 MobaXterm 拖拽上传服务器,解压到当前目录下并进入 nginx 文件夹
1 |
|
配置 nginx 并编译安装。
Ubuntu 需要额外手动安装 Nginx 的依赖库,详见 ubuntu下安装nginx时PCRE库、zlib库、OpenSSL库的安装
1 |
|
进入 /usr/local/nginx-1.24.0/sbin/ 目录,启动 nginx
1 |
|
解决:端口被占用的问题
解决方案:
killall -9 nginx
杀掉 nginx 的进程,然后重启最终结果:然后浏览器通过 http 协议默认的 80 端口访问公网 ip,就可以看到欢呼雀跃的一幕
配置 Python
(1) 安装 python
命令集合
1 |
|
vim 的编辑指令
1 |
|
(2) 安装 python 环境管理包
安装 python 虚拟环境管理依赖
1 |
|
配置虚拟环境
1 |
|
解决
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.解决
运行项目
以实际项目为例: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 环境
1 |
|
启动虚拟环境
1 |
|
退出虚拟环境
1 |
|
(2) Git 版本管理
进入 python 虚拟环境目录 <EnvName>
-
初次部署:拉取远程源文件
1
git clone https://gitee.com/idwj/YunJinWeb.git
-
后续更新:覆盖原始代码并重新运行应用
1
git pull
(3) 配置 Flask 运行环境
安装所需 py 模块
1 |
|
(4) 导入 .env 环境变量配置文件
(5) 运行 Flask 应用
内测阶段:使用 Flask 内置服务器运行应用
运行 Flask 主接口文件 app.py
,之后就可以通过 ip 地址 + 端口号的方式进行访问了
1 |
|
解决:Flask 的 5000 端口被占用的问题
windows 使用 git bash
查找占用指定端口的进程 PID:
1netstat -ano | grep :<port>
根据 PID 杀死所有的进程:
1taskkill /PID <PID> /F
一行解决:
1
taskkill /PID $(netstat -ano | grep :<port> | awk '{print $5}') /F
ubuntu 使用 bash
查找占用指定端口的进程 PID:
1
sudo lsof -i :<port>
根据 PID 杀死所有的进程:
1
sudo kill -9 <PID>
一行解决:
1
sudo kill -9 $(sudo lsof -t -i :<port>)
公测阶段:使用 uwsgi 应用服务器运行应用
(一)安装 uwsgi 包
1 |
|
(二)创建 uwsgi.ini 文件并编辑
1 |
|
1 |
|
(三)启动 uwsgi 服务器
1 |
|
1 |
|
(四)终止或重启 uwsgi 服务器
如果想要终止 uwsgi 服务器,逻辑就是找到该服务器的所有进程并全部终止即可。如果因为项目更新等原因需要重启应用,需要先终止 uwsgi 服务器后再重新启动 uwsgi 服务器。
1 |
|
之后就可以通过 ip 地址 + 端口号的方式进行访问了,如果配置了域名和 Nginx 的端口代理,则可以直接用域名访问 Python 应用啦。