IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Docker Discussion :

multisites apache avec Docker


Sujet :

Docker

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut multisites apache avec Docker
    Bonjour,

    j'essaye de faire fonctionner 2 sites web (symfony) avec Docker

    /site1
    /site2
    /php/vhosts/vhost.conf
    /php/Dockerfile
    docker-compose.yml

    /php/vhosts/vhost.conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <VirtualHost *:80>
        ServerName domain.tld
        ServerAlias www.domain.tld
    
        DocumentRoot /var/www/site1/public
        DirectoryIndex /index.php
    
        <Directory /var/www/site1/public>
            AllowOverride None
            Order Allow,Deny
            Allow from All
    
            FallbackResource /index.php
        </Directory>
    
        <Directory /var/www/site1/public/bundles>
            DirectoryIndex disabled
            FallbackResource disabled
        </Directory>
        ErrorLog /var/log/apache2/site1.log
        CustomLog /var/log/apache2/site1.log combined
    </VirtualHost>
    
    
    <VirtualHost *:81>
        ServerName domain2.tld
        ServerAlias www.domain2.tld
    
        DocumentRoot /var/www/site2/public
        DirectoryIndex /index.php
    
        <Directory /var/www/site2/public>
            AllowOverride None
            Order Allow,Deny
            Allow from All
    
            FallbackResource /index.php
        </Directory>
    
        <Directory /var/www/site2/public/bundles>
            DirectoryIndex disabled
            FallbackResource disabled
        </Directory>
        ErrorLog /var/log/apache2/site2.log
        CustomLog /var/log/apache2/site2.log combined
    </VirtualHost>

    /php/Dockerfile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    FROM 	php:7.4-apache
    
    # NODE
    RUN apt-get update -yq \
        && apt-get install curl gnupg -yq \
        && curl -sL https://deb.nodesource.com/setup_12.x | bash \
        && apt-get install nodejs -yq
    
    # YARN
    RUN npm install -g yarn
    
    # PHP
    RUN apt-get update && apt-get install -y \
            locales \
            apt-utils \
            git \
            libicu-dev \
            g++ \
            libpng-dev \
            libxml2-dev \
            libxslt-dev \
            libonig-dev \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            libpng-dev \
            zlib1g-dev \
            libxml2-dev \
            libzip-dev \
            graphviz \
        && docker-php-ext-configure gd \
        && docker-php-ext-install -j$(nproc) gd \
        && docker-php-source delete
    
    # composer
    RUN 	php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php && php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer
    
    # extension php
    
    RUN     docker-php-ext-install zip pdo pdo_mysql opcache calendar dom intl mbstring xsl
    RUN     pecl install apcu && docker-php-ext-enable apcu
    
    #
    WORKDIR /var/www
    docker-compose.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    version: '3.9'
    
    services:
    
      www:
        build: php
        container_name: www_docker_symfony
        restart: always
        ports:
          - 8001:80
          - 8002:81
        volumes:
          - ./php/vhosts:/etc/apache2/sites-enabled
          - ./site1:/var/www/site1
          - ./site2:/var/www/site2    
        networks:
          - dev
          
    networks:
      dev:
    j'accède bien au site1 :
    http://localhost:8001

    mais problème, je n'accède pas au site2:
    http://localhost:8002

    pour info:
    - dans le docker desktop est affiché en vert : Running PORT:8001 (8002 n'apparait pas)
    - en ligne de commande, j'accède dans le container, j'ai bien les dossiers : /site1 et /site2
    - en ligne de commande, j'accède dans le container, j'ai bien à la config apache : /etc/apache2/sites-enabled/vhosts.conf

  2. #2
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Bonjour

    Très récemment, j'ai eu le même besoin et j'avais posté ici-même (https://www.developpez.net/forums/d2...eme-container/).

    Au final, j'ai opté pour une solution découplée car, au fil de mes lectures, les meilleures pratiques disent qu'il faut que chaque application (site1 et site2 sont deux applications) ait leur propre fichier de configuration. Pour être clair, j'ai un fichier docker-compose.yml dans /site1 et un autre fichier dans /site2 et je les construits donc de manière différenciée.

    Dans les deux fichiers, j'ai défini un network externe afin que /site1 et /site2 puissent se parler (donc mon cas un fournisseur d'APIs et un consommateur).

    Pour ton cas précis; si tu souhaites rester dans ton schéma, je dirais que l'erreur est au niveau du port 81. Tu utilises FROM php:7.4-apache qui, je pense, n'expose que le seul et unique port 80. Tu fais un mapping dans ton fichier yml pour associer 8081 à 81 mais, je pense, ce dernier port n'est pas exposé par ton Apache d'où souci.

    Bonne journée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    merci pour ta réponse.
    J'ai comme tu l'as proposé, séparé les 2 sites

    docker-compose.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    version: '3.9'
    
    services:
    
      site1:
        build: php
        container_name: www_docker_symfony_site1
        restart: always
        ports:
          - 8001:80
        volumes:
          - ./php/vhosts:/etc/apache2/sites-enabled
          - ./site1:/var/www/site1  
        networks:
          - dev
          
      site2:
        build: php
        container_name: www_docker_symfony_site2
        restart: always
        ports:
          - 8002:80
        volumes:
          - ./php/vhosts:/etc/apache2/sites-enabled
          - ./site2:/var/www/site2    
        networks:
          - dev
    
    networks:
      dev:
    cete fois, j'ai bien :
    RUNNING PORT: 8001
    RUNNING PORT: 8002



    j'accède bien au site1 : http://localhost:8001
    mais le même problème, je n'accède pas au site2: http://localhost:8002

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Tu as vérifié tes logs ? Tu es sûr que les deux containers sont up and running ?

    Note: je suis très nouveau dans mon utilisation de Docker (quelques semaines) et j'ai copié/collé restart: always que j'avais vu ici et là mais en fait, non, avec un always, j'avais mon script entrypoint.sh qui était exécuté sans fin. J'ai adapté vers unless-stopped.

    Note bis: pour Composer; la meilleure façon que j'ai vu est celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COPY --from=composer:latest /usr/bin/composer /usr/bin/composerRUN \
        chmod +x /usr/bin/composer;
    Note ter: tu définis un fichier vhost.conf mais sauf erreur tu ne l'utilises absolument pas.
    Et, du coup, tu devrais avoir un vhost pour site1 et un autre pour site2.

    Comme je te l'ai dit, j'ai un dossier /site1 qui est totalement autonome du dossier /site2 ce qui n'est pas ton cas puisque, dans ton premier message, tu donnes un contenu de vhost.conf qui mixe les deux sites.

    Je pense, mais je ne suis pas expert, qu'il faut vraiment veiller à ne pas coupler les applications. Elles doivent être totalement autonomes. Aussi parce que, pourquoi pas, dans le futur, site1 sera hébergé sur le serveur web A et site2 sur le serveur B et donc, forcément, découplé. Je pense que cela doit rester un maximum la philosophie.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    ah d'accord faut carrement faire 2 fichiers docker-compose
    ce qui m'embete c'est de lancer 2 commandes, donc pour ça tu as fait un .sh ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    c'est résolu. voici la solution pour qui ça intéresse avec 2 sites Symfony + apache.
    il faut un fichier vhosts.conf par site web (merci à cavo789 pour cette indication)

    reste à faire :
    - ajouter mySql et phpmyadmin
    - lancer composer update (pour créer le dossier vendor des sites : site1 et site2)
    - générer les ressources dans public

    ------------------------------------------------------------
    /site1
    /site2
    /php/vhosts/site1/vhosts.conf
    /php/vhosts/site2/vhosts.conf
    /php/Dockerfile
    docker-compose.yml
    ------------------------------------------------------------

    docker-compose.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    version: '3.9'
    
    services:
    
      site1:
        build: php
        container_name: www_docker_symfony_site1
        restart: always
        ports:
          - 8001:80
        volumes:
          - ./php/vhosts/site1:/etc/apache2/sites-enabled
          - ./site1:/var/www/site1 
        networks:
          - dev
          
      site2:
        build: php
        container_name: www_docker_symfony_site2
        restart: always
        ports:
          - 8002:80
        volumes:
          - ./php/vhosts/site2:/etc/apache2/sites-enabled
          - ./site2:/var/www/site2    
        networks:
          - dev
    
    networks:
      dev:
    /php/vhosts/site1/vhosts.conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <VirtualHost *:80>
        ServerName domain.tld
        ServerAlias www.domain.tld
    
        DocumentRoot /var/www/site1/public
        DirectoryIndex /index.php
    
        <Directory /var/www/site1/public>
            AllowOverride None
            Order Allow,Deny
            Allow from All
    
            FallbackResource /index.php
        </Directory>
    
        # uncomment the following lines if you install assets as symlinks
        # or run into problems when compiling LESS/Sass/CoffeeScript assets
        # <Directory /var/www/project>
        #     Options FollowSymlinks
        # </Directory>
    
        # optionally disable the fallback resource for the asset directories
        # which will allow Apache to return a 404 error when files are
        # not found instead of passing the request to Symfony
        <Directory /var/www/site1/public/bundles>
            DirectoryIndex disabled
            FallbackResource disabled
        </Directory>
        ErrorLog /var/log/apache2/site1.log
        CustomLog /var/log/apache2/site1.log combined
    
        # optionally set the value of the environment variables used in the application
        #SetEnv APP_ENV prod
        #SetEnv APP_SECRET <app-secret-id>
        #SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
    </VirtualHost>
    /php/vhosts/site2/vhosts.conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <VirtualHost *:80>
        ServerName domain.tld
        ServerAlias www.domain.tld
    
        DocumentRoot /var/www/site2/public
        DirectoryIndex /index.php
    
        <Directory /var/www/site2/public>
            AllowOverride None
            Order Allow,Deny
            Allow from All
    
            FallbackResource /index.php
        </Directory>
    
        # uncomment the following lines if you install assets as symlinks
        # or run into problems when compiling LESS/Sass/CoffeeScript assets
        # <Directory /var/www/project>
        #     Options FollowSymlinks
        # </Directory>
    
        # optionally disable the fallback resource for the asset directories
        # which will allow Apache to return a 404 error when files are
        # not found instead of passing the request to Symfony
        <Directory /var/www/site2/public/bundles>
            DirectoryIndex disabled
            FallbackResource disabled
        </Directory>
        ErrorLog /var/log/apache2/site2.log
        CustomLog /var/log/apache2/site2.log combined
    
        # optionally set the value of the environment variables used in the application
        #SetEnv APP_ENV prod
        #SetEnv APP_SECRET <app-secret-id>
        #SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
    </VirtualHost>
    /php/Dockerfile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    FROM 	php:7.4-apache
    
    # NODE
    RUN apt-get update -yq \
        && apt-get install curl gnupg -yq \
        && curl -sL https://deb.nodesource.com/setup_12.x | bash \
        && apt-get install nodejs -yq
    
    # YARN
    RUN npm install -g yarn
    
    # PHP
    RUN apt-get update && apt-get install -y \
            locales \
            apt-utils \
            git \
            libicu-dev \
            g++ \
            libpng-dev \
            libxml2-dev \
            libxslt-dev \
            libonig-dev \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            libpng-dev \
            zlib1g-dev \
            libxml2-dev \
            libzip-dev \
            graphviz \
        && docker-php-ext-configure gd \
        && docker-php-ext-install -j$(nproc) gd \
        && docker-php-source delete
    
    # composer
    RUN 	php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php && php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer
    
    # extension php
    
    RUN     docker-php-ext-install zip pdo pdo_mysql opcache calendar dom intl mbstring xsl
    RUN     pecl install apcu && docker-php-ext-enable apcu
    
    #
    WORKDIR /var/www

  7. #7
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Citation Envoyé par krakatoa Voir le message
    ce qui m'embete c'est de lancer 2 commandes, donc pour ça tu as fait un .sh ?
    Oui.

    Dans mon cas, j'ai trois docker-compose (trois sites) et je dois m'assurer d'avoir créé un réseau, deux volumes externes, etc. Donc oui, j'ai un script pour gérer tout ça.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multisite apache avec redirection SSL
    Par Malrod dans le forum Linux
    Réponses: 2
    Dernier message: 22/11/2015, 02h08
  2. Réponses: 3
    Dernier message: 12/02/2006, 05h51
  3. Installation serveur Apache avec PHP
    Par The Wretched dans le forum Apache
    Réponses: 11
    Dernier message: 08/02/2006, 15h36
  4. Serveur Apache avec forum phpbb
    Par hoangeric dans le forum Apache
    Réponses: 4
    Dernier message: 16/11/2005, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo