forked from serudda/waysily-server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
install_steps.txt
168 lines (107 loc) · 8.27 KB
/
install_steps.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
CONFIGURAR POSTGRESQL
1. Instalar los siguientes comandos, en Ubuntu es con el siguiente comando:
. sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib
En MAC seria algo como:
. brew install postgresql
. brew install postgis (es el postgresql-contrib para MAC)
2. Entramos al virtualenv y nos posicionamos en el root del proyecto. Y entramos como usuario de PostgreSQL:
. sudo su - postgres
(nos va a pedir la contraseña de la maquina, no confundir con la contraseña de postgres)
3. Entramos al shell de postgres con el usuario de postgres:
. psql
Nos va a pedir el password del superusuario de 'postgres'
4. Si no existe la base de datos, la crearemos:
. CREATE DATABASE waysily_db;
5. Creamos el usuario que va a administrar la base de datos:
. CREATE USER sergioruizdavila WITH PASSWORD 'admin';
6. Le daremos algunas configuraciones a ese usuario para que tenga escritura UTF8, para que pueda hacer transacciones, establecer zona horaria.
. ALTER ROLE sergioruizdavila SET client_encoding TO 'utf8';
. ALTER ROLE sergioruizdavila SET default_transaction_isolation TO 'read committed';
. ALTER ROLE sergioruizdavila SET timezone TO 'UTC';
7. Dar todos los privilegios al superusuario sobre la base de datos (agregar registros, eliminar registros, permisos, etc):
. GRANT ALL PRIVILEGES ON DATABASE waysily_db TO sergioruizdavila;
8. Salimos del shell de postgres:
. \q
. exit
9. Instalamos el paquete psycopg2, este nos servira para conectar postgres con python (recuerda estar en el root del proyecto, y dentro de virtualenv):
. pip install psycopg2
10. Vamos al settings.py de nuestro proyecto para configurar la base de datos PostGres. Pegamos esto en config/settings/dev.py:
. # Database (POSTGRESQL CONFIG)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'asanni_db',
'USER': 'sergioruizdavila',
'PASSWORD': 'admin',
'HOST': 'localhost',
'PORT': '5432'
}
}
11. Eliminamos en el root el archivo: db.sqlite3 (si lo tenemos) esto para que no de conflicto a la hora de hacer las migraciones.
12. Realizamos las respectivamos migraciones (en el root del proyecto y dentro de virtualenv):
. python manage.py makemigrations (si tienes nuevas apps (models) agregar al comando al final el app_label)
. python manage.py migrate
13. En este punto para saber si se realizaron con exito las migraciones, podemos entrar en 'pgAdmin 4', nos logueamos con el superuser que creamos (sergioruizdavila) y podremos ver la base de datos con sus respectivas tablas.
14. Si queremos probar el REST API desde el browser, deberiamos primero crear un superuser através del comando:
. python manage.py createsuperuser
. python manage.py runserver
Con esto crearemos un superuser usando la function que extendimos en authentication. Corremos nuestro server y probamos.
DESPLEGAR A HEROKU
1. Antes que nada debemos instalar el Heroku toolbelt para Django (https://devcenter.heroku.com/articles/getting-started-with-python#set-up)
2. Esto nos habilitara el comando 'heroku'. Asi que entramos a la terminal (root del proyecto y dentro de virtualenv), y nos logueamos en Heroku:
. heroku login
Este comando nos pedira usuario y contraseña de Heroku (tuvimos que haber creado una cuenta en Heroku anteriormente)
3. Vamos a conectar nuestro git con Heroku ya que trabajan muy bien de la mano para commitear codigo.
4. Aveces es necesario configurar nuestro git con nuestro username y password para que quede seteado en nuestra configuracion global;
. git config --global user.name "sergioruizdavila"
. git config --global user.email "[email protected]"
5. Vamos a instalar paquetes que se van a quedar en nuestro virtualenv ya que son necesarias para el despliegue a Heroku:
. pip install dj-database-url (este sera para configurar nuestra base de datos con Django)
. pip install gunicorn (sera nuestro servidor web)
. pip install whitenoise (servidor de archivos estaticos)
6. Actualizaremos nuestro requirement.txt con los nuevos paquetes instalados. Este archivo es muy importante, ya que Heroku tomara este archivo para saber cuales son los paquetes que necesita nuestro server.
. pip freeze > requirements.txt
7. Creamos un archivo al nivel de requirements.txt que se llame 'runtime.txt' para decirle a Heroku que version de Python vamos a usar, dentro escribiremos lo siguiente:
. python-3.5.2
8. Creamos un archivo llamado: Procfile (al nivel de requirements.txt y runtime.txt) este archivo lo tomara Heroku y ejecutara los comandos que hayan dentro, en este caso solo agregamos lo siguiente:
. web: gunicorn config.wsgi --log-file -
Donde 'config' es la carpeta que contiene el archivo wsgi.py
9. Por ultimo configuramos nuestra base de datos agregando en config/settings/dev.py las siguientes lineas:
. import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'] = dj_database_url.config()
NOTA: Cuando se vaya a trabajar localmente, este bloque debe ser comentado por que sino lanza un error.
10. Para desplegar a Heroku lo primero que tenemos que hacer es inicializar un repositorio en git:
. git init (en el root del proyecto y dentro de virtualenv)
. git status (para ver los archivos que tienen cambios y aun no se han subido)
. git diff <ruta y nombre del archivo> (nos mostrara las lineas que se modificaron)
. git add -A . (Agregamos todos los archivos que no tienen seguimiento aun en git)
. git commit -m "Mensaje del Commit" (con esto commiteamos en el repo local antes de hacer push)
. nos logueamos en heroku: heroku login (nos pide user y pass de heroku)
. heroku create <nombre de la app> (Con esto creamos la app en Heroku)
. heroku git:remote -a <nombre de la app> (Cuando digamos: git push heroku master, se va a deploya automaticamente desde la consola, creo que esto es solo posible cuando se tiene el branch master, con develop, es necesario ir a heroku y hacer un deploy manual
. git push heroku master (con esto hacemos push en Heroku de nuestra app)
. Si se subieron los archivos correctamente a Heroku, ya tendriamos la App desplegada
11. Al subir la app en Heroku, la consola nos arrojara como seria la url para acceder, en este caso es: https://www.asanni.herokuapp.com
12. Intentamos entrar a esa url y ver si el despliegue fue exitoso.
13. Lo más seguro es que van a dar errores de que no existen algunas tablas o relaciones, esto pasa por que en Heroku tambien es necesario realizar migraciones.
14. Para realizar migraciones lo primero que tenemos que hacer es generar las migraciones localmente con el comando:
. heroku run python manage.py createsuperuser (creamos un superusuario en Heroku para podernos loguear)
. python manage.py makemigrations (se agrega el app_label para generar cada migracion relacionada a las app).
. Subimos las migraciones generadas a Heroku:
git add -A .
git commit -m "Migraciones pendientes"
git push heroku master
. Despues de que subimos las migraciones podemos ejecutarlas directamente en Heroku:
heroku run python manage.py showmigrations (nos aseguramos que estan todas las nuevas migraciones)
heroku run python manage.py migrate (realizamos la migracion directamente en Heroku)
. Si la migracion es exitosa, podemos ir al browser y entrar a la url que nos provee Heroku: www.asanni.herokuapp.com, si el despliegue fue correcto podremos ver y crear registros.
NOTA: si obtenemos algun error en el despliegue podemos:
. heroku logs (muestra el log en consola)
. vamos a dashboard en heroku web, y al lado derecha hay un boton que dice: More -> View Logs
NOTAS IMPORTANTES PARA TENER EN CUENTA Y NO PERDER TIEMPO RESOLVIENDO:
. Nuestro proyecto tiene deshabilitado el LogIn del admin de Django Rest Framework. Si intentas loguearte
con las credenciales del superuser, refresca y no pasa nada, sigue el boton Log In. De todos modos los endpoint
me permiten crear nuevos registros, eliminar o actualizar.
------------------
referencias: https://www.youtube.com/watch?v=LVm8YwNTZzA