Django + uwsgi + Nginx 使用 docker 进行部署

Windows\Linux下使用Docker Compose管理部署Nginx+uwsgi+Django项目 系统 windows Server 2008 R2 Enterprise Docker version: PS C:\Users\Administrator> docker version Client: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: Thu Jul 28 23:54:00 阅读详情

1. 部署Django + uwsgi 

配置Django的Dockerfile:

FROM python:3.6

RUN mkdir /code

COPY ./ProjectName /code
COPY ./uwsgi_config /code
COPY ./start.sh /code

WORKDIR /code

RUN mkdir ~/.pip
RUN chmod 666 ~/.pip
RUN touch ~/.pip/pip.conf
RUN chmod 666 ~/.pip/pip.conf
RUN echo "[global]" >> ~/.pip/pip.conf
RUN echo "timeout = 6000" >> ~/.pip/pip.conf
RUN echo "index-url = http://pypi.douban.com/simple/" >> ~/.pip/pip.conf
RUN echo "[install]" >> ~/.pip/pip.conf
RUN echo "use-mirrors = true" >> ~/.pip/pip.conf
RUN echo "mirrors = http://pypi.douban.com/simple/" >> ~/.pip/pip.conf
RUN echo "trusted-host = pypi.douban.com" >> ~/.pip/pip.conf

RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
RUN pip3 install uwsgi

EXPOSE 8000
# CMD ["sh", "start.sh"]
# CMD ["uwsgi", "--ini", "/code/uwsgi.ini"]

配置uwsgi:

[uwsgi]
# the base directory (full path)
chdir           = /code
# Django's wsgi file
module          = ProjectName.wsgi

# max request count
max-requests  = 5000
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 5
# the socket (use the full path to be safe
http          = :8000
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true

start.sh 配置(做一些预设值之类的东西,可以不要):

#!/bin/bash
python manage.py makemigrations
python manage.py migrate

2. 配置 Nginx 的Dockerfile:

Dockerfile:

FROM nginx:latest

WORKDIR /usr/share/nginx/html/

# self nginx conf
ADD default.conf  /etc/nginx/conf.d/

RUN mkdir /usr/share/nginx/html/static

# django static file dir
ADD ./static /usr/share/nginx/html/static

EXPOSE 80

default.conf配置:

