Generalidades
Este artículo explica cómo crear un proyecto Django en un virtualenv.
En los siguientes ejemplos, username sería tu usuario Shell y example.com tu sitio web.
¿Qué versión de Python es compatible con Django?
Debes usar Python 3.4 o superior para usar Django 2.
Debes usar Python 3.6 o superior para usar Django 3.
Mira los siguientes enlaces para obtener una lista completa de versiones compatibles:
Configuración inicial
Primero, asegúrate de haber instalado una versión personalizada de Python y creado un entorno virtual en el directorio de tu sitio web:
- Instalar una versión personalizada de Python 3
- Instalar y usar el virtualenv de Python usando Python 3
Luego, instala Django en su virtualenv:
Finalmente, habilita Passenger en tu dominio.
Crear un proyecto Django
Para correr los comandos en este artículo, debes iniciar sesión en tu servidor a través de SSH con tu usuario de Shell. Visita los siguientes artículos para obtener más información:
Las siguientes instrucciones asumen que has creado un entorno virtual titulado venv usando los enlaces de arriba.
- Corre los siguientes comandos para crear tu proyecto Django dentro de este entorno:
El siguiente ejemplo nombra al proyecto projectname, pero tu puedes nombrarlo como quieras.
[server]$ cd ~/example.com [server]$ source ~/example.com/venv/bin/activate (venv) [server]$ python3 venv/bin/django-admin startproject projectname
Cuando ejecutas el comando startproject, crea una nueva carpeta en el directorio de tu sitio llamada cualquiera que sea el nombre de tu proyecto Django.
- Para que Passenger pueda recoger tu proyecto, crea un archivo passenger_wsgi.py dentro del directorio de nivel superior de tu sitio (/home/username/example.com). Agrega lo siguiente:
import sys, os INTERP = "/home/username/example.com/venv/bin/python3" #INTERP is present twice so that the new python interpreter
#knows the actual executable path if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv) cwd = os.getcwd() sys.path.append(cwd) sys.path.append(cwd + '/projectname') #You must add your project here sys.path.insert(0,cwd+'/venv/bin') sys.path.insert(0,cwd+'/venv/lib/python3.10.1/site-packages') os.environ['DJANGO_SETTINGS_MODULE'] = "projectname.settings" from django.core.wsgi import get_wsgi_application application = get_wsgi_application()Asegúrate de reemplazar lo siguiente en el archivo passenger_wsgi.py:
- La ruta a tu versión local de Python en la línea # 2. Ejecuta which python3 para confirmar:
(venv) [server]$ which python3 /home/username/example.com/venv/bin/python3
- Tu nombre de proyecto virtualenv en las líneas 11 y 12
- Tu nombre de proyecto Django en las líneas 9 y 14
- Tu versión de Python3 en la línea 1212
- La ruta a tu versión local de Python en la línea # 2. Ejecuta which python3 para confirmar:
- Configura los ajustes de archivo estático de Django para servir correctamente las imágenes, CSS y JavaScript, ya que lo necesitarás para que funcione la interfaz de administración. Por ejemplo:
- Abre el archivo settings.py del proyecto que se encuentra en example.com/projectname/projectname/settings.py. Desplázate hasta la parte inferior y verá que STATIC_URL probablemente esté configurado en /static/.
- Agrega otra línea para establecer la ubicación en el servidor del directorio estático real. Asegúrate de cambiar username a tu usuario Shell.
-
STATIC_ROOT = '/home/username/example.com/public/static/'
- En tu directorio home/username/example.com/public/, asegúrate de crear este directorio /static.
(venv) [server]$ cd ~/example.com/public (venv) [server]$ mkdir static
- Esta será la ubicación donde Django colocará todos tus archivos estáticos – no debes colocar cosas aquí manualmente, ya que se sobrescribe. Mira el siguiente enlace para más detalles:
- Corre el comando collectstatic para configurar los elementos estáticos para la interfaz de administración:
(venv) [server]$ cd ~/example.com/projectname/ (venv) [server]$ python3 manage.py collectstatic
- Configura tu base de datos según sea necesario dentro del archivo settings.py. La sección del archivo settings.py originalmente se ve así:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
- Edita para hacer las siguientes adiciones con las credenciales de tu base de datos actual:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'mysql.example.com', 'PORT': '3306', } }
El valor predeterminado es usar sqlite3, que puede ser adecuado para los sitios más pequeños, pero es probable que desees configurar una base de datos mysql.
- También en tu archivo settings.py, actualiza el campo ALLOWED_HOSTS con tu nombre de dominio. Al principio, parece así:
ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['example.com' , 'www.example.com']
- Navega al directorio de tu proyecto:
(venv) [server]$ cd ~/example.com/projectname
-
Si seguiste las instrucciones para crear un proyecto Django en un virtualenv, mysqlclient ya está instalado. Confírmalo ejecutando pip3 list.
(venv) [server]$ pip3 list
mysqlclient should display. If not run the following to install.
(venv) [server]$ pip3 install mysqlclient
- Corre el comando migrate en el directorio de tu proyecto:
Al correr el siguiente comando, verás el siguiente mensaje de advertencia:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default' HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL,
such as data truncation upon insertion, by escalating warnings into errors.
It is strongly recommended you activate it.
See: https://docs.djangoproject.com/en/2.2/ref/databases/#mysql-sql-modeEste mensaje significa que tu base de datos no tiene el Strict Mode habilitado. Puedes continuar a instalar Django con normalidad si quieres; pero si prefieres que tu base de datos use Strict Mode, la única opción seria comprar un servidor MySQL privado.
Cuando esté agregado, contacta a soporte. Te ayudaremos a ajustar esta configuración en el servidor por ti.
(venv) [server]$ python3 manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK
- Crea un superusuario:
(venv) [server]$ python3 manage.py createsuperuser Username (leave blank to use 'username'): my_django_user Email address: email@example.com Password: Password (again): Superuser created successfully.
- Navega a tu directorio /home/username/example.com.
(venv) [server]$ cd /home/username/example.com
- Agrega un archivo /tmp/restart.txt:
(venv) [server]$ mkdir tmp (venv) [server]$ touch tmp/restart.txt
Cada vez que realices un cambio en tu configuración, asegúrate de ejecutar lo siguiente en el directorio de tu sitio para notificar a Passenger del cambio:(venv) [server]$ touch tmp/restart.txt
Confirmar que la instalación fue exitosa
Visita tu página web.
Ahora deberías ver la página de retención estándar de Django y poder acceder a la consola de administración en example.com/admin/.
Solución de problemas
Si ves algún error después de la instalación, verifica si tienes un archivo .htaccess en los directorios de tu sitio. Es posible que el código en él pueda causar problemas con tu instalación.
ModuleNotFoundError: No module named 'django'
Si ves este error cuando visitas tu sitio, verifica tu archivo passenger_wsgi.py. Confirma los siguientes puntos de línea a tu versión personalizada de Python. Por ejemplo, debería ser 3.6 o 3.7 si instalaste una de esas versiones.
sys.path.insert(0,cwd+'/venv/lib/python3.7/site-packages')