Notas sobre instalação de uma aplicação Symfony3

Uma coisa interessante que eu quero muito experimentar é o Symfony3. Mas eu não tenho hoje o tempo disponível para ler tudo, testar, brincar e então experimentar de maneira metódica cada funcionalidade antes de criar uma primeira aplicação útil. Eu já fiz isso anos atrás com o Symfony 1.4, até comprei livro na época. Mas agora meu tempo para isso é muito menor, apesar da relevância do projeto que tenho em mente.

Então eu pensei: alguém já deve ter feito alguma aplicação inicial que eu possa clonar ou copiar e da qual eu possa derivar minha aplicação, de preferência já aproveitando toda a parte de controle de usuário, autenticação, dependências comuns, e quem sabe até uma interface administrativa? A boa notícia: sim, alguém já fez isso.

Eu encontrei na verdade 3 soluções, embora tenha vislumbrado algumas outras. A primeira é a mais óbvia: o projeto “demo” disponibilizado pelo próprio Symfony. É bem fácil de instalar e tem uma vantagem sobre as demais (pelo menos nos testes que eu fiz): ele simplesmente funciona. Seguir o tutorial de instalação é bem fácil, e você conclui ele em minutos com o Symfony Demo rodando perfeitamente na sua máquina. Daí pra frente, é implementar sua própria lógica e controllers.

A segunda opção foi a mais promissora, e é exatamente o que eu buscava: uma “aplicação esqueleto” para prototipação rápida de projetos pessoais já com as funcionalidades mais comuns implementadas, como Autenticação Google/FB, bootstrap e outras. Mas ou o projeto está bugado ou minha incompetência com o Symfony é maior que eu julgava, fato é que simplesmente não consegui fazer o projeto rodar. Você pode tentar a sorte, se conseguir me fala porque estou interessado.

Embora o Projeto Demo do Symonfy me parecesse bem legal (e certamente algo a ser analisado), eu queria algo que me deixasse mais na frente em meu projeto, e acho que o mais importante seria uma interface gráfica já no modo que eu queria. E eu encontrei algo que me atendesse, por incrível que pareça. O cara pegou o Symfony3 e incorporou o Gentelella, um desses temas de Admin moderninhos, que atende minhas necessidades. Pelo que li sobre o projeto, as coisas não funcionam, mas já bastam pra mim.

A odisséia de Instalação do Symfony3

A primeira coisa que eu preciso fazer então é instalar o projeto. Não sou muito adepto desses arcabouços moderninhos, então não entendo muito de Composer, Bower, Node.JS, Angular, etc. Mas entende de PHP, de infra-estrutura, de MVC e uma pancada de outras coisas, logo devo dar conta do recado. Mas uma decisão que tomei foi, temporariamente, não versionar o projeto. Sou bom com Subversion, mas de GIT só sei o básico, e não vejo ainda como ter um projeto meu versionado em sincronia com o GitHub do autor, logo achei mais sensato trabalhar sem versionamento próprio, e mais tarde jogar no Subversion para deployment.

Seguindo as instruções do autor, eu instalei o Composer e ele preparou tudo. Me deu uma pancada de sugestão de pacotes a serem usados, que eu registro aqui porque depois posso querer investigar:

paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
symfony/polyfill-intl-icu suggests installing ext-intl (For best performance)
doctrine/doctrine-cache-bundle suggests installing symfony/security-acl (For using this bundle to cache ACLs)
phing/phing suggests installing pdepend/pdepend (PHP version of JDepend)
phing/phing suggests installing pear/archive_tar (Tar file management class)
phing/phing suggests installing pear/versioncontrol_git (A library that provides OO interface to handle Git repository)
phing/phing suggests installing pear/versioncontrol_svn (A simple OO-style interface for Subversion, the free/open-source version control system)
phing/phing suggests installing phpdocumentor/phpdocumentor (Documentation Generator for PHP)
phing/phing suggests installing phploc/phploc (A tool for quickly measuring the size of a PHP project)
phing/phing suggests installing phpmd/phpmd (PHP version of PMD tool)
phing/phing suggests installing sebastian/phpcpd (Copy/Paste Detector (CPD) for PHP code)
phing/phing suggests installing siad007/versioncontrol_hg (A library for interfacing with Mercurial repositories.)
phing/phing suggests installing tedivm/jshrink (Javascript Minifier built in PHP)
sensio/framework-extra-bundle suggests installing symfony/psr-http-message-bridge (To use the PSR-7 converters)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit-mock-objects suggests installing ext-soap (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)

Mas eu errei o servidor SMTP na etapa de configuração, então apaguei tudo e fiz de novo. Dessa vez ele foi mais longe, cheguei a abrir a aplicação e fazer login, mas os assets não estavam lá, ficou tudo desconfigurado. Fui atrás de informações, achei alguns tickets já corrigidos sobre o mesmo problema e parece que é uma coisa local, provavelmente relacionada ao Bower (já ouvi, nunca comi). Então, ao que parece eu preciso de alguns pré-requisitos no Ubuntu para que a coisa possa rodar. Além do LAMP Stack padrão (outro assunto…) precisei também de instalar e executar:

sudo apt-get install composer npm nodejs-legacy
sudo npm install -g bower

