README.md 14.5 KB
Newer Older
Martín Espinach's avatar
Martín Espinach committed
1
<!--ts-->
Martín Espinach's avatar
Martín Espinach committed
2
   * [Requisitos de memoria.](#requisitos-de-memoria)
Martín Espinach's avatar
Martín Espinach committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   * [Instalación](#instalación)
      * [Linux (Docker)](#linux-docker)
         * [JDK](#jdk)
         * [Clone](#clone)
         * [Build](#build)
         * [Runtime install](#runtime-install)
         * [Database container](#database-container)
         * [Application container](#application-container)
         * [Start de la aplicación.](#start-de-la-aplicación)
         * [Entrar en la aplicación.](#entrar-en-la-aplicación)
         * [Configuración del fronted local.](#configuración-del-fronted-local)
      * [OS/X (Docker)](#osx-docker)
         * [JDK](#jdk-1)
         * [Clone](#clone-1)
         * [Build](#build-1)
         * [Runtime install](#runtime-install-1)
         * [Database container](#database-container-1)
         * [Application container](#application-container-1)
         * [Start de la aplicación.](#start-de-la-aplicación-1)
         * [Entrar en la aplicación.](#entrar-en-la-aplicación-1)
         * [Configuración del fronted local.](#configuración-del-fronted-local-1)

Martín Espinach's avatar
Martín Espinach committed
25
<!-- Added by: martin, at: 2019-04-03T20:59+02:00 -->
Martín Espinach's avatar
Martín Espinach committed
26 27 28

<!--te-->

Martín Espinach's avatar
Martín Espinach committed
29 30 31 32 33 34 35 36 37 38 39 40 41
# Requisitos de memoria.

* Frontend + fontend db ~ __1GB Ram__
* Backoffice + backoffice db __~3GB Ram__

Para tener instaladas ambas cosas y las mínimas herramientos de desarrollo __hay que tener entonces al menos entre 6GB-8GB de Ram__ en nuestro ordenador.

Para mirar cuánta Ram tenemos:

* __Linux__: Desde una terminal: `free -g`. Columna _Total_.
* __OS/X__: Apple menu -> About This Mac -> Overview (Memory).
* __Windows 10__: Windows menu -> Windows System -> Task Manager -> Performance -> Memory

Martín Espinach's avatar
Martín Espinach committed
42
# Instalación
Martín Espinach's avatar
Martín Espinach committed
43

Martín Espinach's avatar
Martín Espinach committed
44
El documento está escrito asumiendo ciertos directorios de instalación por defecto:
Martín Espinach's avatar
Martín Espinach committed
45

Martín Espinach's avatar
Martín Espinach committed
46 47 48 49 50 51
* __~/pamapam__ -> Directorio raiz para el repositorio git.
* __~/pamapam/docker-data__ -> Directorio raiz donde se crearán los subdirectorios correspondientes a los volúmenes mapeados en los diferentes contenedores docker.

```bash
mkdir ~/pamapam
```
Martín Espinach's avatar
Martín Espinach committed
52

Martín Espinach's avatar
Martín Espinach committed
53
## Linux (Docker)
Martín Espinach's avatar
Martín Espinach committed
54

Martín Espinach's avatar
Martín Espinach committed
55
### JDK
Martín Espinach's avatar
Martín Espinach committed
56

Martín Espinach's avatar
Martín Espinach committed
57
El backoffice es una aplicación Java que consta de varios módulos. Para poder hacer el build de la aplicación necesitamos tener un JDK 8 instalado. Aunque es posible que funcione todo correctamente con versiones del Java > 8, por ahora solo se ha probado con java 8.
Martín Espinach's avatar
Martín Espinach committed
58 59

```bash
Martín Espinach's avatar
Martín Espinach committed
60
apt-get install openjdk-8-jdk
Martín Espinach's avatar
Martín Espinach committed
61
```
Martín Espinach's avatar
Martín Espinach committed
62

Martín Espinach's avatar
Martín Espinach committed
63
### Clone
Martín Espinach's avatar
Martín Espinach committed
64 65

```bash
Martín Espinach's avatar
Martín Espinach committed
66 67
cd ~/pamapam
git clone https://gitlab.com/pamapam/backoffice.git
Martín Espinach's avatar
Martín Espinach committed
68 69
```

Martín Espinach's avatar
Martín Espinach committed
70
### Build
Martín Espinach's avatar
Martín Espinach committed
71

Martín Espinach's avatar
Martín Espinach committed
72
El backoffice utiliza [Gradle](https://docs.gradle.org/current/userguide/userguide.html) como build tool. Una vez clonado el repositorio, hay que hacer un build inicial para obtener los ficheros runtime necesarios para ejecutar la aplicación.
Martín Espinach's avatar
Martín Espinach committed
73 74

```bash
Martín Espinach's avatar
Martín Espinach committed
75 76
cd ~/pamapam/backoffice
./gradlew build
Martín Espinach's avatar
Martín Espinach committed
77 78
```

Martín Espinach's avatar
Martín Espinach committed
79
### Runtime install
Martín Espinach's avatar
Martín Espinach committed
80

Martín Espinach's avatar
Martín Espinach committed
81 82
Una vez completado el build hay que instalar los ficheros de runtime en el directorio que será utilizado como volumen por el contenedor docker correspondiente.
El runtime del backoffice se compone de dos ficheros:
Martín Espinach's avatar
Martín Espinach committed
83

Martín Espinach's avatar
Martín Espinach committed
84
* __pamapam-backoffice.war__ -> Todo el código se empaqueta en este único fichero.
Martín Espinach's avatar
Martín Espinach committed
85
* __resources.zip__ -> Fichero con recursos (configuración, traducciones, imágenes estáticas). Estos recursos se empaquetan por fuera del WAR porque muchos de ellos serán diferentes según el entorno en donde se haga la instalación (development, quality, production).
Martín Espinach's avatar
Martín Espinach committed
86 87

```bash
Martín Espinach's avatar
Martín Espinach committed
88 89 90
mkdir -p ~/pamapam/docker-data/back
cp ~/pamapam/backoffice/pamapam-backoffice-application/build/libs/pamapam-backoffice-application-master-SNAPSHOT.war ~/pamapam/docker-data/back/pamapam-backoffice.war
cp ~/pamapam/backoffice/pamapam-resources/build/development.zip ~/pamapam/docker-data/back/resources.zip
Martín Espinach's avatar
Martín Espinach committed
91 92
```

Martín Espinach's avatar
Martín Espinach committed
93
### Database container
Martín Espinach's avatar
Martín Espinach committed
94

Martín Espinach's avatar
Martín Espinach committed
95
Creación del contenedor para la base de datos del Backoffice. Los usuarios y passwords utilizados en estas instrucciones son evidentemente débiles, pensados solamente para un entorno de desarrollo local.
Martín Espinach's avatar
Martín Espinach committed
96 97

```bash
Martín Espinach's avatar
Martín Espinach committed
98 99
docker run --name pamapam-back-db \
 -v ~/pamapam/docker-data/back-db/:/var/lib/mysql/ \
Martín Espinach's avatar
Martín Espinach committed
100
 -e MYSQL_ROOT_PASSWORD=jamgo \
Martín Espinach's avatar
Martín Espinach committed
101
 -d mariadb:10
Martín Espinach's avatar
Martín Espinach committed
102 103
```

Martín Espinach's avatar
Martín Espinach committed
104
Para que todos los contenedores implicados en la web y aplicación Pam a Pam sean visibles entre si, tienen que estar conectados a una docker network común.
105

Martín Espinach's avatar
Martín Espinach committed
106
```bash
Martín Espinach's avatar
Martín Espinach committed
107 108
docker network create pamapam-net
docker network connect pamapam-net --alias mariadb pamapam-back-db
Martín Espinach's avatar
Martín Espinach committed
109
```
110

Martín Espinach's avatar
Martín Espinach committed
111
A continuación hay que crear el usuario y la base de datos, en donde se importará luego el dump con los datos iniciales del entorno de desarrollo. Este dump inicial tiene datos cargados similares a un entorno de producción pero ofuscando la información sensible. 
112

Martín Espinach's avatar
Martín Espinach committed
113
```bash
114 115 116
docker exec pamapam-back-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create user jamgo@'\''%'\'' identified by '\''jamgo'\'';"'
docker exec pamapam-back-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database pamapam_backoffice default character set utf8 collate utf8_general_ci;"'
docker exec pamapam-back-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "grant all on pamapam_backoffice.* to jamgo@'\''%'\'' identified by '\''jamgo'\'';"'
Martín Espinach's avatar
Martín Espinach committed
117
```
118

Martín Espinach's avatar
Martín Espinach committed
119
Import de los datos iniciales.
120

Martín Espinach's avatar
Martín Espinach committed
121
```bash
Martín Espinach's avatar
Martín Espinach committed
122 123
curl https://gitlab.com/jamgo/backoffice-dev/raw/master/resources/pamapam_backoffice_dev.sql > /tmp/pamapam_backoffice_dev.sql
docker exec -i pamapam-back-db sh -c 'exec mysql -u root -p"$MYSQL_ROOT_PASSWORD" pamapam_backoffice ' < /tmp/pamapam_backoffice_dev.sql
Martín Espinach's avatar
Martín Espinach committed
124
```
125

Martín Espinach's avatar
Martín Espinach committed
126 127
### Application container

Martín Espinach's avatar
Martín Espinach committed
128
En la creación del contenedor para la aplicación se mapea el puerto 8080 del ordenador con el 8080 del contenedor (_-p 8080:8080_). 
Martín Espinach's avatar
Martín Espinach committed
129

Martín Espinach's avatar
Martín Espinach committed
130
Si ya tenemos alguna otra aplicación utilizando este mismo puerto, no podremos hacer luego el start porque habrá colisión. Si no es posible detener la otra aplicación tendremos que mapear un puerto diferente: _-p XXXX:8080_ (el puerto interno del contenedor será siempre el 8080).
Martín Espinach's avatar
Martín Espinach committed
131

Martín Espinach's avatar
Martín Espinach committed
132
```bash
133 134 135 136 137 138 139
docker create --name pamapam-back \
 -p 8080:8080 \
 -v ~/pamapam/docker-data/back:/mnt \
 --workdir /mnt \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 adoptopenjdk/openjdk8:alpine-slim sh -c "java -cp pamapam-backoffice.war:resources.zip org.springframework.boot.loader.WarLauncher"
Martín Espinach's avatar
Martín Espinach committed
140
```
141

Martín Espinach's avatar
Martín Espinach committed
142 143
Hay que conectar también este contenedor a la docker network creada anteriormente.

Martín Espinach's avatar
Martín Espinach committed
144
```bash
145
docker network connect pamapam-net pamapam-back
Martín Espinach's avatar
Martín Espinach committed
146
```
147

Martín Espinach's avatar
Martín Espinach committed
148 149 150 151
### Start de la aplicación.

Po último solo queda hacer el sart del contenedor de la aplicación y probar que todo funcione correctamente.

Martín Espinach's avatar
Martín Espinach committed
152
```bash
153
docker start pamapam-back
Martín Espinach's avatar
Martín Espinach committed
154
```
155

Martín Espinach's avatar
Martín Espinach committed
156 157 158 159 160 161 162 163 164 165 166 167
El start de la aplicación puede tardar un poco, la mejor manera de asegurarse que el start ha finalizado es mirar los logs del container:

```bash
docker logs -f pamapam-back
```
... hasta ver unas lineas similares a estas:

```
2019-04-03 18:51:18.550  INFO 14671 --- [           main] b.c.e.u.UndertowEmbeddedServletContainer : Undertow started on port(s) 8080 (http)
2019-04-03 18:51:18.554  INFO 14671 --- [           main] o.p.b.PamapamBackofficeApplication       : Started PamapamBackofficeApplication in 10.539 seconds (JVM running for 10.77)
```

Martín Espinach's avatar
Martín Espinach committed
168
__Ctrl+C para salir de la visualización de los logs.__ Generalmente es bueno tener una pestaña o ventana de terminal siempre mostrando los logs y seguir trabajando en otra.
Martín Espinach's avatar
Martín Espinach committed
169 170 171

### Entrar en la aplicación.

172 173
http://localhost:8080

Martín Espinach's avatar
Martín Espinach committed
174 175
* user: __admin__
* password: __pamapam__
176 177 178

Todas las usuarias importadas en la base de datos de desarrollo tienen como password __pamapam__.

Martín Espinach's avatar
Martín Espinach committed
179 180 181 182
### Configuración del fronted local.

La instalación por defecto del **frontend** crea una configuración para trabajar con el backoffice de qa. Si queremos conectar nuestro fontend local con el backoffice que acabamos de instalar, hay que modificar la configuración del contenedor Nginx.

Martín Espinach's avatar
Martín Espinach committed
183
Estamos asumiendo también que los directorios de los volúmenes correspondientes a los contenedores del frontend están en *~/pamapam/docker-data*.
Martín Espinach's avatar
Martín Espinach committed
184

Martín Espinach's avatar
Martín Espinach committed
185
```bash
Martín Espinach's avatar
Martín Espinach committed
186
sed -e "s/qa\.pamapam\.org/pamapam-back:8080/g" -i ~/pamapam/docker-data/nginx/default.conf
Martín Espinach's avatar
Martín Espinach committed
187
sed -e "s/pamapam-back:8080\/services/pamapam-back:8080\/api/g" -i "" ~/pamapam/docker-data/nginx/default.conf
Martín Espinach's avatar
Martín Espinach committed
188
```
189

Martín Espinach's avatar
Martín Espinach committed
190 191
Y tenemos que conectar también los contenedores del fronted a la docker network creada.

Martín Espinach's avatar
Martín Espinach committed
192
```bash
193
docker network connect pamapam-net --alias pamapam.local pamapam
Martín Espinach's avatar
Martín Espinach committed
194
docker network connect pamapam-net pamapam-web
Martín Espinach's avatar
Martín Espinach committed
195
```
196

197 198 199 200 201 202
Por último hay que reiniciar el contenedor del nginx para activar la nueva redirección al backoffice local que hemos configurado:

```bash
docker restart pamapam
```

Martín Espinach's avatar
Martín Espinach committed
203
## OS/X (Docker)
204

Martín Espinach's avatar
Martín Espinach committed
205 206
### JDK

Martín Espinach's avatar
Martín Espinach committed
207
El backoffice es una aplicación Java que consta de varios módulos. Para poder hacer el build de la aplicación necesitamos tener un JDK 8 instalado. Aunque es posible que funcione todo correctamente con versiones del Java > 8, por ahora solo se ha probado con java 8.
Martín Espinach's avatar
Martín Espinach committed
208

Martín Espinach's avatar
Martín Espinach committed
209
```bash
210
brew tap AdoptOpenJDK/openjdk
Martín Espinach's avatar
Martín Espinach committed
211 212
brew cask install adoptopenjdk8
```
Martín Espinach's avatar
Martín Espinach committed
213

Martín Espinach's avatar
Martín Espinach committed
214 215
### Clone

Martín Espinach's avatar
Martín Espinach committed
216
```bash
Martín Espinach's avatar
Martín Espinach committed
217 218
cd ~/pamapam
git clone https://gitlab.com/pamapam/backoffice.git
Martín Espinach's avatar
Martín Espinach committed
219 220 221 222
```

### Build

Martín Espinach's avatar
Martín Espinach committed
223
El backoffice utiliza [Gradle](https://docs.gradle.org/current/userguide/userguide.html) como build tool. Una vez clonado el repositorio, hay que hacer un build inicial para obtener los ficheros runtime necesarios para ejecutar la aplicación.
Martín Espinach's avatar
Martín Espinach committed
224 225 226

```bash
cd ~/pamapam/backoffice
Martín Espinach's avatar
Martín Espinach committed
227 228 229
./gradlew build
```

Martín Espinach's avatar
Martín Espinach committed
230 231 232 233 234 235
### Runtime install

Una vez completado el build hay que instalar los ficheros de runtime en el directorio que será utilizado como volumen por el contenedor docker correspondiente.
El runtime del backoffice se compone de dos ficheros:

* __pamapam-backoffice.war__ -> Todo el código se empaqueta en este único fichero.
Martín Espinach's avatar
Martín Espinach committed
236
* __resources.zip__ -> Fichero con recursos (configuración, traducciones, imágenes estáticas). Estos recursos se empaquetan por fuera del WAR porque muchos de ellos serán diferentes según el entorno en donde se haga la instalación (development, quality, production).
Martín Espinach's avatar
Martín Espinach committed
237

Martín Espinach's avatar
Martín Espinach committed
238 239 240 241 242 243
```bash
mkdir -p ~/pamapam/docker-data/back
cp ~/pamapam/backoffice/pamapam-backoffice-application/build/libs/pamapam-backoffice-application-master-SNAPSHOT.war ~/pamapam/docker-data/back/pamapam-backoffice.war
cp ~/pamapam/backoffice/pamapam-resources/build/development.zip ~/pamapam/docker-data/back/resources.zip
```

Martín Espinach's avatar
Martín Espinach committed
244 245 246 247
### Database container

Creación del contenedor para la base de datos del Backoffice. Los usuarios y passwords utilizados en estas instrucciones son evidentemente débiles, pensados solamente para un entorno de desarrollo local.

Martín Espinach's avatar
Martín Espinach committed
248 249 250
```bash
docker run --name pamapam-back-db \
 -v ~/pamapam/docker-data/back-db/:/var/lib/mysql/ \
Martín Espinach's avatar
Martín Espinach committed
251
 -e MYSQL_ROOT_PASSWORD=jamgo \
Martín Espinach's avatar
Martín Espinach committed
252 253
 -d mariadb:10
```
Martín Espinach's avatar
Martín Espinach committed
254

Martín Espinach's avatar
Martín Espinach committed
255
Para que todos los contenedores implicados en la web y aplicación Pam a Pam sean visibles entre si, tienen que estar conectados a una docker network común.
Martín Espinach's avatar
Martín Espinach committed
256 257 258 259 260 261

```bash
docker network create pamapam-net
docker network connect pamapam-net --alias mariadb pamapam-back-db
```

Martín Espinach's avatar
Martín Espinach committed
262
A continuación hay que crear el usuario y la base de datos, en donde se importará luego el dump con los datos iniciales del entorno de desarrollo. Este dump inicial tiene datos cargados similares a un entorno de producción pero ofuscando la información sensible. 
Martín Espinach's avatar
Martín Espinach committed
263

Martín Espinach's avatar
Martín Espinach committed
264 265 266 267 268 269
```bash
docker exec pamapam-back-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create user jamgo@'\''%'\'' identified by '\''jamgo'\'';"'
docker exec pamapam-back-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database pamapam_backoffice default character set utf8 collate utf8_general_ci;"'
docker exec pamapam-back-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "grant all on pamapam_backoffice.* to jamgo@'\''%'\'' identified by '\''jamgo'\'';"'
```

Martín Espinach's avatar
Martín Espinach committed
270 271
Import de los datos iniciales.

Martín Espinach's avatar
Martín Espinach committed
272
```bash
Martín Espinach's avatar
Martín Espinach committed
273 274
curl https://gitlab.com/jamgo/backoffice-dev/raw/master/resources/pamapam_backoffice_dev.sql > /tmp/pamapam_backoffice_dev.sql
docker exec -i pamapam-back-db sh -c 'exec mysql -u root -p"$MYSQL_ROOT_PASSWORD" pamapam_backoffice ' < /tmp/pamapam_backoffice_dev.sql
Martín Espinach's avatar
Martín Espinach committed
275 276
```

Martín Espinach's avatar
Martín Espinach committed
277 278
### Application container

Martín Espinach's avatar
Martín Espinach committed
279
En la creación del contenedor para la aplicación se mapea el puerto 8080 del ordenador con el 8080 del contenedor (_-p 8080:8080_). 
Martín Espinach's avatar
Martín Espinach committed
280

Martín Espinach's avatar
Martín Espinach committed
281
Si ya tenemos alguna otra aplicación utilizando este mismo puerto, no podremos hacer luego el start porque habrá colisión. Si no es posible detener la otra aplicación tendremos que mapear un puerto diferente: _-p XXXX:8080_ (el puerto interno del contenedor será siempre el 8080).
Martín Espinach's avatar
Martín Espinach committed
282

Martín Espinach's avatar
Martín Espinach committed
283 284 285 286 287 288 289 290
```bash
docker create --name pamapam-back \
 -p 8080:8080 \
 -v ~/pamapam/docker-data/back:/mnt \
 --workdir /mnt \
 adoptopenjdk/openjdk8:alpine-slim sh -c "java -cp pamapam-backoffice.war:resources.zip org.springframework.boot.loader.WarLauncher"
```

Martín Espinach's avatar
Martín Espinach committed
291 292
Hay que conectar también este contenedor a la docker network creada anteriormente.

Martín Espinach's avatar
Martín Espinach committed
293 294 295 296
```bash
docker network connect pamapam-net pamapam-back
```

Martín Espinach's avatar
Martín Espinach committed
297 298 299 300
### Start de la aplicación.

Po último solo queda hacer el sart del contenedor de la aplicación y probar que todo funcione correctamente.

Martín Espinach's avatar
Martín Espinach committed
301 302 303 304
```bash
docker start pamapam-back
```

Martín Espinach's avatar
Martín Espinach committed
305 306 307 308 309 310 311 312 313 314 315 316
El start de la aplicación puede tardar un poco, la mejor manera de asegurarse que el start ha finalizado es mirar los logs del container:

```bash
docker logs -f pamapam-back
```
... hasta ver unas lineas similares a estas:

```
2019-04-03 18:51:18.550  INFO 14671 --- [           main] b.c.e.u.UndertowEmbeddedServletContainer : Undertow started on port(s) 8080 (http)
2019-04-03 18:51:18.554  INFO 14671 --- [           main] o.p.b.PamapamBackofficeApplication       : Started PamapamBackofficeApplication in 10.539 seconds (JVM running for 10.77)
```

Martín Espinach's avatar
Martín Espinach committed
317
__Ctrl+C para salir de la visualización de los logs.__ Generalmente es bueno tener una pestaña o ventana de terminal siempre mostrando los logs y seguir trabajando en otra.
Martín Espinach's avatar
Martín Espinach committed
318 319 320

### Entrar en la aplicación.

Martín Espinach's avatar
Martín Espinach committed
321 322
http://localhost:8080

Martín Espinach's avatar
Martín Espinach committed
323 324
* user: __admin__
* password: __pamapam__
325 326 327

Todas las usuarias importadas en la base de datos de desarrollo tienen como password __pamapam__.

Martín Espinach's avatar
Martín Espinach committed
328 329 330 331
### Configuración del fronted local.

La instalación por defecto del **frontend** crea una configuración para trabajar con el backoffice de qa. Si queremos conectar nuestro fontend local con el backoffice que acabamos de instalar, hay que modificar la configuración del contenedor Nginx.

Martín Espinach's avatar
Martín Espinach committed
332
Estamos asumiendo también que los directorios de los volúmenes correspondientes a los contenedores del frontend están en *~/pamapam/docker-data*.
Martín Espinach's avatar
Martín Espinach committed
333

Martín Espinach's avatar
Martín Espinach committed
334
```bash
Martín Espinach's avatar
Martín Espinach committed
335
sed -e "s/qa\.pamapam\.org/pamapam-back:8080/g" -i "" ~/pamapam/docker-data/nginx/default.conf
Martín Espinach's avatar
Martín Espinach committed
336
sed -e "s/pamapam-back:8080\/services/pamapam-back:8080\/api/g" -i "" ~/pamapam/docker-data/nginx/default.conf
Martín Espinach's avatar
Martín Espinach committed
337 338
```

Martín Espinach's avatar
Martín Espinach committed
339 340
Y tenemos que conectar también los contenedores del fronted a la docker network creada.

Martín Espinach's avatar
Martín Espinach committed
341 342
```bash
docker network connect pamapam-net --alias pamapam.local pamapam
Martín Espinach's avatar
Martín Espinach committed
343
docker network connect pamapam-net pamapam-web
Martín Espinach's avatar
Martín Espinach committed
344
```
345 346 347 348 349 350

Por último hay que reiniciar el contenedor del nginx para activar la nueva redirección al backoffice local que hemos configurado:

```bash
docker restart pamapam
```