Django项目部署:Python3+Django2+Nginx+Uwsgi

一.版本说明

  1. 系统:Ubuntu16.04(阿里云)
  2. Python:Python3.7
  3. Django:Django2
  4. Nginx:Nginx1.10.3

二.安装软件

该操作使用的是root账号,如果不是root账号,那么需要在命令前面加sudo.示例:sudo apt-get update

1.升级系统(慎重选择)

root@iZ6x44ao8frlx0Z:~# apt-get update

root@iZ6x44ao8frlx0Z:~# apt-get upgrade

2.安装git,python3,pip

root@iZ6x44ao8frlx0Z:~# apt-get install git python3 python3-pip

3.安装Nginx

(1)安装

root@iZ6x44ao8frlx0Z:~# apt-get install nginx

(2)目录结构

安装完Nginx后,文件结构大致为:
所有的配置文件都在 /etc/nginx下;
启动程序文件在 /usr/sbin/nginx下;
日志文件在 /var/log/nginx/下,分别是access.log和error.log;
并且在 /etc/init.d下创建了启动脚本nginx。

(3)相关命令

sudo /etc/init.d/nginx start # 启动 
sudo /etc/init.d/nginx stop # 停止 
sudo /etc/init.d/nginx restart # 重启

(4)启动Nginx服务

root@iZ6x44ao8frlx0Z:~# service nginx start

在浏览器输入阿里云服务器域名(如http://47.107.136.2/),看Nginx是否启动成功:

Django项目部署:Python3+Django2+Nginx+Uwsgi_第1张图片

 

四.部署代码

1.部署前的项目配置

(1)指定静态文件目录(setting.py)

# STATIC_ROOT 指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹。
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

(2)关闭DEBUG模式(setting.py)

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

(3)设置允许访问的域名(setting.py)

ALLOWED_HOSTS = ['*']

(4)生成requirements.txt

项目还会依赖一些第三方 Python 库,为了方便在服务器上一次性安装,我们将全部依赖写入一个叫 requirements.txt 的文本文件中。激活本地的虚拟环境(如果你使用了虚拟环境的话),并进入项目的根目录,运行 pip freeze > requirements.txt 命令:

第一步:激活虚拟环境(该操作是在git bash下操作,如果是不同的控制台,需要更换命令,如windows下是输入:activate

Administrator@OG4J4A68F2QGH4A MINGW64 /e/tool/django/mysite/venv1/Scripts (master)

$ source activate

(venv1)

Administrator@OG4J4A68F2QGH4A MINGW64 /e/tool/django/mysite/venv1/Scripts (master)

第二步:在项目根目录下运行pip freeze > requirements.txt命令

(venv1)

Administrator@OG4J4A68F2QGH4A MINGW64 /e/tool/django/mysite (master)

$ pip freeze > ./requirements.txt

这时项目根目录下会生成了一个 requirements.txt 的文本文件,其内容记录了项目的全部依赖。

2.将项目上传到码云(或者github)

略。git的使用参考廖雪峰Git教程

3.设置服务器目录结构

root@iZ6x44ao8frlx0Z:~# mkdir -p ~/sites/demo.sweeneys.com

4.创建虚拟环境:

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com# python3 -m venv venv

5.从码云(或者github)把项目拉取过来:

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com#
git clone https://gitee.com/sweeneys/mysite.git

6.安装项目依赖

先激活虚拟环境,再进入到项目根目录,即 requirements.txt 所在的目录,安装项目的全部依赖:

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com# source venv/bin/activate
(venv) root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com# cd mysite/
(venv) root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite# pip3 install -r requirements.txt

7.收集静态文件

(venv) root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite#
python manage.py collectstatic

8.生成数据库

(venv) root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite# python manage.py migrate

9.创建超级用户

(venv) root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite#
python manage.py createsuperuser

10.项目启动测试

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite# python3 manage.py  runserver

五.配置Nginx

nginx的配置有很多方式,这里直接在/etc/nginx/sites-available/default 文件配置(这样图快,一般建议不要这样配置)。

首先,打开/etc/nginx/sites-available/default 文件:

然后配置内容如下:

upstream django {
    server 127.0.0.1:9000; # 必须和uwsgi.ini里面的socket一致
}
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        server_name sweeneys.blog.com; # 如果域名没有申请,那么并不会生效
        location / {
                include  uwsgi_params;
                uwsgi_pass django;
        }
        location /static {
               # alias /root/sites/demo.sweeneys.com/mysite/static;
                 root /root/sites/demo.sweeneys.com/mysite;
                 break;
        }
}

六.uwsgi配置

1.安装全局uwsgi

root@iZ6x44ao8frlx0Z:~# apt-get install uwsgi

2.uwsgi配置

在项目的根目录下,也就是有manage.py的目录下,新建一个uwsgi.ini文件。文件名可以随便,但后缀必须是ini。

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite#touch uwsgi.ini

打开uwsgi.ini文件

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite#vi uwsgi.ini

uwsgi.ini 里面输入下面的配置内容:

[uwsgi]

socket =  127.0.0.1:9000

chdir = /root/sites/demo.sweeneys.com/mysite

module=mysite.wsgi

master = true

processes=2

threads=2

max-requests=2000

chmod-socket=666

vacuum=true
          

说明:

1.uwsgi.ini里面的注释不是用#号,为了避免出错,请把注释去掉,只留下配置内容。

2.socket的值的前面部分必须是127.0.0.1,不能是其他的ip地址,不然报错,端口(如上面的9000)可以任意设置。127.0.0.1:9000和nginx的配置 server 127.0.0.1:9000是对应的。

3.运行uwsgi

root@iZ6x44ao8frlx0Z:~/sites/demo.sweeneys.com/mysite# uwsgi --ini my_uwsgi.ini

 

你可能感兴趣的:(Python,Django)