Installieren Sie WordPress im Unterverzeichnis mit docker-compose und nginx

Lesezeit: 5 Minuten

Ich werde eine Website mit docker-compose erstellen.

Wenn der Benutzer das Stammverzeichnis betritt, wechselt es zur Web-App. Wenn der Benutzer die http://example.com/bloges sollte zu WordPress umleiten.

Dazu habe ich Docker-Compose wie folgt konfiguriert

version: "3"

services:

  nginx:
    image: nginx:latest
    depends_on:
      - web-app
      - wordpress
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80

  mysql:
    image: mysql:5.7.29
    container_name: mysql
    restart: always
    volumes:
      - ./data/mysql/data:/var/lib/mysql

  wordpress:
    depends_on:
      - mysql
    image: wordpress:latest
    ports:
      - 8000:80
    restart: always
    volumes:
     - ./data/blog:/var/www/html/wp-content
     - ./blog/wp-config.php:/var/www/html/wp-config.php

  web-app:
    build: ./app
    depends_on:
      - mysql
    restart: always
    command: npm start
    environment:
      - TZ=UTC
      - NODE_ENV=production

networks:
  default:
    external:
      name: common

Und das ist meine Nginx-Konfiguration

worker_processes auto;
events {
    worker_connections 1024;
}
http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    log_format main '[$time_local] $remote_addr - $request request_time: $request_time';
    access_log /var/log/nginx/access.log main;

    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/javascript application/x$
    #                        make sure gzip does not lose large gzipped js or css files
    #                        see http://blog.leetsoft.com/2007/07/25/nginx-gzip-ssl.html
    gzip_buffers 16 8k;

    server {
        listen 80;
        charset utf-8;

        location /blog/ {
            proxy_set_header  Host               $host;
            proxy_set_header  X-Real-IP          $remote_addr;
            proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;

            proxy_pass http://wordpress;
        }

        location / {
            proxy_http_version 1.1;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_redirect off;
            proxy_pass http://web-app:3000;
        }

    }
} 

Und ich habe die wp-config.php aktualisiert und die Website-URL festgelegt.

define('WP_SITE_URL', 'https://example.com/blog');
define('WP_SITEURL', 'https://example.com/blog');
define('WP_HOME', 'https://example.com/blog');

Allerdings, wenn ich eintrete https://example.com/bloges gibt die zurück ERR_TOO_MANY_REDIRECTS Antwort.

Ich habe viele Artikel durchsucht und einige davon sagen, dass es daran liegt, dass ich Cloudflare verwende. Wie kann ich das obige Problem lösen?

  • Dies ist keine gute Lösung, aber es kann eine Weile helfen, bis Sie die Ursache gefunden haben: remove_action( 'template_redirect', 'redirect_canonical' ); Fügen Sie diese Zeile der hinzu functions.php Datei.

    – Iwan Schatsky

    5. Juni 2021 um 14:03 Uhr

Benutzeravatar von nemoxi
Nemoxi

In deiner config.php Du machst das :

// Define the website URL
define('WP_SITEURL', getenv_docker('WORDPRESS_SITEURL', 'https://example.com/blog'));

// Define the website Home page
define('WP_HOME',    getenv_docker('WORDPRESS_HOME', 'https://example.com/blog'));

// Rewrite your access URL to the admin page
$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']);

Wenn Sie Ihre WordPress-Ressourcen nicht versionieren, verwenden Sie direkt die Docker-Compose-Variablen wie diese, anstatt die zu verwenden config.php Datei :

WORDPRESS_CONFIG_EXTRA: |
   define('WP_HOME','https://example.com/blog');
   define('WP_SITEURL','https://example.com/blog');
   $$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $$_SERVER['REQUEST_URI']);

Und in der Datei docker-compose.yml Sie setzen die folgenden Umgebungsvariablen:

environment:
  ...
  - WORDPRESS_SITEURL="https://example.com/blog"
  - WORDPRESS_HOME="https://example.com/blog"

  • Ich bekomme eine unendliche Umleitungsschleife.

    – Eduardo Cuomo

    9. August um 15:51 Uhr

Zum Initialisieren WordPress in einem Unterverzeichnis wie /blogdu kannst den … benutzen working_dir Attribut.

Der Standard WordPress Bild verwendet /var/www/html wie Wurzelund Sie können zu verschieben /var/www/html/blog an dieser Stelle zu initialisieren.

# ...
  wordpress:
    image: wordpress:apache
    working_dir: /var/www/html/blog
    volumes:
      - ./data/blog:/var/www/html/blog/wp-content
      - ./blog/wp-config.php:/var/www/html/blog/wp-config.php
# ...

Jetzt können Sie zu navigieren http://localhost/blog.

Vollständiges Beispiel

Folgend ist eine vollständige docker-compose.yml Beispiel:

version: '3.1'

x-wordpress: &wordpress
  depends_on:
    - db
  environment:
    WORDPRESS_DB_HOST: db:3306
    WORDPRESS_DB_NAME: wordpress
    WORDPRESS_DB_USER: wordpress
    WORDPRESS_DB_PASSWORD: wordpress
  working_dir: /var/www/html/blog
  volumes:
    - wp_root:/var/www/html/blog
    - ./wp-content/plugins:/var/www/html/blog/wp-content/plugins
    - ./wp-content/themes:/var/www/html/blog/wp-content/themes
    - ./wp-content/uploads:/var/www/html/blog/wp-content/uploads
    - ./wp-content/languages:/var/www/html/blog/wp-content/languages

services:
  # Database
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
      - ./backup/blog.sql:/docker-entrypoint-initdb.d/dump.sql:ro
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    ports:
      - 8080:80
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password

  # WordPress
  wordpress:
    <<: *wordpress
    image: wordpress:apache
    ports:
      - 80:80

  wpcli:
    <<: *wordpress
    image: wordpress:cli

volumes:
  wp_root:
    driver_opts:
      type: tmpfs
      device: tmpfs
  db_data:

Benutzeravatar von Steve Lng C
Steve Lng C

Was bei mir tatsächlich funktioniert hat, ist diese Kombination:

nginx :

upstream test {
    least_conn;
    server test_wordpress_1;
}
server {
    listen 443 ssl;
    server_name slapps.fr;
    #...
    #SSL CONFIG
    #...
    location /test/ {
        #rewrite ^/test/(.*)$ /$1 break; #This didn't work for me 
        proxy_set_header  Host               $host;
        proxy_set_header  X-Real-IP          $remote_addr;
        proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto  $scheme;
        proxy_pass http://test/;

    }
 }

wp-config.php :

define('WP_HOME','https://slapps.fr/test');
define('WP_SITEURL','https://slapps.fr/test');
$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/test/wp-admin/",  $_SERVER['REQUEST_URI']);

Irgendwie kommt folgende config rein docker-compose.yml hat bei mir nicht funktioniert, die $_SERVER würde nicht durchgehen, aber die ersten Defines taten es

WORDPRESS_CONFIG_EXTRA: |
            define( 'WP_HOME', 'https://slapps.fr/test' );
            define( 'WP_SITEURL', 'https://slapps.fr/test' );
            $$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/test/wp-admin/",  $$_SERVER['REQUEST_URI']);

1434950cookie-checkInstallieren Sie WordPress im Unterverzeichnis mit docker-compose und nginx

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy