Slide 1

Slide 1 text

Deploy com WordPress Por Joel Wallis Jucá

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Roadmap O que é deploy Código-fonte, Con guração e Estado Ferramentas Técnicas de deploy Q&A

Slide 4

Slide 4 text

O que é deploy? Deploy é uma instância de um software em execução. The Twelve-Factor App “ “

Slide 5

Slide 5 text

Tipos de deploy Desenvolvimento Produção

Slide 6

Slide 6 text

Tipos de deploy Desenvolvimento Produção Homologação / Review Testes automáticos (integração contínua) etc.

Slide 7

Slide 7 text

Deploy de desenvolvimento localhost Sistemas de cache sempre desativados Linters Debuggers Pro lers etc.

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

Código, Con guração, Estado

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Repositório

Slide 14

Slide 14 text

Repositório Apenas funcionalidades

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Con gurações

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Con gurações

Slide 23

Slide 23 text

Con gurações 'localhost', 'DB_NAME' => 'nomedoBD', 'WP_DEBUG' => false, ] as $key => $val) if (!defined($key)) @define($key, $val);

Slide 24

Slide 24 text

Con gurações 'localhost', 'DB_NAME' => 'nomedoBD', 'WP_DEBUG' => false, ] as $key => $val) if (!defined($key)) @define($key, $val); $table_prefix = $table_prefix ? $table_prefix : 'wp_';

Slide 25

Slide 25 text

Con gurações

Slide 26

Slide 26 text

Con gurações > .gitignore git add .gitignore wp-config.php \ wp-config-local-sample.php

Slide 27

Slide 27 text

Estado Tratados de forma à parte e isolada Isolado das operações de deploy

Slide 28

Slide 28 text

Fluxo de Código vs Fluxo de Estado

Slide 29

Slide 29 text

Know your tools! Bash (Shell script) SSH (Secure Shell) Git <3 rsync \m/, sed (Stream Editor) Links simbólicos

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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"

Slide 32

Slide 32 text

Git DVCS mais usado no mundo. git-scm.com try.github.io

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

$ 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á

Slide 35

Slide 35 text

$ 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 :(

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Técnicas [x] rsync [x] SSH + git pull [ ] Git no servidor ( git init --bare ) Git bare + Git hooks

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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/'

Slide 42

Slide 42 text

Deploy com rsync Grsync - interface grá ca para operações com rsync

Slide 43

Slide 43 text

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'

Slide 44

Slide 44 text

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]

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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)

Slide 47

Slide 47 text

Perguntas?

Slide 48

Slide 48 text

Mais infos GitHub e SSH Manual do GNU Bash The Twelve-Factor App Capistrano (Ruby) Fabric (Python)

Slide 49

Slide 49 text

Obrigado! =* Vamos continuar a discussão: twitter.com/joelwallis1