diff --git a/.env b/.env index 760f38cbc..1138e9315 100644 --- a/.env +++ b/.env @@ -11,7 +11,7 @@ NGINX_HOST=localhost PHP_VERSION=latest # MySQL -MYSQL_VERSION=5.7.22 +MYSQL_VERSION=8.0.21 MYSQL_HOST=mysql MYSQL_DATABASE=test MYSQL_ROOT_USER=root diff --git a/.gitignore b/.gitignore index 7fbb7857b..9a4aa7a18 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,8 @@ nbproject/ /nbproject/private/ /nbproject/private/private.properties +# VSCode +.vscode/ + # SSL Certs -etc/ssl/ \ No newline at end of file +etc/ssl/ diff --git a/Makefile b/Makefile index 86b5d3c43..b396bfdf2 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ init: @$(shell cp -n $(shell pwd)/web/app/composer.json.dist $(shell pwd)/web/app/composer.json 2> /dev/null) apidoc: - @docker-compose exec -T php php -d memory_limit=256M -d xdebug.profiler_enable=0 ./app/vendor/bin/apigen generate app/src --destination app/doc + @docker run --rm -v $(shell pwd):/data phpdoc/phpdoc -i=vendor/ -d /data/web/app/src -t /data/web/app/doc @make resetOwner clean: @@ -70,8 +70,7 @@ mysql-restore: phpmd: @docker-compose exec -T php \ ./app/vendor/bin/phpmd \ - ./app/src \ - text cleancode,codesize,controversial,design,naming,unusedcode + ./app/src text cleancode,codesize,controversial,design,naming,unusedcode test: code-sniff @docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app/ diff --git a/README.md b/README.md index 6c736c0f3..faae0b8b9 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,12 @@ ___ ## Install prerequisites +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 : @@ -145,7 +151,7 @@ If you modify the host name, do not forget to add it to the `/etc/hosts` file. 1. Generate SSL certificates ```sh - source .env && sudo docker run --rm -v $(pwd)/etc/ssl:/certificates -e "SERVER=$NGINX_HOST" jacoelho/generate-certificate + source .env && docker run --rm -v $(pwd)/etc/ssl:/certificates -e "SERVER=$NGINX_HOST" jacoelho/generate-certificate ``` 2. Configure Nginx @@ -198,13 +204,13 @@ ___ 2. Start the application : ```sh - sudo docker-compose up -d + docker-compose up -d ``` **Please wait this might take a several minutes...** ```sh - sudo docker-compose logs -f # Follow log output + docker-compose logs -f # Follow log output ``` 3. Open your favorite browser : @@ -216,7 +222,7 @@ ___ 4. Stop and clear services ```sh - sudo docker-compose down -v + docker-compose down -v ``` ___ @@ -245,7 +251,7 @@ When developing, you can use [Makefile](https://en.wikipedia.org/wiki/Make_(soft Start the application : ```sh -sudo make docker-start +make docker-start ``` Show help : @@ -261,49 +267,49 @@ ___ ### Installing package with composer ```sh -sudo docker run --rm -v $(pwd)/web/app:/app composer require symfony/yaml +docker run --rm -v $(pwd)/web/app:/app composer require symfony/yaml ``` ### Updating PHP dependencies with composer ```sh -sudo docker run --rm -v $(pwd)/web/app:/app composer update +docker run --rm -v $(pwd)/web/app:/app composer update ``` ### Generating PHP API documentation ```sh -sudo docker-compose exec -T php php -d memory_limit=256M -d xdebug.profiler_enable=0 ./app/vendor/bin/apigen generate app/src --destination ./app/doc +docker run --rm -v $(pwd):/data phpdoc/phpdoc -i=vendor/ -d /data/web/app/src -t /data/web/app/doc ``` ### Testing PHP application with PHPUnit ```sh -sudo docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app +docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app ``` ### Fixing standard code with [PSR2](http://www.php-fig.org/psr/psr-2/) ```sh -sudo docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src +docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src ``` ### Checking the standard code with [PSR2](http://www.php-fig.org/psr/psr-2/) ```sh -sudo docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src +docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src ``` ### Analyzing source code with [PHP Mess Detector](https://phpmd.org/) ```sh -sudo docker-compose exec -T php ./app/vendor/bin/phpmd ./app/src text cleancode,codesize,controversial,design,naming,unusedcode +docker-compose exec -T php ./app/vendor/bin/phpmd ./app/src text cleancode,codesize,controversial,design,naming,unusedcode ``` ### Checking installed PHP extensions ```sh -sudo docker-compose exec php php -m +docker-compose exec php php -m ``` ### Handling database @@ -311,7 +317,7 @@ sudo docker-compose exec php php -m #### MySQL shell access ```sh -sudo docker exec -it mysql bash +docker exec -it mysql bash ``` and @@ -327,13 +333,13 @@ mkdir -p data/db/dumps ``` ```sh -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 && docker exec $(docker-compose ps -q mysqldb) mysqldump --all-databases -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" > "data/db/dumps/db.sql" ``` #### Restoring a backup of all databases ```sh -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" +source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/db.sql" ``` #### Creating a backup of single database @@ -341,13 +347,13 @@ source .env && sudo docker exec -i $(sudo docker-compose ps -q mysqldb) mysql -u **`Notice:`** Replace "YOUR_DB_NAME" by your custom name. ```sh -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 && docker exec $(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" ``` #### Restoring a backup of single database ```sh -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" +source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/YOUR_DB_NAME_dump.sql" ``` diff --git a/etc/nginx/default.conf b/etc/nginx/default.conf index 1088f8f2a..17db04a90 100644 --- a/etc/nginx/default.conf +++ b/etc/nginx/default.conf @@ -10,6 +10,20 @@ server { access_log /var/log/nginx/access.log; root /var/www/html/public; + set $virtualdir ""; + set $realdir ""; + + if ($request_uri ~ ^/([^/]*)/.*$ ) { + set $virtualdir /$1; + } + + if (-d "$document_root$virtualdir") { + set $realdir "${virtualdir}"; + } + + location / { + try_files $uri $uri/ $realdir/index.php?$args; + } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; @@ -36,6 +50,21 @@ server { # access_log /var/log/nginx/access.log; # root /var/www/html/public; +# set $virtualdir ""; +# set $realdir ""; + +# if ($request_uri ~ ^/([^/]*)/.*$ ) { +# set $virtualdir /$1; +# } + +# if (-d "$document_root$virtualdir") { +# set $realdir "${virtualdir}"; +# } + +# location / { +# try_files $uri $uri/ $realdir/index.php?$args; +# } + # location ~ \.php$ { # try_files $uri =404; # fastcgi_split_path_info ^(.+\.php)(/.+)$; @@ -45,4 +74,4 @@ server { # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # fastcgi_param PATH_INFO $fastcgi_path_info; # } -# } \ No newline at end of file +# } diff --git a/etc/nginx/default.template.conf b/etc/nginx/default.template.conf index 2a485890f..3d76e28d9 100644 --- a/etc/nginx/default.template.conf +++ b/etc/nginx/default.template.conf @@ -10,6 +10,20 @@ server { access_log /var/log/nginx/access.log; root /var/www/html/public; + set $virtualdir ""; + set $realdir ""; + + if ($request_uri ~ ^/([^/]*)/.*$ ) { + set $virtualdir /$1; + } + + if (-d "$document_root$virtualdir") { + set $realdir "${virtualdir}"; + } + + location / { + try_files $uri $uri/ $realdir/index.php?$args; + } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; @@ -36,6 +50,21 @@ server { # access_log /var/log/nginx/access.log; # root /var/www/html/public; +# set $virtualdir ""; +# set $realdir ""; + +# if ($request_uri ~ ^/([^/]*)/.*$ ) { +# set $virtualdir /$1; +# } + +# if (-d "$document_root$virtualdir") { +# set $realdir "${virtualdir}"; +# } + +# location / { +# try_files $uri $uri/ $realdir/index.php?$args; +# } + # location ~ \.php$ { # try_files $uri =404; # fastcgi_split_path_info ^(.+\.php)(/.+)$; @@ -45,4 +74,4 @@ server { # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # fastcgi_param PATH_INFO $fastcgi_path_info; # } -# } \ No newline at end of file +# } diff --git a/web/app/composer.json.dist b/web/app/composer.json.dist index 1db4dfaa3..b4850f712 100644 --- a/web/app/composer.json.dist +++ b/web/app/composer.json.dist @@ -1,13 +1,11 @@ { "require": { - + "symfony/yaml": "^5.1" }, "require-dev": { - "apigen/apigen": "dev-master", "phpmd/phpmd": "@stable", - "phpunit/phpunit": "^7.0", - "roave/better-reflection": "dev-master", - "squizlabs/php_codesniffer": "3.*" + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "3.5.*" }, "autoload": { "psr-4": { @@ -21,4 +19,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} \ No newline at end of file +} diff --git a/web/app/src/Foo.php b/web/app/src/Foo.php index f94d679cd..f982f487f 100644 --- a/web/app/src/Foo.php +++ b/web/app/src/Foo.php @@ -1,9 +1,19 @@