Django 是一个基于 Python 的开源 Web 应用程序框架,其 MVC 开发的方法,把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来,同时将对数据库的操作接口进行封装,支持 sqlite3, MySQL, PostgreSQL等数据库。使得Django 应用程序很简单。开发阶段可使用Django框架自带的一个开发 Web 服务器,使用python manage.py runsercver
即可开启服务器。但是这个框架不适合在生产环境中使用,因此需要进一步将 Django 应用程序部署到 Web。在本文中,您将了解到使用nginx和uWSGI在Ubuntu上部署Django。
nginx -v --> nginx version: nginx/1.4.6 (Ubuntu)
uwsgi --version --> 2.0.12
cat /etc/issue --> Ubuntu 14.04.1 LTS \n \l
python -V --> Python 2.7.6
python -c "import django;print(django.VERSION)" --> (1, 8, 4, 'final', 0)
1. 安装nginx
sudo apt-get install nginx
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx restart
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
2. uWSGI安装
apt-get install python-dev
pip install uwsgi
3. 测试Django项目是否正常
python manage.py runserver 0.0.0.0:8000
4. 测试运行uwsgi
uwsgi --http :8001 --chdir /home/web/EvanLin/ --module EvanLin.wsgi
#chdir:工程目录 module:指的是 chdir 下的/EvanLin/wsgi.py文件
5. 部署static文件
在工程目录下的 setting.py 里添加 STATIC_ROOT
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
然后执行:
python manage.py collectstatic
6. 配置nginx
# mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 8000;
# the domain name it will serve for
server_name .example.com; # 你的域名或是IP地址
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /path/to/your/mysite/media; # Django 的 media 文件夹
}
location /static {
alias /path/to/your/mysite/static; # Django 的 static 文件夹
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params; # 刚才拷贝的uwsgi_params文件路径
}
}
这个文件配置 nginx 从文件系统中使用 media 和 static 文件作为服务,同时相应 django 的 request 在 /etc/nginx/sites-enabled
目录下创建本文件的连接,使nginx能够使用它:
sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
7. 用 UNIX socket 启动 Django 应用
对mysite_nginx.conf
做如下修改:
server unix:///path/to/your/mysite/mysite.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)
重启nginx:
sudo /etc/init.d/nginx
start # 若重启失败,通过sudo nginx -t 查错
并运行:
uwsgi --socket mysite.sock --chdir /home/web/mysite/ --module mysite.wsgi --chmod-socket=666 &
8. 多站部署
与部署当个 Django 应用相同,请参照上文。
其中,mysite_nginx.conf
文件修改如下,标红部分需修改,路径为你当前工程目录。其中 listen
监听的端口可以相同,nginx根据 server_name .example.com;
来启动不同的 uswgi 文件。
# mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
server unix:///path/to/your/mysite/mysite.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name .example.com; # 你的域名或是IP地址
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /path/to/your/mysite/media; # Django 的 media 文件夹
}
location /static {
alias /path/to/your/mysite/static; # Django 的 static 文件夹
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params; # 刚才拷贝的uwsgi_params文件路径
}
}
重启nginx:
sudo /etc/init.d/nginx
start # 若重启失败,通过sudo nginx -t 查错
并运行:
uwsgi --socket mysite.sock --chdir /home/web/mysite/ --module mysite.wsgi --chmod-socket=666 &