Docker compose nginx + phpmyadmin samostatné hostitele

0

Otázka

Snažím se nastavit docker prostředí s nginx, php, mysql, phpmyadmin, rád bych vědět, jak mohu nastavit to tak, abych mohl získat přístup k phpmyadmin přes jiný hostname.

Například pro přístup k webu, který chci používat site.com a přístup k phpmyadmin chci použít database.site.com

můj /etc/hosts je nakonfigurován jako je tento

127.0.0.1      localhost example.com database.example.com

Můj docker skladatel vypadá takto

version: '3'
services:
    web:
        image: nginx:alpine
        container_name: nginx
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./repo:/var/www/html"
            - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
        ports:
            - "80:80"
            - "443:443"
        environment:
            - NGINX_HOST=site.com
        networks:
            - my-network
        command: /bin/sh -c "envsubst '$site.com' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        restart: always
        depends_on:
            - php
            - mysql
    php:
        image: bitnami/php-fpm:8.0.10
        container_name: php
        restart: always
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./repo:/var/www/html"
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - "8080:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
        networks:
            - my-network
        restart: always
        depends_on:
            - mysql
    mysql:
        image: mysql:8.0.27
        container_name: mysql
        restart: always
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=database
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_USER=admin
            - MYSQL_PASSWORD=admin
        ports:
            - "8989:3306"
        volumes:
            - "./data/db/mysql:/var/lib/mysql"
networks:
  my-network: null

můj nginx conf vypadá takto

server {
    listen 80;
    server_name example.com;
    root /var/www/html/public;
    ...
    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
      fastcgi_intercept_errors on;
      fastcgi_pass unix:/run/php/php8.0-fpm.sock;
    }
    ...
 }

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;
    root /var/www/html/public;
    ...
    location / {
      if ($args ~* _escaped_fragment_) {
        # Pass to phantom proxy
        proxy_pass http://127.0.0.1:443;
      }
      proxy_redirect off;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Client-Verify SUCCESS;
      proxy_set_header X-SSL-Subject $ssl_client_s_dn;
      proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
      proxy_set_header HTTPS on;
      proxy_buffers 16 4k;
      proxy_buffer_size 2k;
      proxy_pass http://127.0.0.1:433;
    }
    ...
 }

server {
    listen 80;
    server_name database.example.com;
    location / {       
         proxy_pass  http://phpmyadmin:80;
     }
 }
containers docker docker-compose nginx
2021-11-19 12:59:44
1

Nejlepší odpověď

2

Nepoužívejte site.com jako příklad pro to důvod. Změnil jsem všechno example.com

  1. Změnit nastavení portu vazby tak, že nginx je závazné správné porty z vašeho hostitelského počítače 443:443 a 80:80 (místo 9080:80 a 3000:443). Jinak vaše webové žádosti budou muset obsahovat port, např. https://example.com:3000.
  2. Připojte nádoby spolu s společné síti (viz zde).
  3. Aktualizujte svůj nginx config proxy, provoz na phpmyadmin nádoby. To by mělo být něco jako toto:
...
server {
  listen        80;
  server_name   database.example.com;

  location / {
    proxy_pass  http://phpmyadmin;
  }
}
...

To by mělo vyústit v následující kroky:

  • Žádost http://database.example.com řeší se 127.0.0.1.
  • Webový prohlížeč je požadavek na port 80.
  • 127.0.0.1:80 je předán do přístavu 80 ve vašem nginx kontejner.
  • nginx proxy, provoz na http://phpmyadmin, který je schopen vyřešit a připojit se přes docker sítě.

Měli byste být schopni se dostat https://database.example.com a webové stránky pracovat poměrně snadno po tom. Věřím, že https://example.com by měly fungovat dobře, jakmile se opravit váš port vazby. Opravit http://example.com koncový bod, změnit své posluchače z 127.0.0.1:9080 jen 80 v nginx konfigurace.

2021-11-19 19:57:46

Díky moc, změnil jsem port vazby, jak jste naznačil, také jsem vytvořil připojení k síti mezi mé nginx a phpymyadmin nádoby a snažil se pochopit, jak jsem měl můj config nginx.. jaký problém mám teď, když se snaží připojit k example.com a database.example.com je spojení odmítnuto, zatímco připojení k proudu. Co proxy_pass mám nastavit pro můj example.com a proč bych měl nastavit phpmyadmin:3306 jako proxy_pass pro mě database.example.com díky!!!
PhilipCodeX

dobře, to dává smysl, budu se snažit udělat nějaké změny. Také jsem aktualizoval moje odpověď teď s změny jsem udělal, a jak config vypadá teď. neměl proxy být phpmyadmin:8080, protože jsem, že port pro můj phpmyadmin? používám 3306 pro mysql kontejner? Díky
PhilipCodeX

Omlouvám se, myslel jsem port 80 pro phpmyadmin, ne 3306aktualizované odpověď. Pro example.com jsi jen sloužící obsah lokálně v rámci nginx kontejner (/var/www/html/veřejné), takže nemusíte proxy do jiné nádoby. Doufám, že to dává smysl, neváhejte psát některé aktualizované konfigurace a můžu se na to podívat.
kthompso

Další dvě položky, které jsem si všiml. Neměl bys potřebovat root prvek na phpmyadmin konfigurace nginx, že nesedíte obsah z místního kontejneru. A vy byste měli změnit polohu na phpmyadmin z /phpmyadmin k /. Chcete poskytovat obsah z database.example.com ne database.example.com/phpmyadmin.
kthompso

Jo, to dává smysl, jsem aktualizovány moje odpověď znovu. Při pokusu o přístup database.example.com je ke stažení moje /var/www/html/public/index.php soubor ?? Máte nějaké tušení, proč se to stane ?
PhilipCodeX

Zdá se, že je to odpovídající example.com server místo database.example.com? Ujistěte se, že jste bít http://database.example.com (http) a ne https://database.example.com (https).
kthompso

Vypadá to, že tam je nějaký problém s chrome cache, funguje v pohodě na firefox a zatížení phpmyadmin dokonale :) DÍKY!!!!! Teď už jen potřebujeme dostat example.com načíst také.. pořád popularita index stránce na zatížení v firefox, také ;)
PhilipCodeX

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................