covex-nn / env-configurator

Environment Configurator: Bootstrap new Symfony Flex applications
https://github.com/covex-nn/docker-workflow-symfony
MIT License
0 stars 0 forks source link

Introduce environment configurator #10

Open covex-nn opened 6 years ago

covex-nn commented 6 years ago

Environment configurator is a Composer plugin, it was created to automate frequent routine operations. With console command, this plugin executes sequences of these operations, stored in special repositories.

To show how it works, i prepared a demo, at the end of it you will have fully functional application, running inside Docker containers, with SonataDoctrineORMAdminBundle and FOSUserBundle installed and with configured user management inside admin panel. Please, follow instructions:

  1. Configure local DNS

    Add two records to C:\WINDOWS\System32\Drivers\etc\hosts or /etc/hosts file: docker.local 127.0.0.1 and mysql 127.0.0.1. If you use Docker Toolbox and Windows as a host, execute docker-machine env, get IP-address from DOCKER_HOST variable and add that IP instead of 127.0.0.1

  2. Create a new project

    composer create-project symfony/skeleton .
  3. Install plugin, using global installation is recommended:

    composer global require covex-nn/environment

    After installation a new composer command env:apply will be available.

  4. Install SonataDoctrineORMBundle and FOSUserBundle with user management

    composer env:apply admin
  5. Configure local docker-compose environment

    composer env:apply docker-compose

    If you applied docker-compose before admin, replace host in .env file for DATABASE_URL from 127.0.0.1 to mysql manualy.

  6. Run Web-server

    Default environment uses PHP built-in Web-server

    docker-compose up -d
    php -S 127.0.0.1:80 -t public

    But if you want to use Nginx as Web server or if you do not have PHP 7.2 installed on your host, execute the following instead:

    cp docker-compose.override.yml.dist docker-compose.override.yml
    docker-compose up -d
    docker-compose exec php bin/console cache:clear
  7. Update database schema and create admin user

    php bin/console doctrine:schema:update --force
    php bin/console fos:user:create admin admin@acme.com
    php bin/console fos:user:promote admin ROLE_SUPER_ADMIN

    or

    docker-compose exec php bin/console doctrine:schema:update --force
    docker-compose exec php bin/console fos:user:create admin admin@acme.com
    docker-compose exec php bin/console fos:user:promote admin ROLE_SUPER_ADMIN

    Even if you have chosen nginx as your web-server, you can run console commands from host, it is not necessary to run them inside container. But in this case, there will be 2 var directory: first on the host and the second inside container, and with php bin/console cache:clear you will clear cache on your host, not inside VM

  8. Visit http://docker.local/admin/

Also, there is a package covex-nn/docker-symfony, it was created via composer env:apply docker-ci command. It contains same all docker files from above and some procedures for deployment with GitLab CI/CD Pipeline.

mantiz commented 6 years ago

@covex-nn Thanks for the notification and sorry for my late response :)

I just had a quick look and I definitely need some more time to have a deeper look and try some things. My first tests worked nicely without any problems.

Are you planning to separate the repository provided by this plugin, so the plugin itself will not provide any (opiniated) environments? Are you planning to provide some mechanism to extend the list of provided configurators by additional plugins?

I will let you know when I found some more time to play with this plugin and I have more questions. :)

covex-nn commented 6 years ago

I planned to separate a plugin and a repository later. Right now it is more convenient to keep them together. These sequences in repository are for personal use, unlike Flex recipes. So, personal repositories will be used for sure.

And there was no plans about extending a list of configurators with other plugins. May be later, when there will be at least 3 plugin users or even more =))

UPD: I separated a repository from a plugin, see https://github.com/covex-nn/env-repository

drzraf commented 5 years ago

Why was https://github.com/covex-nn/extra-flex/ abandoned? It was appealing, simple, focused on inline-flex, with few extra-dependencies and just worked.

Also note that in the meantime Symfony\Flex\Configurator->install() prototype changed and extra-flex would need an update.

UPD: I just found https://github.com/kwivix/flexinline/blob/master/src/ComposerPlugin.php for even less code.