O Composer parece que tá legal, o NPM também, mas o tal do NodeJS está em legacy, e achei inclusive referências de um PPA mais apropriado (mas eu prefiro me ater aos pacotes da distribuição, sempre que possível). Embora pareça ter funcionado, ao instalar o Bower eu recebi outra mensagem dizendo que o Bower morreu e que eu devia migrar para o Yarn. Nem sei ainda o que o Bower faz, que dirá o Yarn, mas vamos em frente, depois penso nisso.

Com tudo isso feito, procedo novamente à instalação, depois de apagar o banco de dados e recriar a pasta vazia:

composer create-project krzysiekpiasecki/gentelella . “dev-master”
composer setup
composer test
php bin/console fos:user:create –super-admin
php bin/console server:run 127.0.0.1:8080 –env=dev

Na configuração de SMTP, minha recomendação é informar os dados do MailTrap, assim nenhum e-mail indesejado é disparado por engano. Só precisei ajustar a configuração da porta, que o instalado não perguntou (2525 e não o padrão 25). Isso eu fiz acrescentando chamados no config.yml e os valores no parameters.yml, conforme documentação do Symfony.

Versionamento do código do Projeto com GIT

Versionamento de código é algo que eu levo muito a sério. Apesar de ser um fã do Subversion, o fato do Symfony estar no GitHub e o esqueleto que encontrei também (além de várias dependências) me sugerem que o GIT seria uma escolha mais prática. Fora que o Composer parece assumir o GIT como algo nativo, integrado. OK, vamos de GIT então. O instalador pergunta no final se desejo manter os arquivos de versionamento (disse que sim), mas esses arquivos são ligado ao GitHub do Gentelella, e não é isso o que eu tenho em mente. Logo, refiz o processo de instalação para incluir versionamento do meu projeto no BitBucket:

  1. Criar um repositório no BitBucket (claro, pode ser GitHub também, mas BitBucket aceita projetos privados)
  2. Clonar seu repositório numa pasta
  3. Mover o .git para um outro local temporário (por backup e porque o instalador só aceita pastas novas e/ou vazias)
  4. Rodar o instalador normalmente (se preferir, apenas o primeiro passo, que é o que importa pro versionamento)
  5. Pedir ao instalador para remover os arquivos de versionamento (ou excluir a pasta .git manualmente)
  6. Move de volta o .git salvo para a pasta
  7. Adicionar os arquivos no git (git add –all; já tem .gitignore preparadinho)
  8. Commitar os arquivos no BitBucket (git push)
  9. Seguir a vida…

Como bom usuário Linux eu criei alguns mega-comandos pra fazer exatamente isso. Para implantar o projeto no meu repositório:

rm -Rf projeto gitbkp && echo “DROP DATABASE IF EXISTS nome_banco;”|mysql && git clone https://[email protected]/seu/projeto projeto && mv projeto/.git gitbkp && composer create-project krzysiekpiasecki/gentelella projeto “dev-master” && cd projeto && git add –all && git commit -m “Instalação do código-fonte importado do Gentelella” && git push

Das remoções de pastas e bancos talvez você não precise, é que eu rodei esse processo umas quinhentas vezes para ter certeza de tudo e verificar os detalhes.

Uma vez concluído esses passos, efetivamente você terá um repositório seu com a cópia do código do Gentelella pronta para ser mexida. Para instalar o projeto em outra máquina, basta substituir o primeiro comando, para ao invés de “criar um projeto”, baixar e configurar o seu projeto:

git clone https://[email protected]/seu/projeto <pasta>
cd <pasta>
composer install
composer setup

Daí pra frente vai depender se você vai rodar a aplicação do zero (e nesse caso crie seu usuário como antes) ou se vai restaurar um backup da aplicação de outro contexto. A beleza da coisa é que o passo “composer install” baixou todo o código de terceiros, o “composer setup” configurou seus acessos locais de SQL e SMTP, e agora você pode simplesmente restaurar um Dump do MySQL e copiar os arquivos de upload para ter uma cópia do seu projeto totalmente funcional (pode precisar de mais coisas, dependendo do seu projeto).

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Isso Te Ajudou?

Se este texto te deu alguma luz para resolver um problema ou entender melhor algum conceito, eu fico feliz.

Quem sabe eu possa te ajudar com algo mais específico?

Rapidinho

Compartilhe!

Compartilhar no facebook
Compartilhar no twitter
Compartilhar no linkedin
Compartilhar no whatsapp

Nunca pare de aprender!

Veja alguns textos relacionados

Configuração de um VPS no Google Cloud

Parte 1 – Criação da Instância escrevo depois Parte 2 – Configuração da Instância Nesse ponto, quando o Google disser “OK”, o que nós temos?

Ebooks grátis de Janeiro

Se você tem um Amazon Kindle e um smartphone da Samsung, provavelmente tem acesso à versão Galaxy do App da Amazon. As funcionalidades são as

Monitorando seu blog com Google Analytics

É difícil encontrar um recurso mais importante para seu blog do que alguma solução de monitoramento de tráfego. E de todas, o Google Analytics eu considero como a melhor. Não é difícil instalar, e muitos temas já dão essa opção diretamente, mas usar um plugin completo como o da Yoast faz muita diferença, e eu vou mostrar por que.