Dockerized nginx mysql php slim redis
All credits to https://github.com/nanoninja/docker-nginx-php-mysql (@nanoninja) who did an incredible job. I added a bunch of stuff that I think is really useful when creating a new project on php.
Docker running Nginx, PHP-FPM, Composer and MySQL. Added slim 4, php-unit, phinx, php_codesniffer and more
Before installing project make sure the following prerequisites have been met.
We’ll download the code from its repository on GitHub.
By this point we’ll have all the project pieces in place.
Use Makefile [Optional]
When developing, you can use Makefile for doing recurrent operations.
When running, you can use docker commands for doing recurrent operations.
For now, this project has been mainly created for Unix (Linux/MacOS). Perhaps it could work on Windows.
All requisites should be available for your distribution. The most important are :
Check if docker-compose is already installed by entering the following command :
which docker-compose
Check Docker Compose compatibility :
The following is optional but makes life more enjoyable :
which make
On Ubuntu and Debian these are available in the meta-package build-essential. On other distributions, you may need to install the GNU C++ compiler separately.
sudo apt install build-essential
| Server | Port |
|---|---|
| MySQL | 8989 |
| Nginx | 8000 |
| Nginx SSL | 3000 |
To install Git, download it and install following the instructions :
git clone git@github.com:nicolasbagatello/docker-php-slim.git
Go to the project directory :
cd docker-php-slim
.
├── Makefile
├── README.md
├── data
│ └── db
│ ├── dumps
│ └── mysql
├── doc
├── docker-compose.yml
├── etc
│ ├── nginx
│ │ ├── default.conf
│ │ └── default.template.conf
│ ├── php
│ │ └── php.ini
│ └── ssl
└── web
├── app
│ ├── composer.json.dist
│ ├── phpunit.xml.dist
│ ├── db
│ │ └── migrations
│ │ │ └── 20191209155649_testing_Migration.php
│ │ └── seeds
│ │ └── TestingSeed.php
│ ├── src
│ │ └── Foo.php
│ └── test
│ ├── FooTest.php
│ └── bootstrap.php
└── public
└── index.php
├── phinx.yml
Copying the composer configuration file :
cp web/app/composer.json.dist web/app/composer.json
Start the application :
sudo docker-compose up -d
Please wait this might take a several minutes…
sudo docker-compose logs -f # Follow log output
Open your favorite browser :
Stop and clear services
sudo docker-compose down -v
When developing, you can use Makefile for doing the following operations :
| Name | Description |
|---|---|
| clean | Clean directories for reset |
| code-sniff | Check the API with PHP Code Sniffer (PSR2) |
| composer-up | Update PHP dependencies with composer |
| docker-start | Create and start containers |
| docker-stop | Stop and clear all services |
| logs | Follow log output |
| mysql-dump | Create backup of all databases |
| mysql-restore | Restore backup of all databases |
| test | Test application with phpunit |
| run-migrations | Run all migrations |
| run-seeds | Run all seeds |
Start the application :
sudo make docker-start
Show help :
make help
sudo make run-migrations
sudo docker run --rm -v $(pwd)/web/app:/app composer require symfony/yaml
sudo docker run --rm -v $(pwd)/web/app:/app composer update
sudo docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app
sudo docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src
sudo docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src
sudo docker-compose exec php php -m
sudo docker exec -it mysql bash
and
mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD"
mkdir -p data/db/dumps
source .env && sudo docker exec $(sudo docker-compose ps -q mysqldb) mysqldump --all-databases -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" > "data/db/dumps/db.sql"
source .env && sudo docker exec -i $(sudo docker-compose ps -q mysqldb) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/db.sql"
Notice: Replace “YOUR_DB_NAME” by your custom name.
source .env && sudo docker exec $(sudo docker-compose ps -q mysqldb) mysqldump -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" --databases YOUR_DB_NAME > "data/db/dumps/YOUR_DB_NAME_dump.sql"
source .env && sudo docker exec -i $(sudo docker-compose ps -q mysqldb) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/YOUR_DB_NAME_dump.sql"