server {
    listen      80;
    server_name server_ip;
    charset     utf-8;

    client_max_body_size 75M;

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

    location / {
        proxy_pass http://server_ip:8000;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

docker-compose.yml配置:

version: '3'
services:
  mysql:
    image: 'mysql:5.7'
    container_name: mysql
    restart: always
    ports:
      - '3306:3306'
    volumes:
      - './mysql/data:/var/lib/mysql'
      - './mysql/conf:/etc/mysql/conf.d'
    environment:
      MYSQL_ROOT_PASSWORD: 123123
      MYSQL_DATABASE: db
      TZ: Asia/Shanghai
  web:
    build: ./projectname
    container_name: web_name
    restart: always
    depends_on:
      - mysql
      - redis
    ports:
      - '8000:8000'
    command: bash -c "python manage.py makemigrations && python manage.py migrate && uwsgi --ini /code/uwsgi.ini"
  redis:
    image: 'redis:5.0'
    container_name: redis
    restart: always
    ports:
      - '6379:6379'
  nginx:
    build: ~/worker/nginx
    container_name: nginx
    restart: always
    ports:
    - 80:80
    volumes:
    - ~/worker/nginx/log:/var/log/nginx/
    depends_on:
    - web

执行命令:

docker-compose build
docker-compose up -d

交互模式进入容器:

docker run -it 镜像名 bash
docker exec -it 容器id bash

运行单个容器:

docker run -p 80:80 -d 镜像名

注:当 web 设置depends_on 为mysql 后,需要在Django连接mysql的 host 把 IP 的值改成 db,否则报错:

django.db.utils.OperationalError: (2003, 'Can\'t connect to MySQL server on \'mariadb55\' (111 "Connection refused")')

参考:https://segmentfault.com/a/1190000017034025

附:docker-compose部署mysql:

version: '3'
services:
  mysql:
    image: 'mysql:5.7'
    container_name: mysql
    restart: always
    ports:
      - '3306:3306'
    volumes:
      - './mysql/data:/var/lib/mysql'
      - './mysql/conf:/etc/mysql/conf.d'
    environment:
      MYSQL_ROOT_PASSWORD: 123123
      MYSQL_DATABASE: mydb
      TZ: Asia/Shanghai

注:如果执行后发现mydb数据库没有初始化,需要手动清空 ./mysql/data 文件夹下所有内容

参考:http://www.fecshop.com/topic/1186

mysql/conf:

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
skip-name-resolve
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

连接docker mysql 容器慢的问题:

skip-name-resolve
innodb_flush_log_at_trx_commit=0
sync_binlog=0

方法解析:

skip-name-resolve:跳过域名解析,对有些场景很管用,但对我遇到的不怎么管用。

    设置这个以后,速度只有一点点提升(2秒  -> 1秒9)。

innodb_flush_log_at_trx_commit=0: 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。

    设置这个以后,速度有很大提升(1秒9  -> 1秒)。

sync_binlog=0:每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。设为1是最安全的做法,但效率最低。docker中默认设置是1,意思是由操作系统来负责二进制日志文件的同步工作。

    设置这个以后,速度有显著提升(1秒  -> 30毫秒)

参考:https://blog.youkuaiyun.com/chunzhenzyd/article/details/82887269

Docker+Uwsgi+Nginx部署Django项目保姆式教程 之前,我和大家分享了在docker中使用uwsgi部署django项目的教程。这次,为大家带来的是使用Docker+Uwsgi+Nginx部署Django项目。废话不多说,我们开干。 阅读详情

相关推荐

docker-compose部署django+nginx+uwsgi+celery+redis+mysql

一. 项目环境介绍 1、项目图解 2、项目目录结构说明 项目地址:https://gitee.com/edushiyanlou/django-docker django-docker ## 项目根路径 │ .gitignore # git忽略不上传的文件 │ docker-compose.yml #...

longlong6682的博客 1783

根据Django项目,编辑dockefile文件及生成docker镜像

创建一个名为 Dockerfile 的空文件。或 nano Dockerfile:使用文本编辑器(如 vi 或 nano)打开 Dockerfile 文件,以便编辑其内容。

采菊东篱下,Python满乾坤! 1565

从零到一:手把手教你构建自定义ReaxFF力场参数

本文手把手教你从零构建自定义ReaxFF力场参数,详解反应力场的动态键序机制与参数化逻辑。通过LAMMPS实战演示,涵盖训练数据准备、参数优化算法选择及性能优化技巧,助力研究人员精准模拟化学反应过程。适用于材料科学、催化研究等领域,特别适合已掌握分子动力学基础的进阶用户提升力场开发能力。

weixin_28365523的博客 1057

Django应用容器封装DockerFile分享

Django应用容器话

tushanpeipei的博客 1225

128x64 OLED屏的救星:手把手教你用纯C实现轻量级多级菜单

本文针对资源受限的单片机开发场景,提供了一套用纯C语言实现128x64 OLED屏轻量级多级菜单的完整方案。该方案摒弃了传统的树形指针结构,创新性地采用哈希表进行菜单项管理,核心代码不足200行,内存占用极低,逻辑清晰且易于维护。文章详细阐述了架构设计、实战演练及性能优化技巧,是STM32、ESP8266等小内存MCU项目的理想选择。

table的专栏 227

RAP 时代的 Service Binding:把 CDS 业务服务稳稳地“插”到 OData 里

本文深入解析SAP ABAP开发中的关键对象Service Binding,阐述了如何通过三层架构(数据模型、服务定义、服务绑定)实现业务逻辑与协议分离。文章重点分析了Service Binding的核心参数配置,包括服务命名规范、协议类型选择(OData V2/V4、InA、SQL)及服务形态(UI Service与Web API),并通过实际案例说明不同选项的应用场景。同时介绍了服务版本控制机制、发布流程及Fiori预览功能,帮助开发者理解如何通过Service Binding将业务能力高效转化为可消费

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5712

docker手动部署django项目Dockerfile编排-后端发布

再次安装pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt。手动启动容器,只对当前的进程5有用,1234窗口需要重新配置环境变量ENV=pro。3.6执行supervisord.conf,配置celery和wsgi执行。3.5,迁移数据库(代码写数据库ip地址)。(就是把3的步骤写在一个文件内进行一步一步执行)3.1(可以忽略,手动部署,查看问题)这是走到了开发环境,有错。解决办法:查看环境变量,

一树梨花压海棠&的博客 1990

《QGIS快速入门与应用基础》079:KML/KMZ格式:Google Earth兼容

KML/KMZ是专为地理可视化设计的空间数据格式,原生兼容Google Earth,支持点线面要素标注与多媒体集成。KML为XML文本格式,KMZ是其压缩版本。该格式优势在于可视化表现力强、跨平台共享便捷,适合地理标注、路线分享等场景,但存在属性支持弱、大数据量处理效率低等局限。QGIS中可便捷加载和导出KML/KMZ数据,需注意编码设为UTF-8、勾选"导出样式"以保留可视化效果。建议中小规模标注数据使用KMZ格式,确保关联资源完整,提升共享效率。

LuckyHanMo的博客 771

Dockerfile详情,Django项目中使用Dockerfile

Dockerfile是一个文本文件,一般位于项目根目录中,文件名必须为Dockerfile,Docker会根据Dockerfile文件生成新的自定义镜像。

AZURE060606的博客 914

从原理到实战:深入解析 Synopsys VCS 仿真快照技术,提升验证效率

VCS Checkpoint 技术摘要 VCS Checkpoint 是 Synopsys VCS 提供的仿真状态快照功能,可将完整的仿真状态(寄存器、存储器、时钟、随机种子等)序列化保存。主要应用场景包括:跳过耗时初始化阶段、覆盖率驱动验证、Debug复现和UVM分阶段验证。核心原理是对仿真内核状态的完整序列化,需注意文件句柄等特殊对象需手动处理。 使用方式: 编译时添加 -checkpoint 选项 运行时通过 $save 系统任务或 +checkpoint 参数保存状态 通过 +restore 参数恢

元直的博客 248

【数据集2】CPC Global Unified Temperature/Precipitation数据简介及处理

简介CPC 温度及降雨 数据

WW、forever的博客 3107

docker 快速搭建django项目环境(DockerFile)文件基础搭建

首先需要搭建好docker环境,docker环境就不在这里叙述,如果想学在评论区留言小编后期更新由linux系统到docker的安装做一个详细的教程。2、创建docker自定义镜像:docker build -t mydjango . -f DockerFile 后回车等待拉取创建完成,创建时需要重网上拉取信息,第一次速度比较慢,第二次就很快了,有缓存,如果已完成以上每项即可自行创建容器了。vim DockerFile 将以下代码复制进去。

cyz141001的博客 674

uniapp [安卓苹果App端] - 在“安卓app/苹果app“平台端打包编译后,微信授权登录报错 login:fail [:-1]未能完成操作。(PGWXAPI错误-1。)错误码code:-10

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,微信授权登录,uniAppAPP端微信登录报错,出现微信确认登录界面后点击登录报错,BundleID,应用ID,微信登录,app微信一键登录,微信登录绑定点确定就出错,AppSecrect,login:fail[:-1]未能完成操作。(PGWXAPI错误-1。),"errCode":-100,"code":-100,在uniappmanifest.json配置了AppSecrect还是报错无

🏆 前端领域优质创作者 3764

docker 部署nginx_使用docker部署uwsgi+ nginx + mysql + redis的django项目

关于uwsgi的docker配置uwsgi的python环境容器配置如下:首先拉取python3.6环境镜像文件,这里拉取为python3.6环境并且对于utf8编码支持,自带virtualenv虚拟环境包# 拉取mc706/pipenv-3.6镜像docker pull mc706/pipenv-3.6如果拉取比较慢,可以考虑是否有更换docker源地址守护模式运行镜像:# 以守护模式...

weixin_30039755的博客 375

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表示的是阳性样本的比例

data+scenario+science+insight 1225

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用docker+django+nginx+uwsgi部署前后端分离项目

使用docker nginx uwsgi 部署前后端分离的django项目脚手架 创建或使用已有django项目 django startproject app app 可以设置为你的项目名称 ,以下项目名称均已app为例 django配置 app/app/settings.py 基础镜像默认采用东八区时区 ALLOWED_HOSTS = ["*"] # 允许主机 LANGUAGE_CODE = 'zh-hans' # 语言 TIME_ZONE = 'Asia/Shanghai' # 时区 STATI

再见尼罗河的博客 1226

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Centos8.2下使用Docker-Compose+uWSGI+NGINX部署Django+Vue-cli项目

文章目录前言一、部署流程1、项目结构2、django目录下新建Dockerfile3、编辑uWSGI文件4、NGINX/Dockerfile配置5、NGINX/nginx-app.conf配置6、docker-compose.yml7、容器构建与启动8、易错点说明① 前端接口 前言 学习的文档: docker-compose部署nginx+uwsgi+django项目: https://blog.youkuaiyun.com/a914541185/article/details/103363599 vue + dj

Cheryl_Xu的博客 2514

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用Docker部署django+nginx+uwsgi+redis+celery+mysql+vue项目

使用Docker部署django+nginx+uwsgi+redis+celery+mysql+vue项目一、项目需求二、项目结构三、具体配置四、常用命令(嫌敲命令烦的可以看第五不)五、docker可视化工具portainer(可装可不装) 一、项目需求 技术要求:了解docker常用命令以及会使用下面使用到的技术 部署环境:腾讯云ubuntu18.04 本地开发系统:MacOS 远程工具:FinalShell(推荐,超级好用) 后端技术栈:python、django、nginx、uwsgi、redis、c

朽木自雕的博客 2036

阿里云ECS Centos7使用Docker部署Django2.0 + mysql + nginx + uwsgi + supervisor,需要python2和python3共存

文章目录一、首先创建docker容器的目录目录说明1、wwwroot存放的是connorflow项目,app也是connorflow2、docker目录存放了两个docker容器的配置1)、djang-uwsgi-nginx目录存放的是2)、mysql目录存放的是mysql容器相关的配置查看docker镜像:二、创建MySQL的docker容器1、start.sh2、my.cnf三、创建Djang...

