███████████████████████████████████████████████████████████████ █─▄▄▄▄██▀▄─██▄─█─▄█▄─▄███▄─█─▄████▀▄─██▄─█─▄█─▄▄─█▄─██─▄█▄─▄─▀█ █▄▄▄▄─██─▀─███─▄▀███─██▀██▄─▄█████─▀─███▄─▄██─██─██─██─███─▄─▀█ ▀▄▄▄▄▄▀▄▄▀▄▄▀▄▄▀▄▄▀▄▄▄▄▄▀▀▄▄▄▀▀▀▀▄▄▀▄▄▀▀▄▄▄▀▀▄▄▄▄▀▀▄▄▄▄▀▀▄▄▄▄▀▀
Docker running Nginx, PHP-FPM, Composer, MySQL and PHPMyAdmin.
To run the docker commands without using sudo you must add the docker group to your-user:
sudo usermod -aG docker your-user
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
You should be careful when installing third party web servers such as MySQL or Nginx.
This project use the following ports :
Server | Port |
---|---|
MySQL | 3306 |
PHPMyAdmin | 8080 |
Nginx | 80 |
Nginx SSL | 443 |
To install Git, download it and install following the instructions :
git clone https://github.com/saklyayoub/docker-npmp.git
Go to the project directory :
cd docker-nginx-php-mysql
├── docker
│ ├── Dockerfile-7.0FPM
│ ├── Dockerfile-7.4FPM
│ └── Dockerfile-latest
├── docker-compose.yml
├── etc
│ ├── nginx
│ │ ├── default.template.conf
│ │ ├── nginx.conf
│ │ ├── nginx.http.conf
│ │ └── nginx.https.conf
│ ├── php
│ │ └── php.ini
│ └── ssl
├── README.md
└── web
├── mysql
| ├── backups
| | └── sample.sql
| └── init
| └── sample.sql
├── app
│ ├── composer.json
│ ├── composer.json.dist
│ ├── phpunit.xml.dist
│ ├── src
│ │ └── Foo.php
│ └── test
│ ├── bootstrap.php
│ └── FooTest.php
└── public
└── index.php
You can change the host name by editing the .env
file.
If you modify the host name, do not forget to add it to the /etc/hosts
file.
-
Generate SSL certificates
source .env && docker run --rm -v $(pwd)/etc/ssl:/certificates -e "SERVER=$NGINX_HOST" jacoelho/generate-certificate
-
Configure Nginx
Do not modify the
etc/nginx/default.conf
file, it is overwritten byetc/nginx/default.template.conf
-
Copying the composer configuration file :
cp web/app/composer.json.dist web/app/composer.json
-
Start the application :
docker-compose up -d
Please wait this might take a several minutes...
docker-compose logs -f # Follow log output
-
Stop and clear services
docker-compose down -v
docker run --rm -v $(pwd)/web/app:/app composer require symfony/yaml
docker run --rm -v $(pwd)/web/app:/app composer update
docker run --rm -v $(pwd):/data phpdoc/phpdoc -i=vendor/ -d /data/web/app/src -t /data/web/app/doc
docker exec $(docker-compose ps -q php) php ./app/vendor/bin/phpunit --colors=always --configuration ./public
Fixing standard code with PSR2
docker exec $(docker-compose ps -q php) php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./public
Checking the standard code with PSR2
docker exec $(docker-compose ps -q php) php ./app/vendor/bin/phpcs -v --standard=PSR2 ./public
Analyzing source code with PHP Mess Detector
docker exec $(docker-compose ps -q php) php ./app/vendor/bin/phpmd ./public text cleancode,codesize,controversial,design,naming,unusedcode
docker-compose exec php php -m
docker exec -it mysql bash
and
mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD"
mkdir -p data/db/dumps
source .env && docker exec $(docker-compose ps -q mysql) mysqldump --all-databases -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" > "/web/mysql/backups/db.sql"
source .env && docker exec -i $(docker-compose ps -q mysql) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "/web/mysql/backups/db.sql"
Notice:
Replace "YOUR_DB_NAME" by your custom name.
source .env && docker exec $(docker-compose ps -q mysql) mysqldump -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" --databases YOUR_DB_NAME > "/web/mysql/backups/YOUR_DB_NAME_dump.sql"
source .env && docker exec -i $(docker-compose ps -q mysql) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "/web/mysql/backups/YOUR_DB_NAME_dump.sql"