本文原理是,使用docker生成django+uwsgi容器,利用宝塔面板的nginx反向代理容器。
进入django项目目录,新建Dockfile, uwsgi.ini和start.sh三个文件。
Dockfile
# 基础镜像:python3.7环境
FROM python:3.7
# 镜像作者
MAINTAINER Richard
# 设置 python 环境变量
ENV PYTHONUNBUFFERED 1
# 设置pypi源头为国内源
# COPY pip.conf /root/.pip/pip.conf
# 在容器内/var/www/html/下创建webapp文件夹
RUN mkdir -p /var/www/html/webapp
# 设置容器内工作目录
WORKDIR /var/www/html/webapp
# 将当前目录文件拷贝一份到工作目录中(. 表示当前目录)
# ADD . /var/www/html/webapp
ADD requirements.txt /var/www/html/webapp
ADD start.sh /var/www/html/webapp
# 利用 pip 安装依赖
RUN pip install -r requirements.txt
# Windows环境下编写的start.sh每行命令结尾有多余的\r字符,需移除。
RUN sed -i 's/\r//' ./start.sh
# 设置start.sh文件可执行权限
RUN chmod +x ./start.sh
uwsgi.ini
[uwsgi]
project=webapp
subproject=djangoProject1 #项目名称(需要修改的地方)
base=/var/www/html
chdir=%(base)/%(project)
module=%(subproject).wsgi:application
master=True
processes=2
socket=0.0.0.0:8080 #这里直接使用uwsgi做web服务器,使用http。如果使用nginx,需要使用socket沟通。
buffer-size=65536
pidfile=/tmp/%(project)-master.pid
vacuum=True
max-requests=5000
daemonize=/tmp/%(project)-uwsgi.log
#设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
harakiri=60
#当一个请求被harakiri杀掉会,会输出一条日志
harakiri-verbose=true
start.sh
#!/bin/bash
python manage.py collectstatic --noinput&&
python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --ini /var/www/html/webapp/uwsgi.ini
修改settings.py
import os
ALLOWED_HOSTS = ["*"]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
生成镜像
docker build -t mydjango_img:0.1 .
生成容器
docker run -it --name webapp -p 8080:8080 -v /www/wwwroot/projects/djangoProject1:/var/www/html/webapp -d mydjango_img:0.1
# /www/wwwroot/projects/djangoProject1 宿主机项目目录
# /var/www/html/webapp 容器工作目录
进入容器,启动uwsgi
docker exec -it webapp3 /bin/bash start.sh
宝塔面板设置反向代理
#PROXY-START/
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; #端口要和uwsgi里配置的一样
}
location /static/ {
alias /www/wwwroot/projects/djangoProject1/static/; #静态资源路径
}
#PROXY-END/
参考:https://blog.csdn.net/weixin_42134789/article/details/106205182