Instalación via Docker

Buenas, estaba revisando como viene la mano de la instalación de Toba 3 en Docker. Para explorar, quise arrancar un proyecto de cero y dejarlo “andando” con los containers, para luego meterme en la dockerización de algun proyecto existente.

Arranqué por el template y su guía de instalación: https://github.com/SIU-Toba/template-proyecto-toba#instalación-y-creación-del-proyecto-con-docker

Obviamente edité el docker-compose.yml colocando el nombre de proyecto. En ese punto, al hacer el up, dejo los logs


Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/                                                                                 
Creating network "toba-docker_default" with the default driver                                                                                                                                         
Creating pg ... done                                                                                                                                                                                   
Creating backendapi ... done                                                                                                                                                                           
Attaching to pg, backendapi                                                                                                                                                                            
pg            | The files belonging to this database system will be owned by user "postgres".                                                                                                          
pg            | This user must also own the server process.                                                                                                                                            
pg            |                                                                                                                                                                                        
pg            | The database cluster will be initialized with locale "en_US.utf8".                                                                                                                     
pg            | The default database encoding has accordingly been set to "UTF8".                                                                                                                      
pg            | The default text search configuration will be set to "english".                                                                                                                        
pg            |                                                                                                                                                                                        
pg            | Data page checksums are disabled.                                                                                                                                                      
pg            |                                                                                                                                                                                        
pg            | fixing permissions on existing directory /var/lib/postgresql/data ... ok                                                                                                               
backendapi    | Starting backendapi...                                                                                                                                                                 
pg            | creating subdirectories ... ok                                                                                                                                                         
pg            | selecting default max_connections ... 100                                                                                                                                              
pg            | selecting default shared_buffers ... 128MB                                                                                                                                             
pg            | selecting default timezone ... Etc/UTC                                                                                                                                                 
pg            | selecting dynamic shared memory implementation ... posix                                                                                                                               
backendapi    | Notice: Se utiliza el id_desarrollador default (0)                                                                                                                                     
backendapi    | Notice: Se utiliza el nombre de instalacion por default (Toba Editor)                                                                                                                  
pg            | creating configuration files ... ok                                                                                                                                                    
pg            | running bootstrap script ... ok                                                                                                                                                        
backendapi    | /entrypoint.d/toba.sh: line 89: /var/local/backendapi/vendor/siu-toba/framework/bin/connection_test: No such file or directory                                                         
backendapi    | Loading composer repositories with package information                                                                                                                                 
pg            | performing post-bootstrap initialization ... ok                                                                                                                                        
pg            | syncing data to disk ... ok                                                                                                                                                            
pg            |                                                                                                                                                                                        
pg            | Success. You can now start the database server using:                                                                                                                                  
pg            | 
pg            |     pg_ctl -D /var/lib/postgresql/data -l logfile start
pg            | 
pg            | 
pg            | WARNING: enabling "trust" authentication for local connections
pg            | You can change this by editing pg_hba.conf or using the option -A, or
pg            | --auth-local and --auth-host, the next time you run initdb.
pg            | waiting for server to start....2022-03-10 14:39:41.112 UTC [48] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
pg            | 2022-03-10 14:39:41.123 UTC [49] LOG:  database system was shut down at 2022-03-10 14:39:40 UTC
pg            | 2022-03-10 14:39:41.126 UTC [48] LOG:  database system is ready to accept connections
pg            |  done
pg            | server started
pg            | 
pg            | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
pg            | 
pg            | 2022-03-10 14:39:41.235 UTC [48] LOG:  received fast shutdown request
pg            | waiting for server to shut down....2022-03-10 14:39:41.254 UTC [48] LOG:  aborting any active transactions
pg            | 2022-03-10 14:39:41.254 UTC [48] LOG:  background worker "logical replication launcher" (PID 55) exited with exit code 1
pg            | 2022-03-10 14:39:41.254 UTC [50] LOG:  shutting down
pg            | 2022-03-10 14:39:41.265 UTC [48] LOG:  database system is shut down
pg            |  done
pg            | server stopped
pg            | 
pg            | PostgreSQL init process complete; ready for start up.
pg            | 
pg            | 2022-03-10 14:39:41.345 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
pg            | 2022-03-10 14:39:41.345 UTC [1] LOG:  listening on IPv6 address "::", port 5432
pg            | 2022-03-10 14:39:41.347 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
pg            | 2022-03-10 14:39:41.355 UTC [67] LOG:  database system was shut down at 2022-03-10 14:39:41 UTC
pg            | 2022-03-10 14:39:41.358 UTC [1] LOG:  database system is ready to accept connections
backendapi    | Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com
/deprecating-composer-1-support/                                                                                                                                                                       
backendapi    | Info from https://repo.packagist.org: #StandWithUkraine                                                                                                                                
backendapi    | Updating dependencies (including require-dev)                                                                                                                                          
backendapi    | Your requirements could not be resolved to an installable set of packages.                                                                                                             
backendapi    | 
backendapi    |   Problem 1
backendapi    |     - siu-toba/framework v3.3.9 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.8 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.7 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.6 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.5 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.4 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.3 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.23 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.22 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.21 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.20 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.2 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.19 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.18 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.17 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.16 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.15 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.14 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.13 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.12 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.11 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.10 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.1 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - siu-toba/framework v3.3.0 requires ioncube/php-openssl-cryptor dev-master -> no matching package found.
backendapi    |     - Installation request for siu-toba/framework ~3.3 -> satisfiable by siu-toba/framework[v3.3.0, v3.3.1, v3.3.10, v3.3.11, v3.3.12, v3.3.13, v3.3.14, v3.3.15, v3.3.16, v3.3.17, v3.
3.18, v3.3.19, v3.3.2, v3.3.20, v3.3.21, v3.3.22, v3.3.23, v3.3.3, v3.3.4, v3.3.5, v3.3.6, v3.3.7, v3.3.8, v3.3.9].
backendapi    | 
backendapi    | Potential causes:
backendapi    |  - A typo in the package name
backendapi    |  - The package is not available in a stable-enough version according to your minimum-stability setting
backendapi    |    see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
backendapi    |  - It's a private package and you forgot to add a custom repository to find it
backendapi    | 
backendapi    | Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
backendapi    | /entrypoint.d/toba.sh: line 97: /var/local/backendapi/vendor/siu-toba/framework/bin/toba: No such file or directory
backendapi    | /entrypoint.d/toba.sh: line 112: /var/local/backendapi/vendor/siu-toba/framework/bin/toba: No such file or directory
backendapi    | grep: /var/local/docker-data/backendapi-instalacion/i__desarrollo/instancia.ini: No such file or directory
backendapi    | /entrypoint.d/toba.sh: line 142: /var/local/backendapi/vendor/siu-toba/framework/bin/toba: No such file or directory
backendapi    | chown: cannot access '/var/local/docker-data/backendapi-instalacion/i__desarrollo': No such file or directory
backendapi    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.23.0.3. Set the 'ServerName' directive globally to suppress this message
backendapi    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.23.0.3. Set the 'ServerName' directive globally to suppress this message
backendapi    | [Thu Mar 10 11:40:51.590071 2022] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.3.13 configured -- resuming normal operations
backendapi    | [Thu Mar 10 11:40:51.590086 2022] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
^CGracefully stopping... (press Ctrl+C again to force)
Stopping backendapi ... done
Stopping pg         ... done

