为了提高Django应用的安全和性能,在生产环境非常有必要使用Apache或Nginx,即使它本身就可以启动运行。
本文介绍怎么在Python虚拟环境中安装配置Django,并和Apache集成。
Django集成到Apache有两种方式:python_mod和wsgi,后者相对于前者更加稳定,这里我们通过wsgi的方式来进行集成。mod_wsgi的Apache的一个模块,Apache可以通过WSGI接口和Django沟通。
全新的Ubuntu 16.04部署Django-Apache:
1、安装配置Django
如果你使用Python2:
$ sudo apt-get install python-pip apache2 libapache2-mod-wsgi
如果你使用Python3:
$ sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3
安装Python虚拟环境:
$ sudo pip install virtualenv # python2
$ sudo pip3 install virtualenv # python3
创建虚拟环境:
$ virtualenv mynewenv
激活新虚拟环境:
$ source mynewenv/bin/activate
安装django:
$ pip install django # Python虚拟环境,都是pip
创建Django项目:
$ django-admin.py startproject myproject
配置新项目:
$ cd ~/myproject
$ vim myproject/settings.py
为了简单我这里使用默认的SQLite数据库;配置静态文件目录,在文件尾添加:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
初始化SQLite数据库:
$ ./manage.py makemigrations
$ ./manage.py migrate
为项目创建管理员用户:
$ ./manage.py createsuperuser
把静态文件放到static目录:
$ ./manage.py collectstatic
上面命令在项目目录中创建了static目录。
如果开启了防火墙,打开8000端口:
$ sudo ufw allow 8000
测试Django项目,启动server:
$ ./manage.py runserver 0.0.0.0:8000
使用浏览器访问:http://server_domain_or_IP:8000,你应该能看到如下页面:
使用浏览器访问:http://server_domain_or_IP:8000/admin,进入管理员登录接口:
使用前面创建的管理员用户登录:
Ctrl+C终止Django应用,然后退出Python虚拟环境。
$ deactivate
Django的开发文档:https://docs.djangoproject.com/en
2、配置Apache
现在你应该有了一个可以正常工作的Django项目了,接下来配置Apache做为它的前端。
前面已经安装了mod_wsgi,编辑默认Virtual Host配置文件:
$ sudo vim /etc/apache2/sites-available/000-default.conf
所有static的请求映射到Django项目的/static目录,在VirtualHost块中添加:
# 项目路径
Alias /static /home/snail/myproject/static
<Directory /home/snail/myproject/static>
Require all granted
</Directory>
配置apache有访问项目目录中wsgi.py的权限:
<Directory /home/snail/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Django建议使用daemon模式运行WSGI进程,配置WSGIDaemonProcess:
WSGIDaemonProcess myproject python-home=/home/snail/mynewenv python-path=/home/snail/myproject
WSGIProcessGroup myproject
WSGIScriptAlias / /home/snail/myproject/myproject/wsgi.py
注意替换上面的Python虚拟环境路径和项目路径。
修正一些目录和文件权限:
$ chmod 664 ~/myproject/db.sqlite3
$ sudo chown :www-data ~/myproject/db.sqlite3
$ sudo chown :www-data ~/myproject
如果你配置了防火墙,开启80、443端口:
$ sudo ufw delete allow 8000
$ sudo ufw allow 'Apache Full'
检查Apache配置文件是否有语法错误:
$ sudo apache2ctl configtest
如果没有语法错误,重启Apache:
$ sudo systemctl restart apache2
现在使用浏览器访问 http://your_doamin_or_IP/admin/ 测试Apache-Django部署是否成功:
后续:配置Apache使用SSL证书或Let’s Encrypt免费证书。
到此,完成Django-Apache的部署。