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
Makefilefor 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-composeCheck Docker Compose compatibility :
The following is optional but makes life more enjoyable :
which makeOn 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.gitGo 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 :
- http://localhost:8000/hello/nico
- http://localhost:8000/db
- https://localhost:3000 (HTTPS not configured by default)
-
Stop and clear services
sudo docker-compose down -v
When developing, you can use Makefile for doing the following operations :
- Probably outdated command list :( so make sure to check make help toget the latest
| 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-startShow help :
make helpMigrations (updated to use sphinx) http://docs.phinx.org/en/latest/commands.html
sudo make run-migrationssudo docker run --rm -v $(pwd)/web/app:/app composer require symfony/yamlsudo docker run --rm -v $(pwd)/web/app:/app composer updatesudo docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./appFixing standard code with PSR2
sudo docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/srcChecking the standard code with PSR2
sudo docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/srcsudo docker-compose exec php php -msudo docker exec -it mysql bashand
mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD"mkdir -p data/db/dumpssource .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"