Docker部署Django(一)单容器部署Django + uwsgi

1. 创建django项目

django-admin startproject docker_django

# 生成数据库迁移文件
python3 manage.py makemigrations

# 执行数据库映射
python3 manage.py migrate

# 创建管理员账户
python3 manage.py createsuperuser

# 修改配置文件settings.py
ALLOWED_HOSTS = ['*']

# 如果在服务器上启动的项目,需要开放防火墙8000端口,此处为了演示方便,直接关闭防火墙
systemctl stop firewalld

# 启动项目
python3 manage.py runserver 0:8000

# 在浏览器中访问后台管理界面
http://10.10.102.237:8000/admin/login/?next=/admin/
  • 此时我们应该可以登录Django自带的后台

2.使用uwsgi启动Django

1.安装uwsgi,此处使用豆瓣源加速
pip3 install uwsgi -i https://pypi.douban.com/simple
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
2.在项目根目录下(即与manage.py同级别目录)创建uwsgi.ini文件
vi /xxx/xxx/docker_django/uwsgi.ini

[uwsgi]

; 使用nginx连接时使用
; socket = 0.0.0.0:10000

; 直接做web服务器使用,指定要监听的ip和端口号,即我们运行项目时的ip和端口
http = 0.0.0.0:8000

; 项目目录
chdir = /var/www/html/docker_django

; 项目中的wsgi.py文件的目录
module = docker_django.wsgi:application

; 静态文件映射,测试uwsgi配置时为了能够访问到静态资源,所以加上这个配置。在使用nginx时,需要注销掉这个配置,改用nginx来代理静态资源访>; 可使用 python manage.py collectstatic
static-map=/static=/var/www/html/docker_django/static

; 指定启动的工作进程数
processes = 4

; 指定每个进程中的线程数
threads = 2

; 指定在工作进程中存在一个主进程
master = True

; 服务停止时自动移除unix Socket和pid文件
vacuum = True

; 保存启动之后主进程的进程号
pidfile = uwsgi.pid

; 设置uwsgi后台运行,运行信息保存在uwsgi.log
; daemonize = uwsgi.log

; 单个日志的大小
buffer-size=32768

; 设置每个工作进程处理请求的上限,达到上限时,将回收(重启)该进程。可以预防内存泄漏
max-requests=5000
3. 使用uwsgi代理启动django
  • 在uwsgi所在目录执行下面命令启动
uwsgi uwsgi.ini
  • 此时应该可以看到如下结果

在这里插入图片描述

  • 当我们再次访问Django后台时,此时界面没有css样式,我们需要手动处理
  1. 修改settings.py文件,在文件最后增加以下内容,指定静态文件目录

`STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)

MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)

MEDIA_URL = ‘/media/’`

2.执行静态文件收集命令

python3 manage.py collectstatic

  • 此时,再次访问后台,又回到了熟悉的界面

3.使用docker部署

1. 部署前准备工作
  • 关于docker的介绍以及命令此处不提,网上很多,也为了部署思路更加清晰
  • 项目上线部署最重要的就是关闭debug调试模式,不能把报错信息展示给用户,避免被攻击
# 在settings.py中关闭DEBUG模式

DEBUG = False
  • 部署时需要修改允许访问的地址ALLOWED_HOSTS,设置为服务器真实IP地址和本地回环地址127.0.0.1,如果有域名且做了域名映射的话,再将域名也加进去
# 在settings.py中修改ALLOWED_HOSTS

ALLOWED_HOSTS = ['10.10.102.237', '127.0.0.1']
  • 在项目目录下执行下面命令,导出项目依赖包到项目目录(即manage.py同级目录)下的requirements.txt文件中,会自动创建该文件
pip3 freeze > requirements.txt
2. 编写Dockerfile,内容如下:
  • 在当前项目目录下(即manage.py同级目录)创建Dockerfile
FROM centos:centos7

MAINTAINER Fat Puffer <dcpuffer@outlook.com>

# 更换yum源
RUN set -ex \
        && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
        && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
        && yum clean all \
        && yum makecache && yum update -y

# 安装python3.7.2
RUN set -ex \
        && yum -y install zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget \
        && yum clean all \
        && mkdir /usr/local/python3

COPY Python-3.7.2.tar.xz  /usr/local/python3/

RUN set -ex \
        && cd /usr/local/python3 \
        && tar -xvJf  Python-3.7.2.tar.xz \
        && cd Python-3.7.2 \
        && ./configure prefix=/usr/local/python3 \
        && make && make install \
        && ln -s /usr/local/python3/bin/python3.7 /usr/local/bin/python3 \
        && ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

RUN set -ex \
        && cd /usr/local/python3 \
        && python3 -V
 
# 在容器内/var/www/html/下创建docker_django文件夹
RUN mkdir -p /var/www/html/docker_django
 
# 设置容器内工作目录
WORKDIR /var/www/html/docker_django
 
# 将当前目录文件加入到容器工作目录中(. 表示当前宿主机目录)
ADD . /var/www/html/docker_django
 
# 利用 pip3 安装依赖
RUN set -ex \
    pip3 install -r requirements.txt -i https://pypi.douban.com/simple \
    pip3 install uwsgi -i https://pypi.douban.com/simple \
    ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

# Windows环境下编写的start.sh每行命令结尾有多余的\r字符,需移除。
RUN sed -i 's/\r//' ./start.sh
 
# 设置start.sh文件可执行权限
RUN chmod +x ./start.sh
  • start.sh脚本文件内容如下所示。最重要的是最后一句,使用uwsgi.ini配置文件启动Django服务
#!/bin/bash
# 从第一行到最后一行分别表示:
# 1. 生成数据库迁移文件
# 2. 根据数据库迁移文件来修改数据库
# 3. 用 uwsgi启动 django 服务, 不再使用python manage.py runserver
python3 manage.py makemigrations &&
python3 manage.py migrate &&
python3 manage.py collectstatic
# python manage.py runserver 0.0.0.0:8000
uwsgi --ini /var/www/html/docker_django/uwsgi.ini
3.使用当前目录的 Dockerfile 创建镜像
# 根据Dockerfile创建名为django_uwsgi_img的镜像,版本v1,.代表当前目录
sudo docker build -t django_uwsgi_img:v1 .
4.启动并运行容器
# 根据镜像生成名称为django_docker的容器,并且启动将宿主机80端口映射到docker容器的8000端口
sudo docker run -it -d --name django_docker -p 80:8000 django_uwsgi_img:v1
5.进入django_docker的容器内部,并运行脚本命令start.sh
sudo docker exec -it django_docker /bin/bash start.sh
6.页面访问
http://10.10.102.237/admin
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值