0. 部署环境

Ubuntu 14.04 on AliYun

Apache 2.4.7

Python 3 [2.7升级3请看http://www.cnblogs.com/manhua/p/4235049.html]

Django 1.7.3

1. 安装apache

sudo apt-get install apache2
如果之前安装配置过apache2的并且配置很乱,无法修复,建议还是完全卸载之后在安装。完全卸载的命令:
sudo apt-get --purge remove apache-common
sudo apt-get --purge remove apache*

apache2相关的操作:
启动:sudo service apache2 start
停止:sudo service apache2 stop
重启:sudo service apache2 restart

配置文件的位置:
可执行程序:/usr/sbin/apache2
配置文件:/etc/apache2
网站文件:/var/www
(网站的默认位置可以在/etc/apache2/sites-available/default中更改,修改DocumentRoot /var/www改成自己的网站存放地址即可)

2. 安装mod_wsgi.so

2.x python:
sudo apt-get install libapache2-mod-wsgi
3.x python:
sudo apt-get install libapache2-mod-wsgi-py3

#若数据库为mysql,需要连接器
sudo apt-get install mysql-server mysql-client
sudo apt-get install python-mysqldb

3. 安装Django

sudo pip3 install django

4. 创建/上传Django工程

不建议建在/var/www,如果系统设置问题导致不识别.py为网页文件时,/var/www作为Apache默认Web文件夹,.py源文件将可以被下载而泄漏。

mkdir -p /www2
cd /www2
django-admin startproject mysite
完成代码后在随便哪里建wsgi,比如
sudo nano /www2/mysite/apache/django.wsgi

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

【warning】 上面的代码会引起错误

Django:The translation infrastructure cannot be initialized before the apps registry is ready

修改为如下

import os
import sys
path = '/www2/mysite'
if path not in sys.path:
sys.path.insert(0, '/www2/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

5. apache站点设置文件

apache2.4.7 (Ubuntu 14) [Apache2 Ubuntu Default Page]

cd /etc/apache2/sites-available
sudo nano mysite.conf

<VirtualHost *:8000>
#ServerName hello.djangoserver
DocumentRoot /www2
<Directory /www2>
#DirectoryIndex testMain.html
# Options Indexes FollowSymLinks
Require all granted
</Directory> WSGIDaemonProcess mydjangosite processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup mydjangosite
WSGIScriptAlias / /www2/mysite/apache/django.wsgi
</VirtualHost>

【IGNORE】apache 2.2 (Ubuntu 12) [It works!]

apache2.2主要配置为/etc/apache2/apache2.conf,端口配置在ports.conf,网站根目录在/etc/apache2/sites-available/default,额外的配置可以写在httpd.conf中(默认为空,会被主配置用Include httpd.conf语句引入)

# Include module configuration:
Include mods-enabled/*.load
Include mods-enabled/*.conf # Include all the user configurations:
Include httpd.conf # Include ports listing
Include ports.conf

修改httpd.comf,添加如下内容

WSGIScriptAlias / /www2/mysite/apache/django.wsgi
WSGIPythonPath /www2/mysite <Directory /www2/mysite>
<Files django.wsgi>
Order deny,allow
Allow from all
</Files>
</Directory>

https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/

6. 启动站点

别离开/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 000-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站点了

PS.出错的话,一定要多看看apache2的err log。
命令行输入: tail /var/log/apache2/error.log

7. 关于使用django的admin时SQLite出现的问题

服务器不仅需要对数据库文件可写,而且要对包含该数据库文件的文件夹可写

1.数据库所在文件夹chmod 777

2.数据库文件 chmod 777

django sqlite3 OperationalError: attempt to write a readonly database

Django-想说爱你真不容易--解决“Unable to open database file”(原创)

Reference:

http://www.cnblogs.com/CSGrandeur/p/3741871.html

Apache上部署Django的更多相关文章

  1. apache上部署django的静态文件

    一直在优化自己博客的代码, 昨天把css样式表分离出来, 用作静态 文件, 但是自己还没学django怎么使用静态文件, 经过一番google 终于解决了. django 使用静态文件有两种方法, 一 ...

  2. 在Apache上部署Django

    跟php类似,要想使Apache能够处理python脚本(实际上Apache是不能处理脚本的,只是利用别的扩展模块处理相应脚本),就要给Apache安装相应的扩展模块. Apache起初的python ...

  3. 如何一步步在生产环境上部署django和vue

    本文由云+社区发表 本文主要讲述了如何一步步在生产环境上部署django和vue,操作系统默认为centos 说明:后文中出现的以下字符串均表示具体的路径或者名称,含义如下: DJANGO_DIR-- ...

  4. CentOS上部署Django+Nginx+Uwsgi环境

    在CentOS上部署Django+Nginx+Uwsgi环境 奇谭  2016-09-01 评论  Linux  python django nginx uwsgi VirtualEnv的作用:创建隔 ...

  5. 基于Nginx和uWSGI在Ubuntu上部署Django项目

    前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...

  6. Ubuntu下Apache中部署Django

    环境:ubuntu12.04 server | apache2 | django1.6 | python2.7 | mod_wsgi 1. 安装apache2: sudo apt-get instal ...

  7. 服务器上部署django项目流程?

    1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 然后将源码 ...

  8. 在pythonanywhere上部署Django应用

    参考:https://tutorial.djangogirls.org/zh/deploy/ 资料讲的很明了,仅在设置上做几点补充. 1.设置相对路径 import os BASE_DIR = os. ...

  9. 全站之路一路坑(2)——在Apache下部署django博客

    上一篇博客:全栈之路一路坑之使用django开发博客 开发完博客之后,很多后续应用需要博客部署之后才可以使用,这篇文章就来尝试一下将开发好的博客部署到服务器上. 开发阶段,一直使用的是virtuale ...

随机推荐

  1. svg图片做图标字体

    https://icomoon.io 这个网站,把svg变图标

  2. python 对比两个字典的差异

    实际遇到的问题逻辑很繁杂,就不全写了.最后是通过对比两个字典差异来解决的.找出两个字典的差异,可参考以下代码. dict1 = {'a':1,'b':2,'c':3,'d':4} dict2 = {' ...

  3. javascript实现htmlEncode与htmlDecode

    原文发布时间为:2011-04-19 -- 来源于本人的百度文章 [由搬家工具导入] htmlencode with javascript function htmlEncode(html) {    ...

  4. 最近发的一些csdn下载资源

    原文发布时间为:2009-11-02 -- 来源于本人的百度文章 [由搬家工具导入] http://wjwu1988.download.csdn.net/treeview的datasource类    ...

  5. duilib入门简明教程 -- 部分bug (11) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3344886.html  一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 ...

  6. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---15

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  7. 有道词典中的OCR功能:第三方库的变化

    之前有点好奇有道词典中的OCR功能,具体来说就是强力取词功能.我知道的最有名的OCR库是tesseract,这个库是惠普在早些年前开源的. 在用python做爬虫处理验证码的时候,就会用到这个库,对应 ...

  8. Day 32 process&threading_4

    线程和进程 4 一.multiprocessing模块 multiprocessing包是Python中的多进程管理包. 与threading.Thread类似,它可以利用multiprocessin ...

  9. git的使用学习(九)搭建git服务器

    搭建Git服务器 在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商 ...

  10. hdu 3639 有向图缩点+建反向图+搜索

    题意:给个有向图,每个人可以投票(可以投很多人,一次一票),但是一个人只能支持一人一次,支持可以传递,自己支持自己不算,被投支持最多的人. 开始想到缩点,然后搜索,问题是有一点想错了!以为支持按票数计 ...