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

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 mesmas, mas usando essa versão você tem acesso a um e-book grátis por mês. Você precisa usar o programa da Samsung para usar a oferta, mas pode ler os livros em qualquer dispositivo vinculado à sua conta Amazon.

Inaugurando o novo ano, temos uma seleção de 4 livros. Infelizmente, a seleção continua fraca como quase sempre, oferecendo livros do Kindle Unlimited para quem não participa do programa.

1. Medieval: contos de uma era fantástica

Por cerca de mil anos, a roda da História girou num ritmo vertiginoso: castelos e fortalezas se ergueram e foram destruídos, cidades se multiplicaram, guerras sangrentas se alternaram com períodos de paz. Migrações, invasões, o surgimento da imprensa e, por fim, as grandes navegações expandiram os limites do mundo. Tudo isso marca o período conhecido como Idade Média, que nos legou incríveis narrativas povoadas de seres mágicos, fadas, bruxas e encantamentos.

  • Autor: Eduardo Kasse
  • Páginas;: 232
  • Preço nominal: R$ 19,90

2. Louco por viver

Em uma época na qual é tão comum se sentir perdido, vemos que a infelicidade e o desânimo se tornaram as coisas mais democráticas do mundo: quase ninguém escapa deles. Tanto para os jovens quanto para os mais experientes, é comum sentir que a empolgação muitas vezes se perde nos cantos do cotidiano e da rotina. Tem gente que não acredita mais em amor, desejo, prazer de viver a vida

  • Autor: Roberto Shinyashiki
  • Páginas: 270
  • Preço nominal: R$ 8,95

3. Caçadora de Estrelas

Após flagrar o seu atual namorado com outro cara – não, você não leu errado – e constatar que o safado tinha um gosto para homens até melhor do que o seu, Eva se arrepende por ter abandonado a família, o gato, o emprego, os amigos e até e o país para segui-lo e decide que é hora de voltar para a casa, com o rabo entre as pernas, um mau humor feroz e sem um tostão no bolso. Mas ao contrário do que imaginou não é recebida com faixas e balões, muito menos com boas-vindas e sim com mais e mais azar – como se não bastasse todas as vezes em que foi traída, abandonada pelo circo ou roubada por alguma estrela errada -, seu irmão acabou com seu carro novo, seu pai se casou, ela ganhou duas quase irmãs indesejadas, seu melhor amigo roubou seu gato e ainda de quebra arrumou uma namorada.

  • Autor: Raiza Varella
  • Páginas: 544
  • Preço nominal: R$ 9,99

4. O Quarto Reich: A Segunda Guerra não acabou

James Williams, da Time Magazine, chega à meia-idade correndo risco no emprego quando um jornalista mais novo ganha o prêmio Pulitzer. Em busca do sucesso de outrora decide fazer a reportagem da sua vida: um perfil dos oficiais nazistas que não foram condenados à morte no julgamento de Nuremberg e descobre que, em 1987, só um restava vivo: Rudolf Hess.

  • Autor: M. A. Costa
  • Páginas: 225
  • Preço nominal: R$ 5,99

Meu e-book grátis escolhido

Dentre essas opções que não me agradaram muito, fiquei com o primeiro e-book grátis: Medieval: Contos de uma era fantástica. Uma coleção de contos medievais escritos por brasileiros me pareceu muito melhor do que uma auto-ajuda, um romance de guerra ou um romance moderninho. Seguindo aquela máxima de que em cavalo dado não se olha os dentes, não posso reclamar, mas ainda acho que a seleção podia ser melhor, e um pouco mais diversificada. No livros temos os seguintes contos:

  • Erva daninha – escrito por Melissa de Sá
  • O desejo de Pungie – escrito por A. Z. Cordenonsi
  • A clareira mágica – escrito por Roberto de Sousa Causo
  • Sacrifício – escrito por Eduardo Kasse
  • Kitsune – escrito por Erick Santos Cardoso
  • A dama negra e a donzela de palha – escrito por Nikelen Witter
  • O grande livro do fogo – escrito por Ana Lúcia Merege
  • A flor vermelha – escrito por Karen Alvares
  • Lenora dos Leões – escrito por Helena Gomes

De cabeça agora, só me lembro de 2 coisas boas que li sobre os tempos medievais. Li várias, algumas legais, mas que me marcaram mesmo foram As Brumas de Avalon, com os 4 livros Marion Zimmer Bradley, e as duas trilogias de Bernard Cornwell: As Crônicas do Rei Arthur, e A Busca do Graal. As Brumas de Avalon eu li com livros emprestados, agora não me lembro de quem (acho que foi minha Tia Carminha). A trilogia do Rei Artur eu tenho completa: O Rei do Inverno, O Inimigo de Deus e Excalibur. A trilogia A Busca do Graal eu também tenho completa: O Arqueiro, O Andarilho e O Herege.  Vamos ver como esses contos se comparam a estas obras fodásticas.

E você, qual livro escolheria?