nginx-docker-uwsgi-django

[TOC]

前言

docker

# 查看所有容器
docker container ls -a
# 查看所有镜像
docker image ls -a

# 停止正在运行的容器
docker stop container-id
# 重启已经停止的容器
docker start container-id
# 不管容器是否启动都直接重启容器
docker restart container-id
# 删除不需要的容器
docker rm container-id
# 删除不需要的镜像
docker image rm image-id

# docker创建运行每个容器时会为每个容器分配一个ip地址
docker inspect container-name | grep "IPAddress"

docker pull python:3.6.5可能timeout,可以百度docker换国内源试试

docker+django

在django项目的manage.py文件的同级目录创建dockerfile文件。

# 基于哪个镜像来实现
FROM python:3.6.5

# 镜像作者
MAINTAINER yun

# python禁用缓存输出
ENV PYTHONUNBUFFERED 1

# 在容器内递归创建/home/yun/mysite文件夹
RUN mkdir -p /home/yun/mysite
# 设置容器内工作目录
WORKDIR /home/yun/mysite
# 将当前目录文件加入到容器工作目录中
ADD . /home/yun/mysite

# 安装django
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
# -t表示创建名django-py版本v1的镜像, .表示用当前路径的Dockerfile进行构建
docker build -t django-py:v1 .
# -d 后台运行 --name 命名容器名字 -p 设置端口映射(从宿主机到容器)
docker run -itd --name mysite -p 8000:8000 django-py:v1
# 进入容器终端,-i 交互式 -t 终端
docker exec -it container-id sh

# 进入容器终端之后启动django服务
python manage.py runserver 0.0.0.0:8000

启动之后在宿主机浏览器中打开127.0.0.1:8000就可以看到Django的Hello World!

如果希望提供对外服务的话,可以在settings.py文件中更改IP地址ALLOWED_HOSTS = ['本机对外的IP地址'],然后再执行python manage.py runserver 0.0.0.0:8000

docker+uwsgi+django

在django项目的manage.py文件的同级目录创建dockerfile文件。

# 基于哪个镜像来实现
FROM python:3.6.5

# 镜像作者
MAINTAINER yun

# python禁用缓存输出
ENV PYTHONUNBUFFERED 1

# 在容器内递归创建/home/yun/mysite文件夹
RUN mkdir -p /home/yun/mysite
# 设置容器内工作目录
WORKDIR /home/yun/mysite
# 将当前目录文件加入到容器工作目录中
ADD . /home/yun/mysite

# 安装django
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
# 安装uwsgi
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi

在django项目的manage.py文件的同级目录创建uwsgi.ini文件。

# 配置uwsgi
[uwsgi]
# 指定服务器部署IP地址和端口
http=0.0.0.0:9090
# 配置项目在当前服务器中的绝对路径
chdir=/home/yun/mysite
# 相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
# 设置启动的进程数量
processes=4
# 设置每个进程启动的线程数量
threads=2
# 设置主进程
master=True
# 指定保存主进程编号的文件
pidfile=uwsgi.pid
# 指定守护进程的日志存储
daemonize=uwsgi.log
# -t表示创建名django-py版本v1的镜像, .表示用当前路径的Dockerfile进行构建
docker build -t django-py:v2 .
# -d 后台运行 --name 命名容器名字 -p 设置端口映射(从宿主机到容器)
docker run -itd --name mysite -p 9090:9090 django-py:v2
# 进入容器终端,-i 交互式 -t 终端
docker exec -it container-id sh

# 进入容器终端之后启动uwsgi服务
uwsgi --ini uwsgi.ini

启动之后在宿主机浏览器中打开127.0.0.1:9090就可以看到Django的Hello World!

如果希望提供对外服务的话,可以在settings.py文件中更改IP地址ALLOWED_HOSTS = ['本机对外的IP地址'],然后再执行uwsgi --ini uwsgi.ini

nginx+docker+uwsgi+django

配置nginx

把在nginx官网下载下来的压缩包解压到django项目的manage.py文件的同级目录下

# 在http的server大括号里面添加
        # location / {
        #     root   html;
        #     index  index.html index.htm;
        # }

        # 静态文件配置
        location /static {
            alias C:\Users\yun\Documents\HelloCode\mysite\static;
        }
        # 反向代理配置
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9090;
        }

配置docker+uwsgi

在django项目的manage.py文件的同级目录创建uwsgi.ini文件。

# 配置uwsgi
[uwsgi]
# 配置和nginx之间的连接地址
socket=0.0.0.0:9090
# 配置项目在当前服务器中的绝对路径
chdir=/home/yun/Documents/HelloCode/mysite
# 相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
# 设置启动的进程数量
processes=4
# 设置每个进程启动的线程数量
threads=2
# 设置主进程
master=True
# 指定保存主进程编号的文件
pidfile=uwsgi.pid
# 指定守护进程的日志存储
daemonize=uwsgi.log

在django项目的manage.py文件的同级目录创建Dockerfile文件。

# 基于哪个镜像来实现
FROM python:3.6.5

# 镜像作者
MAINTAINER yun

# python禁用缓存输出
ENV PYTHONUNBUFFERED 1

# 在容器内递归创建/home/yun/mysite文件夹
RUN mkdir -p /home/yun/mysite
# 设置容器内工作目录
WORKDIR /home/yun/mysite
# 将当前目录文件加入到容器工作目录中
ADD . /home/yun/mysite

# 安装django
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
# 安装uwsgi
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi

启动测试

根据dockerfile构建docker-uwsig镜像,先在容器中启动uwsgi服务

# -t表示创建名django-py版本v1的镜像, .表示用当前路径的Dockerfile进行构建
docker build -t mysite-uwsgi:v1 .
# -d 后台运行 --name 命名容器名字 -p 设置端口映射(从宿主机到容器)
docker run -itd --name mysite-uwsgi -p 9090:9090 mysite-uwsgi:v1
# 进入容器终端,-i 交互式 -t 终端
docker exec -it container-id sh

# 进入容器终端之后启动uwsgi服务
uwsgi --ini uwsgi.ini

在django项目下进入刚才解压的nginx文件夹启动nginx服务

# 启动nginx
start ./nginx
# 停止nginx
./nginx -s quit
# 重新加载nginx
./nginx -s reload

启动之后打开127.0.0.1:80就可以看到django的Hello World!

如果希望提供对外服务的话,可以在django的settings.py文件中更改IP地址ALLOWED_HOSTS = ['本机对外的IP地址'],然后在nginx的nginx.conf文件中更改server_name 本机对外的IP地址;,最后再重新加载nginx;此时不需要重新加载docker-uwsgi容器,因为docker-uwsgi容器的uwsgin.ini文件socket=0.0.0.0:9090不需要更改,所以不需要重新加载docker-uwsgi容器

posted @ 2020-12-11 15:25  野火冫吹又生  阅读(292)  评论(0编辑  收藏  举报