因为项目源码用了一些>python3.5的语法糖,但是Ubuntu的mod_wsgi包对应的是python3.5,所以采用从pip安装mod_wsgi的方法

参考:

Project/Python部分

准备WSGI文件

准备一个wsgi.py文件,内容如下:

import sys

sys.path.insert(0, "<path_to_the_application>")
from yourapplication import app as application if __name__ == "__main__":
application.run()

配置Python虚拟环境

为了不要修改系统python

安装工具:

sudo pip install virtualenv

进入我们的project目录,新建环境:

virtualenv myprojectenv

进入虚拟环境安装python包:

source myprojectenv/bin/activate

然后命令行应该会长这样:

(myprojectenv)user@host:~/myproject$

安装自己project的依赖项:

pip install -r requirements.txt

Apache部分

安装必要的包

sudo apt-get update
sudo apt-get install apache2 apache2-dev

apache2-dev是因为如果想用pip安装特定python版本的mod_wsgi的话,需要它。

pip安装特定python版本的mod_wsgi:

pip install mod_wsgi

通过这个命令得到对应的配置:

mod_wsgi-express module-config

会输出一个这样的东西

LoadModule wsgi_module "/mnt/disk1/miniconda3/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIPythonHome "/mnt/disk1/miniconda3"

把这两行复制到/etc/apache2/mods-available/wsgi.load里,替换掉原来的内容

最后enable wsgi模块:

sudo a2enmod wsgi

配置Apache

/etc/apache2/sites-available下新建一个配置文件yourapplication.conf,内容如下:

<VirtualHost *>
ServerName localhost # WSGIDaemonProcess用于指定应创建不同的守护进程,设置守护进程组的名称为 yourapplication
# python-home 指定守护进程使用的 Python 虚拟环境的位置为/data/www/project/venv
# python-path 可以理解为PYTHONPATH环境变量,可以有多个。最好一个是引用 Python 虚拟环境的 site-packages 目录, 另一个可以是项目的目录
WSGIDaemonProcess yourapplication python-home=<path_to_virtual_env> python-path=<path_to_site_packages> python-path=<path_to_project>
# WSGIScriptAlias 与 Alias 指令相同 如果不是/而/api,那就该app的访问路径就是localhost/api了
WSGIScriptAlias / /var/www/yourapplication/wsgi.py <Directory /var/www/yourapplication>
WSGIProcessGroup yourapplication
WSGIApplicationGroup %{GLOBAL}
# WSGIScriptReloading 设置对WSGI脚本文件的更改都触发重新加载机制
WSGIScriptReloading On
# apache 2.4 之后用这个来控制访问
Require all granted
</Directory>
</VirtualHost>

重启apache

记得重启apache:sudo service apache2 reload

最新文章

  1. 新的理念、 新的解决方案、 新的Azure Stack技术预览
  2. 如何交换两个等长整形数组使其数组和的差最小(C和java实现)
  3. 10_放置街灯(Placing Lampposts,UVa 10859)
  4. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
  5. 请教下 Yii 和 Ajax来验证用户名是否存在
  6. ansible安装及问题解决
  7. MVC+jquery+AJAX的几种方式
  8. Hp vPv
  9. PHP操作MySQL数据库的相关函数
  10. 预处理指令中#Pragma
  11. javascript每日一练(十二)——运动框架
  12. HTML &lt;textarea&gt; 标签的 wrap 属性
  13. api 和 abi的区别
  14. D. PolandBall and Polygon BIT + 欧拉公式
  15. Solr7 安装部署 管理界面介绍
  16. saliency map [转]
  17. 1.5sleep()方法
  18. svn cleanup失败
  19. 【转】每天一个linux命令(15):tail 命令
  20. mac电脑安装selenium 记录

热门文章

  1. 虚拟机中安装centos系统的详细过程
  2. CRLF漏洞浅析
  3. Java 性能优化的 50 个细节
  4. YYYY-MM-DD引发的问题
  5. rust常用技巧
  6. VScode 使用 CMake 入门
  7. 渐进式web应用 (PWA)
  8. 基于Annotation(注解)的装配
  9. 【JS】toLocaleString 日期格式,千分位转换
  10. 【Github】如何下载csv文件/win10如何修改txt文件为csv文件