From 47821c4f715ce021a696443131c654186affa7ca Mon Sep 17 00:00:00 2001 From: Welton Moura Date: Sun, 5 Apr 2026 11:40:54 -0300 Subject: [PATCH] refactor: update docker volume mapping, add collectstatic to startup command, and normalize settings.py formatting --- docker-compose.yml | 8 +- gestaoRaul/settings.py | 167 ++++++++++++++++++++--------------------- 2 files changed, 87 insertions(+), 88 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2511a79..1b2bd52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,9 +13,9 @@ services: - ALLOWED_HOSTS=* volumes: - - /DATA/AppData/rrbec-api-django/data:/app/data - - /DATA/AppData/rrbec-api-django/media:/app/media - - /DATA/AppData/rrbec-api-django/static:/app/staticfiles + - /DATA/AppData/rrbec-api-django:/app + - /DATA/AppData/rrbec-api-django/static:/app/static + - /DATA/AppData/rrbec-api-django/db:/app/db working_dir: /app - command: ["/bin/sh", "-c", "apt-get update && apt-get install -y git && rm -rf app_clone && git clone --branch api --depth 1 https://github.com/welton89/RRBEC.git app_clone && cp -r app_clone/* . && rm -rf app_clone && pip install -r requirements.txt && python manage.py migrate --noinput && gunicorn gestaoRaul.wsgi:application --bind 0.0.0.0:8000"] \ No newline at end of file + command: ["/bin/sh", "-c", "apt-get update && apt-get install -y git && rm -rf app_clone && git clone --branch api --depth 1 https://github.com/welton89/RRBEC.git app_clone && cp -r app_clone/* . && rm -rf app_clone && pip install -r requirements.txt && python manage.py collectstatic --noinput && python manage.py migrate --noinput && gunicorn gestaoRaul.wsgi:application --bind 0.0.0.0:8000"] \ No newline at end of file diff --git a/gestaoRaul/settings.py b/gestaoRaul/settings.py index a91aaa8..8c39867 100644 --- a/gestaoRaul/settings.py +++ b/gestaoRaul/settings.py @@ -17,12 +17,12 @@ from dotenv import load_dotenv load_dotenv() -DB_ENGINE = os.getenv('DB_ENGINE') -DB_HOST = os.getenv('DB_HOST') -DB_PORT = os.getenv('DB_PORT') -DB_NAME = os.getenv('DB_NAME') -DB_USER = os.getenv('DB_USER') -DB_PASSWORD = os.getenv('DB_PASSWORD') +DB_ENGINE = os.getenv("DB_ENGINE") +DB_HOST = os.getenv("DB_HOST") +DB_PORT = os.getenv("DB_PORT") +DB_NAME = os.getenv("DB_NAME") +DB_USER = os.getenv("DB_USER") +DB_PASSWORD = os.getenv("DB_PASSWORD") # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -32,82 +32,88 @@ BASE_DIR = Path(__file__).resolve().parent.parent # See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.getenv('SECRET_KEY', 'django-insecure-mqcnrs5!hc6bj$�@@9d8^2@x#w&$qhk3vlr5_)3znd9h6&d8') +SECRET_KEY = os.getenv( + "SECRET_KEY", "django-insecure-mqcnrs5!hc6bj$�@@9d8^2@x#w&$qhk3vlr5_)3znd9h6&d8" +) # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = os.getenv('DEBUG', 'True') == 'True' +DEBUG = os.getenv("DEBUG", "True") == "True" -ALLOWED_HOSTS = ['*'] +ALLOWED_HOSTS = ["*"] # Application definition INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'products', - 'mesas', - 'typePay', - 'clients', - 'comandas', - 'categories', - 'home', - 'payments', - 'balcao', - 'orders', - 'login', - 'sync', - 'django_extensions', - 'pwa', - 'rest_framework', - 'corsheaders', + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "products", + "mesas", + "typePay", + "clients", + "comandas", + "categories", + "home", + "payments", + "balcao", + "orders", + "login", + "sync", + "django_extensions", + "pwa", + "rest_framework", + "corsheaders", ] MIDDLEWARE = [ - 'corsheaders.middleware.CorsMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'whitenoise.middleware.WhiteNoiseMiddleware', - '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', + "corsheaders.middleware.CorsMiddleware", + "django.middleware.security.SecurityMiddleware", + "whitenoise.middleware.WhiteNoiseMiddleware", + "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 = 'gestaoRaul.urls' +ROOT_URLCONF = "gestaoRaul.urls" TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'templates'),], - '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', + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [ + os.path.join(BASE_DIR, "templates"), + ], + "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", ], }, }, ] -WSGI_APPLICATION = 'gestaoRaul.wsgi.application' +WSGI_APPLICATION = "gestaoRaul.wsgi.application" # Database # https://docs.djangoproject.com/en/5.1/ref/settings/#databases +import os + DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "db", "db.sqlite3"), + } } @@ -128,16 +134,16 @@ DATABASES = { AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] @@ -145,22 +151,22 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/5.1/topics/i18n/ -LANGUAGE_CODE = 'pt-BR' +LANGUAGE_CODE = "pt-BR" -TIME_ZONE = 'America/Sao_Paulo' +TIME_ZONE = "America/Sao_Paulo" USE_I18N = True USE_TZ = True -DATE_FORMAT = 'd/m/Y - H:M' +DATE_FORMAT = "d/m/Y - H:M" # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.1/howto/static-files/ -STATIC_URL = 'static/' -STATICFILES_DIRS = (os.path.join(BASE_DIR, 'templates/static'),) -STATIC_ROOT = os.path.join(BASE_DIR, 'static') +STATIC_URL = "static/" +STATICFILES_DIRS = (os.path.join(BASE_DIR, "templates/static"),) +STATIC_ROOT = os.path.join(BASE_DIR, "static") # WhiteNoise storage to compress and cache static files STORAGES = { @@ -172,14 +178,13 @@ STORAGES = { }, } -MEDIA_ROOT = os.path.join(BASE_DIR, 'media') -MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_URL = "/media/" # Default primary key field type # https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' - +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" # pwa.py @@ -194,16 +199,12 @@ PWA_APP_DISPLAY = "standalone" PWA_APP_ORIENTATION = "any" PWA_APP_START_URL = "/" PWA_APP_ICONS = [ - { - "src": "/static/midia/logo.png", - "sizes": "160x160", - "type": "image/png" - }, + {"src": "/static/midia/logo.png", "sizes": "160x160", "type": "image/png"}, # ... adicione outros tamanhos de ícones ] PWA_APP_SPLASH_SCREEN = { "src": "/static/midia/logo.png", - "media": "(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" + "media": "(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)", } PWA_APP_DIR = "ltr" PWA_APP_LANG = "pt-BR" @@ -213,16 +214,14 @@ CORS_ALLOW_ALL_ORIGINS = True # Para desenvolvimento CORS_ALLOW_CREDENTIALS = True # Permite envio de cookies para SessionAuth REST_FRAMEWORK = { - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'rest_framework.authentication.SessionAuthentication', # Prioridade para teste no navegador - 'rest_framework_simplejwt.authentication.JWTAuthentication', - ), - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', + "DEFAULT_AUTHENTICATION_CLASSES": ( + "rest_framework.authentication.SessionAuthentication", # Prioridade para teste no navegador + "rest_framework_simplejwt.authentication.JWTAuthentication", ), + "DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticated",), } SIMPLE_JWT = { - 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), - 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), -} \ No newline at end of file + "ACCESS_TOKEN_LIFETIME": timedelta(minutes=60), + "REFRESH_TOKEN_LIFETIME": timedelta(days=1), +}