Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Técnicas de Deploy p/ WordPress @ Meetup PHP-PB

Técnicas de Deploy p/ WordPress @ Meetup PHP-PB

Acfa202cc869d143b760cff76659cb64?s=128

Joel Jucá

April 08, 2017
Tweet

Transcript

  1. Deploy com WordPress Por Joel Wallis Jucá

  2. $ whoami Joel Wallis Jucá Mentor @ Thinkful @joelwallis1 joelwallis.com

  3. Roadmap O que é deploy Código-fonte, Con guração e Estado

    Ferramentas Técnicas de deploy Q&A
  4. O que é deploy? Deploy é uma instância de um

    software em execução. The Twelve-Factor App “ “
  5. Tipos de deploy Desenvolvimento Produção

  6. Tipos de deploy Desenvolvimento Produção Homologação / Review Testes automáticos

    (integração contínua) etc.
  7. Deploy de desenvolvimento localhost Sistemas de cache sempre desativados Linters

    Debuggers Pro lers etc.
  8. Deploy de produção Online nas Interwebs Sem ferramentas/utilitários de desenvolvimento

    Cache ativo por padrão Captura de logs Monitoramento de processos etc. PS: Estaremos focando nesse tipo aqui.
  9. Código, Con guração, Estado

  10. Código, Con guração, Estado Repositório apenas p/ código-fonte

  11. Código, Con guração, Estado Repositório apenas p/ código-fonte Con gurações

    no ambiente de execução (variável de ambiente, arquivo de con g., etc.)
  12. Código, Con guração, Estado Repositório apenas p/ código-fonte Con gurações

    no ambiente de execução (variável de ambiente, arquivo de con g., etc.) Estado (banco + arquivos) tratados à parte
  13. Repositório

  14. Repositório Apenas funcionalidades

  15. Repositório Apenas funcionalidades Personalizável via con gurações

  16. Repositório Apenas funcionalidades Personalizável via con gurações Sem con gurações

    de ambiente (credenciais do MySQL, chaves de encriptação, toggles, etc.)
  17. Repositório Apenas funcionalidades Personalizável via con gurações Sem con gurações

    de ambiente (credenciais do MySQL, chaves de encriptação, toggles, etc.) Con gurações padrões/fallbacks são OK
  18. Con gurações

  19. Con gurações Con gurações locais/especí cas do ambiente

  20. Con gurações Con gurações locais/especí cas do ambiente Apontamento de

    serviços fundamentais Ex.: MySQL, servidor de SMTP, etc.
  21. Con gurações Con gurações locais/especí cas do ambiente Apontamento de

    serviços fundamentais Ex.: MySQL, servidor de SMTP, etc. Ativa e desativa funcionalidades Ex.: define('PAGE_CONTACT', true);
  22. Con gurações <?php // wp-config.php if (file_exists(__DIR__.'/wp-config.local.php')) { include __DIR__.'/wp-config.local.php';

    }
  23. Con gurações <?php // wp-config.php if (file_exists(__DIR__.'/wp-config.local.php')) { include __DIR__.'/wp-config.local.php';

    } // global/default/fallback settings foreach ([ 'DB_HOST' => 'localhost', 'DB_NAME' => 'nomedoBD', 'WP_DEBUG' => false, ] as $key => $val) if (!defined($key)) @define($key, $val);
  24. Con gurações <?php // wp-config.php if (file_exists(__DIR__.'/wp-config.local.php')) { include __DIR__.'/wp-config.local.php';

    } // global/default/fallback settings foreach ([ 'DB_HOST' => 'localhost', 'DB_NAME' => 'nomedoBD', 'WP_DEBUG' => false, ] as $key => $val) if (!defined($key)) @define($key, $val); $table_prefix = $table_prefix ? $table_prefix : 'wp_';
  25. Con gurações <?php // wp-config-sample-local.php // define('DB_HOST', 'localhost'); // define('DB_NAME',

    'nomedoBD'); // define('DB_USER', 'username_here'); // define('DB_PASSWORD', 'password_here'); // define('DB_CHARSET', 'utf8'); // define('DB_COLLATE', ''); // $table_prefix = 'wp_';
  26. Con gurações <?php // wp-config-local-sample.php // define('DB_HOST', 'localhost'); // define('DB_NAME',

    'nomedoBD'); // define('DB_USER', 'username_here'); // define('DB_PASSWORD', 'password_here'); // define('DB_CHARSET', 'utf8'); // define('DB_COLLATE', ''); // $table_prefix = 'wp_'; echo 'wp-config.local.php' >> .gitignore git add .gitignore wp-config.php \ wp-config-local-sample.php
  27. Estado Tratados de forma à parte e isolada Isolado das

    operações de deploy
  28. Fluxo de Código vs Fluxo de Estado

  29. Know your tools! Bash (Shell script) SSH (Secure Shell) Git

    <3 rsync \m/, sed (Stream Editor) Links simbólicos
  30. Bash Linguagem de script padrão em ambientes UNIX (Linux e

    macOS). Ó tima p/ automação de tarefas! :-) #!/bin/bash project_name='lorem-ipsum' project_path="${HOME}/Projects/${project_name}" project_remote_path="/var/www/${project_name}" echo 'Iniciando deploy...'
  31. SSH (Secure Shell) Conexões remotas: ssh fulano@vps-das-internets.net Não-interativa: #!/bin/bash echo

    'Iniciando o deploy...' ssh deploy@lorem-ipsum.com \ "cd /var/www/lorem-ipsum; git pull origin master"
  32. Git DVCS mais usado no mundo. git-scm.com try.github.io

  33. $ rsync Sincroniza dois diretórios de forma recursiva. Semelhante ao

    Dropbox. # sync source/ and target/ recursively rsync -r ./source/ /tmp/target/ PS: o Dropbox usa a librsync under the hoods.
  34. $ sed Editor de streams do UNIX. Ferramenta avançada e

    mega poderosa. $ echo 'Joel Wallis Jucá' | sed -E s/J/G/g Goel Wallis Gucá
  35. $ sed Útil para transformar dumps locais utilizáveis em produção:

    mysqldump 'my_project' \ sed -E s/meu-projeto.local/meu-projeto.com/g \ > meu-projeto.sql WordPress salva inúmeras URLs do ambiente de desenvolvimento no banco de dados, complicando a vida do desenvolvedor :(
  36. Links simbólicos Arquivos ou pastas "virtuais", cujo seu conteódo é

    na verdade o conteúdo de um(a) outro(a) arquivo/pasta. # creates a symbolic hosts file in user's home dir; # any change made on it will directly be stored on # original /etc/hosts ln -s /etc/hosts ~/hosts
  37. Técnicas [x] rsync [x] SSH + git pull [ ]

    Git no servidor ( git init --bare ) Git bare + Git hooks
  38. Deploy com rsync Necessário instalar em ambos ambientes (local e

    destino): # Debian, Ubuntu, Linux Mint, elementary OS, etc. sudo apt-get install rsync # macOS comes with rsync pre-installed, but most recent # versions are available on Homebrew brew install rsync
  39. Deploy com rsync + my-project/ +-- .git/ +-- bin/ +-----

    deploy +-- www/ +----- wp-admin/ +----- wp-content/ +-------- uploads/ +----- (...) +----- wp-config.local.php
  40. Deploy com rsync + my-project/ +-- .git/ +-- bin/ +-----

    deploy <-- Bash script (plain-text) +-- www/ +----- wp-admin/ +----- wp-content/ +-------- uploads/ <- Ignored by Git +----- (...) +----- wp-config.local.php <- Ignored by Git
  41. Deploy com rsync #!/bin/bash # file: ./bin/deploy # WordPress in

    current directory rsync -crz \ --exclude='wp-content/uploads' \ --exclude='wp-config.local.php' \ --delete \ ./www/ 'user@host:/path/to/project/www/'
  42. Deploy com rsync Grsync - interface grá ca para operações

    com rsync
  43. Deploy com SSH + Git Servidor: git clone git@github.com:your/your-project.git /var/www

    Máquina local: #!/bin/bash echo '-- Pushing latest commits to master' git push origin master echo '-- Pulling latest commits from server' ssh you@your-host 'git -C /var/www/ pull origin master'
  44. Deploy com SSH + Git Para autenticar automaticamente, sem digitar

    senha: # generate a key pair of SSH keys ssh-keygen -t rsa -b 4096 # adds it to ssh-agent ssh-add # get the contents of id_rsa.pub to enter on GitHub cat ~/.ssh/id_rsa.pub # copy the output and send to GitHub (Account > SSH keys) # test the connection ssh -T git@github.com
  45. Deploy com Git no servidor No servidor: # starts a

    bare repository that works pretty much # like GitHub repositories (you can `git push` to them) git init --bare ~/my-project.git Na máquina local: # add the bare repo as a remote to your project git remote add server you@host:~/my-project.git # `git push` to your bare repo git push server master
  46. Deploy com Git no servidor No servidor, use the post-update

    hook para executar uma ação automaticamente após receber dados no repositório: + ~/my-project.git/ +-- HEAD +-- config +-- (...) +-- hooks/ +----- post-update <- post-update hook (Bash script)
  47. Perguntas?

  48. Mais infos GitHub e SSH Manual do GNU Bash The

    Twelve-Factor App Capistrano (Ruby) Fabric (Python)
  49. Obrigado! =* Vamos continuar a discussão: twitter.com/joelwallis1