nginx+uwsgi+django+docker部署django项目
本文介绍使用nginx+uwsgi+django+docker部署django项目的方法。其中nginx作为反向代理,uwsgi作为服务器,django作为应用程序,ES作为数据库。nginx部署于一个docker容器,uwsgi+django部署于一个docker容器(一般是多个备份),为提高效率,使用docker-composer完成多容器一键部署。服务架构如下图所示。
备注:反向代理名词解释,一般说到代理,都是正向代理。正向代理场景中,有多个客户端,一个服务器,代理做的事情是把客户端发送的请求转发到服务器,是对客户端做的代理;而反向代理中,恰恰相反,是对服务器做的代理,一般而言,有多个服务器(功能一样),当请求量很大时(比如秒杀),一个服务器可能扛不住,我们会部署多个服务器,反向代理做的事情,就是把发来的请求,均匀的分配给不同的服务器,缓解服务器压力,此即为反向代理。总结,正向代理是代理的客户端,反向代理是代理的服务器端。
目录结构如下图所示
部署共分为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 lichao18@staff.weibo.com # 以下是重点,.的意思是把当前目录的所有文件(包含文件夹)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访问部署成功项目。
- 项目部署:docker-django-nginx-uwsgi-postgres-supervisor
- nginx+uwsgi+django部署python项目
- Ubuntu18.04部署Django项目(Nginx+uWSGI)
- Django+uwsgi+nginx(Ubuntu:16.4)项目部署
- centos下用uwsgi + nginx + mysql部署django项目
- Nginx+Uwsgi 部署 Django 项目(阿里云ECS-CentOS 7.3)
- 从零开始搭建个人网站(6)nginx+uWSGI部署Django项目(上)
- nginx+uwsgi部署django项目
- 基于nginx和uWSGI在Ubuntu系统上部署Django项目
- 部署Django项目Nginx + uwsgi
- 阿里云服务器部署python Django项目(nginx+uWSGI)
- ngingx+uwsgi+django项目部署nginx找不到django应用
- 编写Django项目并使用uwsgi和nginx部署在Linux平台
- django1.8+uwsgi+nginx+supervisord部署项目笔记
- ubuntu 14.04部署python项目(Nginx+uwsgi+django)
- 在阿里云ECS上部署 Django+MySQL+uWSGI+Nginx 项目的基本流程
- 关于uWSGI+nginx+django项目的部署
- docker-compose部署django+nginx+uwsgi+celery+redis+mysql
- 阿里云(ubuntu)下使用nginx、uwsgi部署django项目
- django项目在uwsgi+nginx上部署遇到的坑