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

Joel Jucá

April 08, 2017
Tweet

More Decks by Joel Jucá

Other Decks in Technology

Transcript

  1. O que é deploy? Deploy é uma instância de um

    software em execução. The Twelve-Factor App “ “
  2. 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.
  3. 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.)
  4. 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
  5. 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.)
  6. 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
  7. Con gurações Con gurações locais/especí cas do ambiente Apontamento de

    serviços fundamentais Ex.: MySQL, servidor de SMTP, etc.
  8. 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);
  9. 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);
  10. 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_';
  11. 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_';
  12. 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
  13. Know your tools! Bash (Shell script) SSH (Secure Shell) Git

    <3 rsync \m/, sed (Stream Editor) Links simbólicos
  14. 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...'
  15. SSH (Secure Shell) Conexões remotas: ssh [email protected] Não-interativa: #!/bin/bash echo

    'Iniciando o deploy...' ssh [email protected] \ "cd /var/www/lorem-ipsum; git pull origin master"
  16. $ 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.
  17. $ 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á
  18. $ 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 :(
  19. 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
  20. Técnicas [x] rsync [x] SSH + git pull [ ]

    Git no servidor ( git init --bare ) Git bare + Git hooks
  21. 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
  22. Deploy com rsync + my-project/ +-- .git/ +-- bin/ +-----

    deploy +-- www/ +----- wp-admin/ +----- wp-content/ +-------- uploads/ +----- (...) +----- wp-config.local.php
  23. 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
  24. 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/'
  25. Deploy com SSH + Git Servidor: git clone [email protected]: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'
  26. 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 [email protected]
  27. 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
  28. 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)
  29. Mais infos GitHub e SSH Manual do GNU Bash The

    Twelve-Factor App Capistrano (Ruby) Fabric (Python)