目录
一、准备工作
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 服务名