Skip to content

LigorioSalgado/django-deploy-starter-kit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django-Deploy-Starter-Kit

Pasos basicos para hacer deploy de una App en Django con EC2 y AWS

Requisitos

  • Cuenta en AWS ya activada
  • Terminal con ssh (Linux,MacOs) y Putty (Windows) Video para mas info con putty

Tabla de Contenido**

Preparando todo

  • Instalar python-dotenv (Libreria para crear variables de entorno)
$ pip install -U python-dotenv
#WSGI.py
from dotenv import load_dotenv
	try:
    dotenv_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '.env')
    load_dotenv(dotenv_path)
except:
    pass
    
#manage.py

from dotenv import load_dotenv

try:

    dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
    load_dotenv(dotenv_path)
except:
    pass
  • Dentro del Proyecto al mismo nivel del manage.py crear documento requirements de dependencias de python
$ pip freeze > requeriments.txt

Creando Instancia

  • En el dashboard de AWS seleccionar la opcion EC2 en la pestaña de de "services" Alt text
  • Ubicados "EC2 Dashboard" seleciona "Launch Instance" Alt text
  • Selecciona la distribucion del servidor NOTA: Para este ejemplo utilizaremos "Ubuntu server 16.04 LTS"
  • Seleccionamos la opcion "t2.micro" y damos click en "Review and Launch" Alt text
  • En la ventana de "Review Instance Launch" dar click en "Launch" Alt text
  • Aparece un dialogo para seleccionar o crear "Key pair", escogemos la opcion de "Create a new key pair" y agregamos un nombre, por ultimo damos click en "Download Key Pair" NOTA: No perder el archivo "nombre.pem" ya que es la unica forma de entrar al servidor Alt text
  • Por ultimo damos click en "launch instance"
  • En la pantalla de "Launch Status" selecionamos la opcion de "View instance" Alt text
  • Finalmente seremos enviados de nuevo al dashboard y se vera corriendo nuestra nueva instancia Alt text

Conectando y configurando

  • En el dashboard de la intancia selecionamos la opcion de "Connect" aparacera un dialogo con algunas instrucciones: Alt text

    • Mac y Linux:
      • Copiar el "archivo.pem" en la carpeta ".ssh" que se encuentra en su directorio raiz
      • cambiar los permisos del archivo con
       $ chmod 400 archivo.pem
      *Para conectarse utlizar el ejemplo que aparece en el dialogo de "connect" por ejemplo:
      $ ssh -i "prueba.pem" ubuntu@ec2-35-160-39-170.us-west-2.compute.amazonaws.com
      Alt text
    • Windows:
  • Al entrar no pide crear un fingerprint escribimos "yes" Alt text

  • Sabremos si estamos conectados si aparece una pantalla como sigue:

  • Alt text

Configuración inical de nuestra instancia

  • En la consola escribimos los siguentes comandos para catualizar los repositorio y dependencias de ubuntu:
$ sudo apt-get update
$ sudo apt-get upgrade
  • Tendremos que configurara los "locale" atravez de los siguientes pasos:
    • ejecutamos el siguiente comando
     $ sudo nano /etc/environment
    • agregamos la siguientes lines abajo de PATH
    LC_ALL="en_US.utf8"
    LANGUAGE="en_US.utf8"
    • Guardamos el archivo y reiniciamos la instancia con:
    sudo reboot
    • La conexion se perdera y esperamos unos minutos para reestablecer la conexion

Instalando Postgres,Nginx,vitualenv

  • Para instalar Postgres 9.5 en nuestra instancia corremos los siguientes comandos:
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add 
$ sudo apt-get update
$ sudo apt-get install postgresql postgresql-contrib
  • Para instalar nginx se tiene que realizar los siguiente:
$ sudo apt-get install nginx
  • instalaremos PIP y Virtualenv es:
$ sudo apt-get install python-virtualenv python-pip

