Dilemas de um Freelancer Iniciante • O cliente quase sempre tem pressa para ter o serviço entregue • O valor do freela geralmente não paga todo trabalho que temos • É comum focar no problema a ser realizado (por ex: construir um plugin para wordpress) e esquecer de cobrar outras coisas, como preparar o ambiente de desenvolvimento • Em geral, o valor recebido não paga a construção de ambientes de desenvolvimento, daí entramos em modo Go Horse pra criar logo o ambiente e partir pro freela... • E é justamente aí que você gastará muitas horas se arrependendo de ter aceito o projeto
Meu workflow (ainda não automatizado) • Entro no servidor do cliente via ssh • Gero um backup do Wordpress: • Normalmente um tar -jcf backup.tar.bz2 wordpress • Gero um dump do banco de dados • mysqldump -u root wordpress_db > cliente_wordpressdb-ddmmyy.sql • Faço o download pra minha máquina de desenvolvimento OU • Recebo um arquivo compactado de TODO diretório do Wordpress • Recebo um dump da base de dados • Faço o download pra minha máquina de desenvolvimento
E o ambiente de desenvolvimento?! • Instalar • Apache ou Nginx • php, php-fpm • Módulos do php (mysql, curl, etc) • MySQL • Configurar • Hosts virtuais no Apache/Nginx • Arquivo php.ini • MySQL • /etc/hosts • Restaurar dump do MySQL • Inicializar servidores • Testar aplicação
Meu novo workflow • Entro no servidor do cliente via ssh • Gero um backup do Wordpress: • Normalmente um tar -jcf backup.tar.bz2 wordpress • Gero um dump do banco de dados • mysqldump -u root wordpress_db > cliente_wordpressdb-ddmmyy.sql • Faço o download pra minha máquina de desenvolvimento • Configuro o /etc/hosts da minha máquina • Faço o seguinte na pasta do backup do Wordpress • Coloco o dump do banco de dados na pasta db_dump • Crio os mapeamentos do Apache em sites_enabled • Crio o arquivo docker-composer.yml • Executo: docker-compose -d up
Próximos passos =) • Estender esse workflow para outras tecnologias, principalmente Python (Django) e Ruby (Rails) • Gerar a estrutura que preciso para o Wordpress a partir de um comando (possivelmente usando o projeto CookieCutter): • Pasta db_dump • Arquivo docker-compose.yml • Mapeamentos do Apache • Para facilitar o uso por não desenvolvedores e ops, como designers, fazer um frontend em Electron para reduzir as barreiras de uso.
Recapitulando as ferramentas utilizadas • Docker (https://www.docker.com/community-edition) • Kitematic(https://github.com/docker/kitematic/releases) • Portainer (http://portainer.io) • Switch Hosts (https://github.com/oldj/SwitchHosts) • ** ZSH colorido (https://github.com/zsh-users/zsh-syntax-highlighting) ** Tá, não tem nada a ver com a proposta, mas é maneiro =)