Docker+Uwsgi部署Django项目

在之前的文章中,已经给大家分享了在docker中使用django自带的命令部署项目,这篇文章主要讲解如何使用uwsgi部署。

1. 在Django项目的根目录下新建Dockerfile文件

在这里插入图片描述

#Dockerfile文件
# 使用 Python 3.9 作为基础镜像
FROM python:3.9# 设置工作目录
WORKDIR /app# 复制项目文件到工作目录
COPY . /app# 创建一个新的用户和组,例如命名为 myapp
ARG USER_ID=1000
ARG GROUP_ID=1000
RUN groupadd -g ${GROUP_ID} myapp && \useradd -u ${USER_ID} -g ${GROUP_ID} -d /app myapp && \chown ${USER_ID}:${GROUP_ID} /app
USER myapp# 创建虚拟环境
RUN python -m venv venv# 激活虚拟环境
ENV PATH /app/venv/bin:$PATH# 设置清华 pip 镜像
ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple 
ENV PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn# 安装项目依赖
RUN pip install --no-cache-dir -r requirements.txt# 暴露端口 8000
EXPOSE 8000# 设置环境变量,确保Django在生产模式下运行
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1# 启动 Django 服务器
# CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]# CMD 指令运行 Django 项目的 SSL 服务器
# CMD ["python", "manage.py", "runsslserver", "0.0.0.0:443", "--certificate=/app/certificate.pem", "--key=/app
# /private.key"]# 运行uWSGI服务
CMD ["uwsgi", "--ini", "/app/uwsgi.ini"]

2. 在Django项目的根目录下新建uwsgi.ini文件

# uwsgi.ini
[uwsgi]
master = true
# 指定 Django 项目的 WSGI 文件
module = djangoProject.wsgi:application# 项目根目录,根据实际情况进行调整
chdir = /app# 指定 Python 环境变量,确保使用正确的 Python 版本
home = /app/venv# 指定 uWSGI 服务的 socket 文件位置
http = 0.0.0.0:8000# 进程数和线程数根据需要进行调整
processes = 4
threads = 2# 设置环境变量,确保 Django 在生产模式下运行
env = DJANGO_SETTINGS_MODULE=djangoProject.settings
vacuum = true

3. 将Django项目打包上传到服务器并cd到项目的根目录

例如:Django项目的路径在/www/wwwroot/djangoProject
则输入:

cd /www/wwwroot/djangoProject

4. 构建并运行镜像

在 /www/wwwroot/djangoProject 目录下执行:

docker build -d django-app .

docker build -t django-app . 这个命令用于构建一个 Docker 镜像,并且为这个镜像指定了一个标签(tag)叫做 django-app。这里是命令的详细解释:

  • docker build: 这是 Docker 的一个命令,用于根据 Dockerfile 中的指令构建一个新的镜像。

  • -t: 这个选项是 ---tag 的缩写,它用于指定构建的镜像的标签。

  • django-app: 这是您为构建的镜像指定的标签。标签用于标识特定的镜像,并且可以在运行容器时引用。在这个例子中,标签 django-app 将与构建的镜像关联。

  • .: 这个点表示当前目录。Docker 会在这个目录下查找名为 Dockerfile 的文件,并根据该文件中的指令构建镜像。如果您在不同的目录中,您需要指定包含 Dockerfile 的目录的路径。

所以,整个命令 docker build -t django-app . 的意思是:“在当前目录下查找 Dockerfile 并根据其中的指令构建一个新的 Docker 镜像,并将这个镜像标记为 django-app”。

构建完成后,您可以使用 docker images 命令查看所有本地镜像,并且应该能看到一个名为 django-app 的镜像。

接下来,您可以使用 docker run 命令来创建并启动一个基于 django-app 镜像的容器。例如:

docker run -d --name my-django-container -p 80:8000 --user 1000:1000 django-app

这个命令的意思是:在后台运行一个名为 my-django-container 的容器,将容器的 80 端口映射到宿主机的 8000 端口,使用用户 ID 和组 ID 为 1000 的用户运行容器,并使用之前构建的 django-app 镜像。

