Django +Apache部署在ubantu服务器上

今天折腾了一天,来回试了 apache+mod_wsgi 跟Nginx+Gunicorn各种姿势部署自己的小博客
发现网上搜的教程各种坑

Paste_Image.png

我能说打开的标签窗口数=这图*5吗?

好吧。废话不多说,这里献上我踩坑之路
apache+mod_wsgi

环境以及软件版本

  • ubantu16.04
  • python 3.5
  • django 1.10.4
  • apache 2.4
    顺便扯淡一句:django我习惯用python3.x ,因为python2.X各种字符集问题(谁用谁懂)

如果使用apt-get 安装的软件 请看清版本

1. 第一步:安装各种软件

下载apache并检查版本

sudo apt-get install apache2
apachectl -v 

下载mod_wsgi建立apache与django的联系(看清楚自己python版本下载)

 sudo apt-get install libapache2-mod-wsgi      #Python2
 sudo apt-get install libapache2-mod-wsgi-py3  #Python3

安装django

sudo pip3 install django

建立django与apache联系

具体来说,分为以下四步:

  1. 将django项目放在/var/www/目录下
  2. 修改apache虚拟主机配置文件
  3. 配置文件生效
  4. 重启apache服务
    5.修改Django的wsgi.py文件
    重要事情说三遍

以下配置中{$~~~ $}的内容请根据自己项目填,以及我默认你用root账号登陆服务器,权限不够请加root

以下配置中{$~~~ $}的内容请根据自己项目填,以及我默认你用root账号登陆服务器,权限不够请加root

以下配置中{$~~~ $}的内容请根据自己项目填,以及我默认你用root账号登陆服务器,权限不够请加root

apache默认网站目录是/var/www/

1.

cd /var/www/
git clone {yourproject}

好了,你的django項目順利安家了

2.

一般的,apache文件夹结构图为:

# /etc/apache2/
# |-- apache2.conf
# | `-- ports.conf
# |-- mods-enabled
# | |-- *.load
# | `-- *.conf
# |--mods-available
# |-- conf-enabled
# | `-- *.conf
# `-- sites-enabled
# `-- *.conf
#|--site-available
#|--site-enabled

你需要在site-available文件夹中新建自己项目的配置文件

vi /etc/apache/site-available/{$projectname$}.conf

填入以下信息(或者你可以复制粘贴后修改成自己的配置)

<VirtualHost *:80>
#默认监听80端口
ServerName www.yourdomain.com 
#servername 填自己的域名或者ip
#ServerAlias otherdomain.com
#ServerAdmin youremail@gmail.com 

# 存放用户上传图片等文件的位置,注意去掉#号
#Alias /media/ /var/www/{$ProjectName$}/media/ 

# 静态文件(js/css/images)的存放位置
Alias /static/ /var/www/{$ProjectName$}/static/                

# 允许通过网络获取static的内容
<Directory /var/www/{$ProjectName$}/static/>                  
    Require all granted
</Directory>

# 最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /
WSGIScriptAlias / /var/www/{$ProjectName$}/{$ProjectName$}/wsgi.py     
# wsgi.py文件的父级目录,第一个ProjectName为Django工程目录,第二个ProjectName为Django自建的与工程同名的目录
<Directory /var/www/{$ProjectName$}/{$ProjectName$}/>                  
<Files wsgi.py>
    Require all granted
</Files>
</Directory>

</VirtualHost>

编辑apache中的wsgi.conf文件

vi /etc/apache2/mods-available/wsgi.conf
#在文件中添加以下行:
WSGIPythonPath /var/www/{$projectname$} #项目所在地址
  1. 激活你的配置文件
sudo a2ensite /etc/apache2/ sites-available/{$projectname$}.conf
#重启服务
service apache2 reload
vi /var/www/{$projectname$}/{$projectname$}/wsgi.py

其实要增加的也就#1.#2.#3 3行代码

    import os
    from os.path import join,dirname,abspath#1.
    PROJECT_DIR = dirname(dirname(abspath(__file__)))#2.

    import sys
    sys.path.insert(0,PROJECT_DIR)#3.
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "examsys.settings")

    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

这时候reload一波apache服务,用你的浏览器访问 刚才设置的域名或者外网ip
就可以查看网站

调试错误:

  1. apache服务无法restart或者无法reload
    这时候需要一个神奇的技能了:英语
    根据提示输入
systemctl status apache2.service

然后把终端啦长(坑爹不拉长看不见错误信息)

Paste_Image.png

想这样就好了,
一般是你的{$projectname$}.conf 某行出错

  • No module named xxxx 依赖库没安装完整,请pip安装一波
  • No module named django或者其他含django的错误。这说明你的环境搭错了。往上翻error.log,找到AH00489开头的错误,看看你到底用的是什么环境。一般都是你第二步Apache的Python解释器安装错误。
  • 没事可以看apache错误文档
cat /var/log/apache2/error.log

3.django自带的admin页面无法加载css文件

修改django项目中project/setting.py文件

STATIC_ROOT={$static文件夹的根目录$}

比如我的static目录在 /var/www/project/
即修改如图

Paste_Image.png

然后

python  manage.py collectstatic      #python2
python3  manage.py collectstatic     #python3

会在你的static文件夹中生成admin文件夹,
问题如果还不解决,请去apache/site-available/project.conf中查看 static配置路径是否正确

4. 数据库显示只读

如这样
sqlite3.OperationalError: attempt to write a readonly database

解决办法:
因为我用python自带的sqlite3数据库
将数据库权限设置为www-data

sudo chgrp www-data project
sudo chmod g+w blog
sudo chgrp www-data project/db.sqlite3  # 更改为你的数据库名称
sudo chmod g+w project/db.sqlite3

5. template文件无法读取

在setting.py文件中
template中指明绝对路径

6. 使用域名或者外网ip的设置后无法访问

在setting.py
中修改allow_host选项

ALLOW_HOST=['{$你的域名或者IP$}']

只需要在[]中添加即可如我的为 =['www.coldsummerday.net']

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容