Empaquetado y publicación — Implementar en Railway

En este capítulo aprenderás a configurar el entorno de producción, implementar la aplicación de blog Django en Railway y obtener un enlace de acceso público.


Configuración del entorno de producción

En el entorno de desarrollo, DEBUG=True hace que Django muestre información de error detallada y páginas de depuración.

En el entorno de producción debes desactivar DEBUG y configurar correctamente las opciones de seguridad.

Configuración de producción de settings.py

Ejemplo

# Ruta del archivo: blog_project/settings.py
import os

# La clave secreta se lee desde una variable de entorno (no la codifiques en el código)
SECRET_KEY = os.environ.get('SECRET_KEY', 'clave predeterminada del entorno de desarrollo')

# DEBUG se controla mediante variables de entorno
DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true'

# Nombres de host permitidos
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '127.0.0.1,localhost').split(',')

# Directorio de recopilación de archivos estáticos
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')   # staticfiles/ en el directorio raíz del proyecto
STATIC_URL = '/static/'

SECRET_KEYEs la clave de seguridad más importante de Django, se utiliza para cifrar sesiones, tokens CSRF, etc. Nunca debe codificarse en el código ni enviarse a Git. En el entorno de producción se inyecta mediante variables de entorno.


Gestión de dependencias y requirements.txt

Genera la lista de dependencias, que la plataforma de implementación usa para instalar los paquetes necesarios del proyecto.

(venv) $ pip freeze > requirements.txt

Comprueba el contenido del archivo y asegúrate de que incluya las siguientes dependencias clave:

Django>=5.0,<6.0
gunicorn>=21.0              # 生产级 WSGI 服务器
whitenoise>=6.0             # 静态文件服务(可选)

Si no tienes gunicorn, instálalo primero:

(venv) $ pip install gunicorn
(venv) $ pip freeze > requirements.txt

Configurar Gunicorn + Whitenoise

El servidor incorporado de Djangorunserverno es adecuado para el entorno de producción.

GunicornEs un servidor WSGI de nivel de producción para Python, que maneja solicitudes concurrentes.

WhitenoisePermite que Gunicorn sirva directamente archivos estáticos (CSS, JS, imágenes).

Ejemplo

# Ruta del archivo: blog_project/settings.py

# El middleware de Whitenoise debe colocarse después de SecurityMiddleware y antes de los demás middlewares
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',   # Nuevo: middleware de archivos estáticos
    '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',
]

En el directorio raíz del proyecto, creaProcfile, para indicarle a Railway cómo iniciar la aplicación:

web: gunicorn blog_project.wsgi --log-file -

Recopilar archivos estáticos

En el entorno de producción, Django no sirve archivos estáticos automáticamente; debes usarcollectstaticpara recopilarlos en un directorio unificado.

(venv) $ python manage.py collectstatic

Este comando copiará los archivos estáticos del panel de Admin y los de la aplicación blog aSTATIC_ROOTel directorio (staticfiles/).

En el entorno de desarrollo normalmente no es necesario ejecutar collectstatic (Django busca automáticamente el directorio static de cada aplicación). Pero antes de implementar debes ejecutarlo para asegurarte de que todos los archivos estáticos estén centralizados en un directorio para que el servidor web los use.


Enviar el proyecto a GitHub

Crear .gitignore

Asegúrate de que los archivos sensibles y temporales no se envíen:

venv/
__pycache__/
*.pyc
db.sqlite3
staticfiles/
.env

Enviar a GitHub

$ git init
$ git add .
$ git commit -m "初始化 Django 博客项目"
$ git branch -M main
$ git remote add origin https://github.com/你的用户名/django-blog.git
$ git push -u origin main

Implementación en Railway

RailwayEs una plataforma de implementación en la nube emergente, con buen soporte para aplicaciones full-stack como Django.

Pasos de implementación

  1. Visitarailway.appe inicia sesión con tu cuenta de GitHub
  2. Haz clic en "New Project" → "Deploy from GitHub repo" → selecciona el repositorio django-blog
  3. Railway detectará automáticamente el Procfile e identificará el comando de inicio
  4. Configura las variables de entorno en Variables
  5. Haz clic en Deploy y espera a que se complete la compilación y la implementación

Configuración de variables de entorno

Nombre de la variableValorDescripción
SECRET_KEYCadena larga generada aleatoriamenteClave de seguridad de Django
DEBUGFalseDesactivar el modo de depuración
ALLOWED_HOSTS.railway.appPermitir el acceso al dominio de Railway

Genera rápidamente un SECRET_KEY:

$ python -c "import secrets; print(secrets.token_urlsafe(50))"

Después de una implementación exitosa, obtendrás un enlace como:https://django-blog.up.railway.app

Railway tiene una cuota gratuita limitada ($5 al mes o 500 horas). Si solo estás probando y aprendiendo, recuerda pausar el proyecto cuando termines. Heroku ha eliminado su plan gratuito, por lo que este tutorial recomienda Railway como alternativa.


Próximas direcciones de aprendizaje

Dirección de aprendizajePara quién es adecuadoPunto de partida recomendado
Django REST Framework (DRF)Necesitas construir un backend API para un framework frontend (Vue3/React)Aprende Serializer + ViewSet y convierte el blog en un servicio API
PostgreSQLNecesitas una base de datos de nivel de producciónReemplaza SQLite y usa django-environ para gestionar la configuración de la base de datos
Tareas asíncronas con CeleryNecesitas tareas en segundo plano (enviar correos, generar informes)Integra Redis + Celery para implementar una cola de tareas asíncronas
Django + Vue3/React, separación de frontend y backendQuieres una arquitectura de frontend y backend separadosUsa DRF como backend API, Vue3/React como frontend y comunícate mediante fetch

Resumen del capítulo

En este capítulo completaste el último paso: configurar el entorno de producción (SECRET_KEY/DEBUG/ALLOWED_HOSTS), generar requirements.txt, configurar Gunicorn + Procfile, enviar a GitHub e implementar con un clic en Railway.

Otras extensiones