Apache Mod_wsgi Django Anaconda Python3 配置
Posted Simon Yang Project
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Mod_wsgi Django Anaconda Python3 配置相关的知识,希望对你有一定的参考价值。
本文假设读者具有一定的Linux命令行和python基础
运行环境
Centos-7.4
Anaconda-Python3.6.4
Django-2.0.4
httpd-2.4.33
服务器为腾讯云服务器,httpd是Apache中的服务,安装httpd需要依赖apr、apr-util、pcre
python选用anaconda并且使用conda虚拟环境
首先安装gcc编译器,gcc为编译必须,c++编译器和expat-devel依赖为pcre安装所必须
yum install gcc
yum install gcc-c++
yum install expat-devel
下载源码安装包,注意当使用apr-util,apr1.6版本编译安装httpd时出现xml错误,在/usr/local/httpd/目录下只有modules文件夹。因此1.6版本不适用于httpd的最新版,因此选用1.5版本
选用清华镜像下载速度更快
wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.33.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.1.0-Linux-x86_64.sh
解压
tar -xzf pcre-8.40.tar.gz
tar -xzf httpd-2.4.33.tar.gz
tar -xzf apr-util-1.5.4.tar.gz
tar -xzf apr-1.5.2.tar.gz
安装
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make
make install
cd ../apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
cd ../pcre-8.40
./configure --prefix=/usr/local/pcre --with-apr=/usr/local/apr
cd ../httpd-2.4.33
./configure --prefix=/usr/local/httpd --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make
make install
cd ..
bash Anaconda3-5.1.0-Linux-x86_64.sh
将Anaconda命令和httpd启动命令添加到path
vim /etc/profile
在最后添加两行
export PATH=/usr/local/httpd/bin:$PATH
export PATH=/root/anaconda3/bin:$PATH
使profile文件起作用
. /etc/profile
注意.和/之间有个空格
试一下httpd行不行
输入
httpd -k start
相应的,重新启动和停止的命令为
httpd -k restart
httpd -k stop
下面开始配置python django
conda添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
创建django安装的python3.6环境
conda create -n django python=3.6
source activate django
pip install django
安装mod_wsgi
pip install mod_wsgi
获取mod_wsgi
mod_wsgi-express module-config
LoadModule wsgi_module "/root/anaconda3/envs/django/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/root/anaconda3/envs/django"
修改httpd配置文件
cd /usr/local/httpd/conf
vim httpd.conf
LoadModule中添加一行
LoadModule wsgi_module "/root/anaconda3/envs/django/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
将这一行
Include conf/extra/httpd-vhosts.conf
取消注释
相应的修改httpd-vhosts.conf文件
cd extra
vim httpd-vhosts.conf
全部注释掉之后添加下面部分
WSGIPythonPath /root/anaconda3/envs/django/lib/python3.6/site-packages:/home/website
WSGIPythonHome /root/anaconda3/envs/django
<VirtualHost *:80>
DocumentRoot /home/website/website
ServerName localhost:80
ServerAdmin jstsyhyjk@163.com
WSGIScriptAlias / /home/website/website/wsgi.py
Alias /static/ /home/website/static/
<Directory "/home/website">
Require all granted
</Directory>
</VirtualHost>
先来看下我django项目的目录结构
这是/home/website内的文件树形图(已省略一部分无关内容)
.
|-- db.sqlite3
|-- manage.py
|-- static
|-- templates
| `-- index.html
|-- website
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| |-- view.py
| `-- wsgi.py
配置wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings")
application = get_wsgi_application()
同时在settings.py中修改这一部分,如果不修改,django会拒绝外部的访问
ALLOWED_HOSTS = ["your server ip"]
一切就绪之后,重新启动
httpd -k restart
访问域名,发现没成功
查看error_log,默认位置在logs内
cat /usr/local/httpd/logs/error_log
可以看到
Permission denied: mod_wsgi (pid=6696): Unable to stat Python home /root/anaconda3/envs/django. Python interpreter may not be able to be initialized correctly. Verify the supplied path and access permissions for whole of the path.
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
表示权限不够。因此提升权限,亲测仅提升anaconda文件夹权限不能解决,因此
chmod 755 /root
httpd -k start
访问成功
error_log在网站内部代码运行错误时还会存放错误信息,用于查到代码运行中可能出现的bug
(注意配置中的所有路径信息,如果其中包含括号,则需要在两侧加上引号)
以上是关于Apache Mod_wsgi Django Anaconda Python3 配置的主要内容,如果未能解决你的问题,请参考以下文章
使用 mod_wsgi 在 apache 上设置 Django
Django,apache,mod_wsgi - 错误:脚本头过早结束
Apache + mod_wsgi + django:为积压的请求发送默认响应
使用 Apache 和 mod_wsgi 在 Centos 上设置 Django
Django + mod_wsgi + apache:ImportError at / No module named djproj.urls