From d1c485596293ff8bffe9ea603bf316f9a8b810ae Mon Sep 17 00:00:00 2001 From: Nachou-u Date: Wed, 9 Sep 2026 08:35:08 -0300 Subject: [PATCH] CONFIG: preparar dockerfile y compose para gitea vps --- .env.example | 6 +++--- Dockerfile | 9 +++++++-- docker-compose.yml | 29 ++++++++++------------------- requirements.txt | 2 ++ 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/.env.example b/.env.example index 14ef5c0..5d15763 100644 --- a/.env.example +++ b/.env.example @@ -1,9 +1,9 @@ # ======================================== # Variables de Entorno (Plantilla) # ======================================== -DEBUG=True -SECRET_KEY=django-insecure-r9n6j1_h%@uqoz0bjz^mq=t72o0t*j@84jpl%_i4^qu%&+**u7 -ALLOWED_HOSTS=* +DEBUG=False +SECRET_KEY=coloca_aqui_una_clave_larga_y_secreta +ALLOWED_HOSTS=midominio.com,localhost,127.0.0.1 # === CONFIGURACIÓN LOCAL (Para usar start.sh sin Docker) === # Deja estas variables vacías o comentadas para usar SQLite y Memory Channel. diff --git a/Dockerfile b/Dockerfile index 36efc86..14d7e27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,5 +23,10 @@ COPY . /app/ # Exponer el puerto EXPOSE 8000 -# Comando por defecto para iniciar Daphne (ASGI) -CMD ["daphne", "-b", "0.0.0.0", "-p", "8000", "config.asgi:application"] +# Crear un usuario no-root por seguridad +RUN adduser --disabled-password --no-create-home djangouser +RUN chown -R djangouser:djangouser /app +USER djangouser + +# Comando por defecto para iniciar Gunicorn con Uvicorn workers (Producción) +CMD ["gunicorn", "config.asgi:application", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000", "--workers", "3"] diff --git a/docker-compose.yml b/docker-compose.yml index 040f948..7a421e9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,6 @@ version: '3.8' services: - db: - image: postgres:15-alpine - environment: - POSTGRES_DB: efintel_db - POSTGRES_USER: efintel_user - POSTGRES_PASSWORD: efintel_password - ports: - - "5432:5432" - volumes: - - postgres_data:/var/lib/postgresql/data - restart: unless-stopped - redis: image: redis:7-alpine ports: @@ -20,10 +8,12 @@ services: volumes: - redis_data:/data restart: unless-stopped + mem_limit: 512m # Limita Redis a 512MB de memoria RAM web: build: . - command: daphne -b 0.0.0.0 -p 8000 config.asgi:application + # Se sobrescribe el comando para asegurarnos que usa Gunicorn (así esté en el Dockerfile) + command: gunicorn config.asgi:application -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 --workers 3 volumes: - .:/app ports: @@ -31,32 +21,33 @@ services: env_file: - .env environment: - DATABASE_URL: postgres://efintel_user:efintel_password@db:5432/efintel_db + # Ya no conectamos a una DB local, lee el DATABASE_URL del .env REDIS_URL: redis://redis:6379/0 depends_on: - - db - redis + restart: unless-stopped + mem_limit: 1g # Limita Gunicorn a 1GB tax-api: build: ./tax_api ports: - "8001:8000" restart: unless-stopped + mem_limit: 256m celery: build: . - command: celery -A config worker -l info + command: celery -A config worker -l info --concurrency=2 volumes: - .:/app env_file: - .env environment: - DATABASE_URL: postgres://efintel_user:efintel_password@db:5432/efintel_db REDIS_URL: redis://redis:6379/0 depends_on: - - db - redis + restart: unless-stopped + mem_limit: 512m # Limita Celery a 512MB volumes: - postgres_data: redis_data: diff --git a/requirements.txt b/requirements.txt index 87a214d..642fe58 100644 --- a/requirements.txt +++ b/requirements.txt @@ -55,3 +55,5 @@ whitenoise==6.7.0 django-storages==2.14.2 boto3==1.34.69 requests==2.31.0 +uvicorn[standard] +gunicorn