至此,在浏览器中输入服务器ip地址或者已解析的域名,就能看到部署成功的页面了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623948.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Intel显卡驱动导致Qt opengl 渲染YUV时拉伸窗口内存泄漏

最近在使用QOpenGLWidget做YUV视频渲染,发现在拉伸窗口的时候内存暴涨,如果窗口不动则内存不变。 可以得出结论一定是resizeGL出了问题,但是其实这里代码很简单 glViewport(0, 0, w, h); 还有就是变换矩阵计算,根本没资源建立与释…

大模型微调的几种常见方法

在文章深入理解大语言模型微调技术中,我们详细了解大语言模型微调的概念和训练过程,本篇给大家介绍大模型微调常见的7种训练方法。 1、Adapter Tuning 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的…

NIO学习

文章目录 前言一、主要模块二、使用步骤1.服务器端2.客户端 三、NIO零拷贝(推荐)四、NIO另一种copy总结 前言 NIO是JDK1.4版本带来的功能,区别于以往的BIO编程,同步非阻塞极大的节省资源开销,避免了线程切换和上下文切换带来的资源浪费。 一、主要模块 Selector&a…

ENSP-旁挂式AC

提醒:如果AC不能成功上线AP,一般问题不会出在AC上,优先关注AC-AP线路上的二层或三层组网的三层交换机 拓扑图 管理VLAN:99 | 业务VLAN:100 注意点: 1.连接AP的接口需要打上pvid为管理vlan的标签 2.AC和…

Vitis HLS 学习笔记--readVec2Stream 函数-探究

目录 1. 高效内存存取的背景 2. readVec2Stream() 参数 3. 函数实现 4. 总结 1. 高效内存存取的背景 在深入研究《Vitis HLS 学习笔记--scal 函数探究》一篇文章之后,我们对于scal()函数如何将Y alpha * X这种简单的乘法运算复杂化有了深刻的理解。本文将转向…

imgcat 工具

如果经常在远程服务器或嵌入式设备中操作图片,要查看图片效果,就要先把图片dump到本地,比较麻烦。可以使用这个工具,直接在终端上显示。类似于这种效果。 imgcat 是一个终端工具,使用 iTerm2 内置的特性,允…

FOR循环指令计算累加和(CODESYS ST+SMART梯形图代码)

1、SMART PLC FOR循环指令应用 SMART PLC FOR循环指令_smart plc可以调用多少次for循环-CSDN博客文章浏览阅读2.4k次,点赞2次,收藏6次。SMART PLC的FOR循环: PLC里写需要加上: NEXT指令_smart plc可以调用多少次for循环https://r…

2024 年10个最佳 Ruby 测试框架

QA一直在寻找最好的自动化测试框架,这些框架提供丰富的功能、简单的语法、更好的兼容性和更快的执行速度。如果您选择结合使用Ruby和Selenium进行Web测试,可能需要搜索基于Ruby的测试框架进行Web应用程序测试。 Ruby测试框架提供了广泛的功能&#xff0…

打一把王者的时间,学会web页面测试方法与测试用例编写

一、输入框 1、字符型输入框: (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,…

纯golang开发的mqtt server

Mochi-MQTT Server github地址:https://github.com/mochi-mqtt/server Mochi-MQTT 是一个完全兼容的、可嵌入的高性能 Go MQTT v5(以及 v3.1.1)中间件/服务器。 Mochi MQTT 是一个完全兼容 MQTT v5 的可嵌入的中间件/服务器,完…

网络编程day4

目录 使用多进程实现并发服务器 使用多线程实现并发服务器 流式域套接字服务器 流式域套接字客户端 报式域套接字服务器 报式域套接字客户端 tftp客户端 思维导图 使用多进程实现并发服务器 #include <myhead.h> void sighandler(int signum){if(signumSIGCHLD)…

watchdog,监控文件变化的强大的python库

大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - watchdog。 Github地址&#xff1a;github.com/gorakhargos… 在软件开发和系统管理领域&#xff0c;经常需要监控文件和目录的变化&#xff0c;以便在文件被创建、修改或删除时触发相应的操作。Python Watchdog是一…