这个在python3的virtualenv中部署的django。这个和普通的部署有一些不同。

    一、要安装的环境和软件。

    用安装虚拟环境,把uwsgi也安装在虚拟环境中。

sudo apt-get installl python3-dev
sudo apt-get install nginx
sudo pip install uwsgi

    nginx和uwsgi启动关闭方式。

sudo service nginx restart #重启,和启动一般的服务一样,stop,start, restart.
uwsgi --ini uwsgin.ini  #通过配置文件启动。

二、配置步骤。

1、使用python manage.py runserver确保在开发模式下能正常访问网页。

2、关闭debug模式。

    setting.py文件中进行设置。

DEBUG = False

ALLOWED_HOSTS = ['x.x.x.x', 'localhost', '60.205.220.57']

3、使用uwsgi加载服务。

   使用uwsgi加载服务,

    uwsgi   --ini   uwsgi.ini

#uwsgi.ini file
[uwsgi]

# Django-related settings
#设置于nginx对接的sock文件这个要于nginx的配置对应
socket = /home/kx/py3env/taobao/src/config/taobao.sock
#当没有部署nginx的时候测试的时候,要写http = ...
#http = 0.0.0.0:3031

# the base directory (full path)
#工程路径最后一个/是必须的。
chdir = /home/kx/py3env/taobao/src/taobao/

# Django s wsgi file
#工程中的wsgi.py文件路径
wsgi-file = taobao/wsgi.py


# process-related settings
 #touch-reload = /home/kx/program/py3env/myblog/reload  #reload文件,在这个目录下手动创建reload文件之后,服务才会开始运行
#touch-reload = /home/kx/pyenv/program/taobao/config/reload

# maximum number of worker processes
processes = 4
threads = 1

# ... with appropriate permissions - may be needed
#myblog.sock对应的文件权限
chmod-socket = 666
#用户名
chown-socket = kx
# clear environment on exit
#vacuum  = true

#venv
#venv环境的路径

virtualenv = /home/kx/py3env/

#配置,可是使用uwsgitop链接到对应地址查看uwsgi状态
stats = 127.0.0.1:9191

然后服务是否能正常访问,usgi加载服务之后,一般无法加载静态文件,需要在nginx中配置静态文件的路径,之后就可以正常加载静态文件了。

    在这之前要做一个工作就是收集静态文件:

    使用python mange.py collectstatic进行静态文件收集。

    收集的静态文件回放在STATIC_ROOT对应的文件夹中, 这个在setting.py中进行设置。

# 当运行 python manage.py collectstatic 的时候
# STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
# 把这些文件放到一起是为了用apache等部署的时候更方便
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

4、配置nginx。

新建: /etc/nginx/sites-available/myblog.conf文件内容如下:

并在/etc/nginx/sites-enabled/文件夹下创建一个对应的硬链接。

sudo ln -s /etc/nginx/sites-available/myblog.conf /etc/nginx/sites-enabled/myblog.conf

server {
    listen      80; # nginx服务监听的服务器端口
    server_name 47.94.110.**;  #域名 ip
    charset     utf-8;
 
    client_max_body_size 75M;
 
    location /media  {
        alias /home/kx/py3env/taobao/src/media;
    }
 
    location /static {
        alias /home/kx/py3env/taobao/static;  #静态文件路径,是在django静态文件收集的文件夹
    }
 
    location / {
        uwsgi_pass  unix:///home/kx/py3env/taobao/src/config/taobao.sock;  #与uwsgi建立的sock的文件,由uwsgi创建
        include     /etc/nginx/uwsgi_params;
    }
}

启动uwsgi和nginx服务。

三、可能会遇到一些问题。

    sudo nginx -t 

    检查配置文件语法。

    如果遇到502等问题,取查看nginx的日志,和django的日志。从日志中找问题。

    nginx日志所在目录less /var/log/nginx/error.log和less /var/log/nginx/access.log

    日志应该能解决大多数问题。我在部署中遇到一个文件权限问题,通过查看nginx的日志定位到的问题。

四、反向代理,多个app

location / {
        uwsgi_pass  unix:///home/kx/py3env/taobao/src/config/taobao.sock;  #与uwsgi建立的sock的文件,由uwsgi创建
        include     /etc/nginx/uwsgi_params;
    }

只要多加一条对应的sock。