用时2天终于将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 "/your/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/usr"
在/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
文件
在flask项目目录下新建一个.wsgi
文件,里面包含wsgi启动网站所需的applicaiton对象,文件内容如下
import sys
sys.path.insert(0, '/path/to/the/application')
from yourapplication import app as application
7 编写apache虚拟站点配置文件
在 /etc/apache2/site-available
新建配置文件
nano /etc/apache2/site-available/yoursite.conf
编辑文件
<VirtualHost *:80>
ServerName example.com
# python-home指定python虚拟目录的位置
WSGIDaemonProcess yourapplication python-home=/path/to/env/
WSGIScriptAlias / /path/to/yourapplication/yourapplication.wsgi
<Directory /path/to/yourapplication>
WSGIProcessGroup yourapplication
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
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
网友评论