sexyberry
sexyberry

Reputation: 61

how to create multiple wordpress sites on docker

i have created one wordpress site using docker. to open it i need to open browser in got to localhost:8000. But if i want to make multiple wordpress sites how and where and what i need to configure to reach every each of them seperatly, becouse i cant get to them using only the same link. i am noob at docker.

i have created .yaml file from tutorial in youtube

version: '3'

  # Database
services:
  db:
    image: mysql:5.7
    platform: linux/amd64
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password 
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    restart: always
    volumes: ['./:/var/www/html']
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    networks:
      - wpsite
networks:
  wpsite:
volumes:
  db_data:

and then i run the dockeer command

docker-compose up -d which made all wordpress files

to open it i need to open link localhost:8000

how do i open another wordpress site? becouse i cant open them both with the same link.

Upvotes: 5

Views: 3591

Answers (1)

Martin Dendis
Martin Dendis

Reputation: 623

If you want to be able to access multiple services then just assign them different ports.

In your example you configured wordpress to be exposed on port 8000 using:

ports:
  - '8000:80'

So just assign to another wordpress instance(s) different port(s) (eg 8001, 8002, ...) using:

ports:
  - '8001:80'

Example docker-compose.yaml

version: '3'

services:
  db:
    image: mysql:5.7
    platform: linux/amd64
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress-site1
      MYSQL_USER: wordpress-site1
      MYSQL_PASSWORD: wordpress-site1
    networks:
      - wpsite

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password 
    networks:
      - wpsite

  wordpress-site1: # Wordpress site 1
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80' # This site will be accessible on localhost:8000
    restart: always
    volumes: ['./site-1:/var/www/html'] # Set different path on host
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress-site1
      WORDPRESS_DB_USER: wordpress-site1
      WORDPRESS_DB_PASSWORD: wordpress-site1
    networks:
      - wpsite
  wordpress-site2: # Wordpress site 2
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8001:80' # This site will be accessible on localhost:8001
    restart: always
    volumes: ['./site-2:/var/www/html'] # Set different path on host
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress-site2
      WORDPRESS_DB_USER: wordpress-site2
      WORDPRESS_DB_PASSWORD: wordpress-site2
    networks:
      - wpsite
  # Other wordpress instances

networks:
  wpsite:
volumes:
  db_data:

Don't forget that every wordpress service will need it's own database. You can either define for each wordpress service it's own database service or use single (shared) DB service and create on it multiple databases (one for each wordpress service).

To do so first start up only db and phpmyadmin services using:

$ docker-compose up -d db phpmyadmin

Since PhpMyAdmin is set to be exposed on port 8080 go to http://localhost:8080, log in and create for each wordpress service it's own database and user.

Once done, update WORDPRESS_DB_* env variables (if needed) in docker-compose.yaml to match databases and user credentials you just created and if everything is ok start all wordpress services.

Based on example docker-compose.yaml you should be able to access:

  • wordpress-site1 on hppt://localhost:8000
  • wordpress-site2 on hppt://localhost:8001
  • ...

Upvotes: 3

Related Questions