前期准备
将在本地开发好的Flask项目打包,发送到云主机上,可以使用xftp等传输工具放到远程主机上。
安装python虚拟环境
- 为python3安装pip
sudo apt install python3-pip
#为python安装pip 使用时要输入pip3
2.安装virtualenv
sudo pip install virtualenv
sudo pip install virtualenvwrapper
3.配置环境变量
#在~/.bashrc末尾添加下面两句
export WORKON_HOME=$HOME/.virtualenvs #路径可以自行修改
source /usr/local/bin/virtualenvwrapper.sh
4.刷新配置文件
source ~/.bashrc
5.虚拟环境操作
mkvirtualenv 名称 #创建虚拟环境,默认创建python2虚拟环境
mkvirtualenv -p python3 名称 #创建python3虚拟环境
workon #查看所有的虚拟环境
workon 名称 #切换到xx虚拟环境
deactivate #退出虚拟环境
5.删除虚拟环境
rmvirtualenv 虚拟环境名称
例 :删除虚拟环境py3_flask
先退出:deactivate
再删除:rmvirtualenv py3_flask
6.问题
1./usr/bin/python: No module named virtualenvwrapper
错误原因:
Ubuntu安装了2.7和3.x两个版本的python,在安装时使用的是sudo pip3 install virtualenvwrapper在运行的时候默认使用的是python2.x,但在python2.x中不存在对应的模块
解决办法:
#在bashrc中加入如下命令,指定使用python3解释执行
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
安装Nginx
sudo apt-get install nginx
安装好Nginx后,系统会默认创建一个目录“/var/www/html”,若通过公网ip地址能够看到一个大写的Nginx界面就说明成功了。
Nginx配置文件路径:/etc/nginx/sites-available/default,后面会用到
安装环境
1.执行pip3 freeze > requirements.txt
在本机中将项目所需的依赖输出到文本文件中。
在
2.在服务器中进入虚拟环境,在执行pip3 install -r requirements.txt
安装所需依赖包
3.执行pip3 install uwsgi
安装uwsgi
配置Nginx
vim /etc/nginx/sites-available/default
修改文件如下所示
server {
#listen 80 default_server;
#listen [::]:80 default_server;
listen 8002; #监听端口
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/Flask;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name 公网ip(或域名);
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; #此地址要和uwsgi.ini的套接字相同
uwsgi_param UWSGI_PYHOME /var/www/Flask/venv; #指向虚拟环境
uwsgi_param UWSGI_CHDIR /var/www/Flask; #指定网站根目录
uwsgi_param UWSGI_SCRIPT app:app;
}
}
修改完成后重启Nignx服务
sudo service nginx restart
配置uwsgi
//进入Falsk项目目录
vim config.ini
填入以下内容
# uwsgi 启动时所使用的地址与端口
#内网ip可即ifconfig命令可查看到的ip
#socket = 127.0.0.1:8002
http = 内网ip:8002
# 指向网站目录
chdir = /var/www/Flask
# python 启动程序文件
wsgi-file = app.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:5000 #与nginx配置文件中的端口要一致
#输出内容放到uwsgi.log文件中,加上可后台执行
daemonize = /var/www/Flask/logs/uwsgi.log
最后执行uwsgi config.ini
不出意外,flask项目就在后台执行起来了
在浏览器中输出域名(IP):端口即可访问
uwsgi开机自启动
1.首先需要将上面配置文件的daemonize改为logto,daemonize不仅告知了程序的日子文件输出位置还让程序后台运行,因此在系统启动的过程中会重复启动导致失败。
#daemonize = /var/www/Flask/logs/uwsgi.log
#改为
logto = /var/www/Flask/logs/uwsgi.log
2.创建开机启动项
在/ect/init.d
中新建脚本startuwsgi.sh,并赋予755权限,写入一下内容
#!/bin/sh
### BEGIN INIT INFO
# Provides: espflask
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Description: espflask
### END INIT INFO
#头部信息可以从别的脚本中复制,然后修改Provids和Description
/usr/local/bin/uwsgi --ini /xxx/config.ini
#注意使用绝对路径
3.使用update-rc.d使脚本开机运行,然后重启即可完成
update-rc.d startuwsgi.sh defaults 99
#99代表启动顺序
参考:https://blog.csdn.net/weixin_39212776/article/details/81321055