Errors in passbolt docker environment

Checklist
I have read intro post: About the Installation Issues category
I have read the tutorials, help and searched for similar issues
I provide relevant information about my server (component names and versions, etc.)
I provide a copy of my logs and healthcheck
I describe the steps I have taken to trouble shoot the problem
I describe the steps on how to reproduce the issue

Hi everyone,

I’m running Passbolt in a docker swarm and there are some issues I can’t resolve. I have read a lot of tutorials and topics but I can’t find anything to solve my problems.

Passbolt can’t send emails, nothing in this article solve that. ( Why are my emails not being sent? | Passbolt documentation.)

Troubleshooting the installation I’ve realized there are some errors and I guess this is why mail system doesn’t work. This is the healthcheck result, sorry, it’s in spanish buy I think you can understand which points are failing.

-------------------------------------------------------------------------------
 Healthcheck shell.....
-------------------------------------------------------------------------------

 Entorno

 [PASS] Versión de PHP 8.2.20.
 [PASS] La versión de PHP es 8.1 o superior.
 [PASS] PCRE compilado con soporte Unicode.
 [PASS] La extensión Mbstring está instalada.
 [PASS] La extensión Intl está instalada.
 [PASS] La extensión GD o Imagick está instalada.
 [PASS] El directorio temporal y su contenido tienen permisos de escritura y no son ejecutables.
 [PASS] El directorio de logs y su contenido tienen permisos de escritura.

 Archivos de configuración

 [PASS] El archivo de configuración de la aplicación está presente
 [WARN] Falta el archivo de configuración de Passbolt en /etc/passbolt/
 [HELP] Copiar /etc/passbolt/passbolt.default.php a /etc/passbolt/passbolt.php
 [HELP] El archivo de configuración de Passbolt no es necesario si Passbolt está configurado con variables de entorno

 Configuración del núcleo

 [PASS] La caché está funcionando.
 [PASS] Modo de depuración desactivado.
 [PASS] Valor único establecido para security.salt
 [PASS] La URL base completa se ha establecido a https://bolt.montserrat.es
 [PASS] Validación de App.fullBaseUrl OK.
 [PASS] /healthcheck/status es accesible.

 Certificado SSL

 [PASS] El certificado de pares SSL valida.
 [PASS] El nombre de host coincide con el certificado SSL.
 [PASS] No se utiliza un certificado autofirmado.

 Configuración SMTP

 [PASS] El plugin SMTP Settings está activado.
 [FAIL] Error en la configuración SMTP: App\Utility\OpenPGP\Backends\Gnupg::setDecryptKeyFromFingerprint(): Argument #1 ($fingerprint) must be of type string, null given, called in /usr/share/php/passbolt/plugins/PassboltCe/SmtpSettings/src/Service/SmtpSettingsGetSettingsInDbService.php on line 109
 [WARN] El origen de los ajustes SMTP es: sin definir.
 [HELP] Se recomienda establecer la configuración SMTP en la base de datos a través de la sección de administración.
 [WARN] Los endpoints del plugin SMTP Settings están activados.
 [HELP] Se recomienda desactivar los endpoints del plugin.
 [HELP] Establezca la variable de entorno PASSBOLT_SECURITY_SMTP_SETTINGS_ENDPOINTS_DISABLED a true.
 [HELP] O establezca passbolt.security.smtpSettings.endpointsDisabled a true en /etc/passbolt/passbolt.php.
 [PASS] Ninguna configuración SSL personalizada para el servidor SMTP.

 Autenticación JWT