Configuracion http

  • Regresamos al dashboard de AWS y seleccionamos "Security groups" que se encuentra en el menu izquierdo en la parte inferior Alt text
  • Seleccionamos la opcion que diga "launch-wizard-XXXX" en la parte de "Group name"
  • Ya con la opcion señalada ,damos clic en "Actions">"Edit inbound rules" Alt text
  • Aparecera un dialogo como el siguiente, damos click en "Add rule" Alt text
  • Se crea una nueva opción llamada "Custom TCP Rule", seleccionamos la opcion y elegimos "HTTP", damos en "Save" Alt text
  • Por ultimo volvemos "Instances" (la opcion se encuentra en el menu izquierdo en la parte superior), copiamos el "Public DNS (IPv4)" que se encuentra en la parte inferir de nuestra pantalla y lo pegamos en una nueva pestaña del navegador, como resultado tendremos el "Welcome to Nginx" en el navegador Alt text Alt text

Deploy

Configurando Django

  • Iniciamos nuestra consola de ssh
  • Una vez dentro creamos una carpeta Ex : "Proyecto"
mkdir proyecto
  • Entramos a la nueva carpeta y creamos un entorno virtual con python 3
$ cd proyecto
$ virtualenv entorno -p python3
  • Clonamos nuestro repositorio remoto
git clone https://github.com/LigorioSalgado/Ejemplo
  • Nota: Entes de empezar necesitamos intsalar lo siguiente:
$ sudo apt-get install libpq-dev python3-dev build-essential 
  • Activamos nuestro entorno y Entramos en la carpeta de nuestro proyecto he instalamos las dependencias con :
$ pip install -r requirements.txt

Creando base de datos

  • Para ingresar a la linea de comandos de postgres se debe ejecutar lo siguiente:
$ sudo su - postgres
  • Creamos la BD para nuestro proyecto
$ createdb (nombre de la BD)
$ createuser (nombre del usuario de la BD)

*Despues tendremos que ingresar a psql

$ psql

*una vez en psql damos los siguientes comandos

postgres=# ALTER DATABASE (Nombre de la BD) OWNER TO (Nombre del usuario de la BD);
postgres=# ALTER USER  (nombre del usuario BD) WITH PASSWORD (password para el usuario)
postgres=# \l #lista las bd
postgres=# \q #sale de psql
  • damos el siguiente comando para regresar a nuestro proyecto
$ exit

Probando django

  • Antes de empezar debemos crear un archivo llamado .env al mismo nivel que el manage.py con lo siguiente
    Nota:el archivo .env tambien se agrega al gitignore
DBNAME = "nombre de la BD"
DBUSER = "nombre del usuario de la BD"
DBPASSWORD = "password de la BD"
# Tambien se pueden poner otros valores como api keys o secret keys
  • Hacemos la migraciones de nuestro proyecto, recogemos los staticos del proyecto y por ultimo creamos un superusuario
$ python manage.py migrate
$ python manage.py collectstatic
$ python manage.py createsuperuser

*Por ultimo corremos check para comprobar errores como sigue:

$ python manage.py check

Gunicorn y Nginx

sudo nano /etc/systemd/system/gunicorn.service
  • Despues se ejecutan los siguientes comandos para activar el servicio
$ sudo systemctl start gunicorn
$ sudo systemctl enable gunicorn
$ sudo systemctl status gunicorn
  • Una vez activado gunicorn procedemos a configurar nginx como lo muestra este archivo con el siguiente comando
$ sudo nano /etc/nginx/sites-available/<nombre-del-proyecto>
  • creamos un link simbolico :
$ sudo ln -s /etc/nginx/sites-available/<nombre-del-proyecto> /etc/nginx/sites-enabled
  • corremos un test para comprobar que no hay errores de sintaxis:
$ sudo nginx -t
  • Reiniciamos nginx con:
$ sudo systemctl restart nginx

*Por ultimo nos dirigimos a la-public-dns-de-la-instancia.amazonaws.com/admin/ y comprobamos que el server ya esta corriendo y ya podemos usar el admin Alt text

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages