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.
-
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).
- for composer.json
-
Run:
composer server init
ornpm run server init
. This will create a docker folder in your project root directory. -
Change root-path in docker/nginx/conf-dynamic.d/sample.conf
-
See supported os and config docker/.env.local according to your operating system
-
Run server:
composer server up
ornpm run server up
- 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) 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.
-
Configure hosts file:
-
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. -
Open browser and check sample.io
OR see below static network layer
-
-
Add static network layer (only for Linux)
- 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"
- Run:
composer server restart
and check it.
- Change SERVICES variable in your local env (docker/.env.local) to:
-
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. :)