[PASS] El plugin JWT Authentication está activado.
 [FAIL] El directorio /etc/passbolt/jwt/ no debería tener permisos de escritura.
 [HELP] You can try:
 [HELP] sudo chown -Rf root:www-data /etc/passbolt/jwt/
 [HELP] sudo chmod 750 /etc/passbolt/jwt/
 [HELP] sudo chmod 640 /etc/passbolt/jwt/jwt.key
 [HELP] sudo chmod 640 /etc/passbolt/jwt/jwt.pem
 [PASS] Se ha encontrado un par de claves JWT válido.

 Configuración GPG

 [PASS] El módulo PHP GPG está instalado y cargado.
 [PASS] La variable de entorno GNUPGHOME está configurada a /var/lib/passbolt/.gnupg.
 [PASS] El directorio /var/lib/passbolt/.gnupg que contiene el llavero tiene permisos de escritura para el usuario del servidor web.
 [FAIL] La clave OpenPGP del servidor no está configurada.
 [HELP] Cree una clave, expórterla y añada la huella digital a /etc/passbolt/passbolt.php
 [HELP] Vea https://www.passbolt.com/help/tech/install#toc_gpg
 [PASS] El archivo de clave pública está definido en /etc/passbolt/passbolt.php y es legible.
 [PASS] El archivo de la clave privada está definido en /etc/passbolt/passbolt.php y es legible.
 [FAIL] La huella digital de la clave del servidor no coincide con la definida en /etc/passbolt/passbolt.php.
 [HELP] Compruebe la huella digital de la clave, ejemplo:
 [HELP] sudo su -s /bin/bash -c "gpg --list-keys --fingerprint --home /var/lib/passbolt/.gnupg" www-data | grep -i -B 2 'SERVER_KEY_EMAIL'
 [HELP] SERVER_KEY_EMAIL: El correo electrónico que utilizó cuando generó la clave del servidor.
 [HELP] Vea https://www.passbolt.com/help/tech/install#toc_gpg
 [FAIL] La clave pública del servidor definida en /etc/passbolt/passbolt.php (o en las variables de entorno) no está en el anillo de claves
 [HELP] Importe la clave privada del servidor en el anillo de claves del usuario del servidor web.
 [HELP] puedes probar:
 [HELP] sudo su -s /bin/bash -c "gpg --home /var/lib/passbolt/.gnupg --import /etc/passbolt/gpg/serverkey_private.asc" www-data
 [FAIL] La clave del servidor no tiene un identificador de correo electrónico válido.
 [HELP] Edit or generate another key with a valid email id.
 [FAIL] La clave privada no se puede utilizar para descifrar un mensaje
 [FAIL] La clave privada no puede utilizarse para descifrar y verificar un mensaje
 [FAIL] La clave pública no puede utilizarse para verificar una firma.

 Configuración de la aplicación

 [PASS] Usando la última versión de Passbolt (4.9.1).
 [FAIL] Passbolt no está configurado para forzar el uso del SSL.
 [HELP] Establezca passbolt.ssl.force a true en /etc/passbolt/passbolt.php.
 [PASS] App.fullBaseUrl está configurado en HTTPS.
 [PASS] Los endpoints de la API de Selenium están desactivados.
 [PASS] Se le indica a los robots del motor de búsqueda que no indexen el contenido.
 [INFO] El plugin del auto-registro está activado.
 [INFO] El registro está cerrado, sólo los administradores pueden añadir usuarios.
 [PASS] La configuración pública de auto-registro obsoleta no se encontró en /etc/passbolt/passbolt.php.
 [WARN] La comprobación de disponibilidad del host está desactivada.
 [HELP] Asegúrese de que esta instancia no esté disponible públicamente en Internet.
 [HELP] O establezca la variable de entorno PASSBOLT_EMAIL_VALIDATE_MX a true.
 [HELP] O establezca passbolt.email.validate.mx a true en /etc/passbolt/passbolt.php.
 [PASS] Usando la versión compilada de la aplicación JavaScript.
 [WARN] Algunas notificaciones de correo electrónico están desactivadas por el administrador.
 [PASS] El esquema de base de datos está actualizado.

 Base de datos

 [PASS] La aplicación es capaz de conectarse a la base de datos
 [PASS] 31 tablas encontradas.
 [PASS] Algunos contenidos por defecto están presentes.

 [FAIL] 10 error(s) found. Hang in there!

The important line for me is this one:

[WARN] El origen de los ajustes SMTP es: sin definir.

I’m using environment variables configuration to start the system and I guess it’s saved in the database when I make anty change. I can see the config in the admin webpage, but I don’t know if it’s applying the changes I’m making. For example, if I change the locale in the admin page, nothing happens.

Continuing with the errors.
If we read the SMTP Config error:

