Apache上部署Django
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的更多相关文章
- apache上部署django的静态文件
一直在优化自己博客的代码, 昨天把css样式表分离出来, 用作静态 文件, 但是自己还没学django怎么使用静态文件, 经过一番google 终于解决了. django 使用静态文件有两种方法, 一 ...
- 在Apache上部署Django
跟php类似,要想使Apache能够处理python脚本(实际上Apache是不能处理脚本的,只是利用别的扩展模块处理相应脚本),就要给Apache安装相应的扩展模块. Apache起初的python ...
- 如何一步步在生产环境上部署django和vue
本文由云+社区发表 本文主要讲述了如何一步步在生产环境上部署django和vue,操作系统默认为centos 说明:后文中出现的以下字符串均表示具体的路径或者名称,含义如下: DJANGO_DIR-- ...
- CentOS上部署Django+Nginx+Uwsgi环境
在CentOS上部署Django+Nginx+Uwsgi环境 奇谭 2016-09-01 评论 Linux python django nginx uwsgi VirtualEnv的作用:创建隔 ...
- 基于Nginx和uWSGI在Ubuntu上部署Django项目
前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...
- Ubuntu下Apache中部署Django
环境:ubuntu12.04 server | apache2 | django1.6 | python2.7 | mod_wsgi 1. 安装apache2: sudo apt-get instal ...
- 服务器上部署django项目流程?
1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 然后将源码 ...
- 在pythonanywhere上部署Django应用
参考:https://tutorial.djangogirls.org/zh/deploy/ 资料讲的很明了,仅在设置上做几点补充. 1.设置相对路径 import os BASE_DIR = os. ...
- 全站之路一路坑(2)——在Apache下部署django博客
上一篇博客:全栈之路一路坑之使用django开发博客 开发完博客之后,很多后续应用需要博客部署之后才可以使用,这篇文章就来尝试一下将开发好的博客部署到服务器上. 开发阶段,一直使用的是virtuale ...
随机推荐
- POJ 1753 Flip Game(高斯消元+状压枚举)
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45691 Accepted: 19590 Descr ...
- 浅谈后缀自动机SAM
一下是蒟蒻的个人想法,并不很严谨,仅供参考,如有缺误,敬请提出 参考资料: 陈立杰原版课件 litble 某大神 某大神 其实课件讲得最详实了 有限状态自动机 我们要学后缀自动机,我们先来了解一下自动 ...
- IX Samara Regional Intercollegiate Programming Contest F 三分
F. Two Points time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 在vue中使用Element-UI
Element-UI是一套基于Vue2.0的UI组件库,http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element ...
- mac 安装 homebrew 配置
前言:刚开始转换系统可能安装各种软件继续中... 1. 打开 Mac 中的命令行工具(终端) 2. 在打开的命令行工具中输入如下语句: ruby -e "$(curl --insecure ...
- Gate Of Babylon(bzoj 1272)
Description Input Output Sample Input Sample Output 12 HINT /* 容斥+lucas+乘法逆元 首先,看到有限制的只有15个,因此可以用容斥原 ...
- Repeater的使用及其鼠标特效,行链接的使用
原文发布时间为:2009-04-22 -- 来源于本人的百度文章 [由搬家工具导入] <asp:Repeater ID="rpt" runat="server&qu ...
- hdu 6218 Bridge 线段树 set
题目链接 题意 给一个\(2\)x\(n\)的矩阵,每个格子看成一个点,每个格子与相邻的格子间有边.现进行一些加边与删边操作,问每次操作后图中有多少条割边. 思路 参考 https://www.cnb ...
- 小甲鱼PE详解之资源(PE详解11)
原文出自:www.fishc.com 最近一直在安排第一届鱼C 学习班的事情,忙活了好一阵子,真是对不住大家,还大家久等了,这里要跟大家说声不好意思 ^_^ 今天我们来谈谈资源部分,资源部分可以说是 ...
- JavaScript变量提升和函数声明预解析
1.首先理解函数作用域 在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的.也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的.而如果该变量是 ...