Revisando en el foro, encontré que el error de composer es por la versión de este. En el caso de mi deploy, no tengo ese composer local, sino que es el que esta en la imagen respectiva. El otro error, el del test de conexión, es porque no definí la variable DOCKER_WAIT_FOR, no?

Para el caso de composer, entiendo que deberia rebuildear una imagen de Docker Web 1, y luego a partir de esa imagen armar otra build de Docker Toba 2, y asi…

Me pareció bastante tedio, por lo que recurro acá para saber si es que se discontinuo este deploy, se cambio el enfoque y las imagenes actualizadas estan en otro lado, o esta pasando otra cosa que no entiendo.

Cualquier orientación sobre este deploy, se agradece.

Hola Tomas,

La instalacion por ahora es funcional pero a futuro probablemente elimine dicho archivo (docker-compose.yml) por dos motivos:

  • La imagen usada esta vieja (de ahi la version de composer) y por otro lado asume un monton de cuestiones que no deberia.
  • Dejamos de usar dichas imagenes en pos de imagenes basadas en Alpine para los modulos, el tema es que son menos “automagicas” y requieren mas laburo manual de parte del usuario final.
Revisando en el foro, encontré que el error de composer es por la versión de este. En el caso de mi deploy, no tengo ese composer local, sino que es el que esta en la imagen respectiva. El otro error, el del test de conexión, es porque no definí la variable DOCKER_WAIT_FOR, no?

