Choisir le bon workflow pour la bonne taille d'équipe et le bon process de déploiement :
Légère recommendation : son propre workflow, inspiré de github flow et gitflow
Avantages :
Docker Compose fait concensus
Recommendations :
services:
php:
build: ./docker/php
depends_on:
- mysql
volumes:
- ./app:/srv/jobs:rw,cached
- ~/.composer:/.composer # for Composer cache
mysql:
image: percona
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-nopassword}
- MYSQL_DATABASE=jobs
- MYSQL_USER=jobs
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-nopassword}
volumes:
- mysql-data:/var/lib/mysql:rw
nginx:
build: ./docker/nginx
depends_on:
- php
security_opt:
- no-new-privileges:true
volumes:
- ./app/public:/srv/jobs/public:ro
Bien choisir la version des dépendances que va utiliser le projet.
S'appuyer sur le semver "Semantic Versioning"
X.Y.Z incrémenter la version :
MAJOR version when you make incompatible API changes
MINOR version when you add functionality in a backward compatible manner
PATCH version when you make backward compatible bug & security fixes
Bonne pratiques :
Les Tests doivent être :
Recommendations :
Disclaimer : Il y a beaucoup de types de tests, et peu de consensus. Il vaut mieux s'éloigner du débat pour simplifier à quelque type de tests :
Recommendations :
A éviter absolument :
Recommendations :
Continuous Integration
Bonne pratiques :
Forte recommendation : Gitlab-CI
# .gitlab-ci.yaml
stages:
- install # removed in this exemple
- quality
- tests
quality:phpstan:
image: thecodingmachine/php:8.3-v4-cli-node18
stage: quality
script:
- php vendor/bin/phpstan analyze -c phpstan.dist.neon
quality:security:
image: thecodingmachine/php:8.3-v4-cli-node18
stage: quality
script:
- composer audit
- yarn audit
quality:cs:
stage: quality
script:
- vendor/bin/php-cs-fixer check src
tests:unit:
script:
- php bin/phpunit --colors=always
tests:behat:
script:
- php bin/console hautelook:fixtures:load -q
- php vendor/bin/behat --stop-on-failure
Coding Style :
PHP : php-cs-fixer
Javacsript : ESLint
Security :
PHP : composer audit
Javascript : yarn audit ou npm audit
Qualité :
Database : bin/console doctrine:database:validate
Architecture & Monorepo : deptrac
Recommendations :
# .gitlab-ci.yaml
stages:
- install
- quality
- tests
variables:
GIT_DEPTH: 1
Best practices :
Solution de déploiement :
Légère recommendation : Capistrano
Recommendations :
Forte recommendation : Makefile
## Install environment from scratch
install: vendor db-create fixtures
## Install vendir
vendor: composer.json
composer install
## Create Database
db-create:
bin/console doctrine:database:create
bin/console doctrine:schema:update -f
## Load Fixtures
fixtures:
bin/console doctrine:fixtures:load -n
Pour adresser ce vaste sujet, un bon moyen de commencer et d'utiliser la checklist de Symfony concernant la performance
Mesurer la performance passe par plusieurs solutions. Du monitoring, aux tests de monté en charge (TMC) en passant par le profiling.
L'équipe de développement doit avoir accès à ces outils. En ce qui concerne la solution de profiling on recommendera un outils dédié comme Blackfire.
Plutot qu'un profiler intégré comme dans : NewRelic, DataDog, Dynatrace, Sentry.
Alternative : Tideways
A l'echelle d'un projet Web et pour l'équipe de développement on peut simplifier en trois type de cache :
Le développeur devrait se concentrer sur la stratégie de cache HTTP, et sur le cache applicatif.
Cache à mettre en place par ordre de priorité :
Vous pouvez ce que vous préférer. Le meilleur IDE c'est celui qu'on maitrise :
Eclipse PDT
Netbeans
As an alternative : SublimeText
PHPStorm est le plus avancé/puissant
Recommendation : PHPStorm