Nginx+gunicorn+Django 服务器部署

Posted BH78

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+gunicorn+Django 服务器部署相关的知识,希望对你有一定的参考价值。

这两天参考网上的各种部署教程,总算是把Django的服务器初步搭建起来了。

软件安装

我这里用的是腾讯的云服务器,Ubuntn16.04操作系统。需要安装的软件:

  • pip3
  • Django
  • gunicorn
  • nginx
  • mysql (可选)
  • git ( 可选)
  • virtualenv (可选)

    系统自带有Python2,Python3, 如果使用Python3运行Django,则需要安装 pip3, 安装命令 apt-get install python3-pip有了pip3,就可以方便的安装Djangogunicorn  pip3 install django, gunicorn ,如果需要选择安装版本,参考命令 pip3 install django==1.10.5

    安装ngnix,gitmysql,apt-get install nginx git mysql-server。这里mysqlDjango使用的数据库。如果使用其他数据库,参考对应的数据库软件安装方法。git是用来把本机文件同步到服务器的版本管理软件,可以用其他软件代替,只要能把Django代码转移到在服务器上即可。

    如果需要的话,还可以安装virtualenv,搭建python的虚拟环境。

    Mysql数据库相关命令

    根据setting.py文件的配置,创建数据库和相应的用户,需要的使用的命令如下:

    登陆mysql数据库客户端 mysql -u root -h localhost -p,安装mysql时,根据提示设置root账户的密码,这里使用root账号登录

    创建数据库 utf-8 字符编码

    CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    查看,修改数据库编码

    use database_name;

    show variables like ‘character_set_database‘;

    alter database <数据库名> character set utf8;

    删除数据库

    Drop database db_name;

    创建MYSQL 用户

    CREATE USER ‘user_name‘@‘localhost‘ IDENTIFIED BY ‘password‘;

    授权

    GRANT privileges ON databasename.tablename TO ‘username‘@‘host‘

    其中的privileges包括 select , delete , update 等权限,Django操作数据库需要全部的权限,可参考如下命令

    GRANT ALL ON `discuz`.* TO ‘discuz‘@‘localhost‘;

    查看用户权限:

    show grants for [email protected]‘localhost‘;

    Django运行环境搭建

    假设已经在本地电脑上调试好Django代码,通过git上传到服务器端的 /var/www/ 目录下。

  1. 安装Django 项目依赖的python包。
  2. 参考上一节创建空的utf8字符编码数据库,和授权用户。数据库名,登陆账号密码与Setting文件一致。
  3. 对每个app使用makemigrations命令,然后使用migrate命令。在服务器端第一次使用makemigrations时,最好分别对每个app执行一次,以免生成数据库是出错。如果已经出错,可以先进入mysql,删除原有数据库,再新建一个空的数据库后,重新操作。
  4. 创建管理员账号,并运行 runserver 0.0.0.0:8000,可在终端浏览器看到Django页面。

    现在中断看到的是Django自带调试用的http服务器,不推荐使用,下面讲如何使用gunicorn nginx

    gunicorn 配置

    gunicorn 可简单配置为

    gunicorn -b0.0.0.0:8999 dj.wsgi

    执行命令之后,可以在浏览器访问页面,但是看不到静态文件(图片,CSSJS等)。静态文件的路径需要在nginx中配置。

    参考连接 http://blog.51cto.com/10452483/1769749

    nginx配置

    Django文件的路径 最好是放在 /var/www/ 目录下,否则访问静态文件可能因为权限问题出现 403 forbidden error 错误。参考链接 http://blog.51yip.com/apachenginx/1512.html

    nginx配置文件的路径:

    /etc/nginx/sites-available/ : 先把配置文件放在这里,编辑好之后,链接到目录 /etc/nginx/sites-enable/

    简单的配置文件如下:

    server

    {

    listen 80;

    location /static/ {

    alias /var/www/static/;

    }

    location / {

    proxy_pass http://127.0.0.1:8999;

    }

    }

    不出意外应该是可以在浏览器端(访问地址: x.x.x.x)看到完整的页面了。另外要特别主要服务器开放的端口号有哪些。比如阿里云默认开放的端口号为 3389,需要自行设置一下,开放相应端口号,以免出现无法访问的问题。

    后续再对gunicorn nginx 做细致的配置。

以上是关于Nginx+gunicorn+Django 服务器部署的主要内容,如果未能解决你的问题,请参考以下文章

在 Nginx 后面调试 Django/Gunicorn

Django,Nginx,Gunicorn。 Ubuntu 16.04 错误

Django-Gunicorn-Nginx 部署没有通过 Nginx

nginx + gunicorn + django 2.0 踩坑

Django + nginx + gunicorn 给出 502 错误。日志信息很少[关闭]

使用Nginx + Gunicorn + Django 方式部署django程序