u013429010的博客 1430

使用docker部署uwsgi+mysql+nginx+redis的django项目

uwsgi的python环境容器配置如下: 首先拉取python3.6环境镜像文件,这里拉取为python3.6环境并且对于utf8编码支持,自带virtualenv虚拟环境包 # 拉取mc706/pipenv-3.6镜像 docker pull mc706/pipenv-3.6 如果拉取比较慢,可以考虑是否有更换docker源地址,之前题主有写到更换docker源地址的博客,可以移驾至...

weixin_42693794的博客 1903

Python Django教程:使用docker-compose部署django + uwsgi + nginx +mysql + redis完整脚本

Django在生产环境的部署还是比较复杂的, 令很多新手望而生畏,幸运的是使用Docker容器化技术可以大大简化我们Django在生产环境的部署并提升我们应用的可移植性。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器上。本文将详细介绍如何使用docker-compose八步部署Django + Uwsgi + Nginx + MySQL +Redis (多容器组合)。

学亮编程手记 3022

docker简单使用+django+uwsgi+nginx项目部署

使用docker 搭建 centos7 环境: 主机环境:windows 10专业版 一、安装docker Hub.docker.com官网下载 docker for windows 安装完成后,任务栏会 表示已经运行起来,使用注册的账号进行登录,显示docker is running表示windows环境下已经开始运行 二、拉取镜像 Docker 在 w...

