ipeos-and-co / docker-spip

Dockerfile permettant de mettre en production un SPIP
GNU General Public License v3.0
5 stars 7 forks source link

Erreur 502 Nginx #6

Closed 1sixunhuit closed 1 year ago

1sixunhuit commented 1 year ago

Bonsoir, Je n'arrive pas à comprendre pourquoi la résolution du nom de domaine me donne une erreur 502, alors que j'ai appliqué la même configuration à divers sites tournant via Docker sur la même machine, et qu'à chaque fois cela fonctionnait (j'avoue avoir suivi des tutos sans grandes connaissances des reverse proxy ni de Docker). Je suppose qu'il y a dans le container de SPIP quelque-chose qui ne va pas, mais je n'arrive pas à comprendre quoi... Sauriez-vous m'aider ?

Merci d'avance, Pierre

Voici le fichier docker-compose.yml :

version: '3'
services:
  db_spip:
    container_name: db_spip
    image: mariadb:10
    restart: always
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 1
      MYSQL_DATABASE: spip
      MYSQL_USER: spip
      MYSQL_PASSWORD: ${SPIP_DB_PASS}
    volumes:
      - ./volumes/mysql:/var/lib/mysql

  spip:
    container_name: spip
    image: ipeos/spip:4.2
    depends_on:
      - db_spip
    volumes:
      - ./volumes/spip-core:/var/www/html/core
      - ./volumes/spip-data:/var/www/html/data
      - ./volumes/spip-img:/var/www/html/IMG
      - ../volumes/plugins:/var/www/html/plugins/
      - ../volumes/plugins-dist/:/var/www/html/plugins-dist
      - ../test/volumes/sql_export/:/var/www/html/tmp/dump
      - ../volumes/config-monter-fichiers-dedans/mes_options.php:/var/www/html/config/mes_options.php
      - ../volumes/squelettes:/var/www/html/squelettes
      - ../volumes/modeles:/var/www/html/modeles
      - ./volumes/htaccess.txt:/var/www/html/.htaccess
      - type: bind
        source: ./volumes_bind
        target: /mnt/data

    restart: always
    environment:
      SPIP_AUTO_INSTALL: 1
      #SPIP_DB_SERVER: 172.19.1.102:3307
      SPIP_DB_SERVER: mysql
      SPIP_DB_HOST: db_spip
      SPIP_DB_NAME: spip
      SPIP_DB_LOGIN: spip
      SPIP_DB_PASS: ${SPIP_DB_PASS}

      SPIP_ADMIN_NAME: ${SPIP_ADMIN_NAME}
      SPIP_ADMIN_LOGIN: ${SPIP_ADMIN_LOGIN}
      SPIP_ADMIN_EMAIL: ${SPIP_ADMIN_EMAIL}
      SPIP_ADMIN_PASS: ${SPIP_ADMIN_PASS}

      SPIP_SITE_ADDRESS: ${SPIP_SITE_ADDRESS}

      PHP_MEMORY_LIMIT: 256M
      PHP_POST_MAX_SIZE: 40M
      PHP_UPLOAD_MAX_FILESIZE: 32M
      PHP_TIMEZONE: ${PHP_TIMEZONE}
    ports:
      - '8095:80'
    networks:
      default:
        ipv4_address: 172.19.1.12

networks:
  default:
    name: nginx-docker
    external: true

Et voilà le fichier (sur la machine hôte, non pas dans le container) /etc/nginx/conf.d/sub.domain.fr.conf (pour nginx) :

server {

    server_name sub.domain.fr;
    location / {

        proxy_pass http://172.19.1.12:8095;
        proxy_buffering off;
        proxy_set_header X-Real-IP $remote_addr;

    }

    listen 443 ssl; # managed by Certbot                                                                                               
    listen [::]:443 ssl; # ajout                                                                                                       
    ssl_certificate /etc/letsencrypt/live/sub.domain.fr/fullchain.pem; # managed by Certbot                                       
    ssl_certificate_key /etc/letsencrypt/live/sub.domain.fr/privkey.pem; # managed by Certbot                                     
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot                                                              
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot                                                                

}server {
    if ($host = sub.domaint.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot                                                                                                             

    listen 80;
    listen [::]:80; # Ajout                                                                                                            

    server_name sub.domain.fr;

    return 404; # managed by Certbot                                                                                                   

    # Enforce https (ajout)                                                                                                            
    return 301 https://$server_name:443$request_uri;

}
psychoz971 commented 1 year ago

Bonjour, Le reverse proxy n'est pas correcte. L'IP à exposer en reverse est le localhost (127.0.0.1) au vu de la configuration du docker-compose.yml. Exemple de remplacement :

server {

    server_name sub.domain.fr;
    location / {

        proxy_pass http://127.0.0.1:8095;
         ...
    }
    ...                                                
}

Je conseille aussi de ne pas exposer le port 8095 à l'extérieur mais uniquement sur le 127.0.0.1 en modifiant le bind du port dans le docker-compose.yml par :


...
ports:
      - 127.0.0.1:8095:80
...
``
1sixunhuit commented 1 year ago

Merci beaucoup ! Ça a résolu les problèmes ! Je vais creuser la documentation de Docker à ces deux niveaux pour les comprendre ;)