Primeiramente, precisamos ter no computador servidor e o computador cliente o protocolo Secure Shell(SSH) e GIT(Gerenciador de Arquivos). No SSH o acesso pode ser feito por linhas de comandos entre as máquinas. Saiba que a porta padrão SSH é 22, caso sua porta seja outra é necessário especificar na hora do acesso.
Exemplo 1: Servidor Terra tem porta padrão.
$ ssh my_user@my_server
Exemplo 2: Servidor Lua não tem porta padrão, pois é a 2222. temos que adicionar ” -p <numero_porta>” .
$ ssh -p 2222 my_user@my_server
Observe que ao executar o comando acima, solicitará a senha no terminal. E o intuito é retirar a senha para facilitar o deploy da aplicação. Para isso, vamos criar um SSH Facilitado.
O “SSH Facilitado” é uma forma de entrar via terminal entre o cliente e o servidor sem digitação da senha. Pois, as duas máquinas estarão configuradas para se comunicar entre si de forma segura.
Desse modo, vamos criar uma chave pública e chave privada no computador cliente. Para isso,abra o terminal no Linux, caso use WINDOWS procure o Git Bash.
Digite comando ssh-keygen e dê um ENTER:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/my_user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Novamente, aperte ENTER.
Enter same passphrase again:
Outra vez o ENTER, será criado o par de chaves uma pública e outra privada no diretório /home/my_user/.ssh especificado com os arquivos id_rsa e id_rsa.pub. Então você deve compartilhar apenas o id_rsa.pub
Your identification has been saved in /home/my_user/.ssh/id_rsa
Your public key has been saved in /home/my_user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:OkPTL5jt293jFe5X+D7LpnFMh+crQhCPj4ODdD/9FHY rui@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
| |
| . |
| + |
| . o o . o E |
| . = S = . ++o|
| o O * + .=o+|
| * + = o. =+|
| + o o +++| | o.. ooB=|
+----[SHA256]-----+
Pronto, já temos as chaves criada. Vamos enviar ao servidor apenas a chave pública – id_rsa.pub utilizando o protocolo sftp, SCP ou pelo comando ssh-copy-id. Ao realizar o login por esses protocolos você utiliza a senha ssh que seu servidor disponibilizou.
Por SFTP
$ sftp my_user@server
sftp> put ~/.ssh/id_rsa.pub /home/my_user/.ssh
Por SCP
$ scp ~/.ssh/id_rsa.pub my_user@server:/home/my_user/.ssh/
Por ssh-copy-id
A sintaxe é:
$ssh-copy-id -i id_rsa.pub my_user@server
Esse comando ssh-copy-id é incluído na maioria das instalações SSH. Por isso, verifique se tem no seu computador. Ele copiará a chave pública no final do arquivo authorized_keys.Então, pode pular as etapas que tem o comando cat e diretamente para configurar o projeto no git.
Se utilizou sftp ou SCP você deve continuar realizando das configurações da chave usando comando cat. Vamos realizar um login utilizando o protocolo ssh com sua senha.
$ssh my_user@server
Digite a senha solicitada.
Após o login efetuado, vá até local onde está o chave pública que enviamos ao servidor via SCP , via SFTP. No nosso exemplo está no caminho /home/my_user/.ssh. E o arquivo possui o nome padrão id_rsa.pub.
$ cd ~/.ssh/
$ cat id_rsa.pub >> authorized_keys
$ chmod 644 authorized_keys
O comando cat concatena o RSA Public key para o arquivo authorized_keys. Se esse arquivo não existir, o comando o criará.
No caso do authorized_keys já existir, particularmente prefiro realizar a criação de outros authorized_keys.
Por exemplo, você cria o authorized_keys2, authorized_keys3 e assim sucessivamente para adicionar outras chaves públicas para acesso ao servidor. Veja abaixo:
$ cd ~/.ssh/
$ cat id_rsa.pub >> authorized_keys2
$ chmod 644 authorized_keys2
Perceba que criamos o authorized_keys2
Vamos a configuração do projeto pelo GIT
Após realizar todos os procedimento de configuração deslogue do servidor e retorne a fazer o login por SSH e entrará automaticamente sem a digitação de senha. Neste momento, crie uma pasta projeto.git na pasta pessoal no servidor sendo um repositório git bare.
home/my_user$ mkdir projeto.git
home/my_user$ cd projeto.git
home/my_user/projeto.git$ git init --bare
Após criação terá os seguintes arquivos e pastas mostrado abaixo.
HEAD config description hooks/ index info/ objects/ refs/
Crie um diretório www para colocar os arquivos vindo do cliente para o servidor.
projeto.git$ mkdir www
projeto.git$ ls
HEAD config description hooks/ index info/ objects/ refs/ www/
home/my_user/projeto.git$ mkdir www
Depois entre no diretório hook/ e crie um arquivo post-receive e dê permissão de execução. O editor utilizado é Vim.
home/my_user/projeto.git/hook$ vim post-receive
home/my_user/projeto.git/hook$ chmod +x hooks/post-receive
post-receive, pode ser configurado de duas maneiras distintas e todos vão chegar copiar os arquivos para o servidor na pasta informada.
Primeira forma de conteúdo do post-receive.
#!/bin/sh
echo "Deploy iniciado"
echo "Usando GIT_WORK_TREE fará os arquivos versionados do servidor ser copiado no diretório www"
GIT_WORK_TREE="/home/my_user/projeto.git/www" git checkout -f
echo "Deploy finalizado"
Segunda forma de conteúdo do post-receive.
#!/bin/sh
echo "Deploy iniciado"
git --git-dir="/home/my_user/projeto.git" --work-tree="/home/my_user/projeto.git/www" checkout -f
echo "Deploy finalizado."
Em alguns caso é necessário especificar o branch de origin meu vou exemplificar como production
#!/bin/sh
echo "Deploy iniciado"
git --work-tree="/home/my_user/projeto.git/www" --git-dir="/home/my_user/projeto.git" checkout -f production
echo "Deploy finalizado."
Agora retorne a máquina cliente e crie um repositório git usando comando git init.
$ mkdir projeto
$ cd projeto
projeto$ git init
Depois adicione o repositório remoto do servidor na pasta git –bare.
projeto$ git remote add origin ssh://my_user@serve:/home/my_user/projeto.git
Feito todos procedimentos o git está pronto para automatização do deploy. Após realizar os commit e queira subir arquivos faça um git push. Este comando sobe todos os arquivos que está na branch que estou especificando.
No caso é branch master sendo enviada para o repositório remoto origin
projeto(master)$ git push origin master
Assim você poderá trabalhar com mais facilidade na hora de subir seus códigos para o servidor. Claro que o arquivo post-receive pode ser adicionando mais comandos shell script, mas para este tutorial não seria possível cobrir todos os comandos.
Glossário Técnico:
- Deploy da aplicação: É maneira do desenvolvedor subir os arquivos computador cliente para servidor que rodará sua aplicação.
- Repositório git bare: É um repositório criado no servidor e são considerados repositórios para armazenamento. Também tal repositório não possui uma working tree, logo não é permitido editar arquivos e commitar mudanças. As atualizações a tal repositório bare pode ser feita apenas com git push.
- Repositório git : É um armazenamento virtual para projetos que permite salvar versões do código, que você pode acessar quando precisar.