Skip to content

Commit 174a2f7

Browse files
Jaime Salas ZancadaJaime Salas Zancada
authored andcommitted
monolith start up readme added
1 parent 2cc3d11 commit 174a2f7

4 files changed

Lines changed: 87 additions & 0 deletions

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Todo App
2+
3+
## Run solution locally
4+
5+
Start up a database with database ready to work locally, we run the following command
6+
7+
```bash
8+
$ docker run --rm -d -p 5432:5432 --name postgres postgres:10.4
9+
```
10+
11+
Once the container is running we can populate the data by
12+
13+
```bash
14+
$ docker exec -it postgres psql -U postgres
15+
```
16+
17+
Paste the code `todo-app/todos_db.sql` and the database must be started with some data.
18+
19+
### Environment Variables
20+
21+
Create `todo-app/.env` with the previous database configuration thes values must be
22+
23+
```ini
24+
NODE_ENV=develop
25+
PORT=3000
26+
DB_HOST=localhost
27+
DB_USER=postgres
28+
DB_PASSWORD=postgres
29+
DB_PORT=5432
30+
DB_NAME=todos_db
31+
DB_VERSION=10.4
32+
```
33+
34+
### Running Applications
35+
36+
First we need to install dependencies change directory to `todo-app/frontend` and run `npm install`, then change directory to `/todo-app` and run `npm install`. Once that all dependencies are installed, we can run the solution locally by changing directory to `todo-app/frontend` and running `npm run run-p -l start:server start:dev`.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Monolito
2+
3+
## Enunciado
4+
5+
Construir los distintos recursos de Kubernetes para generar un clúster, como el de la siguiente imagen:
6+
7+
![monolith in memory](./monolith.png)
8+
9+
### Para ello seguir los siguientes pasos:
10+
11+
### Paso 1. Crear una capa de persistencia de datos
12+
13+
Crear un `StatefulSet` para tener una base de datos dentro del cluster, para ello generar los siguientes recursos:
14+
15+
* Crear un `ConfigMap` con la configuración necesaria de base de datos
16+
* Crear un `StorageClass` para el aprovisionamineto dinámico de los recursos de persistencia
17+
* Crear un `PersistentVolume` que referencie el `StorageClass` anterior
18+
* Crear un `PersistentVolumeClaim` que referencie el `StorageClass` anterior
19+
* Crear un `Cluster IP service`, de esta manera los pods del `Deployment` anterior serán capaces de llegar al `StatefulSet`
20+
* Crear el `StatefulSet` alimentando las variables de entorno y el volumen haciendo referencia al `PersistentVolumeClaim` creado anteriormente.
21+
22+
Una vez tengamos nuestro `StatefulSet` corriendo la manera más directa de generar la base de datos sería:
23+
24+
* Ejecutamos `kubectl get pods`, y obtenemos el nombre del pod relacionado con el `StatefulSet`.
25+
* Ejecutamos `kubectl exec [postgres-pod-name] -it bash`
26+
* Ejecutamos `psql -U postgres`, pegamos `todo-app/todos_db.sql` y pulsamos `enter`, la base de datos debería estar generada
27+
28+
### Paso 2. Crear todo-app
29+
30+
Crear un `Deployment` para `todo-app`, usar el `Dockerfile` de este direetorio **todo-app**, para generar la imagen necesaria.
31+
32+
Al ejecutar un contenedor a partir de la imagen anaterior, el puerto por defecto es el 3000, pero se lo podemos alimentar a partir de variables de entorono, las variables de entorno serían las siguientes
33+
34+
* **NODE_ENV** : El entorno en que se está ejecutando el contenedor, nos vale cualquier valor que no sea `test`
35+
* **PORT** : El puerto por el que va a escuchar el contenedor
36+
* **DB_HOST** : El host donde se encuentra la base de datos
37+
* **DB_USER**: El usuario que accede a la base de datos, podemos usar el de por defecto `postgres`
38+
* **DB_PASSWORD**: El password para acceeder a la base de datos, podemos usar el de por defecto `postgres`
39+
* **DB_PORT** : El puerto en el que postgres escucha `5432`
40+
* **DB_NAME** : El nombre de la base de datos, en `todo-app/todos_db.sql`, el script de inicialización recibe el nombre de `todos_db`
41+
* **DB_VERSION** : La versión de postgres a usar, en este caso `10.4`
42+
43+
Crear un `ConfigMap` con todas las variables de entorno, que necesitarán los pods de este `Deployment`.
44+
45+
> NOTA: Las obligatorias son las de la base de datos, todas aquellas que comienzan por `DB`
46+
47+
### Paso 3. Acceder a todo-app desde fuera del clúster
48+
49+
Crear un `LoadBalancer service` para acceder al `Deployment` anteriormente creado desde fuera del clúster. Para poder utilizar un `LoadBalancer` con minikube seguir las instrucciones de este [artículo](https://minikube.sigs.k8s.io/docs/handbook/accessing/)
50+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile modified="2020-12-06T19:57:59.148Z" host="app.diagrams.net" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" etag="nJ241X7iPa7oBcpDAC8W" version="13.10.9" type="device"><diagram id="WI9T0HZ2pTsCkuznbFz-" name="Page-1">7Vldc+I2FP01PIax5Q/MIyEh3clmmtlMp9l9E7awFWzLIwsw/fW9smWwZbNAC9lsuyQzWEdXsnTPuVcfDKxpUjxwnEVPLCDxABlBMbDuBgiZhmvAl0S2FeI4TgWEnAbKaA+80L9I3VKhKxqQvGUoGIsFzdqgz9KU+KKFYc7Zpm22YHH7rRkOSQd48XHcRf+kgYgUarrjfcVvhIaRerWHRlVFgmtjNZM8wgHbNCDrfmBNOWOiekqKKYml82q/VO1mB2p3A+MkFac0mPhF8IQfH43kD2f5ja5RnPIb01ODE9t6xiQAB6gi4yJiIUtxfL9HbzlbpQGR3RpQ2tt8ZiwD0ATwjQixVWzilWAARSKJVS2MmG9foXBjDA3brpGvsseh5Y5q4K5Q76hK22bpmXCaEEG4AnPB2ZJMWcx4OQ/LM+Qf1HQdpXwnZ9oAlNseCIN++RYMOImxoOu2FLBSVLizU00nnONtwyBjNBV5o+dnCYCBCg7kKWWo0LBRkz94qDo8rbFZB1r99pytuE9Uq1a3jSnuoVIs5wjH/RHC+QlJNtw2T7YWpefZH1HFTgVa62Oq6A7D7B/GriOBeUjE9eQ1/iWvU+RlqqRR82R5Z8lFa41s732TyOi7LJN4zjbXW3hA4q2Fxx7/k3WnHCQ8rwkXFPYNH0JGHaYtLa0A8q5MI/T/jOcOEY5tDZ02FY5RI++UXNGP2fQVVMjQMyHybFWuAs8xHFXeB54sbBuFTtjVkSzj1msHsmGin3MH2VHLGHnDsT3efdpB7JlD20X76qsl7y9hsd36y+QhN+2vbwvv8QvGN2oyaxyv1PSeWMpiCrzr6hKkEB0HpyyVulrQONaghmgWLBVKUciuy6pjWV9n3UlMwxSwhAZBKVesAB8okwwf5lB2QYrvsljXjrUNuypuGgdDQ2FR40yo752avLdYOZcC1KGg4/qGLwOcR7sA3kRUkDzDvrTbwNldowLkj7yRc4/6AmNRfqBGbU8AdG7hH0IPQhlNjaFrya+BA9bTssIsYaSh41607EK3HB/oeFS2hvqeTkwNk4mvZQv/ML0IZ9ILSRHKO4zhcjUnPIXEkA+pz1I5Tf6pfLgj2SVkhLRNOnLrBaChJKtHSPXdwsWFZB0XUu0lmpQ3Js0g1YNQyBVhh37GcxI/s5wKWvpwzoRgCRjEsuIW+8uwXFv69FW+bJJn1c2O1C2uCwtaSDHfqvHcRULIK6GJdASa+UGKSvYWFFYtPvThjWgWYIHhS+Kwp56lLCBvuUxkM1NKYwdA1s3S8AJUow7V3ZRhv2fGsDtExwwHN3Mc49SHPHkgcx/cUx1O4p0EfDBVl6nopZ2K2ruNCzAxGmnbrnFP8jadnpi7FhVOh4pJlv13CdBDocf/fZFwCfc/UVQ84G+vNnr9Xcw+2Zis057ty6+186prZ5AfkEyPsA6qyLL0hGoOR6ctnparH7MupqUPebjVziYnefm6l1WWqd9Otm68z7U/dkPu2r2tz74LtfRFXO/ocsf1XnV1N2cvAguyWMmWL0R86DXj30W7iY6v2u5lFm0o7n+Lq6jb/6Jp3f8N</diagram></mxfile>
10.3 KB
Loading

0 commit comments

Comments
 (0)