写在前面
因为不同版本的apache等软件文件夹和配置文件的名称设置都不尽相同,网上累死累活查了好多个博客就没一个能成功配出来的。
所以本文也不一定能帮到你,请在确定对自己有用之前不要盲目转载,以免给后来人制造更多的信息筛选负担。
Made By:CSGrandeur
 
写本文时各软件的版本
apache2:2.4
Django:1.6.1
MySQL:5.5.37
Python:2.7.6
apache版本不同,配置文件的地方和名称可能不同。比如看网上的教程,作死也找不到httpd.conf。。。
 
各种安装
先考虑要不要
sudo apt-get update
sudo apt-get upgrade

然后

python是预装的,python --version查看
装Apache、wsgi、Django、MySQL、MySQLdb
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi
sudo apt-get install python-django
sudo apt-get install mysql-server mysql-client
sudo apt-get install python-mysqldb

设置apache文件夹权限

cd /etc/apache2
sudo nano apache2.conf
找到
<Directory />
Options FollowSymLinks
AllowOverride None
#Require all denied
Allow from all
</Directory>

井号是我加的,Alow from all也是加的,改成这个样子就是了。

 
建立Django工程目录
不建议建在/var/www,如果系统设置问题导致不识别.py为网页文件时,/var/www作为Apache默认Web文件夹,.py源文件将可以被下载而泄漏。
我把文件放在了/home/djangoapps/
sudo mkdir /home/djangoapps
sudo mkdir /home/djangoapps/work

创建Django工程(网页文件夹)

cd /home/djangoapps/work
django-admin startproject mysite

建wsgi

在随便哪里建wsgi,比如

sudo nano /home/djangoapps/work/mysite/apache/django.wsgi

填入如下内容

