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 <b>L</b>inux 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 <b>A</b>pache 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 <b>M</b>ySQL 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 7.4 <b>P</b>HP 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 Redis Magasin de données en mémoire que j'utilise ici comme cache ainsi que pour stocker les sessions PHP.
Symfony 5.0 Symfony Le framework PHP pour les professionnels.

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.

Dev / DevOps / standards de code / analyse statique

Tout ce qui est listé ici correspond à la section require-dev du fichier composer.

Nom Remarques
api-platform/schema-generator Permet la génération d'un modèle de données à partir du vocabulaire schema.org.
easycorp/easy-deploy-bundle Le moyen le plus rapide de déployer une application Symfony sans interruption de service.
phpstan/phpstan Analyse statique pour trouver des erreurs dans le code sans même avoir à l'éxécuter.
phpstan/phpstan-symfony C'est le plugin Symfony pour PHPStan afin qu'il soit au fait du code spécifique à Symfony comme le conteneur d'injection de dépendances.
roave/security-advisories C'est une librairie que chaque projet se doit d'inclure. Elle permet de vérifier que votre application n'embarque pas de dépendances avec des failles de sécurité connues.
squizlabs/php_codesniffer Vérifie et corrige les coding standards de votre application.

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).

{
    "type": "project",
    "license": "proprietary",
    "name": "coil/strangebuzz",
    "description": "Strangebuzz.com blog",
    "minimum-stability": "stable",
    "prefer-stable": true,
    "repositories": {
        "coil_foselasticabundle": {
            "type": "vcs",
            "url": "git@github.com:COil/FOSElasticaBundle.git"
        }
    },
    "require": {
        "php": ">=7.4.0",
        "ext-dom": "*",
        "ext-filter": "*",
        "ext-gd": "*",
        "ext-iconv": "*",
        "ext-json": "*",
        "ext-mbstring": "*",
        "ext-pdo": "*",
        "antishov/doctrine-extensions-bundle": "^1.4",
        "api-platform/core": "^2.1",
        "babdev/pagerfanta-bundle": "^2.0",
        "doctrine/doctrine-bundle": "^2.0",
        "doctrine/doctrine-fixtures-bundle": "^3.0",
        "easycorp/easyadmin-bundle": "^2.3",
        "egulias/email-validator": "^2.1",
        "friendsofsymfony/elastica-bundle": "^5.1",
        "liip/imagine-bundle": "^2.1",
        "mhujer/breadcrumbs-bundle": "^1.5",
        "predis/predis": "^1.0",
        "sensiolabs/ansi-to-html": "^1.1",
        "snc/redis-bundle": "~3.0",
        "spiral/roadrunner": "^1.6",
        "symfony/asset": "^5.0",
        "symfony/cache": "^5.0",
        "symfony/console": "^5.0",
        "symfony/debug-pack": "^1.0",
        "symfony/dotenv": "^5.0",
        "symfony/error-handler": "^5.0",
        "symfony/expression-language": "^5.0",
        "symfony/flex": "^1.0",
        "symfony/form": "^5.0",
        "symfony/framework-bundle": "^5.0",
        "symfony/http-client": "^5.0",
        "symfony/monolog-bundle": "^3.4",
        "symfony/orm-pack": "^1.0",
        "symfony/process": "^5.0",
        "symfony/requirements-checker": "^1.1",
        "symfony/security-bundle": "^5.0",
        "symfony/serializer-pack": "^1.0",
        "symfony/string": "^5.0",
        "symfony/thanks": "^1.1",
        "symfony/twig-bundle": "^5.0",
        "symfony/validator": "^5.0",
        "symfony/web-link": "^5.0",
        "symfony/webpack-encore-bundle": "^1.0",
        "symfony/yaml": "^5.0"
    },
    "require-dev": {
        "api-platform/schema-generator": "^2.0",
        "easycorp/easy-deploy-bundle": "^1.0",
        "phpstan/phpstan": "^0.12",
        "phpstan/phpstan-symfony": "^0.12",
        "phpunit/phpunit": "^8",
        "roave/security-advisories": "dev-master",
        "squizlabs/php_codesniffer": "3.*",
        "symfony/browser-kit": "^5.0",
        "symfony/css-selector": "^5.0",
        "symfony/maker-bundle": "^1.9",
        "symfony/phpunit-bridge": "^5.0",
        "symfony/profiler-pack": "*"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true,
        "platform": {
            "php": "7.4.4"
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": true,
            "require": "^5.0"
        }
    },
    "scripts": {
        "auto-scripts": {
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    }
}