Flask项目在Ubuntu18.04上的部署

一、准备工作

1、安装ssh

在linux服务器上安装ssh用于远程连接

apt-get install openssh-server

2.查看服务器ip

在设置中将网络适配器修改为桥接模式后查看

3.上传你的项目

将本地将项目压缩后,在cmd中用scp命令上传到服务器

scp 本地路径 服务器用户名@服务器ip:目标路径
例:
scp D:\xxx.tar user@192.168.31.80:/home/user/project

4.解压项目

tar -xvf 项目压缩文件

5.安装Python

apt-get install python3 python3-pip

6.创建虚拟环境

//安装virtualenv
pip3 install virtualenv

//创建虚拟环境
virtualenv venv

//进入虚拟环境
suorce venv/bin/activate

//退出虚拟环境
deactiviate

7.安装依赖(在虚拟环境下)

  • 单个依赖安装
pip3 instsll flask
pip3 install pymysql
...
  • 使用环境配置文件导入

在PyCharm终端中

//生成整个虚拟环境的环境配置文件
pip3 freeze > requirements.txt

//生成单个项目中用到的安装包的环境配置文件
pip3 install pipreqs
pipreqs .

在服务器上通过环境配置文件安装依赖

pip3 install -r requirements.txt

虚拟环境安装依赖出现权限不足问题:
不能使用sudo,否则不会安装在虚拟环境中,会安装在全局环境下。通过修改虚拟环境文件夹权限解决

chmod 777 虚拟环境文件夹路径

退出虚拟环境

8.开放服务器端口

ufw allow 端口号
例:
ufw allow 5000/tcp

二、安装MySQL

本文使用MySQL8.0

1.添加添加MySQL8.0 apt仓库

wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb

2.更新apt

apt-get update

若更新apt时报错

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 报错信息中的那串数字签名

3.安装MySQL8.0

apt install mysql-server

4.启动服务

systemctl status mysql

三、数据库迁移

1.导出本地数据

mysqldump -u 用户名(数据库) -p 数据库名 > 文件名.sql
例:
mysqldump -u root -p database > database.sql

2.传输数据到服务器

scp 文件路径 用户名(服务器)@ip:目标路径
例:
scp database.sql user@192.168.31.80:/home/user/project

3.服务器上创建数据库

mysql -u root -p
create database 数据库名

4.服务器上导入数据库

mysql -u 用户名(数据库) -p 数据库名 < 文件名.sql
例:
mysql -u root -p database < database.sql

四、用Gunicorn运行Flask项目

0.为什么不能直接用flask run运行项目

flask run主要用于开发环境,不适合在生产环境下使用,默认在127.0.0.1:5000(本地回环地址)运行,导致只能在本地主机访问。外部主机想要访问,须将host地址设置为0.0.0.0,需设置环境变量进行配置。

//设置临时环境变量
exprot FLASK_RUN_HOST=0.0.0.0
exprot FLASK_RUN_PROT=5000

//清除环境变量
unset FLASK_RUN_HOST

建议使用WSGI服务器,如Gunicorn

1.安装Gunicorn(在虚拟环境下)

进入虚拟环境

pip3 install gunicorn

2.启动Gunicorn

gunicorn -w 工作进程个数 -b 指定的ip:端口 入口文件名:flask应用实例名
例:
gunicorn -w 4 -b 0.0.0.0:5000 wsgi:app

项目结构如下:
project/
│
├── app/
│   ├── __init__.py
│   ├── manager.py
│   ├── user.py
│
├── wsgi.py

app包和应用文件名app.py相同时可能导致导入路径冲突,需调整项目结构给Gunicorn明确的模块路径和应用实例名称

3.使用进程管理工具实现自启动

创建systemd服务文件

sudo vim /etc/systemd/system/服务名.service

修改内容

[Unit] 
Description=Your Flask App 	//服务名
After= mysql.service		//指定这个服务在其他服务后启动
[Service] 
User=your_user 		//运行服务的用户名
WorkingDirectory=/path/to/your/app 	//服务的工作目录
ExecStart=/path/to/your/venv/bin/gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app 	//服务要执行的命令
Restart=always 	//服务退出时的行为,无论何种原因退出,都会自动重启
[Install] 
WantedBy=multi-user.target	//指定服务在哪个运行级别下会被自动启动

重新加载systemd配置

sudo systemctl daemon-reload

启动服务

sudo systemctl start 服务名

启用服务(开机自启)

sudo systemctl enable 服务名

检查服务状态

sudo systemctl status 服务名
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值