ubuntu下配置Apache+mod_wsgi+Django项目(个人测试)
经过了一个星期的摸索,查找资料以及实验,我搭建的环境基本能用(还有就是Django后台的静态文件加载的问题)
这里面只是介绍一下我的过程,因为对应Apache还不是很熟练,特别是配置文件。只能供大家参考一下。
网上的资料比较多,但是可能不适合自己,只能取其精华,但是没经验的话,不知道哪里是精华,所以就多试试吧。写这个博客,也是对自己这一段时间坚持学习的鼓励。
环境 Ubuntu16.04LTS
Apache 2.4.25
mod_wsgi :mod_wsgi-4.5.15.tar.gz
Django :1.8
Apache 搭建:
Apache搭建有两种方式
一,下载源码http://archive.apache.org/dist/httpd/,编译安装的方式
这种方式呢,我下载的是httpd-2.4.25.tar.gz
源码安装还是要看官方文档,它对应系统有依赖包主要有 apr-util-1.5.4 、pcre-8.38,下载编译前看看文档的注意事项,少走弯路!
二,sudo apt-get install apache2
这种安装方便,但是我安装完,配置文件与源码安装的方式不一样,要在site-enable下,而且是虚拟机方式的配置文件,我网上找资料的时候,多半是看到的httpd.conf配置的,所以这个没深入看。后来由于和源码方式的有冲突,我就删除了
网上资料有的写配置这个,有的写配置httpd主配置文件。我只能不严谨的说应该差不多,^_^
安装方式还是比较简单,不多说了!只有安装完,访问127.0.0.1 能看到it's works ?还是 it works? 就行了!
安装mod_wsgi
注意: 安装这个宝贝也需要一些依赖,也要先看官方文档!
下载了mod_wsgi-4.5.15.tar.gz
解压
tar -zxvf mod_wsgi-4.5.15.tar.gz
进入目录,./configure
遇到一个问题 /bin/sh: 1: apxs: not found
百度有的说要安装httpd-devel
但在Apache网站上,只有for fedora and Centos 的rpm包
本U没有对应的包
再查查看~~~
上官方文档,也时有写的
If you are running Debian or Ubuntu Linux with Apache 2.4 system packages, regardless of which Apache MPM is being used, you would need both:
apache2 (此包应该不用,如果安装了相当于安装了一个应用服务,所以你在试的时候先装下面的dev,如果不行,再装吧)
apache2-dev
看来一切都得看官方文档的靠谱!!将这个两个用 apt-get install 安装上
再编译~~~结果还是不行~~我泪~~~
报错如下
- /usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_
- 32 against `a local symbol' can not be used when making a shared object; rec
- ompile with -fPIC
这是要重新安装python2.7 而且重新编译 用-fPIC参数(这里注意,安装的时候如果你用的是sqlite3的数据库,这里就一块弄了,否则django应用都起不来,先安装一个sudo apt-get install libsqlite3-dev,这样再./configure --prefix=/usr/local/ CFLAGS=-fPIC , make的时候就不会提示
Python build finished, but the necessary bits to build these modules were not found:
_bsddb _sqlite3 _tkinter ........
需要单独安装的这个提示了)
我因为这个和sqlite3安装的事情,多安装了好几遍python2.7 因为时个老电脑1cpu2核的,结果编译耗费了老久时间了~~~~
命令如下 进入python源码目录下
./configure --prefix=/usr/local/ CFLAGS=-fPIC ###ps:--enable-optimizations 这个参数可加可不加,加上的话make的时间长,我经过多次的话,后来在 test_logging 的过程就报错了,网上没查到,可能跟我的主机名有关,但不确定)
make
sudo make install
安装完的路径为 /usr/local/lib/下的python2.7
然后再安装mod_wsgi
安装完后,会在Apache 安装目录/usr/local/apache24/下的文件夹modules中存在 mod_wsgi.so,(主要就是为了它!!,网上有说下载so文件,拷贝到这个文件夹下,但我没找到哪里下载)
到此安装算成功了,但是我们还是测试一下,看可以用不
在 /usr/local/apache24/cgi-bin/下 建立一个测试脚本 test.wsgi(名字随便,叫wsgi.py更好吧,因为Django就是用这个呢!)
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
以上脚本在官网上也有,我是在谁的博客里复制了一份。复制粘贴的时候,检查一下格式是否符合python
然后配置 sudo vi /usr/local/apache24/conf/httpd.conf
找到一堆LoadModule XXXXXXX的地方,增加一条
LoadModule wsgi_module modules/mod_wsgi.so
在 ScriptAlias /cgi-bin/ "/usr/local/apache24/cgi-bin/" #当然了 注意路径可能不一样
加上
ScriptAlias /test "/usr/local/apache24/cgi-bin/test.wsgi" #起了一个test的别名指向这个文本,可以在浏览器里访问http://127.0.0.1/test
如果出现Hello World!,就成功了,如果没有,再加一窜下面的访问控制权限的!
<Directory "/cgi-bin/">
<Files test.wsgi>
Require all granted
</Files>
</Directory>
到这,环境应该就没问题了,希望你能够顺利到这!
安装Django项目
这里要先说的是,我对与配置文件还不是很熟悉,怎么配置是最小及最优还不是很了解,只能说是能用
到这呢,就只是配置文件的事情了,如果你的python加载模块都正常的话,如果不正常,你看缺少什么模块就加什么,用pip安装很简单,但是pip建议还是源码安装吧
还有就是不要装多个python,就留一个就行了。
这里面主要先改一下
DocumentRoot "/usr/local/apache24/htdocs" 路径换成你的Django的路径,
指向项目目录,不要指向应用下,如 /usr/app/mystie/
mysit
├── dbshell.bat
├── db.sqlite3
├── manage.py
├── migrate.bat #bat文件是我在window上编写程序时写的,可以忽略!
├── mysit
├── __init__.py
├── __init__.pyc
├── settings.py
├── settings.pyc
├── urls.py
├── urls.pyc
├── wsgi.py
└── wsgi.pyc
├── news #我的model view等文件目录
├── static #静态文件的文件目录
└── syncdb.bat
上面的路径很重要,就是写路径的问题了,我DocumentRoot改成下面 DocumentRoot "/usr/app/mysit"
<Directory "/mysit"> #紧邻的文件夹就改成这个,指向应用的目录,下面的目录都是相对于DocumentRoot的
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Require all granted
</Directory>
里面配置这些就可以了 ,注意,网上说2.2版本和2.4版本的授权命令是不一样的,所以你如果查询了好多,会看到allow from all,这个是2.2的等同于 Require all granted在这条ScriptAlias /test "/usr/local/apache24/cgi-bin/test.wsgi"语句下,插入下面的语句,指定django项目的wsgi.py
WSGIScriptAlias / "/usr/app/mysit/mysit/wsgi.py" ###wsgi.py 不用做任何改动,网上好多要加路径的,我觉得既然django就支持这个方式,应该不用动的!
再加一段允许访问的权限,如下,(我没明白为什么还要再给一遍,或者<Directory "/mysit">为什么不行,因为是相对于DocumentRoot了啊???)
<Directory "/usr/app/mysit/mysit">
Require all granted
</Directory>因为我的static放在/usr/app/mysit下的static目录了,所以再加个权限,(我真不知道为什么还加,我就是因为这个问题,弄了2晚上)
<Directory "/usr/app/mysit/static/">
AllowOverride None
Options all
Require all granted
</Directory>
而且我前面的已经加了一个 /mysti的权限了!!!
到此,我访问127.0.0.1/index就可以访问我的程序了,(小问题是登后台,没有样式,并且sqlite3还是访问不了,目前还没解决,先把步骤写了)好了,就写到这吧,互相学习
ubuntu下配置Apache+mod_wsgi+Django项目(个人测试)的更多相关文章
- ubuntu下配置Apache
ubuntu下配置Apache Apache的默认文档根目录是在Ubuntu上的/var/www目录 配置文件是/ etc/apache2/apache2.conf配置存储在的子目录在/etc/apa ...
- Ubuntu下配置Apache的Worker模式
其实Apache本身的并发能力是足够强大的,但是Ubuntu默认安装的是Prefork模式下的Apache.所以导致很多人后面盲目的去 安装lighttpd或者nginx一类替代软件.但是这类软件有一 ...
- Ubuntu下配置apache开启https
一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...
- Ubuntu 下配置apache和APR
软件环境:ubuntu14.04 虚拟机Vmware 软件:http://httpd.apache.org/ httpd-2.2.29.tar.gz 不需要单独下载APR. 1.解压apach ...
- 在ubuntu下配置apache运行python脚本
2008-12-05 常用的简单命令 sudo apt-get remove --purge apache apache2 (彻底删除) sudo /etc/init.d/apache2 r ...
- Ubuntu下配置Apache以及搭载CGI
在Windows下自己下载应用过Apache,在Linux下也用到了服务器,就选择了Apache.Apache的安装在Ubuntu下异常简单. 1. 上网下载自动包安装 sudo apt-get in ...
- 在Ubuntu下配置Apache多域名服务器
1. 目标: 在本机 实现访问不同域名 可以访问不同的目录. 即:访问a.com 进入 /var/www/a 目录下的程序,访问b.com 进入/var/www/b目录下的程序. 2.遇到的问题: / ...
- ubuntu下配置nginx+uwsgi+django
服务器配置是Ubuntu14.04 64位OS ubuntu14.04默认是安装好了python2.7版本不用自己安装了. 先更新下源 sudo apt-get update 第一步先安装pip su ...
- 在 ubuntu 下安装 apache 和 mod_mono ,并测试
1. 保证 ubuntu 能联网. 2. 打开终端,输入:sudo apt-get install apache2 3. 安装完 apache2 后,打开浏览器,输入:http://localhost ...
随机推荐
- 进程间通信系列 之 消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- 原生JS和JQuery代码编写窗口捕捉函数和页面视觉差效果(scroll()、offsetTop、滚动监听的妙用)
想实现窗口滚动到一定位置时,部分网页的页面发生一些变化,但是手头没有合适的插件,所以就想到自己编写一个简易的方法, 想到这个方法要有很高的自由度和适应性,在这,就尽量的削减其功能,若有错误的地方或者更 ...
- 浅析被element.style所覆盖的样式
近日,我在用swiper插件写一个手游官网时,出现了一个很奇怪的问题.问题如下 如上图所示,这里是一个可以左右拖动的ul,每一个英雄介绍都是一个li标签,上图这是正常的情况.可是,它会随机不定期不定时 ...
- Bootstrap Flat UI的select下拉框显示不出来 问题解决
Bootstrap Flat UI的select下拉框显示不出来?看这里,恰巧今天我也遇到了这个问题: 点击Messages后并没有出现下拉列表,然而官网的index.html却能显示出来. 经过一番 ...
- CoreCRM 开发实录 —— 前后端分离的重构
虽然2月初就回来了,可 CoreCRM 一直到5月才开始恢复开发,期间是各种生活中的意外和不方便. 1. 为什么要重构 首先是一件很值得高兴的事情:CoreCRM 有了第一位 contributor! ...
- [UWP]了解模板化控件(9):UI指南
1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性,用于在新建ControlTemplate时使用这些约定的属性. 譬如,修改HeaderedCont ...
- 禁止LISTCTRL表头拖动
禁止ListCtrl表头拖动(Prevent CListCtrl column resizing) /*The header control in the ListView control sends ...
- Java学习笔记——浅谈数据结构与Java集合框架(第三篇、Map)
桃李春风一杯酒,江湖夜雨十年灯 --寄黄几复 之前图上写错了,是Hashtable类.t是小写的,它是个很古老的类,以至于命名都没有那么规范.. HashMap HashMap就是存储key-valu ...
- RabbitMQ4--发后即忘和RPC
在项目中引入RabbitMQ通常会考虑它会带来的好处:解耦应用程序,实现不同编程语言之间的互通,解除对特定通信协议的依赖,解除应用程序在时序上执行的依赖(异步).落实到代码层面就是两种常用应用模式:& ...
- 技术福利:mysql数据库的基本命令汇总整理
一.创建数据库: create database database_name: php中创建数据库的两种方法:(mysql_create_db(),mysql_query()) $conn = mys ...