ubuntu+nginx+uwsgi部署django项目的总结 ubuntu+nginx+uwsgi部署django项目

ubuntu+nginx+uwsgi部署django项目

前言

Django的部署可以有很多方式,使用Windows下的IIS或者Apache、Nginx均可 。

采用nginx+uwsgi的方式是其中比较常见的一种方式,是将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理。然后,nginx将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。uwsgi的作用就类似一个桥接器,起到桥梁的作用。

将本地开发的django项目部署至Ubuntu上的uwsgi服务器,并配置nginx,完成基于nginx+uwsgi+django的上线运行。下面整理相关步骤。

1、服务器配置virtualenv

如果不想直接用python环境运行,则需要在服务器上安装并配置virtual env。如果直接用python环境,则可跳过这一步。

  pip install virtualenv

  pip install virtualenvwrapper

需要配置环境变量,以能使用相关命令:

在 ~下创建.bash_profile,添加如下内容:

  export WORKON_HOME=$HOME/.virtualenvs
  export PROJECT_HOME=$HOME/workspace
  source /usr/local/bin/virtualenvwrapper.sh

然后运行命令:source ~/.bash_profile

配置完成。使用如下命令:

  mkvirtualenv its_name # 创建virtual env
  workon its_name # 切换到某个env下(如果不指定its_name)则是列出所有已有env
  deactive # 退出当前env
  rmvirtualenv its_name # 删除某个virtual env

2、安装依赖包

首先在开发本地,需要导出pip依赖包列表。

pip freeze > plist.txt

将此文件放至服务器环境,并批量安装依赖。

workon [虚拟环境名称] pip install -r plist.txt -i https://mirrors.tuna.tsinghua.edu.cn # 这里使用清华大学镜像源安装

3、django项目的修改

需要修改settings.py文件,关闭debug模式。

DEBUG = False
ALLOW_HOSTS=['*','ipdress'] #加入访问服务器的ip

4、配置uwsgi

安装:pip install uwsgi

需要在django项目根目录(与manage.py同级目录)下,新建一个uwsgi.ini文件,写入相关配置:  

复制代码
# myweb_uwsgi.ini file
[uwsgi]
socket = :8080   #真实服务的端口,使用nginx连接时,使用socket
# Django项目根目录 (绝对路径)
chdir = /home/username/myweb
# wsgi.py文件在项目中的位置
module = myweb.wsgi
master  = true # 运行的进程数 processes = 4 vacuum = true
复制代码

切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。

启动uwsgi:uwsgi --ini xxx.ini
关闭uwsgi:uwsgi --stop xxx.pid
重启uwsgi:uwsgi --reload xxx.pid

 启动状态:

复制代码
[uWSGI] getting INI configuration from myweb_uwsgi.ini
*** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2019] ***
compiled with version: 4.8.4 on 26 January 2016 06:14:41
os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.4.3 (default, Oct 14 2015, 20:37:06)  [GCC 4.8.4]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
复制代码

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

5、配置nginx

1、安装nginx:

   sudo apt install nginx

2、目录结构:

  Ubuntu中Nginx的配置文件在/etc/nginx目录中,主配置文件nginx.conf,

      包含的配置文件fefault,位于/sites-available/目录下,/sites-enabled/中有同名的链接文件。Ubuntu下Nginx和Apache的目录结构、配置文件是基本一致的。)

3、对nginx进行配置:

  cd /etc/nginx/sites-available
  vim default

     可进行如下配置:  

复制代码
#下面是nginx.conf中关于server部分的设置:
server {
        #这里是访问时用到的端口
        listen  80;
        server_name  localhost;
        charset UTF-8; root /var/www/html; index index.html index.htm index.nginx-debian.html;  #日志文件 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;  client_max_body_size 75M;  #指定uwsgi服务连接,这是关键部分 location / { include uwsgi_params;  #同uwsgi内容 uwsgi_pass 127.0.0.1:8080;  #链接超时时间 uwsgi_read_timeout 30;  } #静态文件夹设置 location /static/ { autoindex on; alias /home/username/django-project/static/;  } #上传文件夹设置 location /media/ { autoindex on; alias /home/username/django-project/media/;
}
}
复制代码

 备注:如果使用了django自带admin后台,admin的静态目录也无法访问,可依此方法配置/ static/admin 到django源码中的admin静态目录下,或者将admin目录拷贝到自己项目的static目录下。

4、启动nginx服务。

  启动nginx:service nginx start
  关闭nginx:service nginx stop
  重启nginx:service nginx restart
  查看状态:service nginx status

  浏览器访问http://localhost/ 可看到django项目已运行。

6、总结

  1. 测试Django项目,保证正常运行;
  2. 安装uwsgi,在Django项目文件中,配置uwsgi.ini,启动uwsgi;
  3. 安装nginx,配置nginx.conf,启动nginx。
  4. 注意用户的权限设置,项目文件夹、上传文件夹和数据库文件的权限设置,网络用户是www-data。
