FLASK + Apache + mod_wsgi + ubun

2018-05-07  本文已影响0人  美妙的旋律A

用时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 参考文章

  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
上一篇下一篇

猜你喜欢

热点阅读