diff --git a/.env b/.env new file mode 100644 index 0000000..d972c06 --- /dev/null +++ b/.env @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# See https://docs.docker.com/compose/environment-variables/#the-env-file + +MYSQL_DUMPS_DIR=data/db/dumps +MYSQL_DATABASE=test +MYSQL_ROOT_USER=root +MYSQL_ROOT_PASSWORD=root +MYSQL_USER=dev +MYSQL_PASSWORD=dev diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..900c31a --- /dev/null +++ b/Makefile @@ -0,0 +1,67 @@ +# Makefile for Docker Nginx PHP Composer MySQL + +# config environment +include .env + +help: + @echo "" + @echo "usage: make COMMAND" + @echo "" + @echo "Commands:" + @echo " apidoc Generate documentation of API" + @echo " clean Clean directories for reset" + @echo " composer-up Update php composer" + @echo " docker-start Create and start containers" + @echo " docker-stop Stop all services" + @echo " docker-sweep Sweep old containers and volumes" + @echo " gencerts Generate SSL certificates" + @echo " mysql-dump Create backup of whole database" + @echo " mysql-restore Restore backup from whole database" + @echo " test Test application" + +init: + @cp $(PWD)/web/app/composer.json.dist $(PWD)/web/app/composer.json + +apidoc: + @docker exec -i $(shell docker-compose ps -q php) php ./app/vendor/apigen/apigen/bin/apigen generate -s app/src -d app/doc + +clean: + @rm -Rf data/db/mysql/* + @rm -Rf data/db/dumps/* + @rm -Rf web/app/vendor + @rm -Rf web/app/composer.lock + @rm -Rf web/app/doc + @rm -Rf web/app/report + @rm -Rf etc/ssl/* + +composer-up: + @docker run --rm -v $(PWD)/web/app:/app composer/composer update + +docker-start: init + @echo "Docker is running..." + docker-compose up -d; + +docker-stop: + docker-compose stop + docker-compose kill + docker-compose rm -f + @make clean + +docker-sweep: + @docker ps -aq | xargs docker rm + @docker volume ls -qf dangling=true | xargs docker volume rm + +gen-certs: + @docker run --rm -v $(PWD)/etc/ssl:/certificates -e "SERVER=localhost" jacoelho/generate-certificate + +mysql-dump: + @mkdir -p $(MYSQL_DUMPS_DIR) + @docker exec -i $(shell docker-compose ps -q mysqldb) mysqldump --all-databases -u"$(MYSQL_ROOT_USER)" -p"$(MYSQL_ROOT_PASSWORD)" > $(MYSQL_DUMPS_DIR)/db.sql + +mysql-restore: + @docker exec -i mysql mysql -u"$(MYSQL_ROOT_USER)" -p"$(MYSQL_ROOT_PASSWORD)" < $(MYSQL_DUMPS_DIR)/db.sql + +test: + @docker exec -i $(shell docker-compose ps -q php) app/vendor/bin/phpunit --colors=always --configuration app/ + +.PHONY: clean \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 7daf2b6..b45fd64 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,28 +1,28 @@ -version: '2' +version: '3' services: web: image: nginx:latest ports: - "8000:80" - "3000:443" - restart: always + restart: always volumes: - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf" - "./etc/ssl:/etc/ssl" - "./web:/web" depends_on: - - "php" - - "mysqldb" + - php + - mysqldb php: image: nanoninja/php-fpm restart: always volumes: - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini" - - ./web:/web + - "./web:/var/www/html" composer: image: composer/composer volumes: - - ./web/app:/app + - "./web/app:/app" command: install myadmin: image: phpmyadmin/phpmyadmin @@ -34,17 +34,19 @@ services: - PMA_HOST=mysql restart: always depends_on: - - "mysqldb" + - mysqldb mysqldb: image: mysql container_name: mysql restart: always + env_file: + - ".env" environment: - - MYSQL_DATABASE=test - - MYSQL_ROOT_PASSWORD=root - - MYSQL_USER=dev - - MYSQL_PASSWORD=dev + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} ports: - - 3306:3306 + - "3306:3306" volumes: - - ./data/db/mysql:/var/lib/mysql + - "./data/db/mysql:/var/lib/mysql"