zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    javascript获取xml节点的最大值
    iis 不能浏览aspx页面
    批量替换文件夹里面的文本文件的指定字符
    select update delete
    SQL IAM的理解
    数据库的页构成
    sqltype IsDBNull
    MSSQL优化教程之1.4 其他几种类型的页面
    SqlDataAdapter
    行状态,行版本
  • 原文地址:https://www.cnblogs.com/manhua/p/4234985.html
Copyright © 2011-2022 走看看