Django服務開發鏡像構建

最后完整的項目目錄結構

1、安裝依賴

pip install django django-tables2 django-filter

2、創建項目和主應用

django-admin startproject config

cd config

python manage.py startapp dynamic_models

3、配置settings.py

將項目模塊dynamic_models加入進來,django_tables2和django_filters是安裝的原生的依賴,使用里面的自帶的界面,

1)注意這里面的ALLOWED_HOSTS 和 CSRF_TRUSTED_ORIGINS需要配置成對應的可信的網站和地址

2)STATIC_ROOT必須與 Dockerfile 中一致

其余的配置如數據庫按需配置即可.

"""
Django settings for config project.Generated by 'django-admin startproject' using Django 5.2.3.For more information on this file, see
https://docs.djangoproject.com/en/5.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.2/ref/settings/
"""
import os
from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-1$72i_+zz_bh8l$n5og-6-))(4vw3%!*m7!hi#^7l11g!3@tdn"# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = ['zs-common-config-dev.com','zs-common-config-pre.com','zs-common-config.com','10.1.1.1','*',
]CSRF_TRUSTED_ORIGINS = ['zs-common-config-dev.com','zs-common-config-pre.com','zs-common-config.com','10.1.1.1','*',
]# 必須配置(如果使用HTTPS)
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
CSRF_COOKIE_SECURE = True  # HTTPS必須為True
SESSION_COOKIE_SECURE = True# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','dynamic_models','django_tables2','django_filters',
]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",
]ROOT_URLCONF = "config.urls"TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages','django.template.context_processors.request',  # 用于django-tables2],},},
]WSGI_APPLICATION = "config.wsgi.application"# Database
# https://docs.djangoproject.com/en/5.2/ref/settings/#databasesDATABASES = {"default": {# "ENGINE": "django.db.backends.sqlite3",# "NAME": BASE_DIR / "db.sqlite3",'ENGINE': 'django.db.backends.postgresql','NAME': 'zskj_common_config_dev',  # 數據庫名稱'USER': 'postgres',  # 數據庫用戶名'PASSWORD': '123456',  # 數據庫密碼'HOST': 'localhost',  # 數據庫主機,本地數據庫使用 localhost'PORT': '123456',  # 數據庫端口,PostgreSQL 默認是 5432}
}# Password validation
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",},{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",},{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",},{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",},
]# Internationalization
# https://docs.djangoproject.com/en/5.2/topics/i18n/# LANGUAGE_CODE = "en-us"
LANGUAGE_CODE = 'zh-hans'  # 簡體中文
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.2/howto/static-files/# 靜態文件 URL 前綴(瀏覽器訪問路徑)
STATIC_URL = '/static/'STATIC_ROOT = '/app/staticfiles/'  # 必須與 Dockerfile 中一致
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]  # 開發靜態文件目錄# Default primary key field type
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder','django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

4、實現模塊dynamic_models的功能,添加路由

以上是該模塊提供出來的路由。

需要將模塊的url添加到主服務config的urls里面

以上第二個path,代表不輸入具體的路由地址,則自動跳轉到admin路由下

5、生成數據庫表

python manage.py migrate

6、創建超級用戶,用于登錄

python manage.py createsuperuser

7、創建虛擬環境(本地啟動需要,服務端忽略)

python3 -m venv myenv

source myenv/bin/activate # 適用于 Linux/MacOS

.\myenv\Scripts\activate # 適用于 Windows

8、models有修改,更新

python manage.py makemigrations dynamic_models

python manage.py migrate

9、requirements.txt依賴

pip install -r requirements.txt

asgiref==3.8.1
Django==5.2.3
django-filter==25.1
django-tables2==2.7.5
psycopg2-binary==2.9.10
sqlparse==0.5.3
gunicorn==23.0.0

10、本地啟動

如圖配置,pycharm

11、構建docker鏡像

# 基礎鏡像
FROM harbor-operation.maas.com.cn/zskj/backend/python-poetry:3.10ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE=config.settings# 創建工作目錄并設置為工作目錄
WORKDIR /app# 復制項目文件
COPY . /app/# 安裝Python依賴
RUN pip install --upgrade pip
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install -r requirements.txt# 收集靜態文件到 STATIC_ROOT
RUN python manage.py collectstatic --noinputEXPOSE 8000CMD ["gunicorn", "--bind", "0.0.0.0:8000", "config.wsgi:application"]# docker build -t harbor-operation.maas.com.cn/zskj/backend/zskj_common_config:v1.0.6 .
# docker run -p 8002:8000 --name zskj-app6 harbor-operation.maas.com.cn/zskj/backend/zskj_common_config:v1.0.6

12、docker-compose

