如何将Django部署到Apache服务器上
操作环境:
- Ubuntu 16.04
- Apache 2.4
- Django 1.9
- Python 2.7
- mod_wsgi
前言:本教程纯自己查阅资料后整理,望对大家有帮助!
1. 安装 mod_wsgi
这里默认大家已经会如何安装 Apache、Django、Python 了,直接教如何安装mod_wsgi。
需知:网上有很多用mod_python的,但是mod_python部署的方式在django的1.4及1.4之前是可以的,但是从django1.5开始,废弃了这种方式,django官网推荐使用wsgi方式,也就是我们用的mod_wsgi。
官方声明如下:
If you’re new to deploying Django and/or Python, we’d recommend you try mod_wsgi first. In most cases it’ll be the easiest, fastest, and most stable deployment choice.
安装:
sudo apt-get install libapache2-mod-wsgi #Python2
sudo apt-get install libapache2-mod-wsgi-py3 #Python3
官方文档:http://flask.pocoo.org/docs/0.10/deploying/mod_wsgi/
2. 建立一个Django工程
我们在 /var/www 下创建文件夹 mysite,然后键入mysite文件夹
cd /var/www
创建Django工程,我们命名为:testproject
django-admin startproject testproject
我的目录:(因为我的项目名是wangcwblog,所以就没做更改,如果按照教程来是testproject)

3. 修改Apache配置文件
ubuntu的apache2配置文件在 /etc/apache2/ 下。
新建一个网站配置文件:
sudo vi /etc/apache2/sites-available/testdjango.conf
#testdjango.conf名字可以随意换,这里为了直观
内容如下:
<VirtualHost *:80>
ServerName www.yourdomain.com
#ServerAlias otherdomain.com
#ServerAdmin youremail@gmail.com # 存放用户上传图片等文件的位置,注意去掉#号
#Alias /media/ /var/www/wangcwblog/media/ # 静态文件(js/css/images)的存放位置
#Alias /static/ /var/www/wangcwblog/collected_static/ # 允许通过网络获取static的内容
<Directory /var/www/ProjectName/static/>
Require all granted
</Directory> # 最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /
WSGIScriptAlias / /var/www/wangcwblog/wangcwblog/wsgi.py
# wsgi.py文件的父级目录,第一个ProjectName为Django工程目录,第二个ProjectName为Django自建的与工程同名的目录
<Directory /var/www/wangcwblog/wangcwblog/>
<Files wsgi.py>
Require all granted
</Files>
</Directory> </VirtualHost>
通过修改上面的文件,你就可以让Apache找到你的Django工程,上边可以修改的内容包括:
- 80:修改80为其他数字,可以更改你的端口号,国内的电信貌似把80端口给封了(如果你的域名没有备案的话)。注意,还要修改
/etc/apache2/port.conf文件中的Listen *port*。 - ServerName:后边改成你自己的域名,如果没有的话就用IP代替。注意,如果改成了域名,还需要修改Django工程下的
seeting.py文件,将其ALLOWED_HOSTS=[]改为ALLOWED_HOSTS=['www.yourdomain.com'],多个域名可以通过逗号隔开。 - ServerAlias:你的其他域名或IP。
最后要让这个配置文件生效,你需要运行
sudo a2ensite testdjango.conf
有时候,你可能需要让它失效(因为你将yoursite.conf改名为其他名字?),可以运行
sudo a2dissite testdjango.conf
做完以上步骤,Apache会提醒你要执行sudo service apache2 relaod,这条命令主要是你手动命令Apache根据你刚才配置的yoursite.conf去寻找Django工程,当然我一般都是restart,如果你的Apache不为其他的网站提供服务,那么你也restart吧,因为重启大法好!每次你修改Django工程文件之后,都要restart一下,它才会生效。
4. 修改Django的wsgi.py文件
上面的配置中写的 WSGIScriptAlias 就是把apache2和你的网站Django project联系起来了。
切换到我们刚刚建立的django项目目录:
cd /var/www/wangcwblog
编辑 testproject/wsgi.py 文件:
sudo vi wangcwblog/wsgi.py
内容:
import os
import sys
from os.path import join,dirname,abspath
from django.core.wsgi import get_wsgi_application PROJECT_DIR = dirname(dirname(abspath(__file__))) sys.path.insert(0,PROJECT_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wangcwblog.settings") application = get_wsgi_application()
这个配置文件的作用也是让Apache找到Djanog,毕竟不能一厢情愿吗,Apache同意和Django“交往”了,但是万一人家Django不乐意呢?
最后,还记得我说的嘛?
6. 调试错误
1.如果你的网站没有加载静态文件(js/css/images),请检查你的静态文件是不是在ProjectName/static下,而不是在ProjectName/AppName/static下(改这里边的文件是不用重启Apache的)。
2.不知道啥问题,就是不管用,请查看Apache的错误文档。cat /var/log/apache2/error.log
3.No module named xxxx。首先检查一下你所依赖的库是否安装全了,没有的话就pip install。
4.No module named django或者其他含django的错误。这说明你的环境搭错了。往上翻error.log,找到AH00489开头的错误,看看你到底用的是什么环境。一般都是你第二步Apache的Python解释器安装错误。
这里根据可根据提示重启Apache,此时已经成功,访问云服务器的公网IP,或者打开本地IP(127.0.0.1)可以看到如下界面:

表示Django工程已经成功与Apache链接~~~
7. 设置目录和文件权限
一般目录权限设置为 755,文件权限设置为 644
假如项目位置在 /home/tu/zqxt (在zqxt 下面有一个 manage.py,zqxt 是项目名称)
cd /home/tu/
sudo chmod -R zqxt
sudo find zqxt -type d -exec chmod \{\} \;
apache 服务器运行用户可以在 /etc/apache2/envvars 文件里面改,这里使用的是默认值,当然也可以更改成自己的当前用户,这样的话权限问题就简单很多,但在服务器上推荐有 www-data 用户,更安全。以下是默认设置:
# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc. export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
上传文件夹权限
media 文件夹一般用来存放用户上传文件,static 一般用来放自己网站的js,css,图片等,在settings.py中的相关设置
STATIC_URL 为静态文件的网址 STATIC_ROOT 为静态文件的根目录,
MEDIA_URL 为用户上传文件夹的根目录,MEDIA_URL为对应的访问网址
在settings.py中设置:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/dev/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static') # upload folder
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
在 Linux 服务器上,用户上传目录还要设置给 www-data 用户的写权限,下面的方法比较好,不影响原来的用户的编辑。
假如上传目录为 zqxt/media/uploads 文件夹,进入media文件夹,将 uploads 用户组改为www-data,并且赋予该组写权限:
cd media/ # 进入media文件夹
sudo chgrp -R www-data uploads
sudo chmod -R g+w uploads
备注:这两条命令,比直接用sudo chown -R www-data:www-data uploads 好,因为下面的命令不影响文件原来所属用户编辑文件,fedora系统应该不用设置上面的权限,但是个人强烈推荐用ubuntu,除非你对linux非常熟悉,你自己选择。
如果你使用的是sqlite3数据库,还会提示 Attempt to write a readonly database,同样要给www-data写数据库的权限
进入项目目录的上一级,比如project目录为 /home/tu/blog 那就进入 /home/tu 执行下面的命令(和修改上传文件夹类似)
sudo chgrp www-data blog
sudo chmod g+w blog
sudo chgrp www-data blog/db.sqlite3 # 更改为你的数据库名称
sudo chmod g+w blog/db.sqlite3
备注:上面的不要加 -R ,-R是更改包括所有的子文件夹和文件,这样不安全。个人建议可以专门弄一个文件夹,用它来放sqlite3数据库,给该文件夹www-data写权限,而不是整个项目给写权限,有些文件只要读的权限就够了,给写权限会造成不安全。
以上皆参考涂伟忠老师的自强学堂,我自己搭建Django+Apache2时的心得,如果还不明白,可以去自强学堂看看。
如何将Django部署到Apache服务器上的更多相关文章
- Django项目部署到Apache服务器上
之前写了把Django部署到XAMPP上,但是有bug,翻apache日志的时候发现会无法import _ssl,然后我就怒而直接装apache2了 配置方法大约和这篇文章差不多 安装必要的包 sud ...
- Django项目部署到Apache服务器
本文讲述的是在阿里云服务器(ECS)上部署Django项目于Apache,服务器操作系统为ubuntu,公网Ip地址为123.56.30.151. 将Django部署到Apache服务器的原因 Dja ...
- django部署到apache上(非常重要的,3者版本要一致,是32位就都要是32位的)
网上把django部署到apache的文章挺多的,但是按照大家的操作,并没有一次就成功,还是遇到了一些问题,这里主要有以下几个情况. 1.网上找到的mod_wsgi的版本问题,导致动态库加载不上. 2 ...
- django项目部署在Apache服务器中,静态文件路径的注意点
django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...
- 详细的图文教程来实现 eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上
很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置tomcat时,总会有种难下手的感觉,在此,通过图文解说的方法,最直观的向大家演示一遍该配置过程. 第一部分:eclipse环境下如何配 ...
- Django部署到Apache Web Server
Windows环境下,将Django部署到Apache Web Server 在Windows上部署Django(用mod_wsgi)会出现各种奇怪的问题,现简单记录下配置过程及遇到的错误及解决方法. ...
- springboot 定时任务部署至linux服务器上后会执行两次问题
springboot定时任务在本地运行时,正常执行且只执行一次,但是在maven打包成war包,部署至linux服务器上之后,定时任务奇怪的执行了两次. 由于未做负载均衡,所以可以先排除是因为多台服务 ...
- 在Apache服务器上安装SSL证书
参考:链接 前提条件 1.您的Apache服务器上已经开启了443端口(HTTPS服务的默认端口) // 开通443端口 firewall-cmd --zone=public --add-port=4 ...
- django程序在windows服务器上发布
django程序在windows服务器上发布 参考文献:https://www.cnblogs.com/djangocn/p/10227006.html 1.安装 IIS 和 GCI 打开服务器管理器 ...
随机推荐
- iOS开发——生命周期
为了处理好应用程序的挂起.暂停等情况下的数据保存,或对应添加所需处理,我们必须了解ios生命周期. 但是不要去背去记,做个实验就好. - (BOOL)application:(UIApplicatio ...
- explorer.exe中发生未处理的win32异常
explorer.exe中发生未处理的win32异常的错误提示,是windows系统比较常见的错误事件,多数在开机遇到,也有在电脑使用过程中遇到. 了解explorer.exe进程 从百度百科了解到, ...
- Java 常用工具类之基本对象包装类
为了方便操作基本数据类型值, 将其包装成对象, 在对象中定义了属性和行为, 丰富了该数据的操作. 用于描述该对象的类就称为基本数据类型对象包装类. 基本数据类型对应关系 基本数据类型(8种) 包装类 ...
- 最全的Eclipse使用快捷键
Eclipse 是一种基于 Java 的可扩展开源开发平台.尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言,Eclipse 还包括插件开发环境等,下面将为大家介 ...
- ie6不能播放视频问题
前几天做项目时碰到一个非常棘手的问题.在我自己本机的ie8上能正常播放视频的程序(ie6也能够),放用户的电脑上就是不能正常播放(可能是用户的机子系统太老或是别的什么原因.详细的我也不太清楚).没办法 ...
- Linux上free命令的输出及其他
一.明确概念 A buffer is something that has yet to be "written" to disk. A cache is something t ...
- Tensorflow 学习笔记(一)TensorFlow入门
一.计算模型----计算图 1.1 计算图的概念:TensorFlow就是通过图的形式绘制出张量节点的计算过程,例如下图执行了一个a+b的操作. 1.2 计算图的使用 TensorFlow程序一般分为 ...
- day3-python的函数及参数
函数式编程最重要的是增强代码的重用性和可读性 1 2 3 4 def 函数名(参数): ... 函数体 ... 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函 ...
- MySQL-5.7 DELETE语句详解
1.语法 (1)单表 DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [, partit ...
- zabbix安装配置agent程序之agent配置文件详解
安装zabbix-agent http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/ 下载:zabbix-agent-3.2.0-1.el6.x86_64.r ...