Variables de entorno de base de datos externa no documentadas (puerto PG externo, variables de entorno de Redis externo)

Greetings,

I can’t post in the Sysadmin category.

I can configure an external DB using:

DISCOURSE_DB_USERNAME
DISCOURSE_DB_PASSWORD
DISCOURSE_DB_HOST
DISCOURSE_DB_NAME

But I couldn’t find:

DISCOURSE_DB_PORT (External PostgreSQL Port)
DISCOURSE_REDIS_HOST
DISCOURSE_REDIS_USERNAME
DISCOURSE_REDIS_PASSWORD
DISCOURSE_REDIS_NAME (which database, 0,1,2,3, etc)

I’m an engineer at Compose/IBM and I’m attempting to setup Discourse using our production-ready, replicated databases. I’d like to run a web_only instance with external Redis & PostgreSQL

I also couldn’t find configuration parameters for failover support:

We supply two URIs “portals” for connection failover. I don’t have a ton of time to dig through the Discourse codebase and see which client driver you are using.

Lastly, we use SSL (using valid LE certs) for both Redis and PostgreSQL. Is your app configured for SSL support?

Thanks!

P.S. I’m reaching out personally, not officially from IBM/Compose. I enjoy Discourse and have been considering writing an article on how to configure Discourse using our services:

You can see all of the possible global vars documented at:

You can pass in config from your environment, all the settings below are available.
Append DISCOURSE_ and upper case the setting in ENV. For example:
to pass in db_timeout of 200 you would use DISCOURSE_DB_TIMEOUT=200

Estoy haciendo esto para una aplicación docker-compose, y a pesar de exportar la variable de entorno DISCOURSE_REDIS_HOST (como redis), no está respetando esta variable:

name, 'name', name),\n  updated_at,\n  created_at,\n  updated_at\nFROM facebook_user_infos\n")
discourse_1_9cc0cea436ca | rake aborted!
discourse_1_9cc0cea436ca | Redis::CannotConnectError: Error al conectar con Redis en localhost:6379 (Errno::ECONNREFUSED)
discourse_1_9cc0cea436ca | /usr/local/bundle/gems/redis-4.0.1/lib/redis/client.rb:344:in `rescue in establish_connection'

Mi código completo está aquí si quieres inspeccionarlo. Por alguna razón, las variables (que deberían ser respetadas) no lo están. Para dar contexto, realmente quiero ayudar con un plugin, pero las barreras de entrada (configurar un entorno de desarrollo básico sin instalar todo en mi host) son enormes. La única vez que logré que Discourse funcionara fue usando la imagen de Bitnami, de la cual me han dicho (en otro lugar) que no es la forma correcta de hacerlo. Por favor, ayúdenme: esto no debería ser tan difícil, especialmente cuando doy mi tiempo libre porque quiero ayudar :frowning:

No estoy muy seguro de por qué estás teniendo ese problema, pero experimentarás considerablemente menos dificultades si lo haces de esta manera recomendada: Install Discourse for development using Docker

Véase también: Can Discourse ship frequent Docker images that do not need to be bootstrapped? - #6 by fbender

Quizás estoy leyendo el código incorrectamente, pero el script bin/docker/boot_dev --init todavía interactúa con una base de datos y dependencias en el host.

En cuanto al segundo hilo, ¿a qué en particular me estás pidiendo que mire? Tiene 151 publicaciones. ¡Gracias!

Esa variable se respeta perfectamente en producción.

Para el desarrollo, buscamos una instancia local de forma predeterminada, lo cual funciona perfectamente si sigues uno de los entornos de desarrollo compatibles.

Lo estoy ejecutando con ‘production’ como variable de entorno, pero no se estaba respetando. Como solución temporal, modifiqué la configuración con sed y eso lo solucionó. Aún hay numerosos otros problemas con los que estoy trabajando.

Por ejemplo, empiezo indicando explícitamente que no se debe desvincular (para mantener el contenedor en ejecución):

bundle exec rails s --port 3000 --no-daemon --environment=production --binding 0.0.0.0

pero parece que decide hacerlo de todos modos. Y entonces, lógicamente, el contenedor se cierra.

discourse_1_f60e0e3f1186 | [358] Puma starting in cluster mode...
discourse_1_f60e0e3f1186 | [358] * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
discourse_1_f60e0e3f1186 | [358] * Min threads: 8, max threads: 32
discourse_1_f60e0e3f1186 | [358] * Environment: production
discourse_1_f60e0e3f1186 | [358] * Process workers: 4
discourse_1_f60e0e3f1186 | [358] * Preloading application
discourse_1_f60e0e3f1186 | [358] * Listening on tcp://0.0.0.0:3000
discourse_1_f60e0e3f1186 | [358] * Daemonizing...
docker-compose-discourse_discourse_1_f60e0e3f1186 exited with code 0

Es extraño que haya argumentos, instrucciones y variables de entorno para estas cosas, pero que en realidad no se respeten. Es difícil saber en qué debo confiar.

¿Quieres un entorno de producción o un entorno de desarrollo?

¿Por qué no puedo ejecutar un entorno de producción y usarlo para desarrollo? ¿Y qué hace Sidekiq? ¿Debería ejecutarse solo para iniciar la aplicación? Por ejemplo, tengo otro contenedor (con la misma base) con un comando de inicio:

bundle exec sidekiq

Y depende del contenedor principal de Discourse (migrando la base de datos, precompilando recursos estáticos, etc.). Todo parece funcionar, pero no hay aplicación web.

Estoy dispuesto a dedicar mucho (más) tiempo a esto, siempre que no haya empezado nada todavía, pero necesito una solución que no requiera que instale una base de datos en mi servidor. Con los contenedores, no deberíamos tener que hacer eso. Y, una vez más, la aplicación de compose aquí GitHub - vsoch/discourse-compose: docker-compose with discourse · GitHub parece estar funcionando (no hay errores en ningún registro), pero no hay ninguna aplicación.

Porque almacena en caché y precompila una serie de cosas que, básicamente, hacen imposible realizar el desarrollo.

La Install Discourse for development using Docker que enlacé arriba hace exactamente eso.

Sidekiq encola y procesa trabajos para su procesamiento posterior.

¿Qué me estoy perdiendo? El comando --init se ejecuta en el host:

Tienes razón, pero supongamos que de todos modos estoy haciendo la precompilación (¡tarda un buen rato!) y quiero iniciar el servidor. ¿Por qué no funciona?

De acuerdo, me rendí y ejecuté el comando --init. Puedo confirmar que el contenedor está en ejecución:

CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS                                                                                            NAMES
d2254e1374f5        discourse/discourse_dev:release   "/sbin/boot"        24 minutes ago      Up 24 minutes       0.0.0.0:1080->1080/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:9292->9292/tcp, 0.0.0.0:9405->9405/tcp   discourse_dev

Sin embargo, no veo ningún registro de él en ningún puerto. He probado con dos navegadores, localhost, 127.0.0.1 y 0.0.0.0, pero no hay ninguna aplicación web. El error es ERR_CONNECTION_RESET. No veo nada en iptables que pueda bloquear esto:

Chain DOCKER (3 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:9405
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:9292
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:3000
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:socks

Actualización del 10 de julio de 2019

Gracias a todos por su ayuda: el problema era necesario ejecutar ese comando “unicorn”, y ahora tengo todo funcionando. También tuve que ejecutar rake admin:create en el comando de inicio, de lo contrario solicita una confirmación por correo electrónico (repositorio completo aquí). discourse_dev también funciona.