Error en la configuración SMTP: App\Utility\OpenPGP\Backends\Gnupg::setDecryptKeyFromFingerprint(): Argument #1 ($fingerprint) must be of type string, null given, called in /usr/share/php/passbolt/plugins/PassboltCe/SmtpSettings/src/Service/SmtpSettingsGetSettingsInDbService.php on line 109

This error is because the fingerprint variable is null and I think it’s related with the GPG config errors:

[FAIL] La clave OpenPGP del servidor no está configurada.

Let’s analyze this erros:

 [FAIL] La clave pública del servidor definida en /etc/passbolt/passbolt.php (o en las variables de entorno) no está en el anillo de claves
 [HELP] Importe la clave privada del servidor en el anillo de claves del usuario del servidor web.
 [HELP] puedes probar:
 [HELP] sudo su -s /bin/bash -c "gpg --home /var/lib/passbolt/.gnupg --import /etc/passbolt/gpg/serverkey_private.asc" www-data
 [FAIL] La clave del servidor no tiene un identificador de correo electrónico válido.
 [HELP] Edit or generate another key with a valid email id.
 [FAIL] La clave privada no se puede utilizar para descifrar un mensaje
 [FAIL] La clave privada no puede utilizarse para descifrar y verificar un mensaje
 [FAIL] La clave pública no puede utilizarse para verificar una firma.

There is no /etc/passbolt/passbolt.php file, it’s all in the environment variables. It’s only the passbolt.default.php file.
When I list the keyrings, I’m able to see them, but the server email isn’t correct and I don’t know how to change it.
Maybe this the original errors, I don’t know…

www-data@975cdf15b0f1:/usr/share/php/passbolt$ gpg --list-keys
/var/lib/passbolt/.gnupg/pubring.kbx
------------------------------------
pub   rsa3072 2024-09-12 [SC]
      16816xxxxxxxxxxxxxxxxxxxx8A7486211xxxxxx
uid           [ultimate] Passbolt default user <passbolt@yourdomain.com>
sub   rsa3072 2024-09-12 [E]

pub   rsa3072 2024-09-12 [SC]
      CC7372xxxxxxxxxxxxxxxxxxxxCC62C806xxxxxx
uid           [ unknown] Fernando Surname<fer*****@**********.es>
sub   rsa3072 2024-09-12 [E]

I haven’t found how to change the email or how to set it in an environment variable.

I’ve running other passbolt intallations with docker and I didn’t have this problems. Maybe it’s the swarm?

I’m in a dead end.
Thanks for your time.
Kind Regards,

Hi @ferpilla and welcome to the forum!
First, for a cleaner healthcheck, you should read this article. Maybe some of the errors shown are simply because you are not setting your environment variables in the terminal:

Could you share your environment and docker-compose variables to check what might be wrong? Please hide all sensitive data.

Also, here are the environment variables if you want to check them. All EMAIL_* variables are the ones you need to configure SMTP via environment variables instead of the database:

1 Like

Hi @Termindiego25, thanks!

Now the healthchek looks differrent :sweat_smile:, I didn’t retrieve the server key fingerprint.

-------------------------------------------------------------------------------
 Healthcheck shell
