zoukankan      html  css  js  c++  java
  • 在Ubuntu1804上使用Apache2的部署Django配置

    在Ubuntu1804上使用Apache2的部署Django配置:

    1.首先安装apache2

      sudo apt-get install apache2

      sudo apt-get install libapache2-mod-wsgi-py3

    2.目录结构

       Apache2的目录结构:对三个类型的mods、conf、sites分别有available、enable两个文件夹,其中available目录中存放有效的配置文件,但不起作用,只用用ln链接到enable目录中才起作用。重点关注的是ports.conf和项目.conf两个配置文件。

    /etc/apache2/
    |-- apache2.conf #主配置文件,
    |       `--  ports.conf #监听端口配置文件
    |-- mods-enabled
    |       |-- *.load
    |       `-- *.conf
    |-- conf-enabled
    |       `-- *.conf
    |-- sites-enabled #项目配置文件目录,只有一个文件
    |       `-- *.conf #项目配置文件,根据项目确定文件名称,例如blogs.conf

    3.测试:

     请先使用Django自带的server测试,保证能够顺利运行。

    4.创建apache2的配置文件:

      按照下面的命令在apache2的sites-available文件目录下,创建一个配置文件,其中项目名称就填写你的web项目的名称,例如blogs.conf。如果有多个虚拟主机,也在此文件中配置。 

    <VirtualHost *:80>
      # 填写自己服务器的域名
      ServerName localhost:80
      # 其他域名(此处可以不填),多个域名指向同一个站点时可以使用,空格隔开   ip ServerAlias otherdomain.com # 其他域名(此处可以不填),多个域名指向同一个站点时可以使用,要多少个就加多少个,空格隔开   ServerAdmin xxx@Email.com
      # 上传文件存放的路径,具体路径根据实际设定,这里只是例子   Alias /media/ /home/user/项目名称/media/
     # 静态文件文件( js, css, 图片等文件)存放的路径,一般默认   Alias /static/ /home/user/项目名称/static/
      # 文件授权   <Directory /home/user/项目名称/media>     Require all granted   </Directory>   <Directory /home/user/项目名称/static>     Require all granted   </Directory>  # 指定虚拟环境的的路径,如果使用默认系统环境可不设置,特别注意此处。
      WSGIDaemonProcess http://127.0.0.1:80 python-path=/home/user/projectname:/home/user/projectname/venv/Lib/site-packages
      WSGIProcessGroup http://127.0.0.1:80
      #通过wsgi.py 连接apache2和你的Django项目,必须设定。
      WSGIScriptAlias / /home/user/项目名称/项目名称/wsgi.py
      <Directory /home/user/项目名称/项目名称>     <Files wsgi.py>        Require all granted     </Files>    </Directory> </VirtualHost>
    <VirtualHost *:8000>
    #其他虚拟主机
    </VirtualHost>

      在 ports.conf中设置监听端口号。

    5.修改wsgi.py文件

      找到你的Django项目路径,找到项目的wsgi.py文件并打开,在原有的基础上增加以下内容,经在Django2.2.4测试,不需要进行修改,其他Django版本未测试。

    #wsgi.py 原代码
    from os.path import join,dirname,abspath import sys PROJECT_DIR = dirname(dirname(abspath(__file__))) sys.path.insert(0,PROJECT_DIR)

    #完整代码
    import os
    from os.path import join,dirname,abspath
    import sys
    from django.core.wsgi import get_wsgi_application

    PROJECT_DIR = dirname(dirname(abspath(__file__)))
    sys.path.insert(0, PROJECT_DIR)
    os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" 
    #os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

    application = get_wsgi_application()

    6. 设置权限

      apache服务器在运行的时候默认的用户是“www-data”,相关的配置文件的位置在/etc/apache2/envvars。

      所以我们需要修改Django项目的权限、上传文件目录、数据库文件的权限,假如你的项目放在/home/user/项目名称下,可以按照以下命令进行权限修改,一般用chmod 644给目录和文件授权:

    cd /home/user/
    sudo chmod -R 644 项目名称
    sudo find 项目名称 -type d | xargs chmod 755
    sudo chgrp www-data 项目名称
    sudo chmod g+w 项目名称
    
    cd media/ #上传文件目录
    sudo chgrp -R www-data uploads
    sudo chmod -R g+w uploads
    
    #数据库文件
    sudo chgrp www-data 项目名称/db.sqlite3  # 更改为你的数据库名称
    sudo chmod g+w 项目名称/db.sqlite3

    7.启动网站

    1. 启动配置文件,会在site-enabled中生成链接文件:sudo a2ensite 项目名称.conf 

    2. 测试配置:sudo apache2ctl configtest  如果返回Syntax OK,则表示配置正确;

    3. 最后一步,让你的网站启动:sudo service apache2 restart

    4. Apache命令:使用service命令或者systemctl命令都可以;

        sudo systemctl start apache2  //启动Apache服务器

        sudo service apache2 start

        sudo systemctl stop apache2  //停止

        sudo service apache2 stop

        sudo systemctl restart apache2  //再次启动Apache服务。

        sudo service apache2 restart

        sudo systemctl reload apache2  //不重新启动连接的情况下应用配置更改

        sudo service apache2 reload

        sudo systemctl status apache2 //查看服务状态

        sudo service apache2 status 

    8.其他事项

      • 静态文件不起作用:这是常见问题,检查在项目配置文件blogs.conf、在Django中settings.py中的设置,检查静态文件目录的权限,以及是否用pythong manage.py collectstatic收集静态文件。
      • 字符集错误:在/etc/apache2/envvars中设置字符集编码类型
      • 本机能够访问,用IP地址不能访问:修改settings.py中的ALLOWED_HOSTS=['*']测试,再排查故障。
      • 如果报 Internal Server Error错误,查看/var/log/apache2/error.log日志文件,重点是上面第5步、第6步的设置。Django自带的wsgi.py要按照第5步进行修改。
  • 相关阅读:
    Insus Meta Utility
    The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
    Insus Binary Utility
    asp.net实现文件下载功能
    Column 'Column Name' does not belong to table Table
    程序已被编译为DLL,怎样去修改程序功能
    如何在Web网站实现搜索功能
    如何把数据流转换为二进制字符串
    Asp.net更新文件夹的文件
    如何显示中文月份
  • 原文地址:https://www.cnblogs.com/sdlyxyf/p/11370582.html
Copyright © 2011-2022 走看看