Django 文件上传项目部署
Django 文件上传项目部署
相关文件准备
Dockerfile
Django项目的主要文件是manage.py,并且你的依赖包列表在一个名为requirements.txt的文件中,根据你的实际项目结构和需求。
# 使用一个基础镜像 #最小版镜像通常只包含了Python解释器和一些基本的系统工具 FROM python:3.8.10-slim-buster # 设置工作目录 WORKDIR /app # 复制项目文件到镜像中 COPY . /app # 安装项目依赖 RUN pip install -r requirements.txt RUN rm -f /app/requirements.txt # 运行数据库迁移 RUN python manage.py migrate # 暴露Django运行的端口号 EXPOSE 8000 # 启动Django应用 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
.dockerignore
忽略项目中的一些文件优化镜像大小
Dockerfile* .dockerignore .git .gitignore .env */bin */obj README.md LICENSE .vscode
requirements.txt
在requirements.txt文件中,你可以定义你的项目所需的常用包及其版本。
在使用pip安装依赖时,可以使用以下命令:pip install -r requirements.txt
paramiko==2.7.2 requests==2.25.1 django==4.2.1 six==1.16.0
查看Django的版本
要查看Django的版本,你可以在项目的Python环境中执行以下命令:
import django
print(django.get_version())
这将会导入Django模块并打印出当前安装的Django版本号。
另外,你也可以在命令行中使用django-admin命令来查看Django的版本。打开命令行终端,并执行以下命令:
django-admin --version
项目代码
注意: 相关的秘钥和日志路径需要修改为: /app/app.log和/app/sleepy_bear.pem
本次使用前面几章节编写的文件上传显示修改的Django项目,也可以使用其他自己的项目,曲意相通适当修改即可。
打包镜像
docker build -t django-upload-service:v4 .
运行镜像
#运行测试 docker run -p 8000:8000 -v /data/app.log:/app/app.log django-upload-service:v4 --name file-upload-service
访问测试
配置域名及证书
server { listen 443 ssl; server_name unit-upload.xxxx.com; ssl_certificate conf.d/xxx__xxxxx.com.pem; ssl_certificate_key conf.d/xxx__xxxx.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://172.31.0.12:8000; } } server { listen 80; server_name unit-upload.xxx.com; return 301 https://$host$request_uri; } ### 访问 https://unit-upload.xxx.com/upload/
解决CSRF 403报错
Forbidden (403) CSRF verification failed. Request aborted. Even using the {% csrf_token %}
#模版配置csrf_token <form method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="file"> <button type="submit">上传</button> </form> <a href="{% url 'file_list' %}">查看文件列表</a> #配置文件去掉中间件csrf,注释# 'django.middleware.csrf.CsrfViewMiddleware', #file_upload/file_upload/settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'file_upload_app.middleware.StatusCodeMiddleware', ]