FLASK + Apache + mod_wsgi + ubuntu18.04 部署笔记

将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

文件

在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">&lt;<span class="hljs-name">VirtualHost</span> *<span class="hljs-attr">:80</span>&gt;</span>
    ServerName example.com
    # python-home指定python虚拟目录的位置
    WSGIDaemonProcess yourapplication python-home=/path/to/env/
    WSGIScriptAlias / /path/to/yourapplication/yourapplication.wsgi
        <span class="hljs-tag">&lt;<span class="hljs-name">Directory</span> /<span class="hljs-attr">path</span>/<span class="hljs-attr">to</span>/<span class="hljs-attr">yourapplication</span>&gt;</span>
        WSGIProcessGroup yourapplication
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    <span class="hljs-tag">&lt;/<span class="hljs-name">Directory</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">VirtualHost</span>&gt;</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 参考文章

  1. flask文档 http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
  2. mod_wsgi文档 http://modwsgi.readthedocs.io/en/develop/project-status.html
  3. mod_wsgi pypi页面 https://pypi.org/project/mod_wsgi/
  4. 问题解决:SQLite:DatabaseError : attempt to write a readonly databas http://ju.outofmemory.cn/entry/147685

作者:美妙的旋律A
链接:https://www.jianshu.com/p/603e8c29abec
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。