-------------------------------------------------------------------------------

 Entorno

 [PASS] Versión de PHP 8.2.20.
 [PASS] La versión de PHP es 8.1 o superior.
 [PASS] PCRE compilado con soporte Unicode.
 [PASS] La extensión Mbstring está instalada.
 [PASS] La extensión Intl está instalada.
 [PASS] La extensión GD o Imagick está instalada.
 [PASS] El directorio temporal y su contenido tienen permisos de escritura y no son ejecutables.
 [PASS] El directorio de logs y su contenido tienen permisos de escritura.

 Archivos de configuración

 [PASS] El archivo de configuración de la aplicación está presente
 [WARN] Falta el archivo de configuración de Passbolt en /etc/passbolt/
 [HELP] Copiar /etc/passbolt/passbolt.default.php a /etc/passbolt/passbolt.php
 [HELP] El archivo de configuración de Passbolt no es necesario si Passbolt está configurado con variables de entorno

 Configuración del núcleo

 [PASS] La caché está funcionando.
 [PASS] Modo de depuración desactivado.
 [PASS] Valor único establecido para security.salt
 [PASS] La URL base completa se ha establecido a https://bolt.montserrat.es
 [PASS] Validación de App.fullBaseUrl OK.
 [PASS] /healthcheck/status es accesible.

 Certificado SSL

 [PASS] El certificado de pares SSL valida.
 [PASS] El nombre de host coincide con el certificado SSL.
 [PASS] No se utiliza un certificado autofirmado.

 Configuración SMTP

 [PASS] El plugin SMTP Settings está activado.
 [PASS] Configuración SMTP coherente. Puede enviar un correo electrónico de prueba para validarlos.
 [PASS] El origen de los ajustes SMTP es: base de datos.
 [WARN] Los endpoints del plugin SMTP Settings están activados.
 [HELP] Se recomienda desactivar los endpoints del plugin.
 [HELP] Establezca la variable de entorno PASSBOLT_SECURITY_SMTP_SETTINGS_ENDPOINTS_DISABLED a true.
 [HELP] O establezca passbolt.security.smtpSettings.endpointsDisabled a true en /etc/passbolt/passbolt.php.
 [PASS] Ninguna configuración SSL personalizada para el servidor SMTP.

 Autenticación JWT

 [PASS] El plugin JWT Authentication está activado.
 [FAIL] El directorio /etc/passbolt/jwt/ no debería tener permisos de escritura.
 [HELP] You can try:
 [HELP] sudo chown -Rf root:www-data /etc/passbolt/jwt/
 [HELP] sudo chmod 750 /etc/passbolt/jwt/
 [HELP] sudo chmod 640 /etc/passbolt/jwt/jwt.key
 [HELP] sudo chmod 640 /etc/passbolt/jwt/jwt.pem
 [PASS] Se ha encontrado un par de claves JWT válido.

 Configuración GPG

 [PASS] El módulo PHP GPG está instalado y cargado.
 [PASS] La variable de entorno GNUPGHOME está configurada a /var/lib/passbolt/.gnupg.
 [PASS] El directorio /var/lib/passbolt/.gnupg que contiene el llavero tiene permisos de escritura para el usuario del servidor web.
 [PASS] La clave OpenPGP del servidor no es la por defecto.
 [PASS] El archivo de clave pública está definido en /etc/passbolt/passbolt.php y es legible.
 [PASS] El archivo de la clave privada está definido en /etc/passbolt/passbolt.php y es legible.
 [PASS] La huella digital de la clave del servidor coincide con la definida en /etc/passbolt/passbolt.php.
 [PASS] La clave pública del servidor definida en /etc/passbolt/passbolt.php (o en las variables de entorno) está en el anillo de claves.
 [PASS] Hay un identificador de correo electrónico válido definido para la clave del servidor.
 [PASS] La clave pública puede utilizarse para cifrar un mensaje.
 [PASS] La clave privada puede utilizarse para firmar un mensaje.
 [PASS] Las claves públicas y privadas pueden utilizarse para cifrar y firmar un mensaje.
 [PASS] La clave privada puede utilizarse para descifrar un mensaje.
 [PASS] La clave privada puede utilizarse para descifrar y verificar un mensaje.
 [PASS] La clave pública puede utilizarse para verificar una firma.
 [PASS] El formato de clave pública del servidor es compatible con Gopengpg.
 [PASS] El formato de clave privada del servidor es compatible con Gopengpg.

 Configuración de la aplicación

 [PASS] Usando la última versión de Passbolt (4.9.1).
 [FAIL] Passbolt no está configurado para forzar el uso del SSL.
 [HELP] Establezca passbolt.ssl.force a true en /etc/passbolt/passbolt.php.
 [PASS] App.fullBaseUrl está configurado en HTTPS.
 [PASS] Los endpoints de la API de Selenium están desactivados.
 [PASS] Se le indica a los robots del motor de búsqueda que no indexen el contenido.
 [INFO] El plugin del auto-registro está activado.
 [INFO] El registro está cerrado, sólo los administradores pueden añadir usuarios.
 [PASS] La configuración pública de auto-registro obsoleta no se encontró en /etc/passbolt/passbolt.php.
 [WARN] La comprobación de disponibilidad del host está desactivada.
 [HELP] Asegúrese de que esta instancia no esté disponible públicamente en Internet.
 [HELP] O establezca la variable de entorno PASSBOLT_EMAIL_VALIDATE_MX a true.
 [HELP] O establezca passbolt.email.validate.mx a true en /etc/passbolt/passbolt.php.
 [PASS] Usando la versión compilada de la aplicación JavaScript.
 [WARN] Algunas notificaciones de correo electrónico están desactivadas por el administrador.
 [PASS] El esquema de base de datos está actualizado.

 Base de datos

 [PASS] La aplicación es capaz de conectarse a la base de datos
 [PASS] 31 tablas encontradas.
 [PASS] Algunos contenidos por defecto están presentes.

 [FAIL] 2 error(s) found. Hang in there!

