Problème de redirection lors de l'installation avec Docker et Traefik

Bonjour à tous,

Je souhaite installer Dolibarr sur un hébergement mutualisé à l’aide d’une stack docker. Cette stack contient :

  • un service dolibarr
  • un service mariadb pour dolibarr
  • un service traefik car j’ai pour objectif un hébergement multisite

Ainsi, j’ai utilisé l’image de Tuxgasy et je l’ai modifié pour l’adapter à mon besoin :

version: "3.7"

services:
  traefik:
    image: traefik:v2.9
    command:
      - --api.insecure=true
      - --providers.docker
      - --entrypoints.web.address=:80
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`MON_IP`) && PathPrefix(`/api`)"
      - "traefik.http.routers.api.service=api@internal"
      - "traefik.http.routers.api.entrypoints=web"

  dolibarr:
    image: tuxgasy/dolibarr:latest
    environment:
      DOLI_DB_HOST: mariadb
      DOLI_DB_USER: dolibarr
      DOLI_DB_PASSWORD_FILE: /run/secrets/mysql_dolibarr_password
      DOLI_DB_NAME: dolibarr
      DOLI_URL_ROOT: 'http://MON_IP/dolibarr'
      PHP_INI_DATE_TIMEZONE: 'Europe/Paris'
    secrets:
      - mysql_dolibarr_password
    volumes:
      - dolibarr_data:/var/documents
      - ./dolibarr.conf:/etc/apache2/sites-available/000-default.conf
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dolibarr.rule=Host(`MON_IP`) && PathPrefix(`/dolibarr`)"
      - "traefik.http.routers.dolibarr.entrypoints=web"
      - "traefik.http.routers.dolibarr.middlewares=dolibarr-strip"
      - "traefik.http.middlewares.dolibarr-strip.stripprefix.prefixes=/dolibarr"
      - "traefik.http.services.dolibarr.loadbalancer.server.port=80"
    depends_on:
      - mariadb
    restart: unless-stopped

  mariadb:
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
      MYSQL_DATABASE: dolibarr
    secrets:
      - mysql_root_password
      - mysql_dolibarr_password
    volumes:
      - mariadb_data:/var/lib/mysql
      - ./update_password.sh:/docker-entrypoint-initdb.d/update_password.sh
    configs:
      - source: init_sql
        target: /docker-entrypoint-initdb.d/init.sql
    restart: unless-stopped

volumes:
  mariadb_data:
  dolibarr_data:

secrets:
  mysql_root_password:
    external: true
  mysql_dolibarr_password:
    external: true

configs:
  init_sql:
    file: /home/init.sql

Le script init.sql contient :

CREATE USER 'dolibarr'@'%' IDENTIFIED BY 'temp_password';

GRANT ALL PRIVILEGES ON dolibarr.* TO 'dolibarr'@'%';

FLUSH PRIVILEGES;

Le script update_password.sh contient :

#!/bin/bash
set -e

# Lire le mot de passe du secret Docker
DOLIBARR_PASSWORD=$(cat /run/secrets/mysql_dolibarr_password)

# Mettre à jour le mot de passe de l'utilisateur Dolibarr
mariadb -uroot -p"$MYSQL_ROOT_PASSWORD" -e "ALTER USER 'dolibarr'@'%' IDENTIFIED BY '$DOLIBARR_PASSWORD'; FLUSH PRIVILEGES;"

Lorsque je vais sur http://MON_IP/dolibarr je tombe bien sur la page de connexion de dolibarr. Je peux également accéder à la page de réinitialisation du mot de passe et de support.

Cependant, lorsque je rentre les identifiants de connexion et que je clique sur connecter, je suis redirigé vers : http://MON_IP/index.php?mainmenu=home
(notez qu’il n’y a plus le /dolibarr ) . J’ai essayé de rentrer manuellement le /dolibarr mais cela me renvoie à la page de connexion

Or il me semble avoir bien configuré la variable DOLI_URL_ROOT dans mon docker-compose.yml

J’ai regardé sur différents sites mais je ne trouve pas de solution à mon problème, si quelqu’un à une solution je suis preneur, merci d’avance :smiley:

ca m’intéresse

Bonjour,

cela fait longtemps que je n’utilise plus traefik, mais ce comportement me semble être du à stripprefix
Essayez en supprimant les deux lignes de votre config

Merci de ta réponse,

Cependant, lorsque je fait ça je trouve la page « 404 not found » :frowning:

Pour plus de contexte voici ma configuration d’apache :

 <VirtualHost *:80>
    ServerAdmin MON_MAIL
    ServerName MON_IP
    DocumentRoot /var/www/html

    Alias /dolibarr /var/www/html/htdocs

    <Directory /var/www/html/htdocs>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/dolibarr_error.log
    CustomLog ${APACHE_LOG_DIR}/dolibarr_access.log combined
</VirtualHost>

Vous avez essayé une config plus simple ?
Faire pointer directement DocumentRoot dans /var/www/html/htdocs et supprimer tous vos réglages de prefixes que vous ajoutez puis supprimez ainsi que l’Alias dans la config apache.

Je viens d’essayé, le problème persiste, j’avoue que je suis un peu bloqué, je vais envisager une réinstallation complète je pense

Dans la configuration de votre alias Apache, le dossier

n’existe pas. ‹ htdocs › est un lien symbolique situe au meme niveau que ‹ html › et pointe vers lui.

La configuration, au choix, devrait etre celle-ci:

Alias /dolibarr /var/www/html

ou

Alias /dolibarr /var/www/htdocs

De plus, comme l’a precise @Eve63, il ne faut PAS utiliser le middleware strip-prefix dans votre cas car la requete
http://MON_IP/dolibarr
serait recue par le serveur Apache comme une requete vers

/

au lieu d’une requete vers

/dolibarr

et ne passerait donc plus par votre alias.

En consequence de quoi, le l’action du formulaire de login renvoye serait

<form id="login" name="login" method="post"
action="/index.php?mainmenu=home">

et vous renverrait a

http://MON_IP/index.php

au lieu d’etre

<form id="login" name="login" method="post"
action="/dolibarr/index.php?mainmenu=home">

qui vous renverrait a

http://MON_IP/dolibarr/index.php