-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPasoAPaso.txt
More file actions
234 lines (185 loc) · 17.7 KB
/
PasoAPaso.txt
File metadata and controls
234 lines (185 loc) · 17.7 KB
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
• Se debe tener el proyecto anterior (API REST Express) y seguir su paso a paso •
• Docker •
1. Instalar docker: - Descargar e instalar docker desde la página: https://docs.docker.com/desktop/windows/install/
- Habilitar las caracteristicas del sistema: Hyper-V, Windows Subsystem Linuxm, Virtual Machine Plataform.
- Habilitar desde la BIOS: Virtualización.
- Descargar WSL2.
- Reiniciar y verificar que todo funcione correctamente.
2. Configuración de Postgres en Docker: - En esta url podemos encontrar información sobre las imágenes: https://hub.docker.com/
- Crear la carpeta: postgres_data (Acá se guardara la persistencia)
- Agregar en el archivo .gitignore: postgres_data (Para que no persista en el repo)
- Crear archivo: docker-compose.yml
- Ejecutar contenedor docker: docker-compose up -d postgresMyDB (Se debe tener abierto docker)
- Verificar que está corriendo: docker-compose ps
- Dejar de ejecutar contenedor docker: docker-compose down
3. Explorar nuestra BD que está en un contenedor: • Forma Terminal
- docker-compose exec postgresMyDB bash (Conectarnos al contenedor vía terminal)
- psql -h localhost -d my_store -U admin (Conectarnos a la BD)
- \d+ (Ver estructura de la BD)
- \q (Salir de la BD)
- exit (Salirnos del contenedor)
• Forma Interfaz
- Ir al archivo docker-compose.yml: Agregar el servicio de pgadmin
- Ejecutar contenedor docker: docker-compose up -d pgadmin (Se debe tener abierto docker)
- Verificar que está corriendo: docker-compose ps
- DEBEMOS CAMBIAR POR EL PEURTO CORRECTO Y USUARIO EN LAS VARIABLES DE ENTORNO
- CAMBIAR LA BASE DE DATOS EN EL ARCHIVO: libs/sequelize
- Vemos que hay 2 contenedores corriendo, en el navegador ir al puerto de contenedor pgadmin
- Una ves estamos en la página con el puerto (http://localhost:5050/), Seleccionar el server
que está a la izquierda del dashboard, click en object, register, servidor.
- En el general: Agregar nombre
- En la consola del vs, ejecutar: docker ps, así podremos tomar el id del contenedor. Una vez
tenemos el id, ejecutar: docker inspect 117722e3ad16 (id del contenedor), así podremos
obtener la ip address.
- En Conexion: Agregar el ip address tomado en el paso anterior, nombre de la BD (ver archivo
docker-compose.yml), usuario y contraseña. (EN VEZ DE LA IP ADDRESS ES MEJOR COLOCAR EL
NOMBRE DEL CONTENEDOR, EN NUESTRO CASO: postgresMyDB, ESTO SE DEBE A QUE LA IP VA CAMBIANDO
CADA QUE SE DESTRUYE EL CONTENEDOR).
- Guardamos y finalmente tenemos nuestra BD en motor gráfico.
- Correo el siguiente script de SQL y verificar que se creo correctamente:
CREATE TABLE tasks (
id serial PRIMARY KEY,
title VARCHAR ( 250 ) NOT NULL,
completed boolean DEFAULT false
);
• Conexión Nodejs-Postgres •
4. Instalar la dependencia: npm i pg
5. Crear la carpeta: libs
6. Crear el archivo: libs/postgres.js
7. Crear el archivo: libs/postgres.pool.js
8. Implementar las conexiones y pool creado en los servicios
9. Variables de ambiente: - Crear la carpeta: config
- Crear el archivo: config/config.js
- Implementarlas en los archivos de conexión que están en la carpeta: libs
- Crear el archivo: .env (Agregarlo a .gitignore)
- Crear el archivo: .env.example
- Instalar la dependencia: npm i dotenv (Permite leer el archivo .env e Implementarlo en el archivo config/config)
• ORM - Sequelize •
10. Instalar la dependencia: npm i --save sequelize
11. Instalar la dependencia: npm i --save pg pg-hstore
12. Crear el archivo: libs/sequelize.js
13. Implementar la conexión con el ORM sequelize en los servicios
14. Crear la carpeta: db
15. Crear la carpeta: db/models
16. Crear el archivo: db/models/user.model.js
17. Crear el archivo: db/models/index.js
• Cambiar la base de datos a MySQL •
18. Instalar la dependencia: npm i --save mysql2
19. Configuración de MySQL en Docker: - En esta url podemos encontrar información sobre las imágenes: https://hub.docker.com/
- Crear la carpeta: mysql_data (Acá se guardara la persistencia)
- Agregar en el archivo .gitignore: mysql_data (Para que no persista en el repo)
- Agregar el servicio mysql en el archivo: docker-compose.yml
- Ejecutar contenedor docker: docker-compose up -d mysql (Se debe tener abierto docker)
- Verificar que está corriendo: docker-compose ps
- Dejar de ejecutar contenedor docker: docker-compose down
20. Explorar nuestra BD que está en un contenedor: • Forma Interfaz
- Ir al archivo docker-compose.yml: Agregar el servicio de phpmyadmin
- Ejecutar contenedor docker: docker-compose up -d phpmyadmin (Se debe tener abierto docker)
- Verificar que está corriendo: docker-compose ps
- DEBEMOS CAMBIAR POR EL PUERTO CORRECTO Y USUARIO EN LAS VARIABLES DE ENTORNO (.Env)
- CAMBIAR LA BASE DE DATOS EN EL ARCHIVO: libs/sequelize
- Vemos que hay 2 contenedores corriendo, en el navegador ir al puerto de contenedor phpmyadmin
- Logeranos en el puerto (http://localhost:8080/)
- Correo el siguiente script de SQL y verificar que se creo correctamente:
CREATE TABLE tasks (
id serial PRIMARY KEY,
title VARCHAR ( 250 ) NOT NULL,
completed boolean DEFAULT false
);
• Migraciones •
21. Instalar la dependencia: npm i sequelize-cli -D (Nos ayuda a crear las migraciones)
22. Crear el archivo: .sequelizerc (Tienen su propia conexión)
23. Crear el archivo: db/config.js
24. Crear la carpeta: db/migrations
25. Crear la carpeta: db/seeders
26. Configurar los scripts para correr las migraciones: - Ir al archivo package.json
- Agregar el script para generar: "migrations:generate": "sequelize-cli migration:generate --name"
- Ejecutar en consola el script: npm run migrations:generate create-user
- El anterior script nos crea una pieza de código lista para correr migraciones,
manualmente debemos decirle que hacer y como en el archivo: db/migrations
- Agregar el script para correr: "migrations:run": "sequelize-cli db:migrate"
- Agregar el script para rollback: "migrations:revert": "sequelize-cli db:migrate:undo"
- Eliminar manualmente las tablas de la BD
- Ejecutar en consola el comando: npm run migrations:run
- La tabla adicional creada: SequelizeMeta, contiene el historial de migraciones,
cómo tiene el registro, no vuelve a ejecutar las migraciones que ya estan en el
historial.
27. Agregando un after table (Modificar una tabla, agregar o quitar un atributo): - Crear un nuevo campo en el archivo: db/models/user.model
- Ejecutar en consola el script: npm run migrations:generate add-role-to-user
- Agregar el campo también en el archivo: schemas/users/user.schema
- Ejecutar en consola el comando: npm run migrations:run
• Relaciones •
28. Relaciones uno a uno (Customer ----- User): - Realizar la relación en el archivo: models/customer.model.js
- Ejecutar las relaciones en el archivo: models/index.js
- Ejecutar en consola el script: npm run migrations:generate create-customer
- El anterior script nos crea una pieza de código lista para correr migraciones,
manualmente debemos decirle que hacer y como en el archivo: db/migrations
- Ejecutar en consola el comando: npm run migrations:run
- Modificar el metodo find para incluir asociación en el archivo: services/customers/customer.service.js
- Realizar la relación en el archivo: models/user.model.js
- Ejecutar las relaciones en el archivo: models/index.js
- Modificar el metodo find para incluir asociación en el archivo: services/users/user.service.js
- Modificar el esquema: schemas/customers/customer.schema.js
29. Relaciones uno a muchos (Caterogy ----> Product): - Realizar la relación en el archivo: models/category.model.js
- Realizar la relación en el archivo: models/product.model.js
- Ejecutar las relaciones en el archivo: models/index.js
- Ejecutar en consola el script: npm run migrations:generate products
- El anterior script nos crea una pieza de código lista para correr migraciones,
manualmente debemos decirle que hacer y como en el archivo: db/migrations
- Ejecutar en consola el comando: npm run migrations:run
- Modificar los metodos del servicio de category para incluir asociación en el archivo: services/categories/category.service.js
- Modificar los metodos del servicio de product para incluir asociación en el archivo: services/products/product.service.js
30. Relaciones uno a muchos (Customer -----> Order): - Realizar la relación en el archivo: models/order.model.js
- Realizar la relación en el archivo: models/customer.model.js
- Ejecutar las relaciones en el archivo: models/index.js
- Ejecutar en consola el script: npm run migrations:generate order
- Ejecutar en consola el comando: npm run migrations:run
- Modificar los metodos del servicio de order para incluir asociación en el archivo: services/orders/order.service.js
31. Relaciones muchos a muchos (Product <-----> Order). Necesitamos una tabla intermedia (Order-Product):
- Realizar la relación en el archivo: models/order-product.model.js
- Realizar la relación en el archivo: models/order.model.js
- Ejecutar las relaciones en el archivo: models/index.js
- Ejecutar en consola el script: npm run migrations:generate order-product
- Ejecutar en consola el comando: npm run migrations:run
- Modificar los metodos del servicio de order para incluir asociación en el archivo: services/orders/order.service.js
• Consultas •
32. Paginación: - Limit -> Número de elementos que quiero que traigan
- Offset -> Número de elementos que quiero escapar (Apuntador o posición del index)
- Modificar el schema de product y router
- Modificar el método find del servicio de product para aplicar Paginación en el archivo: services/products/product.service.js
33. Filtrando precios con operadores: - Modificar el schema de product y router
- Modificar el método find del servicio de product para aplicar filtros en el archivo: services/products/product.service.js
• Deploy en Heroku •
34. Consideraciones en Migraciones: - Si ya sabemos cuales son nuestras migraciones, pasamos todo a una sola migración
35. Despliegue en Heroku: - Ver documentación del addon: https://elements.heroku.com/addons/heroku-postgresql
- Logearnos en Heroku: heroku login
- Instalar Heroku: https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up
- npm install -g heroku
- Ejecutar: heroku create
- Enlazar heroku a proyecto: heroku git:remote -a arcane-savannah-51622
- git remote -v (Verificar si se ha agregado el repositorio nuevo)
- Agregar el addon para la BD: heroku addons:create heroku-postgresql:hobby-dev
- Para ver la información de la BD postgres ejecutar: heroku pg:info
• Primera opción para definir la URL de la DB dependiendo del ambiente de desarrollo
- Agregar la variable de entorno DATABASE_URL en el archivo: .env
- Modificar el archivo de configuración: config/config.js
- Ir al archivo de conexión de la BD: libs/postgres.pool.js
• Segunda opción para definir la URL de la DB dependiendo del ambiente de desarrollo
- Agregar la variable de entorno DATABASE_URL en el archivo: .env
- Modificar el archivo de configuración: config/config.js
- Ir al archivo de conexión de la BD: libs/sequelize.js
// Se recomienda la segunda opción, ya que solo tocaria manejar la variable de entorno DATABASE_URL
- Modificar el archivo de configuración: db/config.js
- Validar que sequelize-cli este instalada como dependencia de producción
- Correr migraciones en la BD de producción: heroku run npm run migrations:run
- Valdidar que todo funcione bien, ejecutar npm run dev y validar endpoints
- Agregar engines en el archivo: package.json
- Crear el archivo: Procfile
- Ejecutar: heroku local web (Correr App localmente)
- Guardar cambios: git add y commit
- Crear nueva rama: git checkout -b production
- Ejecutar: git push heroku production:main (Debemos estar en la rama creada en el paso anterior)
- Eliminar BD migraciones: heroku run npm run migrations:delete (TENER CUIDADO) Es mejor usar migrate
- Volver a ejecutar migraciones: heroku run npm run migrations:run
https://arcane-savannah-51622.herokuapp.com/
https://arcane-savannah-51622.herokuapp.com/api/v1/categories