Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split DB and WP service declarations into a separate docker-compose file #41

Closed
Darksoulsong opened this issue Oct 25, 2019 · 2 comments

Comments

@Darksoulsong
Copy link

This is not a bug, and I know this is not quite the place to ask for it, but I'd like to know your thoughts about something:

I have your build up and running, thanks to your help the other day.

I got this idea to create a separate directory for each of the WP websites and database, because it makes sense to have a separate container for each website. And I'd like to share the same db service between them.

But I'm not sure about how do I'd handle this, or how can I reference a db service that is declared in the db dir into "blog1" and "blog2"directories, for example. Can that be done? If so, how? And does this makes sense, that is, to share the same db service between websites, if the target is to be more efficient on the server resources (my VPS is limited to 2gb ram)?

Any help would be awesome!

This is what I have ATM:

    .
    ├── nginx-proxy
    │   └── docker-compose.yml
    └── blogs
        └── docker-compose.yml

docker-compose.yml

    version: "3"
    
    services:
      db:
        container_name: ${CONTAINER_DB_NAME}
        image: mariadb:latest
        restart: unless-stopped
        volumes:
          - ${DB_PATH}:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    
      wordpress1:
        depends_on:
          - db
        container_name: ${CONTAINER_WP_NAME1}
        image: wordpress:latest
        restart: unless-stopped
        volumes:
          - ${WP_CORE}:/var/www/html
          - ${WP_CONTENT}:/var/www/html/wp-content
          - ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
        environment:
          WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME1}:3306
          WORDPRESS_DB_NAME: ${MYSQL_DATABASE1}
          WORDPRESS_DB_USER: ${MYSQL_USER1}
          WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD1}
          WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX1}
          VIRTUAL_HOST: ${DOMAINS1}
          LETSENCRYPT_HOST: ${DOMAINS1}
          LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL1}
        logging:
          options:
            max-size: ${LOGGING_OPTIONS_MAX_SIZE1:-200k}
    
      wordpress2:
        depends_on:
          - db
        container_name: ${CONTAINER_WP_NAME2}
        image: wordpress:latest
        restart: unless-stopped
        volumes:
          - ${WP_CORE}:/var/www/html
          - ${WP_CONTENT}:/var/www/html/wp-content
          - ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
        environment:
          WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME2}:3306
          WORDPRESS_DB_NAME: ${MYSQL_DATABASE2}
          WORDPRESS_DB_USER: ${MYSQL_USER2}
          WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD2}
          WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX2}
          VIRTUAL_HOST: ${DOMAINS2}
          LETSENCRYPT_HOST: ${DOMAINS2}
          LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL2}
        logging:
          options:
            max-size: ${LOGGING_OPTIONS_MAX_SIZE2:-200k}
    
    networks:
      default:
        external:
          name: ${NETWORK}

And this is where I want to be:

    .
    ├── db
    │   └── docker-compose.yml
    ├── blog1
    │   └── docker-compose.yml
    ├── blog2
    │   └── docker-compose.yml
    └── blog3
        └── docker-compose.yml

db container

    version: "3"
    
    services:
      db:
        container_name: ${CONTAINER_DB_NAME}
        image: mariadb:latest
        restart: unless-stopped
        volumes:
          - ${DB_PATH}:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
      default:
        external:
          name: ${NETWORK}

blog1 container (blog2, blog3 and so on)

    version: "3"
    
    services:
      wordpress1:
        depends_on:
          - db // Does Docker knows this is db service I created outside it?
        container_name: ${CONTAINER_WP_NAME1}
        image: wordpress:latest
        restart: unless-stopped
        volumes:
            - ${WP_CORE}:/var/www/html
            - ${WP_CONTENT}:/var/www/html/wp-content
            - ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
        environment:
            WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME1}:3306
            WORDPRESS_DB_NAME: ${MYSQL_DATABASE1}
            WORDPRESS_DB_USER: ${MYSQL_USER1}
            WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD1}
            WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX1}
            VIRTUAL_HOST: ${DOMAINS1}
            LETSENCRYPT_HOST: ${DOMAINS1}
            LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL1}
        logging:
            options:
            max-size: ${LOGGING_OPTIONS_MAX_SIZE1:-200k}
    networks:
      default:
        external:
          name: ${NETWORK}
@evertramos evertramos transferred this issue from evertramos/nginx-proxy-automation Nov 13, 2019
@evertramos evertramos pinned this issue Nov 13, 2019
@evertramos
Copy link
Owner

Hello @Darksoulsong!

You should remove the depend_on instruction in your compose file... and only set the environment WORDPRESS_DB_HOST to your container name (${CONTAINER_DB_NAME}).

I think you will be fine with it.

Please let me know if you made through it.

@cocapasteque
Copy link

Highly interested in this also, trying to acheive the exact same thing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants