将FLASK开发的网站部署成功,之所以采取此方案是因为想同时运行一个apache+php的网站,python用的是UBUNTU18.04自带的3.6.5
1. 安装apache
sudo apt install apache2
sudo apt install apache2-dev
2. 安装pip3
UBUNTU18.04自带python3但是不带pip
sudo apt install python3-pip
3. 将mod_wsgi安装到python中
pip3 install mod_wsgi
注意:必须安装apache2和apache2-dev后才能安装成功。
4. 在apache中启用安装到python中的mod_wsgi
执行
mod_wsgi-express module-config
输出如下所示的文字,将其复制
LoadModule wsgi_module <span class="hljs-string">"/your/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"</span>
WSGIPythonHome <span class="hljs-string">"/usr"</span>
在
/etc/apache2/mods-available/
新建配置文件
nano /etc/apache2/mods-available/wsgi.load
将刚才复制的内容粘贴进来,保存并退出
在终端中执行如下命令,启用wsgi模块
sudo a2enmod wsgi
systemctl restart apache2
5 配置python虚拟环境
python虚拟环境的选择有很多,我用的是pyvenv,由于ubuntu18.04默认不安装,所以首先
sudo apt install python3-venv
然后执行
pyvenv path/to/venv/
配置python虚拟环境
6 编写
.wsgi
.wsgi
文件
在flask项目目录下新建一个
.wsgi
文件,里面包含wsgi启动网站所需的applicaiton对象,文件内容如下
<span class="hljs-keyword">import</span> sys
sys.path.insert(<span class="hljs-number">0</span>, <span class="hljs-string">'/path/to/the/application'</span>)
<span class="hljs-keyword">from</span> yourapplication <span class="hljs-keyword">import</span> app <span class="hljs-keyword">as</span> application
7 编写apache虚拟站点配置文件
在
/etc/apache2/site-available
新建配置文件
nano /etc/apache2/site-available/yoursite.conf
编辑文件
<span class="hljs-tag"><<span class="hljs-name">VirtualHost</span> *<span class="hljs-attr">:80</span>></span>
ServerName example.com
# python-home指定python虚拟目录的位置
WSGIDaemonProcess yourapplication python-home=/path/to/env/
WSGIScriptAlias / /path/to/yourapplication/yourapplication.wsgi
<span class="hljs-tag"><<span class="hljs-name">Directory</span> /<span class="hljs-attr">path</span>/<span class="hljs-attr">to</span>/<span class="hljs-attr">yourapplication</span>></span>
WSGIProcessGroup yourapplication
WSGIApplicationGroup %{GLOBAL}
Require all granted
<span class="hljs-tag"></<span class="hljs-name">Directory</span>></span>
<span class="hljs-tag"></<span class="hljs-name">VirtualHost</span>></span>
8 致此配置完毕,最后一点小问题
因为数据库是sqlite,配置完毕后出现了
attempt to write a readonly database
错误,经过搜索发现是文件读写权限的问题,可以将数据库文件及所在文件夹的所有者更改www-data来解决
sudo chown www-data your/database/
sudo chown www-data your/database/database
9 参考文章
- flask文档 http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
- mod_wsgi文档 http://modwsgi.readthedocs.io/en/develop/project-status.html
- mod_wsgi pypi页面 https://pypi.org/project/mod_wsgi/
- 问题解决:SQLite:DatabaseError : attempt to write a readonly databas http://ju.outofmemory.cn/entry/147685
作者:美妙的旋律A
链接:https://www.jianshu.com/p/603e8c29abec
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。