Skip to content

Universal docker server (PHP-FPM/NODE, Nginx, MySql, Redis). Launch your site in 5 steps and <5 min :)

License

Notifications You must be signed in to change notification settings

MatthewPattell/docker-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Universal docker server

Nginx (1.17.8), PHP (7.4), MySql (5.7), Redis (5.0.7)

Installation

The preferred way to install this extension is through composer.

Either run

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

or add

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

to the require section of your composer.json file.

After install package:

  1. Add or update section scripts in 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"
        }
    }

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

  2. Run: composer 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

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

FEATURES

  • 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)
    SERVICES="${SERVICES_EXTERNAL} -f my.yml"
  • 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.

LIFEHACKS

  • 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

      172.18.0.4 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 "\$@")
    }
EOF
source ~/.profile
# and use via alias
git clone [email protected]:foob/bar.git .
git pull

That's all. Check it. :)