3. 部署过程
3.5安装Nginx
3.6配置Nginx
3.6.1配置nginx的全局配置文件
3.6.2配置flask项目的nginx配置文件
3.7配置uwsgi.ini
4.启动flask项目
4.1开启nginx
4.2通过uwsgi启动flask项目
3.5 安装Nginx
01
执行以下指令使用yum安装nginx
yum install nginx
02
选择y,点回车
出现Complete!表示Nginx安装完成
3.4 上传flask项目至服务器
上传项目至服务器有很多种方法,这里使用PyCharm专业版做演示。
01
在工具栏里找到Tools->Deployment->Configuration...
02
进入Configuration..界面后,点击按钮+,选择SFTP
为服务器取个名
点击OK,进入配置界面
03
点击...进入SSH Configuration界面
点击按钮+,然后填入相关信息
Host一栏填入服务器的公网IP地址
Port选择22即可
User name和Password中分别填入用户名和密码即可
填完以上信息后可以点击Test Connection调试一下是否连接成功
04
配置文件的存放位置
(路径必须在服务器中存在,否则上传文件过程中会报错)
把Web Server URL设置成服务器的公网IP地址,并在Advanced选项里设置utf-8即可
点击OK,配置结束
配置完成便可开始上传flask项目文件
05
在工具栏找到Tools->Deployment->Browse Remote Host
点击Browse Remote Host后,PyCharm右侧边栏便会弹出一个Remote Host窗口,
复制运行flask项目所需的文件,并在窗口粘贴即可。
06
文件上传完成验证一下,打开XShell查看服务器上的指定文件夹下有没有上传的文件
这里要注意,上传到服务器上的flask项目中的入口文件里,必须要把debug设置成False,否则项目将无法在服务器运行。
3.5 在服务器上创建flask虚拟环境
flask项目
开发flask项目需要在虚拟环境,部署也是如此。所以部署flask项目前需要在服务器中创建一个和开发环境一致的虚拟环境。虚拟环境是Python解释器的一个私有的副本,在这个环境中你可以安装私有包,而且不会影响系统中安装的全局Python解释器,也不需要管理员权限。虚拟环境可以在系统中Python解释器中避免包的混乱和版本的冲突。为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,从而保持全局解释器的干净简洁,使其只作为(更多)虚拟环境的源。
⭐
笔者把flask项目放在flask_demo文件夹中,并在flask_demo同级创建了一个Virtualenv
文件夹,在Virtualenv路径下运行python3 -m venv flask-env
可以看到Virtualenv文件夹下多了一个flask-env文件夹
进入flask-env文件夹,发现有一个bin文件夹
进入bin文件夹可以看到一个activate文件
在命令行输入source activate指令激活虚拟环境,可以看到命令行前面多了一个(flask-env),代表此时现在是在虚拟环境下(要退出虚拟环境,只要输入deactivate指令即可)
此时便可以在服务器的flask虚拟环境下用pip安装所需的库
安装的库的种类以及版本必须要和开发时用到的库保持一致,确保代码的运行环境一致,否则有可能出现,自己电脑里可以运行项目,服务器里却无法运行项目的情况。
首先保证服务器的pip版本要和自己电脑的pip版本一致
01
使用如下指令即可指定版本更新
pip install --upgrade pip==版本号
例如:将pip版本更新到20.2.2,如下
pip install --upgrade pip==20.2.2
02
查看自己开发时用到的库,可以在自己开发用的电脑的flask虚拟环境下执行pip3 list
同理,查看服务器的flask虚拟环境的库,只要在flask虚拟环境下执行pip3 list即可
03
装库用到的指令
pip3 install 库名==版本号
例如:
安装版本号为2.4.4的Flask-SQLAlchemy库只需要输入如下指令即可
pip3 install Flask-SQLAlchemy==2.4.4
如果网速过慢,也可以用阿里云的镜像安装库
例如:安装版本号为1.1.2的Flask库
pip install -i http://mirrors.aliyun.com/pypi/simple/ Flask==1.1.2 --trusted-host mirrors.aliyun.com
安装完成后就可以退出flask虚拟环境
3.6 配置Nginx
3.6.1 配置nginx的全局配置文件
01
进入全局配置文件的路径
cd /etc/nginx
编辑nginx.conf
vi nginx.conf
敲击键盘上的Insert键或i键开始对文件进行编辑
将用户换为root
02
打开gzip,加快站点内容下载速度
03
Nginx.conf默认配置了一个站点,需要把它注释掉,因为不同的站点都是在子目录里进行配置的
注意:
不要把include/etc/nginx/conf.d/*.conf;注释掉了
Nginx可以部署很多个站点,每一个站点都可以在/etc/nginx/conf.d/路径下后缀为.conf的文件中进行配置。
nginx.conf的内容如下,供参考:
代码
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
gzip on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
# server {
# listen 80 default_server;
# listen [::]:80 default_server;
# server_name _;
# root /usr/share/nginx/html;
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
# location / {
# }
# error_page 404 /404.html;
# location = /404.html {
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /404.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
修改好文件以后,敲击键盘上的ESC按钮,输入冒号(:),再输入wq,这样就修改并保存了。
3.6.2 配置flask项目的nginx配置文件
⭐
进入到conf.d路径下
cd /etc/nginx/conf.d
创建一个自己flask项目的nginx配置文件
vi flask_demo.conf
敲击键盘上的Insert键或i键开始对文件进行编辑
具体内容如下,红字的为注释,不要写入配置文件里。
代码
server{
listen 8181 ;
server_name 绑定的域名或你的服务器公网IP地址;
charset utf-8;
access_log /var/log/nginx/log/flask_demo.access.log main;
error_log /var/log/nginx/log/flask_demo.error.log warn;
location / {
root /root/lk/back_end/flask_demo;
index index.html index.htm;
include uwsgi_params;
# include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
uwsgi_param UWSGI_PYHOME /root/lk/back_end/Virtualenv/flask-env;
uwsgi_param UWSGI_CHDIR /root/lk/back_end/flask_demo;
uwsgi_param PYTHONPATH /root/lk/back_end/flask_demo;
uwsgi_param UWSGI_MODULE run;
#这里写入口文件名,也就是下图代码所在的文件,笔者的入口文件名为run.py,所以这里写run
uwsgi_param UWSGI_CALLABLE app;
#app就是下图中app.run方法中的app
}
}
修改好文件以后,敲击键盘上的ESC按钮,输入冒号(:),再输入wq,这样就修改并保存了。
3.7 配置uwsgi.ini
⭐
在站点目录中(flask项目入口文件所在目录,笔者的入口文件为run.py)创建uwsgi.ini文件
vi uwsgi.ini
内容如下
[uwsgi]
enable-theads=true
thunder-lock=true
vhost=true
socket=127.0.0.1:5000
master=true
workers=4
max-requests=128
4.启动flask项目
4.1 开启nginx
01
到/var/log/nginx路径下创建文件夹log,如果不创建文件夹的话服务器找不到日志文件要写的地址
cd /var/log/nginx
mkdir log
nginx -t -c /etc/nginx/nginx.conf
如果结果如下图所示,就表示nginx配置文件完成
02
现在便可以启动nginx了
systemctl start nginx.service
这时可以在浏览器里访问一下服务器的公网ip地址,如果出现下图所示,就表示nginx启动成功了
4.2 通过uwsgi启动flask项目
01
激活flask虚拟环境
02
进入到uwsgi.ini文件所在路径下,运行以下指令
uwsgi --ini uwsgi.ini
03
启动成功
04
在浏览器中测试一下flask项目是否成功运行
这里可以看到,确实可以访问到,部署成功。
想看更多精彩内容
请关注我们的实验室公众号哟
扫码关注啦!