Here is my docker compose file for the passbolt service, you can see all the environment variables.

version: '3.9'
services:
  db:
    image: mariadb:10.11
    networks:
      - bolt_net
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "true"
      MYSQL_DATABASE: "passbolt"
      MYSQL_USER: "passbolt"
      MYSQL_PASSWORD: "Password"
    volumes:
      - database_volume:/var/lib/mysql

  passbolt:
    image: passbolt/passbolt:4.9.1-1-ce
    networks:
      - traefik_net
      - bolt_net
    depends_on:
      - db
    deploy:
      labels:
        - traefik.enable=true
        - traefik.docker.network=traefik_net
        - traefik.http.routers.passbolt-http.rule=Host(`sub.domain.es`)
        - traefik.http.routers.passbolt-http.service=passbolt
        - traefik.http.routers.passbolt-http.entrypoints=web
        - traefik.http.routers.passbolt-http.middlewares=SslHeader@file
        - traefik.http.routers.passbolt-http.middlewares=https-redirect
        - traefik.http.routers.passbolt-https.middlewares=SslHeader@file
        - traefik.http.routers.passbolt-https.entrypoints=websecure
        - traefik.http.routers.passbolt-https.rule=Host(`sub.domain.es`)
        - traefik.http.routers.passbolt-https.tls=true
        - traefik.http.routers.passbolt-https.tls.certresolver=myresolver
        - traefik.http.services.passbolt.loadbalancer.server.port=80
    environment:
      APP_FULL_BASE_URL: https://sub.domain.es
      DATASOURCES_DEFAULT_HOST: "db"
      DATASOURCES_DEFAULT_USERNAME: "passbolt"
      DATASOURCES_DEFAULT_PASSWORD: "Password"
      DATASOURCES_DEFAULT_DATABASE: "passbolt"
      APP_DEFAULT_LOCALE: "es_ES"
      EMAIL_DEFAULT_FROM_NAME: "No reply - Our company"
      EMAIL_DEFAULT_FROM: "no-reply@domain.es"
      EMAIL_TRANSPORT_DEFAULT_HOST: "smtp.office365.com"
      EMAIL_TRANSPORT_DEFAULT_PORT: "587"
      EMAIL_TRANSPORT_DEFAULT_USERNAME: "user@domain.es"
      EMAIL_TRANSPORT_DEFAULT_PASSWORD: "Password"
      EMAIL_TRANSPORT_DEFAULT_TLS: "true"
    volumes:
      - gpg_volume:/etc/passbolt/gpg
      - jwt_volume:/etc/passbolt/jwt
    command: ["/usr/bin/wait-for.sh", "-t", "0", "db:3306", "--", "/docker-entrypoint.sh"]

networks:
  traefik_net:
    external: true
  bolt_net:

volumes:
  database_volume:
  gpg_volume:
  jwt_volume:

I think I’m not missing any important environment variable. The username I’m setting for mail, logs in normally using any browser.

Now healthcheck looks better, without all of those fails shown because the environment variables where not used.
I see you are using O365. Have you used an application password instead of the login password?

No, I use login and password to log in.

You can check this article. It might solve your problem:

Yes, that article solved the problem. Thanks!!

I don’t know where to send this, but I think in the article the platform addresses you when you get an error testing the mail server configuration (Why are my emails not being sent? | Passbolt documentation.) should be linked in reason 5 that article you’ve post, or the parent ( Configure your email server settings | Passbolt documentation.)

1 Like