nginx+uwsgi+django+docker部署django项目

本文介绍使用nginx+uwsgi+django+docker部署django项目的方法。其中nginx作为反向代理,uwsgi作为服务器,django作为应用程序,ES作为数据库。nginx部署于一个docker容器,uwsgi+django部署于一个docker容器(一般是多个备份),为提高效率,使用docker-composer完成多容器一键部署。服务架构如下图所示。

备注:反向代理名词解释,一般说到代理,都是正向代理。正向代理场景中,有多个客户端,一个服务器,代理做的事情是把客户端发送的请求转发到服务器,是对客户端做的代理;而反向代理中,恰恰相反,是对服务器做的代理,一般而言,有多个服务器(功能一样),当请求量很大时(比如秒杀),一个服务器可能扛不住,我们会部署多个服务器,反向代理做的事情,就是把发来的请求,均匀的分配给不同的服务器,缓解服务器压力,此即为反向代理。总结,正向代理是代理的客户端,反向代理是代理的服务器端。

nginx+uwsgi+django+docker部署django项目_第1张图片
目录结构如下图所示
nginx+uwsgi+django+docker部署django项目_第2张图片
部署共分为7步。

1. 基于待部署web项目SeeStar生成如上目录结构。
cd ~/Workspace
mkdir TestDocker
cp SeeStar/ TestDocker/
cd TestDocker
mkdir nginx
2. 完成web项目uwsgi配置,在SeeStar目录下新建uwsig.ini文件,并写入如下内容。
[uwsgi]
# Django-related settings
socket = :8080
#http = :8080

# the base directory (project full path)
chdir = /SeeStar

# Django s wsgi file
wsgi-file = /SeeStar/SeeStar/wsgi.py

master = true
processes = 4
chmod-socket = 664
vacuum = true
pidfile = pid.uwsgi
# run process background and save log to daemonize
# daemonize = UWSGI.log

备注:
a. uwsgi文件配置名字随便写(注意与下边dockerfile文件中对应),并且以.ini结尾。
b. 因使用nginx作为代理,nginx与uwsgi通信方式选socket,https不好用,原因待探查。
c. chdir、wsgi-file指向与项目目录对应。

3. 完成web项目Dockerfile配置,在SeeStar文件夹内新建Dockerfile文件,写入如下内容。
FROM python:3.6

MAINTAINER [email protected]

# 以下是重点,.的意思是把当前目录的所有文件(包含文件夹)copy到镜像/SeeStar中

COPY . /SeeStar

WORKDIR /SeeStar

RUN pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple

EXPOSE 80 8080

CMD ["uwsgi", "--ini", "uwsgi.ini"]

备注:
requirements.txt为项目运行依赖,一定包含uwsgi包(可通过pip install uwsgi安装)。

4. 完成nginx配置文件,在nginx文件夹中,新建nginx.conf文件,写入如下内容。
upstream see_star {
    server 10.238.170.97:8080;

}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name localhost;

    location /static {
        alias /usr/share/nginx/html/static;
    }

    location / {
        uwsgi_pass see_star;
        include /etc/nginx/uwsgi_params;
    }

}

备注:
a. upstream配置负载均衡,可放置多个服务器,此仅放一个。
b. uwsgi_pass see_star指来了动态请求,交给上述配置的负载均衡处理。
c. uwsgi_params在/etc/nginx文件夹中有。

5. 完成nginx 服务Dockerfile配置,在nginx文件内,新建Dockerfile文件,写入如下内容。
FROM nginx

EXPOSE 80 8000

RUN rm /etc/nginx/conf.d/default.conf
ADD nginx.conf /etc/nginx/conf.d/
RUN mkdir -p /usr/share/nginx/html/static

备注:
EXPOSE 80 8000,仅仅是声明暴露这两个端口,实际端口映射,要在实例化镜像时使用-p指定。

6. 完成docker-compose文件编写,编排web容器、nginx容器,在根目录TestDocker文件夹中新建docker-compose.yml文件,写入如下内容。
version: "3"

services:

  web:
    build: ./SeeStar
    ports:
      - "8080:8080"
    restart: always

  nginx:
    build: ./nginx
    ports:
      - "80:80"
    links:
      - web
    depends_on:
      - web
    restart: always

备注:
a. services下的项要空两格。
b. link含义参考这篇博客
c. SeeStar、nginx分别为根目录下的两个文件夹。

最终项目目录结构参照开头项目截图。

7. 编排,执行。在TestDocker目录中执行如下命令。
docker-compose build
docker-compose up -d

最后,0.0.0.0:80访问部署成功项目。

你可能感兴趣的:(nginx+uwsgi+django+docker部署django项目)