一、环境
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
如果一切顺利,你的网站就可以正常访问了。