import os
import sys
path = '/home/djangoapps/work/mysite'
if path not in sys.path:
sys.path.insert(0, '/home/djangoapps/work/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

path是刚创建的工程文件夹位置,对应"mysite"的地方都是对应那个工程的名字。

建站点设置文件

去/etc/apache2/sites-available/建站点设置文件
cd /etc/apache2/sites-available
sudo nano mysite.conf

填入如下内容

<VirtualHost *:80>
#ServerName hello.djangoserver
DocumentRoot /home/djangoapps/work/mysite
<Directory /home/djangoapps/work/mysite>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess mydjangosite processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup mydjangosite
WSGIScriptAlias / /home/djangoapps/work/mysite/apache/django.wsgi
</VirtualHost>

为了让内容干净,解释就在外面说了:

ServerName这里注释掉了,可以设置域名的,设置这里的话其他地方也要配合设置
两个路径都是刚刚建的工程的路径
关于WSGIxxxx三条设置后面再说。
WSGIScriptAlias 空格 / 空格 /wsgi的路径。前面那个'/'可以是/xxxx什么的,访问的方式是 localhost/xxxx,不过我没成功@_@,所以就一个孤零零的 '/'吧。
 
启动站点
别离开/etc/apache2/sites-available
sudo a2ensite mysite
sudo service apache2 reload

Django站点已经配置好了,但是这时访问127.0.0.1看到的是apache页面。

————————————————————————————————————————
 
关于端口
在/etc/apache2/sites-available可以看到000-default.conf,这个就是apache默认的站点,对应/var/www/html
如果都用80端口的话,访问到的是apache,而不是刚建的django。
可以关闭这个站点,
sudo a2dissite -default
sudo service apache2 reload

这时就能正常访问刚建的django站点了。

也可以换个端口,在mysite.conf文件中,<VirtualHost *:80>改成<VirtualHost *:xxxx>自己要的端口,比如8000。
然后改ports.conf
cd /etc/apache2
sudo nano ports.conf

看到Listen 80了吧,下面加一行 Listen 8000,就能用8000端口了。

sudo service apache2 reload

这样127.0.0.1访问的是apache站点,127.0.0.1:8000访问的就是我们的django站点了。

关于WSGIxxxx
mod_wsgi 有两种运行模式,
第一种是嵌入模式,类似于mod_python,直接在apache进程中运行,这样的好处是不需要另外增加进程,但是坏处也很明显,所有内存都和apache共享,如果和mod_python一样造成内存漏洞的话,就会危害整个apache。而且如果apache是用worker mpm,mod_wsgi也就强制进入了线程模式,这样子对于非线程安全的程序来说就没法用了。
这种模式下只需要在apache下面设置
WSGIScriptAlias /path /path-to-wsgi
即可生效,对于小型脚本的话,直接用这种模式即可。
第二种是后台模式,类似于FastCGI的后台,mod_wsgi会借apache的外壳,另外启动一个或多个进程,然后通过socket通信和apache的进程联系。
这种方式只要使用以下配置即可开启:
#启动WSGI后台,site1是后台名字
WSGIDaemonProcess site1 processes=2 threads=15 display-name=%{GROUP}
#分配当前上下文应该使用哪个WSGI后台,可以放在Location里面指定
WSGIProcessGroup site1
#根据当前上下文的ProcessGroup分配到对应的后台
WSGIScriptAlias /path /path-to-wsgi
后台模式由于是与apache进程分离了,内存独立,而且可以独立重启,不会影响apache的进程,如果你有多个项目(django),可以选择建立多个后台或者共同使用一个后台。
比如在同一个VirtualHost里面,不同的path对应不同的django项目,可以同时使用一个Daemon:
WSGIDaemonProcess default processes=1 threads=1 display-name=%{GROUP}
WSGIProcessGroup default
WSGIScriptAlias /project1 “/home/website/project1.wsgi”
WSGIScriptAlias /project2 “/home/website/project2.wsgi”
这样子两个django都使用同一个WSGI后台。
也可以把不同的项目分开,分开使用不同的后台,这样开销比较大,但就不会耦合在一起了。
display-name是后台进程的名字,这样方便重启对应的进程,而不需要全部杀掉。
WSGIDaemonProcess site1 processes=1 threads=1 display-name=%{GROUP}
WSGIDaemonProcess site2 processes=1 threads=1 display-name=%{GROUP}
<Location “/project1″>
WSGIProcessGroup site1
</Location>
WSGIScriptAlias /project1 “/home/website/project1.wsgi”
<Location “/project1″>
WSGIProcessGroup site2
</Location>
WSGIScriptAlias /project2 “/home/website/project2.wsgi”
对于django 1.0以下的版本,由于官方认定不是线程安全的,所以建议使用多进程单线程模式
processes=n threads=1
但是我自己在用django 0.9.6,使用多线程模式在很多项目里面基本都没有问题,包括在worker模式下面使用mod_python,其实是一样的道理,呵呵。
升级到django 1.0以后,就可以放心的使用多进程多线程模式了:
processes=2 threads=64
这样子性能会更好。
下面是两种模式的英文原文:
When hosting WSGI applications using mod_wsgi, one of two primary modes of operation can be used. In ‘embedded’ mode, mod_wsgi works in a similar way to mod_python in that the Python application code will be executed within the context of the normal Apache child processes. WSGI applications when run in this mode will therefore share the same processes as other Apache hosted applications using Apache modules for PHP and Perl.
An alternate mode of operation available with Apache 2.X on UNIX is ‘daemon’ mode. This mode operates in similar ways to FASTCGI/SCGI solutions, whereby distinct processes can be dedicated to run a WSGI application. Unlike FASTCGI/SCGI solutions however, a separate infrastructure is not needed when implementing the WSGI application and everything is handled automatically by mod_wsgi.
Because the WSGI applications in daemon mode are being run in their own processes, the impact on the normal Apache child processes used to serve up static files and host applications using Apache modules for PHP, Perl or some other language is much reduced. Daemon processes may if required also be run as a distinct user ensuring that WSGI applications cannot interfere with each other or access information they shouldn’t be able to.

查看

Ubuntu14.04 Server amd64 配置 Apache+MySQL+Django的更多相关文章

  1. ubuntu14.04(server amd64)免密码sudo

    vi /etc/sudoers.d/nopasswd4sudo 加入以下内容 用户名 ALL=(ALL) NOPASSWD : ALL

  2. ubuntu14.04 server ftp 服务安装配置详解

    ubuntu14.04 server ftp 服务安装配置详解 cheungmine 2016-01-27 http://wiki.ubuntu.com.cn/Vsftpd 0 安装好vsftpd服务 ...

  3. 记录在Ubuntu 18.04系统中安装Apache, MySQL和PHP环境

    虽然我们在Linux VPS.服务器安装WEB环境比较方便,可以选择面板或者一键包,但是有些我们需要深入学习的网友不会选择一键安装,而是会尝试编译安装.这样可以学到一些内在的技术.一般我们较为习惯选择 ...

  4. 阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql

    此教程中使用的相关IP等设置,在你的环境中要做相应修改. 使用之前更新apt-get,因为服务器基本上是一个裸系统 apt-get update;apt-get upgrade; 1 我们使用root ...

  5. Ubuntu14.04安装和配置Tomcat8.0.12(转)

    Ubuntu14.04长的好看,所以一时间很感兴趣,研究各种软件的安装和开发环境的配置.今天先把安装的tomcat 8.0.12的教程分享给大家.如果你需要,请收藏!!!   工具/原料 系统环境:U ...

  6. Ubuntu14.04安装和配置Tomcat8.0.12

    Ubuntu14.04长的好看,所以一时间很感兴趣,研究各种软件的安装和开发环境的配置.今天先把安装的tomcat 8.0.12的教程分享给大家.如果你需要,请收藏!!!   官方网站下载最新的tom ...

  7. ubuntu14.04下简易二进制安装mysql

    下载mysql-commnunity的5.6.24通用二进制版 tar解压 我安装到/opt目录,所以mv到/opt/ 可选,建了个软链 ln -s *** mysql 添加运行mysql服务的用户和 ...

  8. ubuntu14.04上Trac配置记录

    系统环境:ubuntu14.04 (并假设Apache2服务可以正常运行) 1. 安装软件: sudo aptitude install trac python-mysqldb 2. 创建数据库Tra ...

  9. Mac OS X 配置 Apache+Mysql+PHP 详细教程

    网上的教程已经有很多,这里简洁的记录一下.以 Mac OS X Mavericks 10.9.X 为例. 先附上如何进入指定目录文件夹,按键盘 Command + Shift + G ,然后输入指定目 ...

随机推荐

  1. Junit4.x扩展:运行指定方法

    相信很多道友搞开发的一般都会用到Junit单元测试工具,不知道大家有没有遇到一个这样的问题: 有的单元测试用例有很多@Test方法,甚至有的方法会执行很长时间,只能空等执行.而实际上我们只需要运行其中 ...

  2. [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

    示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ...

  3. Unity3D中定时器的使用

    源地址:http://unity3d.9tech.cn/news/2014/0402/40149.html 在游戏设计过程中定时器是必不可少的工具,我们知道update方法是MonoBehavior中 ...

  4. [BZOJ1659][Usaco2006 Mar]Lights Out 关灯

    [BZOJ1659][Usaco2006 Mar]Lights Out 关灯 试题描述 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的 ...

  5. js判断元素是否隐藏的方法

    代码如下: JavaScript代码如下: if( document.getElementById("div").css("display")==='none' ...

  6. JSP基本面试的试题

    JSP基本面试的试题 1.jsp有哪些内置对象作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):      request 用户端请求,此请求会包含来自GET/PO ...

  7. github student pack中的digital ocean可以使用银联卡支付

    申请了 github student pack却因为一直没有visita信用卡,而无法使用digital ocean的 $50,一直到今天,用中国银行借记卡成功支付. 方法是: (1)注册paypal ...

  8. linux 下查看某个端口是否被占用

    lsof -i:端口号 转自: http://my.oschina.net/u/193184/blog/146885

  9. Java常用排序算法+程序员必须掌握的8大排序算法

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  10. poj 1664

    http://poj.org/problem?id=1664 题目是中文的,一个递归的题目 把每一次的苹果分为两类 Ⅰ:所以盘子都放一个,然后其他的在随便放: Ⅱ:有一个盘子没有放苹果: 这样下去的话 ...