weixin_30632899的博客 1016

记录自己第一次使用Docker容器部署vue+django+nginx+uwsgi项目,数据库使用的Oracle

在学习完docker部署django后突发奇想想把之前做的Oracle课设用docker部署,当作自己的第一次docker部署测试,其中遇到了许多问题,在此记录,供以后参考。首先贴一下项目的文件结构。

qq_75229677的博客 1293

基于docker部署nginx+uwsgi+django

基于docker部署nginx+uwsgi+django(一)docker+uwsgi+django(二)docker+nginx+django(三)docker+nginx+uwsgi+django(五)结语 (一)docker+uwsgi+django (二)docker+nginx+django (三)docker+nginx+uwsgi+django 这里nginx单独一个容器,uwsgi+django为一个容器。但然它们三个也可以部署在一个容器内,但是这样没啥意义(目的就是为了动静分离),其实配置

????爱好者的博客 1万+

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

本文介绍使用nginx+uwsgi+django+docker部署django项目的方法。其中nginx作为反向代理,uwsgi作为服务器,django作为应用程序,ES作为数据库。nginx部署于一个docker容器,uwsgi+django部署于一个docker容器(一般是多个备份),为提高效率,使用docker-composer完成多容器一键部署。服务架构如下图所示。 备注:反向代理名词解释,一般说到代理,都是正向代理。正向代理场景中,有多个客户端,一个服务器,代理做的事情是把客户端发送的请求转发到服

apple_strawberry的博客 1059

【应用】Docker-多容器部署Django+Vue项目(nginx+uwsgi+mysql)

基于Linux CentOS 7系统(虚拟机),使用Docker,多容器部署Django+Vue项目整体部署用到了:Django+Vue+nginx+mysql+uwsgi先每一个容器单独部署,最后用Docker compose 语法整合,统一部署总结梳理放在前边,方便整体理解写项目部署步骤的时候,总有步骤”想当然“而没有展示出来。本文已尽可能展示所有的修改动作,希望文章对你有所帮助。至此,三个容器都已成功启动,可以在客户端用浏览器访问项目,并进行操作,来验证是否能够成功交互。

HMTeen 2858
上一篇: ubuntu 18.04 安装Docker以及Compose
下一篇: Django 2.2 使用 celery 4.3.0 做异步任务和定时任务
命运的棋局
博客等级 码龄10年 15粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值