name: "common-config-dev"
services:api:container_name: common_config_devrestart: alwaysimage: common_config:v1.0.9command: >sh -c "python manage.py collectstatic --noinput &&gunicorn --bind 0.0.0.0:8000 config.wsgi:application"volumes:- ./static/:/app/staticfiles/ports:- "8059:8000"networks:- docker_common_config_network_devenvironment:- START_CONFIG=dev- DJANGO_SETTINGS_MODULE=config.settings- DEBUG=Truenginx:container_name: common_config_nginx_devimage: common_config_nginx:v1.0.1ports:- "51149:80"networks:- docker_common_config_network_devvolumes:- ./static/:/app/staticfiles/- ./nginx/nginx.conf:/etc/nginx/conf.d/default.confdepends_on:- apinetworks:docker_common_config_network_dev:ipam:config:- subnet: 172.70.49.16/28driver: bridge

注意需要把服務端的容器內部的資源掛載出來,不然訪問時找不到對應的資源

./static/:/app/staticfiles/

13、nginx的配置

dockerfile

FROM nginx:latest
# 設置時區為中國標準時間
ENV TZ=Asia/Shanghai
# 配置NGINX
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露端口
EXPOSE 80
# 啟動NGINX
CMD ["nginx", "-g", "daemon off;"]
# 構建鏡像
# docker build -t common_config_nginx:v1.0.1 .

?nginx.conf

