Despliega tu sitio en Heroku (También como PythonAnywhere)
Siempre es bueno como un desarrollador tiene un par de diferentes opciones de despliegue bajo su cinturón. ¿Por qué no tratar de desplegar tu sitio en Heroku, también como PythonAnywhere?
Heroku es también gratis para pequeñas aplicaciones que no tienen muchas visitas, pero es un poco mas complicado desplegar.
Te guiaremos por el siguiente tutorial: https://devcenter.heroku.com/articles/getting-started-with-django, pero pegamos aquí para hacerlo mas fácil para ti.
El archivo requirements.txt
Si no lo creaste antes, necesitamos crear un archivo requirements.txt
para decirle a Heroku que paquetes de Python necesitamos que sean instalados en nuestro servidor.
Pero primero, Heroku necesita que instalemos algunos paquetes. Ve a tu consola con tu virtualenv
activado y escribe:
(myvenv) $ pip install dj-database-url gunicorn whitenoise
Después que la instalación está finalizada, ve a la carpeta djangogirls
y ejecuta este comando:
(myvenv) $ pip freeze > requirements.txt
Esto creará un archivo llamado requirements.txt
con una lista de paquetes instalados. (Librerías Python que estás usando, por ejemplo Django :)
Nota:
pip freeze
imprime la lista de todas las librerías instaladas en tu ambiente virtual, y el>
toma la salida depip freeze
y la coloca en un archivo. ¡Trata ejecutarpip freeze
sin el< requirements.txt
para ver lo que pasa!
Abre este archivo y añada esto al final:
psycopg2==2.6.2
Esta línea se necesita para que tu aplicación funcione en Heroku.
Procfile
Otra cosa que Heroku necesita es un Procfile
. Esto le dice a Heroku que comandos ejecutar para iniciar nuestro sitio web. Ve a tu editor de código y crea un archivo llamado Procfile
en la carpeta djangogirls
y agrega esta línea:
web: gunicorn mysite.wsgi --log-file -
Esta línea significa que vas a desplegar una aplicación web
y lo vas a hacer ejecutando el comando gunicorn mysite.wsgi
(gunicorn
es un programa que es la versión mas poderosa del comando de django runserver
).
Entonces guardalo. ¡Listo!
El archivo runtime.txt
También necesitamos decirle a Heroku que versión de Python vamos a usar. Esto es hecho creando un archivo runtime.txt
en la carpeta djangogirls
usando tu editor de texto y colocando el siguiente texto (y nada mas) dentro:
python-3.5.2
mysite/local_settings.py
Porque es mas restrictivo que PythonAnywhere, Heroku quiere usar diferentes configuraciones de las que nosotros usamos localmente (en nuestro computador). Heroku quiere que usar Postgres mientras que nosotros usamos SQLite, por ejemplo. Por eso necesitamos crear un archivo separado para las configuraciones que estarán disponibles en nuestro ambiente local.
Ve adelante y crea un archivo mysite/local_settings.py
. Este debe contener tu configuración de DATABASE
de tu archivo mysite/settings.py
. Justo como esto:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DEBUG = True
¡Luego guardalo! :)
mysite/settings.py
Otra cosa que debemos hacer es modificar nuestro archivo de sitio web settings.py
. Abre mysite/settings.py
en tu editor y cambia las siguientes líneas:
import dj_database_url
...
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'djangogirls',
'USER': 'name',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '',
}
}
...
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
Esto hará la configuración necesaria para Heroku.
Luego guarda el archivo.
mysite/wsgi.py
Abre el archivo mysite/wsgi.py
y agrega estas líneas al final:
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
¡Todo bien!
Cuenta Heroku
Necesitas instalar Heroku toolbelt
el cual encontrarás aquí (puedes saltarte la instalación si ya lo instalaste durante la configuración): https://toolbelt.heroku.com/
Cuando ejecutas la instalación de Heroku toolbelt en windows asegúrate de escoger "Instalación personalizada" cuando te pregunten que componentes instalar. En la lista de componentes que se muestra luego por favor selecciona "Git y SSH"
En windows también debes ejecutar el siguiente comando para agregar Git y SSH a tu
PATH
de la línea de comanods:setx PATH "%PATH%;C:\Program Files\Git\bin"
. Reinicia la línea de comandos después para habilitar el cambio.¡Después de reiniciar tu línea de comandos, no olvides ir a tu carpeta
djangogirls
de nuevo y habilitar el ambiente virtual! (Truco: Ve al capítulo de instalación de Django)
Por favor también crea una cuenta gratuita de Heroku aquí: https://id.heroku.com/signup/www-home-top
Luego autenticate con tu cuenta Heroku en tu computador ejecutando este comando:
$ heroku login
En cas que no tengas una llave SSH este comando automáticamente creará una. Las llaves SSH son requeridas para colocar código en Heroku.
Git commit
Heroku usa git para sus propios despliegues. A diferencia de PythonAnywhere, puedes hacer push a Heroku directamente, sin Github. Pero necesitamos hacer un par de cosas antes.
Abre un archivo llamado .gitignore
en tu carpeta djangogirls
y agrega local_settings.py
a el. Queremos que git ignore local_settings
, entonces este permanece en nuestro computador local y no termina en Heroku.
Open the file named .gitignore
in your djangogirls
directory and add local_settings.py
*.pyc
db.sqlite3
myvenv
__pycache__
local_settings.py
Y guarda los cambios
$ git status
$ git add -A .
$ git commit -m "additional files and changes for Heroku"
Escoge un nombre de aplicación
Vamos a hacer que tu blog esté disponible en la web en [tu nombre de blog].herokuapp.com
así vamos a escoger un nombre que nadie mas haya tomado. Este nombre no tiene que estar relacionado con el blog de Django
o mysite
o nada de lo que hemos creado hasta ahora. El nombre debe estar en minúscula (sin letras mayúsculas o acentos), nombres y guiones (-
).
Una ves tengas un nombre (tal vez algo con tu nombre o nick en el), ejecuta este comando, reemplazaod djangogirlsblo
con tu propio nombre de aplicación:
$ heroku create djangogirlsblog
Nota: Recuerda reemplazar
djangogirlsblog
con el nombre de tu aplicación en Heroku.
Si no puedes pensar en un nombre, puedes en lugar ejecutar:
$ heroku create
Y heroku escogerá un nombre no disponible por ti (posiblemente algo como enigmatic-cove-2527
).
Si tu alguna vez sientes que debes cambiar el nombre de tu aplicación Heroku, puedes hacerlo en cualquier momento con est eomando (reemplaza the-new-game
con el nuevo nombre que quieres usar):
$ heroku apps:rename the-new-name
Nota: Recuerda que luego que cambias el nombre de tu aplicación, necesitas visitar
[the-new-name].herokuapp.com
para ver tu sitio
¡Despliega a Heroku!
Esto fue mucho de configuración e instalación, ¿cierto? ¡Pero esto solo lo necesitas hacer una vez! ¡Ahora puedes desplegar!
Cuando tu ejecutas heroku create
, el automáticamente agregará un remote
de Heroku a nuestro repositorio de aplicaciones. Ahora simplemente necesitamos hacer push a Heroku para desplegar nuestra aplicación:
$ git push heroku master
Nota: Esto posiblemente produzca un montón de salida si es la primera vez que lo ejecutas, como Heroku compila e instala psycopg. Verás que tu comando funcionó si ves algo como
https://yourapplicationname.herokuapp.com/ deployed to Heroku
cerca al final de output.
Visita tu aplicación
Tu has desplegado tu código a Heroku, y especificado los tipos de proceso en un archivo Procfile
(nosotros escogimos un proceso web
anteriormente). Ahora puedes decirle a Heroku que inicie este proceso web
Para hacerlo, ejecuta el siguiente comando:
$ heroku ps:scale web=1
Esto le dice a Heroku que ejecute solamente una instancia de nuestro proceso web
. Desde que nuestra aplicación es muy simple, nosotros no necesitamos mucho poder, y por eso está bien un solo proceso. Es posible solicitar a Heroku que ejecute mas procesos (por cierto, Heroku llama a estos procesos "Dynos" así que no te sorprendas si ves estos términos) pero ya no serán gratis.
Puedes visitar la app en tu navegador ejecutando heroku open
.
$ heroku open
Nota: ¡verás una página de error! Hablaremos de eso en un minuto.
Esto abrirá una url como https://djangogirlsblog.herokuapp.com/ en tu navegador, y por el momento, posiblemente veas una página de error.
El error que ves es porque cuando desplegamos a Heroku, creamos una nueva base de datos y está vacía. Necesitamos ejecutar los comandos migrate
y createsuperuser
, justo como hicimos en PythonAnywhere. Esta vez, ellos vienen en una versión especial en nuestro computador, heroku run
:
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser
Este comando te preguntará que escojas un nombre de usuario y contraseña de nuevo. Estas serán tus credenciales de acceso a la página de administración de tu sitio.
¡Refresca en tu navegador y ahí estás! Ahora sabes como desplegar a dos diferentes plataformas de hosting. Escoge tu favorita :)