Universal docker server, Nginx, PHP-FPM, MySql, Redis
Nginx (1.17.8), PHP (7.4) / Node (13.10), MySql (5.7), Redis (5.0.7), (*1)
The preferred way to install this extension., (*2)
Either run, (*3)
for composer, (*4)
php composer.phar require --prefer-dist matthew-p/docker-server
or add, (*5)
"matthew-p/docker-server": "^5.1.0"
to the require section of your composer.json
file., (*6)
for npm, (*7)
npm i --save @matthew-p/docker-server@latest
or add, (*8)
"@matthew-p/docker-server": "^1.1.1"
to the dependencies section of your package.json
file., (*9)
Add or update section scripts in composer.json or package.json:, (*10)
for composer.json, (*11)
{ "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, (*12)
{ "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)., (*13)
Run: composer server init
or npm run server init
. This will create a docker folder in your project root directory., (*14)
Change root-path in docker/nginx/conf-dynamic.d/sample.conf, (*15)
See supported os and config docker/.env.local according to your operating system, (*16)
Run server: composer server up
or npm run server up
, (*17)
vendor/bin/site-start.sh --env-file=docker/.env.dev,docker/.env.local
Use environment, extends, overriding between configs, (*18)
# 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"
composer server-run server "ls && top"
composer server-exec server "composer install"
Configure hosts file:, (*19)
Check nginx container IP and add to hosts file:, (*20)
docker inspect sample_nginx
view "IPAddress" and add to:, (*21)
sudo nano /etc/hosts
_172.18.0.4 sample.io_ (for example)
save and check it., (*22)
OR see below static network layer, (*23)
Add static network layer (only for Linux), (*24)
dotenv
SERVICES="$SERVICES -f docker/docker-compose.common.yml -f docker/docker-compose.static-network.yml"
composer server restart
and check it.Update package without composer install and depencies, (*25)
docker run --rm --interactive --volume $PWD:/app composer update --ignore-platform-reqs --no-scripts
docker run --rm --interactive --volume $PWD:/app matthewpatell/universal-docker-server:4.0 bash -c 'cd /app && composer install --no-scripts'
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, (*26)
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 git@githab.com:foob/bar.git . git pull
That's all. Check it. :), (*27)