events {worker_connections 1024;
}http {#設定請求緩沖client_header_buffer_size    512k;large_client_header_buffers  4 512k;# 解決樣式不加載問題include /etc/nginx/mime.types;default_type application/octet-stream;upstream zskj_common_config_interface {# 這里的端口是容器里面的端口server api:8000;}server {listen 80;location /static/ {alias /app/staticfiles/;expires 30d;access_log off;# 解決樣式不加載問題add_header Content-Type text/css;types {}default_type text/css;}location / {# 設置ipproxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 解決跨域add_header 'Access-Control-Allow-Origin' '$http_origin' always;add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;# 注意前端如果傳了其他的請求頭,會跨域的哦,例如Refresh-Token不在下面的字符串中,會提示跨域add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;# 處理OPTIONS預檢請求if ($request_method = 'OPTIONS') {return 204;}proxy_pass http://zskj_common_config_interface;}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88028.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88028.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20250706-3-Docker 快速入門(上)-常用鏡像管理命令_筆記

一、配置加速器1. Docker Hub簡介與地址公共鏡像倉庫: 由Docker公司維護的公共鏡像倉庫,包含大量容器鏡像默認下載源: Docker工具默認從這個公共鏡像庫下載鏡像訪問地址: https://hub.docker.com鏡像搜索功能: 可通過瀏覽器訪問圖形化管理系…

【unity游戲開發——優化篇】使用Occlusion Culling遮擋剔除,只渲染相機視野內的游戲物體提升游戲性能

注意:考慮到優化的內容比較多,我將該內容分開,并全部整合放在【unity游戲開發——優化篇】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言實戰1、確保所有靜止的3D物體都標記為Occluder Static靜態遮擋體和Occludee …

通用業務編號生成工具類(MyBatis-Plus + Spring Boot)詳解 + 3種調用方式

在企業應用開發中,我們經常需要生成類似 BZ -240704-0001 這種“業務編號”,它通常具有以下特點:前綴:代表業務類型,如 BZ 表示包裝日期:年月日格式,通常為 yyMMdd序列號:當天內遞增…

前端相關性能優化筆記

1.打開速度怎么變快 - 首屏加載優化2.再次打開速度怎么變快 - 緩存優化了3.操作怎么才順滑 - 渲染優化4.動畫怎么保證流暢 - 長任務拆分2.1 首屏加載指標細化:1.FP(First Paint 首次繪制) 2.FCP(First contentful Paint 首次內容繪制),FP 到 FCP 中間其實主要是 SPA…

7.7晚自習作業

實操作業02:Spark核心開發 作業說明 請嚴格按照步驟操作,并將最終結果文件(命名為:sparkcore_result.txt)于20點前上傳。結果文件需包含每一步的關鍵命令執行結果文本輸出。 一、數據讀取與轉換操作 上傳賬戶數據$…

手機FunASR識別SIM卡通話占用內存和運行性能分析

手機FunASR識別SIM卡通話占用內存和運行性能分析 --本地AI電話機器人 上一篇:手機無網離線使用FunASR識別SIM卡語音通話內容 下一篇:手機通話語音離線ASR識別商用和優化方向 一、前言 書接上一文《阿里FunASR本地斷網離線識別模型簡析》,…

虛幻引擎Unreal Engine5恐怖游戲設計制作教程,從入門到精通從零開始完整項目開發實戰詳細講解中英字幕

和大家分享一個以前收集的UE5虛幻引擎恐怖游戲開發教程,這是國外一個大神制作的視頻教程,教程從零開始到制作出一款完整的游戲。內容講解全面,如藍圖基礎知識講解、角色控制、高級交互系統、高級庫存系統、物品檢查、恐怖環境氛圍設計、過場動…

多人協同開發時Git使用命令

拉取倉庫代碼 # 拉取遠程倉庫至本地tar_dir路徑 git clone gitgithub.com:your-repo.git target_dir # 默認是拉取遠程master分支,下面拉取并切換到自己需要開發的分支上 # 假設自己需要開發的分支是/feature/my_branch分支 git checkout -b feature/my_branch orig…

線性表——雙向鏈表

線性表——雙向鏈表1. 雙向鏈表的實現1.1 簡單圖例1.2 結點的定義1.3 新結點的創建1.4 鏈表的初始化1.5 結點的插入1.5.1 頭部插入(頭插)1.5.2 尾部插入(尾插)1.5.3 任意位置(前)插入1.6 結點的刪除1.6.1 頭…

Java后端技術博客匯總文檔

文章目錄 前言Java后端匯總鏈接Java基礎知識點數據結構算法(Java實現)算法知識點合集算法刷題算法競賽AcWing課程藍橋杯AB組輔導課合集(更新中…) 源碼分析redission 數據庫SQL ServerMySQLRedis -Canal JUC并發編程JVMNetty日志框…

QT 菜單欄設計使用方法

目錄 常用設置函數 多個QAction的單選設置 ???????菜單相關類 ??????? 系統菜單的生成和響應 使用代碼添加系統菜單 使用UI設計器設計系統菜單 使用Qt設計及界面時,常用的兩種方式添加菜單,第一使用UI界面添加,第二種 在…

AIGC領域AI藝術,打造個性化藝術作品

AIGC領域AI藝術,打造個性化藝術作品 關鍵詞:AIGC、AI藝術、生成對抗網絡、個性化創作、深度學習、藝術風格遷移、創意計算 摘要:本文深入探討了AIGC(人工智能生成內容)在藝術創作領域的應用,重點分析了如何利用AI技術打造個性化藝術作品。文章從技術原理出發,詳細解析了生…

基于Flask+Jinja2的快捷教務系統(后端鏈接到新版正方教務系統)

快捷教務系統(Easy Educational Administration Management System, EasyEAMS) 項目簡介 EasyEAMS 是一個基于 Flask Jinja2 的現代化教務系統 Web 應用。學生可通過網頁端登錄,在線查詢個人信息、成績、課表、學業生涯、通知、選課等。系…

EDM自動化與出海獨立開發實用教程

隨著互聯網全球化發展,越來越多的獨立開發者(Indie Developer)選擇將自己的產品推向海外市場。如何高效地獲客、激活用戶、提升轉化率,成為出海過程中必須解決的問題。EDM(電子郵件營銷)自動化,…

「日拱一碼」017 深度學習常用庫——TensorFlow

目錄 基礎操作 張量操作: tf.constant 用于創建常量張量 tf.Variable 用于創建可訓練的變量張量 tf.reshape 可改變張量的形狀 tf.concat 可將多個張量沿指定維度拼接 tf.split 則可將張量沿指定維度分割 數學運算: tf.add 張量的加運算 tf.su…

ARM DStream仿真器腳本常用命令

以下是ARM DStream仿真器腳本中常用的命令及其功能分類,結合調試流程和典型應用場景整理: ?? 一、連接與初始化命令 connect 建立與目標設備的連接,需指定接口類型(如JTAG/SWD)和處理器核心。 示例:conne…

vscode 調試unity

lanch.json { “version”: “0.2.0”, “configurations”: [ { “name”: “Attach to Unity”, “type”: “vstuc”, “request”: “attach” } ] }

金融IT入門知識點

銀行金融IT核心知識點全解析:架構、技術與實踐 一、金融IT的戰略地位與行業特性 金融IT作為銀行業務的核心支撐體系,其發展水平直接決定了銀行服務的效率、安全性與創新能力。截至 2025年,中國銀行業線上化業務占比已達97%,手機銀…

C++——手撕智能指針、單例模式、線程池、String

智能指針今天我們來學習一下C中的智能指針,如果有人不知道C中的智能指針的概念的話:C智能指針是一種基于RAII(Resource Acquisition Is Initialization,資源獲取即初始化)機制的高級內存管理工具,用于自動化…

Mybatis----留言板

基礎項目:留言板 截止到目前為止,我們已經學習了 Spring(只學習了DI)、Spring MVC、SpringBoot、Mybatis 這些知識了,已經滿足了做簡單項目的基本要求了,所以接下來我們就從0到1實現表白墻項目。 需求分析…