Ubuntu+Apache+mod_wsgi+Django部署教程

一、环境

Ubuntu Server 20.04
python 3.8.5
django 3.1
Apache 2.4
mod_wsgi

二、virtualenv和django配置

1、安装python3-pip

sudo apt-get install python3-pip

ubuntu20.04自带python3.8(python)和python2.7 (python2)在ubuntu中如果想使用python3的pip请使用:“pip3”命令。

2、安装python的虚拟环境virtualenv

sudo pip3 install virtualenv

3、创建虚拟环境,此命令会创建一个名为myenv(虚拟环境名称)的文件夹,位置就在你终端所显示的位置,里面包含了一个python环境。

virtualenv myenv

4、激活虚拟环境

source myenv/bin/activate

5、安装django。虚拟环境中可以直接使用pip,因为虚拟环境里只有py3的存在。

pip install django

或指定版本
···
pip install -v django==1.7.1
···

6、用django创建网站(略)
7、测试是否可以网站正常访问。

python manage.py runserver

如果想使用80端口,但是提示需要root权限,使用下面命令:

sudo /home/ubuntu/envs/myenv/bin/python manage.py runserver 0.0.0.0:80

三、部署部分

1、进入ubuntu,安装apache2和mod_wsgi:

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

此处如果你是py2开发的话去掉上述命令最后的“-py3”,否则最好加上。

2、查看apache2版本:

apachectl -v

看看是否是2.4版本

3、新建站点的配置文件

sudo vim /etc/apache2/sites-available/mysites.conf

我的mysites.conf如下,此文件仅作参考,请自行修改里面的相关路径和网址:

<VirtualHost *:80>
    ServerName mydomain.com
    #ServerAlias www.mydomain.com
    ServerAdmin admin@mydomain.com
    DocumentRoot /home/ubuntu/web/djangoProject1/djangoProject1
    Alias /static /home/ubuntu/web/djangoProject1/static
    <Directory /home/ubuntu/web/djangoProject1/static>
        Require all granted
    </Directory>
    <Directory /home/ubuntu/web/djangoProject1/djangoProject1>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    WSGIDaemonProcess myproject python-home=/home/ubuntu/envs/myenv python-path=/home/ubuntu/web/djangoProject1
    WSGIProcessGroup myproject
    WSGIScriptAlias / /home/ubuntu/web/djangoProject1/djangoProject1/wsgi.py
    ErrorLog "/var/log/apache2/access_a_error.log"
    CustomLog "/var/log/apache2/access_a_common.log" common
</VirtualHost>

其中:

WSGIDaemonProcess myproject python-home=/home/ubuntu/envs/myenv python-path=/home/ubuntu/web/djangoProject1
# myproject 项目名称
# python-home指向虚拟环境路径
# python-path指向项目路径
WSGIProcessGroup myproject
# myproject 项目名称

4、静态文件配置
settings中加入一行:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
网站目录下运行下面命令

python manage.py collectstatic

上面命令收集全部静态文件到网站根目录的static文件夹中。 把这些文件放到一起是为了用apache等部署的时候更方便

5、修改wsgi文件

import os
from os.path import join, dirname, abspath

from django.core.wsgi import get_wsgi_application

PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys
sys.path.insert(0, PROJECT_DIR)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject1.settings')

application = get_wsgi_application()

6、设置权限,linux下对权限很敏感,建议大家先对这块有所了解。网站和虚拟环境不建议安装在/root目录下。遇到无法访问先到log中找错误,权限问题可参考这里

在 Linux 服务器上,用户上传目录还要设置给 www-data 用户的写权限,下面的方法比较好,不影响原来的用户的编辑。

假如上传目录为 djangoProject1/media/uploads 文件夹,进入media文件夹,将 uploads 用户组改为www-data,并且赋予该组写权限:

cd media/ 
sudo chgrp -R www-data uploads
sudo chmod -R g+w uploads

如果你使用的是sqlite3数据库,还会提示 Attempt to write a readonly database,同样要给www-data写数据库的权限

进入项目目录的上一级,比如project目录为 /home/ubuntu/web/, 那就进入 /home/ubuntu/web/ 执行下面的命令(和修改上传文件夹类似)

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

7、重启apache2服务

sudo a2ensite mysites.conf
sudo service apache2 restart

如果一切顺利,你的网站就可以正常访问了。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,转载请注明出处。
文章名称:《Ubuntu+Apache+mod_wsgi+Django部署教程》
文章来自:泰恩数据
文章链接:https://tyne.cc/123.html
本站资源仅供个人学习使用,请勿用于商业用途。

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址