预计阅读8分钟
周末,在一个技术群里面有同学在问Django开发部署,所以今天给大家分享一下基于Docker下Python Django框架的部署。
首先我们要知道Django常见的两种部署方式:
Django + Nginx + uWSGI
Django+ Nginx + Gunicorn
限于篇幅情况,今天我们主要聊第一种 uWSGI 配合 Nginx的部署方式。
首先我们要知道我们发布上线的步骤,这里面我们以Docker容器化为例子:
1.通过自动化脚本,把代码同步到线上服务器(通过fabric或者ansible等)
这上面5个步骤,只要配置好了对应的配置文件(nginx,uWSGI,supervisor等),我们就能通过一个发布脚本进行一键进行代码发布上线。
下面分别简单阐述一下,Nginx,Supervisor,uWSGI,Docker-compose等配置文件及用法。
Nginx
Nginx是一个高性能的HTTP和反向代理服务器。
我们要进行服务部署,首先我们Nginx需要进行配置好对应的配置文件。
把配置文件放在/etc/nginx/sites-enabled/ 目录下面,这儿你也可以放在项目里面通过ln 进行链接过去。
之所以这样配置是因为我们主配置文件/etc/nginx/nginx.conf是include /etc/nginx/sites-enabled/ 目录的原因。
这里我们配置文件命名为 api.yourdomain.com.conf
配置文件如下
# api.yourdomain.com.conf
server {
listen 80;
charset utf-8;
server_name api.yourdomain.com; # DNS解析到当前nginx服务器
location / {
proxy_pass http://127.0.0.1:9527; # 代理的端口
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
}
access_log /test/log/nginx.access.log;
error_log /test/log/nginx.error.log;
}
uWSGI
配置好了nginx,接下来就是uWSGI配置了。uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
后面我们会说uWSGI 和 Gunicorn 他们都是实现了WSGI server协议的服务器。
通过uWSGI我们可以获得更好的服务性能,详细日志,多应用管理等多种定制功能。下面我们简单来看下配置文件。
# /yourdir/uwsgi.ini
[uwsgi]
chdir = /yourdir/ # 执行目录
module = yourproject.wsgi # wsgi文件
master = true
processes = 1 # 一般越多进程处理能力越强,由于这里是测试设为1
vacuum = true
http = 0.0.0.0:9527
# virtualenv = /home/test/project/python/yourproject/venv
这里我们用了docker就不用考虑virtualenv情况
env = DJANGO_SETTINGS_MODULE=yourproject.settings
harakiri = 30 # 当进程被卡住的时间超过特定的秒数后就销毁这个进程
no-orphans # 在没有主进程的情况下自动结束工作进程。
为了方便展示以及解读,这里面我删除精简了一些配置,具体线上配置更为复杂一些,具体情况请具体进行配置。
另外这里面我们需要知道uWSGI 是一个语言无关的服务器,这里面我们可以部署Django,也可以部署Flask,Web2py等等。你这儿可以把他等同 Python manage.py runserver 这条命令,区别在一个在测试环境和线上环境。
Supervisor
supervisor我在Linux系列文章第一篇Linux系列开坑记(一)-常用的3个命令,就分享过了,这里直接列一个配置文件出来。
[supervisord]
nodaemon=true
logfile=/data/log/supervisord.log
pidfile=/var/run/supervisord.pid
[program:your_app_name]
process_name=app%(process_num)s
command=uwsgi -i /yourdir/uwsgi.ini --touch-reload=/yourdir/uwsgi.ini
directory=/yourdir ;执行命令时切换工作目录
user=sitin ; 使用sitin来启动进程
stopsignal=HUP
autostart = true
autorestart=true ;自动重启
redirect_stderr = true ;重定向日志
stdout_logfile = /data/log/stdout-%(program_name)s.log
logfile_maxbytes=300MB
logfile_backups=5
numprocs=3 ;启动3个 9527,9528,9529
numprocs_start=9527 ; 从9527开始
这里面supervisor控制服务uWSGI进行服务启动,我们可以进行start,restart,stop等操作。
Docker-compose
Docker-compose是进行容器编排,方便我们进行容器管理。我们配置好了上面的文件,再来看下docker-compose的配置文件,这里同样我在之前docker文章进行分享过了,参考 Docker容器化部署实践Docker Compose
version: "3" # 注意版本号
services: # 一个应用的容器,可以包括多个相同镜像容器实例
dev:
image: hub.yourdomain.com/test:1.0 # 镜像地址
command: supervisord -c /yourdir/supervisord.conf # 容器执行命令
container_name: test # 容器名
restart: always
volumes:
- ./docker:/data # 挂载地址
ports:
- "9527:9527" #端口
environment:
- PYTHONPATH=/data
- XXX_API_SETTINGS=XXX.config.dev
- DJANGO_SETTINGS_MODULE=yourproject.settings
network_mode: bridge
extra_hosts: # 配置额外的host名称
- "test.yourdomain.com:127.0.0.1"
external_links: # 链接到外部容器
- redis:redis
- mysql:mysql
看到这儿想必有同学已经有些晕了,我们再来理一下这里的逻辑。
我们通过docker-compose配置文件,进行控制supervisor启动
Supervisor控制uWSGI端口服务启动
uWSGI把整个Django应用拉动起来(这里类似python manage.py runserver)
而我们浏览器请求到达Nginx之后被反向代理到uWSGI端口服务上面,从而访问到我们Django应用。
至此就是整个应用的部署配置(除了没有自动化发布脚本以外)
最后
通过上面的配置文件,我们介绍了整个Django应用发布过程的涉及到的主要步骤,实际情况会稍微复杂点儿。更多详细优化参数大家可以去进行了解。今天我们uWSGI的部署就先到这儿,下一期我们再进行分享Gunicorn部署方式。
容器化部署实践,我打算从基础操作到实战应用以一个系列进行分享,今天是第四篇docker部署Django应用,后期我将持续分享更多相关内容,从容器化入门使用到部署实践编排技术,欢迎大家持续进行关注。
扫码免费加入
相关文章:
Docker 容器化部署实践--入门
Docker容器化部署实践Docker Compose
Docker 容器化部署实践之Dockerfile
Linux系列开坑记(一)-常用的3个命令
分享到:
相关推荐
在本项目中,Docker被用来打包和部署Django应用、Vue3构建后的前端代码以及Nginx服务器。通过Docker Compose或Kubernetes等工具,我们可以轻松地管理这些容器,实现一键部署和扩展。 综上所述,这个项目展示了如何...
这是教你手把手部署 Docker + Django + Mysql + Ngnix + Gunicorn 的傻瓜式教程,目的是让 Docker 菜鸟也能快速部署容器化的 Django 应用。 特色: 零基础、免费、中文、完整项目代码 基于最新的 Docker 19.03.1、...
Docker是一个开源的应用容器引擎,可以将应用程序及其依赖打包为一个可移植的容器,然后发布到任何支持Docker的环境中。Docker的优势在于它提供了一种轻量级、可移植、自包含的部署方式,使得应用程序的部署和运行...
eb-docker-django-简单一个在 docker 容器中工作的简单 Django 应用程序,可部署到 AWS Elastic Beanstalk先决条件请参阅此目录中的INSTALL.md 。运行开发环境假设安装了 boot2docker 并且init -ed: 启动虚拟机 ...
部署方式:docker容器部署 nginx(vue) + uwsgi(django) 给出体验地址: 121.4.47.229:8080 因为钉钉、QQ、支付宝等回调地址的原因,为了更好的体验,请在本机hosts中添加: 121.4.47.229 image.meiduo.site 121.4.47...
该项目利用了基于springboot + vue + mysql的开发...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
本文主要介绍python应用(django)跑在docker容器里,编写dockerfile实现镜像构建自动化以及docker神器compose。 二、编写Dockerfile文件 官网下载的python镜像比较精简,web应用相关依赖还是需要自己安装的。编写...
Django项目 nginx配置文件 mysql配置文件 docker-compose配置文件 Dockerfile配置文件 python依赖包配置文件
该项目利用了基于springboot + vue + mysql的开发...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
Docker-compose-一个简单的多容器编排工具 调试Django应用程序 改善Dockerfile和其他功能... 一起测试 最后的笔记 包括: 詹戈 芹菜 码头工人 发展的最佳实践 Dockerfile的最佳实践 快速开发量 调试 一些生产最佳...
这是教你手把手部署 Docker + Django + Mysql + Ngnix + Gunicorn 的傻瓜式教程,目的是让 Docker 菜鸟也能快速部署容器化的 Django 应用。教程传送门:注:两个版本是完全相同的。需要留言请前往个人博客。教程导航...
使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsweb ├── apps ├── logs ├── manage.py ├── media ├──...