前期准备
将在本地开发好的Flask项目打包,发送到云主机上,可以使用xftp等传输工具放到远程主机上。
安装python虚拟环境
<span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> python3-pip<span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> python3-pipsudo apt install python3-pip
2.安装virtualenv
<span class="token function">sudo</span> pip <span class="token function">install</span> virtualenv <span class="token function">sudo</span> pip <span class="token function">install</span> virtualenvwrapper<span class="token function">sudo</span> pip <span class="token function">install</span> virtualenv <span class="token function">sudo</span> pip <span class="token function">install</span> virtualenvwrappersudo pip install virtualenv sudo pip install virtualenvwrapper
3.配置环境变量
<span class="token builtin class-name">export</span> <span class="token assign-left variable">WORKON_HOME</span><span class="token operator">=</span><span class="token environment constant">$HOME</span>/.virtualenvs <span class="token builtin class-name">source</span> /usr/local/bin/virtualenvwrapper.sh<span class="token builtin class-name">export</span> <span class="token assign-left variable">WORKON_HOME</span><span class="token operator">=</span><span class="token environment constant">$HOME</span>/.virtualenvs <span class="token builtin class-name">source</span> /usr/local/bin/virtualenvwrapper.shexport WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
4.刷新配置文件
<span class="token builtin class-name">source</span> ~/.bashrc<span class="token builtin class-name">source</span> ~/.bashrcsource ~/.bashrc
5.虚拟环境操作
mkvirtualenv 名称 mkvirtualenv -p python3 名称 workon workon 名称 deactivatemkvirtualenv 名称 mkvirtualenv -p python3 名称 workon workon 名称 deactivatemkvirtualenv 名称 mkvirtualenv -p python3 名称 workon workon 名称 deactivate
5.删除虚拟环境
rmvirtualenv 虚拟环境名称 例 :删除虚拟环境py3_flask 先退出:deactivate 再删除:rmvirtualenv py3_flaskrmvirtualenv 虚拟环境名称 例 :删除虚拟环境py3_flask 先退出:deactivate 再删除:rmvirtualenv py3_flaskrmvirtualenv 虚拟环境名称 例 :删除虚拟环境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中不存在对应的模块
解决办法:
<span class="token assign-left variable">VIRTUALENVWRAPPER_PYTHON</span><span class="token operator">=</span>/usr/bin/python3<span class="token assign-left variable">VIRTUALENVWRAPPER_PYTHON</span><span class="token operator">=</span>/usr/bin/python3VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
安装Nginx
sudo apt<span class="token operator">-</span>get install nginxsudo apt<span class="token operator">-</span>get install nginxsudo 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 <span class="token operator">/</span>etc/nginx/sites-available/defaultvim <span class="token operator">/</span>etc/nginx/sites-available/defaultvim /etc/nginx/sites-available/default
修改文件如下所示
server <span class="token punctuation">{<!-- --></span> listen 8002<span class="token punctuation">;</span> root <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask<span class="token punctuation">;</span> index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm index<span class="token punctuation">.</span>nginx-debian<span class="token punctuation">.</span>html<span class="token punctuation">;</span> server_name 公网ip<span class="token punctuation">(</span>或域名<span class="token punctuation">)</span><span class="token punctuation">;</span> location <span class="token operator">/</span> <span class="token punctuation">{<!-- --></span> try_files <span class="token variable">$uri</span> <span class="token variable">$uri</span><span class="token operator">/</span> =404<span class="token punctuation">;</span> include uwsgi_params<span class="token punctuation">;</span> uwsgi_pass 127<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>1:8000<span class="token punctuation">;</span> uwsgi_param UWSGI_PYHOME <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask/venv<span class="token punctuation">;</span> uwsgi_param UWSGI_CHDIR <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask<span class="token punctuation">;</span> uwsgi_param UWSGI_SCRIPT app:app<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>server <span class="token punctuation">{<!-- --></span> listen 8002<span class="token punctuation">;</span> root <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask<span class="token punctuation">;</span> index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm index<span class="token punctuation">.</span>nginx-debian<span class="token punctuation">.</span>html<span class="token punctuation">;</span> server_name 公网ip<span class="token punctuation">(</span>或域名<span class="token punctuation">)</span><span class="token punctuation">;</span> location <span class="token operator">/</span> <span class="token punctuation">{<!-- --></span> try_files <span class="token variable">$uri</span> <span class="token variable">$uri</span><span class="token operator">/</span> =404<span class="token punctuation">;</span> include uwsgi_params<span class="token punctuation">;</span> uwsgi_pass 127<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>1:8000<span class="token punctuation">;</span> uwsgi_param UWSGI_PYHOME <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask/venv<span class="token punctuation">;</span> uwsgi_param UWSGI_CHDIR <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask<span class="token punctuation">;</span> uwsgi_param UWSGI_SCRIPT app:app<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>server { listen 8002; root /var/www/Flask; index index.html index.htm index.nginx-debian.html; server_name 公网ip(或域名); location / { try_files $uri $uri/ =404; include uwsgi_params; uwsgi_pass 127.0.0.1:8000; 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 restartsudo service nginx restartsudo service nginx restart
配置uwsgi
vim config<span class="token punctuation">.</span>inivim config<span class="token punctuation">.</span>inivim config.ini
填入以下内容
http = 内网ip:8002 <span class="token function">chdir</span> = <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask wsgi-file = app<span class="token punctuation">.</span>py callable = app processes = 4 threads = 2 stats = 127<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>1:5000 daemonize = <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask/logs/uwsgi<span class="token punctuation">.</span>loghttp = 内网ip:8002 <span class="token function">chdir</span> = <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask wsgi-file = app<span class="token punctuation">.</span>py callable = app processes = 4 threads = 2 stats = 127<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>1:5000 daemonize = <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>www/Flask/logs/uwsgi<span class="token punctuation">.</span>loghttp = 内网ip:8002 chdir = /var/www/Flask wsgi-file = app.py callable = app processes = 4 threads = 2 stats = 127.0.0.1:5000 daemonize = /var/www/Flask/logs/uwsgi.log
最后执行uwsgi config.ini
不出意外,flask项目就在后台执行起来了
在浏览器中输出域名(IP):端口即可访问
uwsgi开机自启动
1.首先需要将上面配置文件的daemonize改为logto,daemonize不仅告知了程序的日子文件输出位置还让程序后台运行,因此在系统启动的过程中会重复启动导致失败。
logto <span class="token operator">=</span> /var/www/Flask/logs/uwsgi.loglogto <span class="token operator">=</span> /var/www/Flask/logs/uwsgi.loglogto = /var/www/Flask/logs/uwsgi.log
2.创建开机启动项
在/ect/init.d
中新建脚本startuwsgi.sh,并赋予755权限,写入一下内容
<span class="token shebang important">#!/bin/sh</span> /usr/local/bin/uwsgi --ini /xxx/config.ini<span class="token shebang important">#!/bin/sh</span> /usr/local/bin/uwsgi --ini /xxx/config.ini#!/bin/sh /usr/local/bin/uwsgi --ini /xxx/config.ini
3.使用update-rc.d使脚本开机运行,然后重启即可完成
update-rc.d startuwsgi.sh defaults <span class="token number">99</span>update-rc.d startuwsgi.sh defaults <span class="token number">99</span>update-rc.d startuwsgi.sh defaults 99
参考:https://blog.csdn.net/weixin_39212776/article/details/81321055
原文链接:https://blog.csdn.net/weixin_43435307/article/details/122672073