Have ideas to improve npm?Join in the discussion! »


    1.3.1 • Public • Published

    Universal docker server

    Nginx (1.17.8), PHP (7.4) / Node (13.10), MySql (5.7), Redis (5.0.7)


    The preferred way to install this extension.

    Either run

    • for composer

      php composer.phar require --prefer-dist matthew-p/docker-server

      or add

      "matthew-p/docker-server": "^5.1.0"

      to the require section of your composer.json file.

    • for npm

      npm i --save @matthew-p/docker-server@latest

      or add

      "@matthew-p/docker-server": "^1.1.1"

      to the dependencies section of your package.json file.

    After install package:

    1. Add or update section scripts in composer.json or package.json:

      • for composer.json
            "scripts": {
                "server": "vendor/bin/site-start.sh --env-file=docker/.env.local",
                "server-run": "vendor/bin/site-run.sh --env-file=docker/.env.local",
                "server-exec": "vendor/bin/site-exec.sh --env-file=docker/.env.local",
                // (optional)
                "server-prod": "vendor/bin/site-aws.sh --env-file=docker/.env.prod",
                // (optional)
                "server-deploy-dev": "vendor/bin/site-deploy.sh --env-file=docker/.env.dev"
      • for package.json
            "scripts": {
                "server": "docker-server-start --env-file=docker/.env.local",
                "server-run": "docker-server-run --env-file=docker/.env.local",
                "server-exec": "docker-server-exec --env-file=docker/.env.local",
                // (optional)
                "server-prod": "docker-server-aws --env-file=docker/.env.prod",
                // (optional)
                "server-deploy-dev": "docker-server-deploy --env-file=docker/.env.dev"

      where "docker/.env.local" relative path to your local env config (will be created in next step).

    2. Run: composer server init or npm run server init. This will create a docker folder in your project root directory.

    3. Change root-path in docker/nginx/conf-dynamic.d/sample.conf

    4. See supported os and config docker/.env.local according to your operating system

    5. Run server: composer server up or npm run server up

    Supported OS

    Environments && Commands

    PhpStorm samples

    Latest docker images

    • NGINX
      • matthewpatell/universal-docker-nginx:3.7
    • SERVER
      • matthewpatell/universal-docker-server:4.0
      • matthewpatell/universal-docker-server:4.0-dev
      • matthewpatell/universal-docker-server:4.0-jre (with java)
    • PHP-FPM:
      • matthewpatell/universal-docker-server-php-fpm:4.0
    • NODE:
      • node:13.10-alpine


    • Multiple config: vendor/bin/site-start.sh --env-file=docker/.env.dev,docker/.env.local
    • Use environment, extends, overriding between configs
      # Simple usage
      SERVICES="$SERVICES -f my.yml"
      # Will be recompiled (bad example)
      SERVICES="${SERVICES} -f my.yml"
      # Will be recompiled (good example)
    • Use all environments in docker-compose files
    • Overriding, extends docker-compose files
    • Run container and execute command: composer server-run server "ls && top"
    • Run command in working container: composer server-exec server "composer install"
    • AWS create/update "Task Definitions"
    • Auto update /etc/hosts file on host machine
    • Auto create nginx proxies on host machine
    • Deploy
    • And etc.


    • Configure hosts file:

      1. Check nginx container IP and add to hosts file:

        docker inspect sample_nginx

        view "IPAddress" and add to:

        sudo nano /etc/hosts sample.io (for example)
        save and check it.

      2. Open browser and check sample.io

      OR see below static network layer

    • Add static network layer (only for Linux)

      1. Change SERVICES variable in your local env (docker/.env.local) to:
        SERVICES="$SERVICES -f docker/docker-compose.common.yml -f docker/docker-compose.static-network.yml"
      2. Run: composer server restart and check it.
    • Update package without composer install and depencies

      • with composer image:
      docker run --rm --interactive --volume $PWD:/app composer update --ignore-platform-reqs --no-scripts
      • with server images:
      docker run --rm --interactive --volume $PWD:/app matthewpatell/universal-docker-server:4.0 bash -c 'cd /app && composer install --no-scripts'
      • with server image and additional global packages:
      docker run --rm --interactive --volume $PWD:/app matthewpatell/universal-docker-server:4.0 bash -c 'cd /app && composer global require "fxp/composer-asset-plugin:^1.4.2" && composer global require "hirak/prestissimo:~0.3.7" && composer install --no-scripts'
    • Use git-container instead of git itself

    docker run -it --rm \
            --user $(id -u):$(id -g) \
            -v $HOME:$HOME:rw \
            -v /etc/passwd:/etc/passwd:ro \
            -v /etc/group:/etc/group:ro \
            -v $PWD:$PWD:rw \
            -w $PWD \
            alpine/git \
            clone [command]
    # Or add alias in ~/.profile (change `git` to any another keyword if git actually installed) 
    cat >> ~/.profile << EOF
        function git () {
            (docker run -it --rm --user \$(id -u):\$(id -g) -v \$HOME:\$HOME:rw -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v \$PWD:\$PWD:rw -w \$PWD alpine/git "\$@")
    source ~/.profile
    # and use via alias 
    git clone git@githab.com:foob/bar.git .
    git pull

    That's all. Check it. :)


    npm i @matthew-p/docker-server

    DownloadsWeekly Downloads






    Unpacked Size

    298 kB

    Total Files


    Last publish


    • avatar