Cambio config SMTP en Discourse


#1

Relacionado con la migración del servicio de correo a GSuite, sería necesario modificar la configuración de Discourse para que utilice el nuevo entorno.

Cambios aplicados

  1. Antes de nada, backup de la DB y de Discourse:
# Desde el admin web forzamos backup de config: https://comunidad.es.python.org/admin/backups
$ /var/discourse/shared/standalone/backups/default/python-espana-2020-05-28-033049-v20181210122522.tar.gz

# Dump en caliente de la db
$ docker exec -it app bash 
(container) $ sudo -u postgres pg_dump discourse > /shared/backups/discourse-dump_2020-05-28.sql
  1. Dejo la nueva config preparada, pero no hago rebuild del container:

/var/discourse/containers/app.yml

...
env:
  ...

  DISCOURSE_DEVELOPER_EMAILS: 'pablogsal@gmail.com'

  DISCOURSE_SMTP_ADDRESS: msa.jcea.es
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: discourse@es.python.org
  DISCOURSE_SMTP_PASSWORD: xxxxxxxxxxxxxxxxxxx
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)

  LETSENCRYPT_ACCOUNT_EMAIL: pablogsal@gmail.com

a:

  DISCOURSE_DEVELOPER_EMAILS: 'it@es.python.org'
  DISCOURSE_SMTP_ADDRESS: smtp-relay.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: discourse@es.python.org
  DISCOURSE_SMTP_PASSWORD: xxxxxxxxxxxxxxxxxxxxxx
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)

  LETSENCRYPT_ACCOUNT_EMAIL: it@es.python.org
  1. Reinicio container sin rebuild
$ /var/www/discourse/launcher stop app
$ /var/www/discourse/launcher start app

y la config en el container sigue siendo la misma, los env siguen siendo los mismo, tiene todo el sentido del mundo, los env se pasan en el momento de crear el container.

Se podrían pachear en caliente antes del entrypoint, pero es muy marrano

  1. Toca hacer rebuild!

Me acongoja un poco el rebuild y perder el container actual.

Investigo un poco y veo más fácil duplicar la definción del container app a new, así si algo va mal tenemos un rollback fácil.

$ cp /var/discourse/containers/app.yml /var/discourse/containers/new.yml 

# el launcher preparado busca una imagen con el nombre del container, tageo la latest de `app` como `new`
$ docker tag local_discourse/app:latest local_discourse/new:latest

# intento arrancar new para que haga el init (petará al arrancar porque tcp#80 y tcp#443 estan asignados a `app`)
$ /var/discourse/launcher start new

# cuando el build acaba bien paro `app` y arrancamos `new` :crossingfingers:
$ /var/discourse/launcher stop new 
$ /var/discourse/launcher start new

Lo validamos y todo funciona!