Por el error que aparece, creo que el problema es que antes de realizar el UP te salteaste el paso del composer install en la maquina, entonces no tiene a mano el archivo para ejecutarlo. Recorda que esto labura con un directorio mapeado via un volumen.

La variable que mencionass DOCKER_WAIT_FOR, nos ayuda a simular la espera a que el contenedor de postgres este ready… pero a futuro va a volar tambien y en todo caso se vera de utilizar la clausula “depends” de docker para morigerar un poco la situacion, aunque lo mas probable es que se deje fallar el contenedor del framework.

Me pareció bastante tedio, por lo que recurro acá para saber si es que se discontinuo este deploy, se cambio el enfoque y las imagenes actualizadas estan en otro lado, o esta pasando otra cosa que no entiendo. Cualquier orientación sobre este deploy, se agradece.

Como te decia mas arriba, estas imagenes estan viejas y solo se referencian porque en esta version aun funcionan… pero a futuro no van mas.
Las imagenes base para proyectos se encuentran aqui pero tienen cero automatizacion de los procesos de Toba, hay que hacer la instalacion de forma manual, lo mismo que la carga/creacion del proyecto, etc.

Saludos

A ver si te entiendo, lo que vos decis que haga es tomar las imágenes que ustedes arman de este repo, y a partir de ellas arme mi Dockerfile y mis propias imágenes instalando Toba?

Ese seria el workflow adecuado para el enfoque nuevo?

Hola Tomas,

Algo asi… aunque no serian tus propias imagenes, sino que serian las imagenes de las aplicaciones.

Dicho de otra forma, la idea es que las aplicaciones/proyectos/modulos/comosellamen tengan su imagen docker de produccion y que para el desarrollo lo unico que se haga es montarle un volumen con el codigo y la instalacion de Toba realizada. La primera vez que arranca la imagen, haces la instalacion de Toba y la creacion del proyecto… luego de eso simplemente arrancas el contenedor y laburas.

Ese seria el workflow adecuado para el enfoque nuevo?

Basado en lo anterior, no reo que sume mucho que el framework tenga sus propias imagenes (con varios scripts extra de automatizacion), mas alla de la comodidad de uso si se quiere. Y la ofuscacion de todo lo que pasa detras va en detrimento del entendimiento de como funciona el mismo.

Si desarrollas en docker, lo logico seria que esa tecnologia se traslade al deploy tambien (via CI/CD) pero para eso no podes usar la imagen de Toba, sino que hay que construir una propia para la aplicacion completamente ajustada a su funcionamiento, sin cosas de mas instaladas.

Una vez tenes dicha imagen, tiene todo el sentido usarla para el desarrollo tambien y asi no tener 2 ambientes disjuntos o configurados de manera distinta.

Quizas simplemente migre dicho archivo a un esquema donde se use la imagen base del repo mencionado y modifique la documentacion para agregar un paso manual que instale composer y yarn, una vez tenes eso podes desarrollar tranquilamente y luego a partir de ahi generar el Dockerfile de la aplicacion y reemplazarlo como nueva base.

Fijate que mas alla del up inicial, una vez instalaste las cosas no hay mucho mas que el laburo diario (igual que en una VM o Host)… quizas lo mas extraño sea que arrancas creando una imagen propia (que solo es un FROM + build) y luego desarrollas con ella, pero te queda el camino allanado para llegar hasta el deploy y mayor automatizacion luego del commit.

Saludos

Hola , retomo este viejo hilo , porque estamos con intenciones de dockerizar los proyectos que tenemos en toba y poder automatizar el deploy.

