[Symfony] Ma configuration EasyDeploy

Publié le 01/12/2019 • Mis à jour le 01/12/2019

English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧

Voici ma configuration de déploiement pour le bundle EasyDeploy. Et bien, ça n'a pas été aussi facile que ça mais ça marche bien désormais 🙃. J'ai du faire un petit hack pour modifier une variable privée de la classe de configuration afin que le déploiement puisse fonctionner. Cliquez sur le lien "Plus sur Stackoverflow" pour comprendre pourquoi. Tout le processus de déploiement prend exactement une minute (ça inclue le téléchargement de toutes les dépendances composer) et, cerise sur le gâteau, à la fin, j'entends mon Mac me dire "Déploiement terminé !" 😁


<?php declare(strict_types=1);

// config/prod/deploy.php

use EasyCorp\Bundle\EasyDeployBundle\Configuration\DefaultConfiguration;
use EasyCorp\Bundle\EasyDeployBundle\Deployer\DefaultDeployer;

/**
 * @see https://github.com/EasyCorp/easy-deploy-bundle/blob/master/doc/default-deployer.md
 */
return new class extends DefaultDeployer
{
    public function configure(): DefaultConfiguration
    {
        $configuration = $this->getConfigBuilder()
            ->server('deploy-agent@vps.ovh.net:21') // fake server name
            ->useSshAgentForwarding(true)
            ->deployDir('/var/www-deploy/strangebuzz.com')
            ->repositoryUrl('git@github.com:COil/strangebuzz.com.git')
            ->repositoryBranch('master') // 🙃
            ->keepReleases(2)
            ->remoteComposerBinaryPath('/usr/bin/composer')
            ->composerInstallFlags('--no-interaction --quiet')
            ->controllersToRemove(['public/index_dev.php'])
            ->sharedFilesAndDirs(['.env', 'public/media'])
            ->writableDirs(['public/media']);

        return $this->forceEnvironmentEnvVarName($configuration);
    }

    /**
     * @see https://stackoverflow.com/q/59111354/633864
     */
    private function forceEnvironmentEnvVarName(DefaultConfiguration $configuration): DefaultConfiguration
    {
        $property = (new ReflectionClass(get_class($configuration)))->getProperty('_symfonyEnvironmentEnvVarName');
        $property->setAccessible(true);
        $property->setValue($configuration, 'FAKE_APP_ENV');
        $property->setAccessible(false);

        return $configuration;
    }

    /**
     * Run some local or remote commands after the deployment is finished.
     */
    public function beforeFinishingDeploy(): void
    {
        $this->runRemote('/usr/bin/make load-fixtures');
        $this->runRemote('/usr/bin/make populate');
        $this->runRemote('touch /var/cache/mod_pagespeed/cache.flush');
        $this->runLocal('say "Déploiment terminé."');
    }
};

 Plus sur Stackoverflow   Lire la doc