好文要顶 关注我 收藏该文

前言

Django的部署可以有很多方式,使用Windows下的IIS或者Apache、Nginx均可 。

采用nginx+uwsgi的方式是其中比较常见的一种方式,是将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理。然后,nginx将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。uwsgi的作用就类似一个桥接器,起到桥梁的作用。

将本地开发的django项目部署至Ubuntu上的uwsgi服务器,并配置nginx,完成基于nginx+uwsgi+django的上线运行。下面整理相关步骤。

1、服务器配置virtualenv

如果不想直接用python环境运行,则需要在服务器上安装并配置virtual env。如果直接用python环境,则可跳过这一步。

  pip install virtualenv

  pip install virtualenvwrapper

需要配置环境变量,以能使用相关命令:

在 ~下创建.bash_profile,添加如下内容:

  export WORKON_HOME=$HOME/.virtualenvs
  export PROJECT_HOME=$HOME/workspace
  source /usr/local/bin/virtualenvwrapper.sh

然后运行命令:source ~/.bash_profile

配置完成。使用如下命令:

  mkvirtualenv its_name # 创建virtual env
  workon its_name # 切换到某个env下(如果不指定its_name)则是列出所有已有env
  deactive # 退出当前env
  rmvirtualenv its_name # 删除某个virtual env

2、安装依赖包

首先在开发本地,需要导出pip依赖包列表。

pip freeze > plist.txt

将此文件放至服务器环境,并批量安装依赖。

workon [虚拟环境名称] pip install -r plist.txt -i https://mirrors.tuna.tsinghua.edu.cn # 这里使用清华大学镜像源安装

3、django项目的修改

需要修改settings.py文件,关闭debug模式。

DEBUG = False
ALLOW_HOSTS=['*','ipdress'] #加入访问服务器的ip

4、配置uwsgi

安装:pip install uwsgi

需要在django项目根目录(与manage.py同级目录)下,新建一个uwsgi.ini文件,写入相关配置:  

复制代码
# myweb_uwsgi.ini file
[uwsgi]
socket = :8080   #真实服务的端口,使用nginx连接时,使用socket
# Django项目根目录 (绝对路径)
chdir = /home/username/myweb
# wsgi.py文件在项目中的位置
module = myweb.wsgi
master  = true # 运行的进程数 processes = 4 vacuum = true
复制代码

切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。

启动uwsgi:uwsgi --ini xxx.ini
关闭uwsgi:uwsgi --stop xxx.pid
重启uwsgi:uwsgi --reload xxx.pid

 启动状态:

复制代码
[uWSGI] getting INI configuration from myweb_uwsgi.ini
*** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2019] ***
compiled with version: 4.8.4 on 26 January 2016 06:14:41
os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.4.3 (default, Oct 14 2015, 20:37:06)  [GCC 4.8.4]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
复制代码

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

5、配置nginx

1、安装nginx:

   sudo apt install nginx

2、目录结构:

  Ubuntu中Nginx的配置文件在/etc/nginx目录中,主配置文件nginx.conf,

      包含的配置文件fefault,位于/sites-available/目录下,/sites-enabled/中有同名的链接文件。Ubuntu下Nginx和Apache的目录结构、配置文件是基本一致的。)

3、对nginx进行配置:

  cd /etc/nginx/sites-available
  vim default

     可进行如下配置:  

复制代码
#下面是nginx.conf中关于server部分的设置:
server {
        #这里是访问时用到的端口
        listen  80;
        server_name  localhost;
        charset UTF-8; root /var/www/html; index index.html index.htm index.nginx-debian.html;  #日志文件 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;  client_max_body_size 75M;  #指定uwsgi服务连接,这是关键部分 location / { include uwsgi_params;  #同uwsgi内容 uwsgi_pass 127.0.0.1:8080;  #链接超时时间 uwsgi_read_timeout 30;  } #静态文件夹设置 location /static/ { autoindex on; alias /home/username/django-project/static/;  } #上传文件夹设置 location /media/ { autoindex on; alias /home/username/django-project/media/;
}
}
复制代码

 备注:如果使用了django自带admin后台,admin的静态目录也无法访问,可依此方法配置/ static/admin 到django源码中的admin静态目录下,或者将admin目录拷贝到自己项目的static目录下。

4、启动nginx服务。

  启动nginx:service nginx start
  关闭nginx:service nginx stop
  重启nginx:service nginx restart
  查看状态:service nginx status

  浏览器访问http://localhost/ 可看到django项目已运行。

6、总结

  1. 测试Django项目,保证正常运行;
  2. 安装uwsgi,在Django项目文件中,配置uwsgi.ini,启动uwsgi;
  3. 安装nginx,配置nginx.conf,启动nginx。
  4. 注意用户的权限设置,项目文件夹、上传文件夹和数据库文件的权限设置,网络用户是www-data。

猜你喜欢

转载自www.cnblogs.com/sdlyxyf/p/11356866.html