Revisé los proyectos SIU que ya laburan con imagenes de docker, como Mapuche o Diaguita, e hice un poco de ingeniería inversa de lo desarrollado, veo que utilizan las imagenes de alpine y un entrypoint para ejecutar los comandos de toba en el run. ¿No estaría bueno , utilizando lo que está desarrollado en algunos proyectos, estandarizar la forma de trabajar Toba con docker y hacer el deploy en producción?

Saludos y gracias! y bienvenida cualquier recomendación para encarar esta metodología.

Gabriel

Sinceramente, nosotros seguimos usando las imagenes discontinuadas, que funcionan con Toba 3

Nos estamos debiendo una build a partir de alpine

Si no recuerdo mal, los pibes de Toba querían que usemos el enfoque que proponen en este repo https://github.com/SIU-Toba/template-proyecto-toba

Hola Gabriel,

te cuento un poco para darle profundidad a lo que te comento Tomas (que es correcto) y se entienda el motivo del cambio.

Las imagenes a las que haces referencia fueron parte de nuestros primeros pasos con Docker y una via para ir llevando los modulos hacia un despliegue con contenedores, nos fuimos abriendo camino mientras generabamos respuesta a las necesidades que iban surgiendo, eso no significa que era la forma ideal de trabajo.

Por ello se realizo un trabajo especifico con una consultora externa especializada en la tematica y se replantearon tanto las imagenes base, como la manera de trabajar con ellas de acuerdo a las recomendaciones. Vas a notar que en el repositorio que enlazo Tomas al final hubo un cambio en la imagen base del archivo docker-compose.yml que seria parte del nuevo conjunto de imagenes base a utilizar.

Basicamente la forma de trabajo te la resumo en los siguientes items:

  • aquello que necesita ejecutarse siempre se convierte en diversos scripts que se alojan en un directorio especifico mas info
  • esos scripts seran ejecutados por el entrypoint antes de iniciar el proceso principal (de forma incondicional)
  • lo que se necesite ejecutar de forma condicional o bajo demanda, debe quedar como comandos (por fuera del entrypoint) que se ejecuten ya sea manualmente (dev) o via alguna job (prod), si usan un launcher o ejecutan el comando completo por el momento no esta definido.

En el readme del repositorio que te enlace, se encuentra a groso modo el mecanismo de laburo planteado hacia adelante. Por ende, los entrypoints tal como los viste en la recorrida que hicieron (los felicito por meterse de esa forma!!) lamentablemente estan difuntos a futuro.

Estamos migrando el IDM de Arai-Usuarios (hecho en Toba) a este nuevo esquema y llevando adelante las modificaciones del caso, ahi vamos a estar definiendo con mayor detalle la forma de trabajo que recomendaremos a los modulos… pero los lineamientos grales son los planteados arriba. En paralelo como complemento de ese trabajo voy a dejar un Dockerfile en el repositorio del template para facilitar lo que seria la extension/personalizacion de las imagenes base.

El otro tema es que no se actualizan las viejas imagenes con nuevas versiones de PHP, por lo tanto es un camino cerrado ese.

Si pueden ir chusmeando las nuevas imagenes, pregunten nomas que en lo que pueda los ayudo.

Saludos

Richard, cargué en github una discussion, porque se me hacia mas facil linkear y mostrar código ahi.

Les llega notificación de eso?

Consulto porque sino lo vuelvo a postear en este hilo / sub-foro.

Hola Tomas,

Les llega notificación de eso?

La notificacion en Github esta, lo que no me llego es el mail hasta donde vi (voy a chequear que el cornudo de Gmail no este aplicando algun filtro automatico).

Bien por traerlo a colacion por aca, sino no me hubiera enterado hasta que entrara a GH (que no siempre hago).

Lo seguimos alla si te parece, porque en definitiva seguramente termine en un PR

Saludos

Por las dudas, arme el PR 156: https://github.com/SIU-Toba/framework/pull/156

Gracias Richard voy revisando en los repo que mandaste y seguramente algo les voy a preguntar. Gracias a ambos!

Saludos.
Gabriel