La stack technique du projet
Voici la stack technique que j'utilise pour ce projet. Beaucoup d'open-source évidemment, quoi d'autre ? 😜 Comme vous pouvez le voir, la base est une stack LAMP (Linux, Apache, MySQL, PHP) assez classique.
Comme j'ai déjà migré le projet en Symfony 5, vous êtes sûr que les bundles listés ici sont compatibles avec cette dernière version majeure du framework. Si vous commencez un projet de zéro, il est très important de choisir vos bundles avec précaution... ou vous pourriez le regrettez amèrement plus tard ! 😇
Les composants principaux
Nom | Version | Logo | Remarques | |
---|---|---|---|---|
Linux | Ubuntu Server 18.04 LTS | C'est ma distribution Linux préférée. Stable, facile à utiliser et à maintenir. Ce serveur tourne depuis 4 ans et a été mis à jour de la 16.04 LTS à la 18.04 LTS. | ||
Apache | 2.4 | Je n'ai pas besoin de performance extraordinaires sur ce serveur donc Apache fait l'affaire comme serveur web. Il est stable et facile à configurer. | ||
MySQL | 5.7 | Je pense que MySQL vit ces dernièrs jours sur ce blog. J'ai prévu de le remplacer par PostgreSQL très bientôt. | ||
PHP | 8.3 | PHP n'est plus le vilain petit canard qu'il était il y a 15 ans. Il est désormais mature et son écosystème avec composer est fantastique. Pour avoir une version de PHP à jour, j'utilise les excellents dépôts d'Ondřej Surý. | ||
Redis | 5.0 | Magasin de données en mémoire que j'utilise ici comme cache ainsi que pour stocker les sessions PHP. | ||
Symfony | 6.4 | Le framework PHP pour les professionnels. | ||
Docker | 19 | Incontournable Docker. Je l'utilise locallement pour avoir à disposition les services MySQL, Adminer, Elasticsearch, Elasticsearch Head, Kibana et Redis. |
La stack front
Les bundles Symfony
Je ne vais pas lister tous les composants que j'utilise ici. Jetez un coup d'œil au fichier complet composer.json
ci-dessous pour avoir la liste exhaustive. Je peux peut-être mentionner le composant symfony/string
car il est nouveau et n'est pas disponible pour Symfony 4. C'est l'une des raisons qui m'a poussé à migrer le blog rapidement vers Symfony 5 pour pouvoir utiliser ce puissant nouveau composant.
Nom | Remarques | |
---|---|---|
antishov/doctrine-extensions-bundle | Fork de stof/doctrine-extensions-bundle compatible avec Symfony 5. |
|
babdev/pagerfanta-bundle | Fork de whiteoctober/WhiteOctoberPagerfantaBundle compatible avec Symfony 5. |
|
doctrine/doctrine-bundle | Bundle de l'ORM Doctrine. | |
doctrine/doctrine-fixtures-bundle | Permet d'ajouter des fixtures de développement à la base de données. | |
easycorp/easyadmin-bundle | Le générateur d'administration le plus facile à prendre en main pour Doctrine. | |
egulias/email-validator | Pas vraiment un bundle mais cette librairie est nécessaire quand on utilise le mode strict du validateur email. | |
friendsofsymfony/elastica-bundle | Intègre la librairie PHP Elastica dans un projet Symfony. | |
liip/imagine-bundle | Fournit des fonctions de manipulation d'images. | |
mhujer/breadcrumbs-bundle | Fork de whiteoctober/BreadcrumbsBundle compatible avec Symfony 5. |
|
snc/redis-bundle | Permet l'intégration de la librairie PHP predis dans une application Symfony. |
|
lexik/jwt-authentication-bundle | Permet de générer et de vérifier des jetons JWT. Jetez un coup œil à cet article. |
Dev / DevOps / standards de code / analyse statique
Tout ce qui est listé ici correspond à la section require-dev
du fichier composer.
Le fichier composer.json complet ¶
Comme vous pouvez le voir, j'utilise un petit "hack" pour que je puisse utiliser mon fork du bundle FOSElasticaBundle au lieu de la version officielle. J'ai du faire ça car il n'est pas encore compatible avec Symfony 5 (ça ne saurait tarder).
{
"name": "coil/strangebuzz",
"description": "The Strangebuzz.com blog",
"license": "proprietary",
"type": "project",
"require": {
"php": ">=8.3",
"ext-ctype": "*",
"ext-curl": "*",
"ext-dom": "*",
"ext-filter": "*",
"ext-gd": "*",
"ext-iconv": "*",
"ext-intl": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-pdo": "*",
"ext-soap": "*",
"ext-sodium": "*",
"ext-zip": "*",
"api-platform/core": "^3.0.0",
"babdev/pagerfanta-bundle": "^4.0",
"doctrine/annotations": "^1.0",
"doctrine/cache": "^1.0",
"doctrine/dbal": "^3.0",
"doctrine/doctrine-bundle": "^2.6",
"doctrine/orm": "~2.15.0",
"easycorp/easy-deploy-bundle": "^1.1",
"easycorp/easyadmin-bundle": "^4.6",
"egulias/email-validator": "^3.0",
"erusev/parsedown": "^1.7",
"fresh/doctrine-enum-bundle": "^9.0",
"hautelook/alice-bundle": "^2.8",
"lexik/jwt-authentication-bundle": "^2.10",
"liip/imagine-bundle": "^2.1",
"meilisearch/meilisearch-php": "^1.1",
"mhujer/breadcrumbs-bundle": "^1.5",
"nelmio/cors-bundle": "^2.1",
"nesbot/carbon": "^2.58",
"nyholm/psr7": "^1.0",
"pagerfanta/doctrine-collections-adapter": "^4.0",
"pagerfanta/doctrine-orm-adapter": "^3.7",
"pagerfanta/twig": "^4.0",
"sensiolabs/ansi-to-html": "^1.1",
"spipu/html2pdf": "^5.2",
"stof/doctrine-extensions-bundle": "^1.4",
"symfony/asset": "^6.0",
"symfony/cache": "^6.0",
"symfony/console": "^6.0",
"symfony/dependency-injection": "^6.0",
"symfony/dotenv": "^6.0",
"symfony/error-handler": "^6.0",
"symfony/expression-language": "^6.0",
"symfony/flex": "^1.16",
"symfony/form": "^6.0",
"symfony/framework-bundle": "^6.0",
"symfony/http-client": "^6.0",
"symfony/http-kernel": "^6.0",
"symfony/mime": "^6.0",
"symfony/monolog-bundle": "^3.4",
"symfony/process": "^6.0",
"symfony/property-access": "^6.0",
"symfony/property-info": "^6.0",
"symfony/proxy-manager-bridge": "^6.0",
"symfony/rate-limiter": "^6.0",
"symfony/requirements-checker": "^2.0",
"symfony/runtime": "^6.0",
"symfony/security-bundle": "^6.0",
"symfony/serializer": "^6.0",
"symfony/stopwatch": "^6.0",
"symfony/string": "^6.0",
"symfony/thanks": "@stable",
"symfony/twig-bundle": "^6.0",
"symfony/uid": "^6.0",
"symfony/validator": "^6.0",
"symfony/web-link": "^6.0",
"symfony/webpack-encore-bundle": "^1.7",
"symfony/workflow": "^6.0",
"symfony/yaml": "^6.0",
"twig/extra-bundle": "^3.5",
"twig/intl-extra": "^3.5",
"twig/markdown-extra": "^3.0",
"twig/twig": "^3.0"
},
"require-dev": {
"dbrekelmans/bdi": "^1.0",
"friendsofphp/php-cs-fixer": "@stable",
"phpmetrics/phpmetrics": "^2.7",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.5",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-doctrine": "^1.0",
"phpstan/phpstan-strict-rules": "^1.1",
"phpstan/phpstan-symfony": "^1.0",
"phpunit/phpunit": "^9.5",
"symfony/browser-kit": "^6.0",
"symfony/css-selector": "^6.0",
"symfony/debug-bundle": "^6.0",
"symfony/maker-bundle": "^1.0",
"symfony/panther": "^2.0",
"symfony/phpunit-bridge": "^6.0",
"symfony/var-dumper": "^6.0",
"symfony/web-profiler-bundle": "^6.0",
"zenstruck/browser": "^1.0"
},
"replace": {},
"conflict": {
"symfony/symfony": "*"
},
"repositories": {
"strangebuzz/easy-deploy-bundle": {
"type": "vcs",
"url": "git@github.com:strangebuzz/easy-deploy-bundle.git"
}
},
"minimum-stability": "beta",
"prefer-stable": true,
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"config": {
"allow-plugins": {
"phpstan/extension-installer": true,
"symfony/flex": true,
"symfony/thanks": true,
"php-http/discovery": true,
"symfony/runtime": true
},
"optimize-autoloader": true,
"preferred-install": {
"*": "dist"
},
"sort-packages": true
},
"extra": {
"symfony": {
"allow-contrib": false,
"docker": true,
"require": "6.4.*"
}
},
"scripts": {
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
],
"auto-scripts": {}
}
}