Como utilizar o Docker para fazer deploy de sua aplicação

A utilização do docker é uma das formas mais simples de você realizar o deploy de sua aplicação num servidor. Neste artigo iremos entendeComo utilizar o Docker para fazer deploy de sua aplicação, criando o seu docker file.

Sempre que há migração de aplicação entre servidores ou a criação de um novo ambiente operacional, é preciso refazer toda a configuração em uma nova máquina virtual, exigindo uma quantidade de tempo e trabalho considerável. Devido a essas situações que por repetidas vezes ocorriam, uma das tecnologias que se tornaram muito populares nos últimos anos foi a de containers. Veremos algumas vantagens de adotar essa abordagem, que a princípio parece ser mais trabalhosa, entretanto, reduz o trabalho de reimplantação a próximo de zero. Veremos como construir uma aplicação web, utilizando PHP FastCGI e Nginx, além de instalar automaticamente o composer e seus pacotes.

Todos os arquivos utilizados neste post podem ser encontrados em: https://github.com/goodeath/absamPosts/tree/master/docker-app

Docker

É importante deixar claro que a tecnologia de containers e Docker são duas coisas distintas. Os containers se tratam de um tipo de virtualização. Já o Docker é uma implementação concreta dessa tecnologia. Esta opção foi escolhida por ser bastante popular, robusta e open source. Toda vez que utilizarmos o termo Docker trataremos do software .

Docker Compose

É uma ferramenta do docker, utilizada para construir e configurar múltiplos containers Docker simultaneamente. É possível iniciar todos os seus serviços através de um arquivo de configuração (docker-compose.yml) com apenas um comando. Pode ser utilizado em todos os ambientes: produção, testes, desenvolvimento, etc.

Dockerfile

Se trata de um arquivo de configuração, assim como o docker-compose.yml, utilizado para dar instruções durante a criação dos containers. Podemos utilizá-lo para baixar arquivos, instalar pacotes, executar comandos shell, etc.

Iniciando

Devemos instalar os pacotes do Docker. Basta executar o comando:

$ apt install docker.io docker-compose -y

uma vez instalado, podemos verificar a instalação do docker executando:

$ docker -v

A saída deve ser algo como: Docker version 18.09.7, build 2d0083d. Para verificar a instalação do Docker Compose, podemos executar:
$ docker-compose -v

A saída deve ser algo como: docker-compose version 1.17.1, build unknown. Caso haja problemas com a instalação dos pacotes, visite https://docs.docker.com/install/ para checar a instruções detalhadas para o seu sistema operacional.

Iremos aproveitar as imagens já construídas, disponíveis no Docker Hub (https://hub.docker.com). Vamos utilizar a imagem do PHP 7.2-fpm e a nginx:latest. Felizmente podemos utilizar o próprio docker compose para recuperar essas imagens, sem precisar necessariamente acessar o site.

Crie uma nova pasta para o seu projeto, e crie um arquivo chamado docker-compose.yml. O arquivo final vai ser parecido com este:

Vamos analisar cada um dos campos:

version – Indica qual a versão do compose que sendo utilizada. Neste caso a versão 3.
services – Define os serviços que serão iniciados pelo compose.
php | web – O identificador do serviço. Pode ser qualquer nome alfanumérico.
ports – Expõe portas do container. A sintaxe é feita de “{porta_de_origem}:{porta_de_destino}”
build – Campo que indica diretório onde está as configurações que serão aplicadas em tempo de build. Como utilizaremos os arquivos na mesma pasta, utilizamos o . (ponto) para indicar o diretório atual. Tal parâmetro é utilizado apenas no serviço do PHP, pois, o servidor nginx não exige configurações adicionais.
image – Indica o nome da imagem que será utilizada pelo serviço. Pode ser encontrado no Docker Hub.
container_name – Nome do container. É usado apenas como um identificador na hora de executar comandos no container.
volumes – Aqui podemos realizar um link de nossas pastas para dentro do container. Na forma de {origem}:{destino}. É importante notar que, os volumes (pastas, subpastas e arquivos) caso sejam alterados no host , vão refletir dentro do container e vice-versa. Caso deseje que sejam independentes, procurar pelo comando COPY no Dockerfile
depends_on – Lista os serviços pelos seus indicadores, pelo qual o serviço atual precisa esperar para começar a se iniciar.
links – Indica ao serviço, aos quais outros ele deve estabelecer uma conexão de rede. Neste caso o Nginx está linkado com o php pois precisa repassar as solicitações de arquivos php para o FastCGI. Perceba que o nginx solicita ao PHP e pega o retorno, mas, o php nunca faz uma solicitação direta ao nginx, sendo desnecessário estabelecer a conexão nas duas direções.
networks – Podemos estabelecer ou não uma rede e utilizá-las em um serviço. É ideal para manter os endereços constantes e não variar cada vez que um container novo é criado.

No Nginx utilizamos um arquivo site.conf, para realizar as devidas configurações de integração com o FastCGI. É importante não esquecer da indentação e dos hífens (-) para que não ocorra erro na hora do build.

site.conf

Vamos agora a criação do Dockerfile.

Vamos destacar apenas os pontos essenciais:

FROM php:7.2-fpm – Indica que todos os comandos abaixo dessa linha serão executados no container que possui a imagem php:7.2-fpm.

O que fazemos aqui é copiar nosso código fonte para a pasta /home, baixar e instalar o composer (poderíamos também utilizar a imagem pronta), instalar os pacotes do composer e setar a pasta padrão como /code. No final colocamos um script personalizado de execução, que fará a cópia da pasta /home/vendor para a /code/vendor.

Um dos motivos de utilizar um script personalizado, é que como estamos realizando um link da pasta com o host, se realizarmos a instalação de maneira direta, o link é feito depois da execução do Dockerfile, logo, todos os arquivos do vendor serão apagados. É possível superar essa dificuldade usando fases intermediárias de build no Docker, mas, não será nosso caso no momento.

Podemos colocar na raiz do nosso projeto um arquivo index.php:

<?php phpinfo(); ?>

Com toda a configuração realizada, basta executar dentro da pasta:

$ docker-compose up

E devemos ver a seguinte tela:

É possível que seja necessário executar os comandos com o docker em modo de administrador ou caso deseje executar no modo normal, veja este guia: https://github.com/sindresorhus/guides/blob/master/docker-without-sudo.md

Conclusão

Em resumo, a tecnologia Docker é uma abordagem mais granular, controlável e baseada em microsserviços que valoriza a eficiência. Uma vez que todo o processo (Dockerfile, docker-compose, scripts auxiliares) tenham sido completados, basta copiar os arquivos para o servidor, instalar o docker e executar o docker compose. Dessa forma, teremos todo o ambiente devidamente configurado e pronto para uso.

Links

PHP-FPM – https://hub.docker.com/_/php?tab=tags
Nginx – https://hub.docker.com/_/nginx
Dockerfile – https://docs.docker.com/engine/reference/builder/
Docker Compose – https://docs.docker.com/compose/
Página Oficial do Docker – https://www.docker.com/
Docker Compose Versão 3 – Referência – https://docs.docker.com/compose/compose-file/#build

Instalando o CPanel no Centos 7

Introdução
O CPanel é o gerenciador de hospedagem mais usado do mundo, ele facilita e muito o dia a dia de quem precisa hospedar multiplos sites no mesmo servidor e fazer o gerenciamento de arquivos, usuários, tarefas cron, emails, bancos de dados, etc.

Você precisa estar logado como root para conseguir instalar o CPanel

Primeiro vamos atualizar o Centos 7

$ yum update -y

Agora, precisamos desativar o NetworkManager

$ systemctl stop NetworkManager
$ systemctl disable NetworkManager

As vezes é necessário alterar o nome da placa de rede na inicialização do sistema.
Você deve trocar eth0 por ens18, eth1 por ens19, eth2 por ens20 e assim por diante.
Os arquivos de configuração ficam no diretório: /etc/sysconfig/network-scripts/

Agora vamos atualizar o hostname do servidor

$ hostname server.host.name
ex: servidor01.minhaempresa.com.br

Faça o download do arquivo de instalação do CPanel

$ yum install wget
$ wget http://httpupdate.cpanel.net/latest

Enfim, vamos a instalação do CPanel que pode levar até 45 minutos

$ sh latest

Após concluída a instalação, você pode acessar o WHM assim: https://IP_DO_SERVIDOR:2087/
Ex: https://1.2.3.4:2087/

Instalando MariaDB no Debian 9

Introdução
MariaDB é um servidor de banco de dados que cresceu muito rapidamente como uma alternativa ao MySQL. Neste tutorial, vamos mostrar como é simples a instalação do MariaDB no Linux Debian 9

Se estiver logado como root, você pode remover o sudo dos comandos abaixo.

Primeiro vamos atualizar o repositório

$ sudo apt update

Agora vamos instalar o servidor e o cliente MariaDB

$ sudo apt install mariadb-server mariadb-client

Pronto! Agora você pode logar no seu servidor MariaDB com o usuário root e sem uso de senha.

$ mysql -u root

Se você quer criar um novo usuário no MariaDB, pode seguir esse tutorial: https://blog.absam.io/criando-usuario-no-mysql-ou-mariadb-via-shell/

Se você precisa instalar o phpMyAdmin pode seguir este tutorial: https://blog.absam.io/instalando-phpmyadmin-no-ubuntu-18-04-ou-debian-9/

Instalando phpMyAdmin no Ubuntu 18.04 ou Debian 9

Introdução
O phpMyAdmin já vem nativamente disponível nos repositórios do Ubuntu e do Debian, por isso é extremamente simples fazer a instalação.

Se estiver logado como root, você pode remover o sudo dos comandos abaixo.

Primeiro vamos atualizar o repositório

$ sudo apt update

Agora vamos instalar phpMyAdmin

$ sudo apt install phpmyadmin

Pronto, agora é só acessar o phpMyAdmin via web: http://IP_DO_SERVIDOR/phpmyadmin
Ex: http://1.2.3.4/phpmyadmin

Se você não sabe como criar um usuário do MySQL com acesso externo, pode seguir esse tutorial: https://blog.absam.io/criando-usuario-no-mysql-ou-mariadb-via-shell/

Instalando MySQL no Ubuntu 18.04

Introdução
MySQL é o servidor de banco de dados mais usado no mundo, e neste tutorial vamos aprender a instalar o MySQL no Ubuntu 18.04

Se estiver logado como root, você pode remover o sudo dos comandos abaixo.

Primeiro vamos atualizar o repositório

$ sudo apt update

Agora vamos instalar o servidor e o cliente MySQL

$ sudo apt install mysql-server mysql-client

Pronto! Agora você pode logar no seu servidor MySQL com a senha que cadastrou durante a instalação.

Se você quer criar um novo usuário no MySQL, pode seguir esse tutorial: https://blog.absam.io/criando-usuario-no-mysql-ou-mariadb-via-shell/

Se você precisa liberar o acesso externo ao MySQL, pode seguir esse tutorial: https://blog.absam.io/liberando-acesso-externo-ao-mysql/

Liberando acesso externo ao MySQL

Introdução
Se você está precisando liberar acesso externo no seu servidor MySQL e não sabe, este tutorial vai te ensinar a fazer isso em poucos minutos.

Se estiver logado como root, você pode remover o sudo dos comandos abaixo.

Primeiro edite o arquivo de configuração do MySQL, geralmente ele se chama my.cnf

$ sudo nano /etc/mysql/my.cnf

Agora procure a linha de Bind IP

bind-address 127.0.0.1

Troque 127.0.0.1 por 0.0.0.0

bind-address 0.0.0.0

Salve o arquivo e reinicie o servidor MySQL

$ sudo service mysql restart

Pronto, seu servidor MySQL já deve estar respondendo externamente agora.
Obs: Se houver firewall, a porta 3306 precisa estar liberada para que seja possível a conexão externa.

Se você não sabe como criar um usuário do MySQL com acesso externo, pode seguir esse tutorial: https://blog.absam.io/criando-usuario-no-mysql-ou-mariadb-via-shell/

Criando usuário no MySQL ou MariaDB via SSH

Introdução
Se você está precisando criar um usuário no seu servidor MySQL ou Mariadb com acesso externo e não sabe, este é o tutorial certo para você.

Logado via SSH no seu servidor, primeiro faça login no seu servidor MySQL ou MariaDB

$ mysql -u root -p

Agora você pode criar o usuário com o seguinte comando
Troque a palavra USUARIO pelo usuário desejado e a palavra SENHA pela senha desejada.

$ CREATE USER 'USUARIO'@'%' IDENTIFIED BY 'SENHA';

Considerando que você quer dar privilégio total a este novo usuário, execute este comando

$ GRANT ALL PRIVILEGES ON * . * TO 'USUARIO'@'%';

Agora par finalizar, aplique o privilégio

$ FLUSH PRIVILEGES;

Revenda de Hospedagem x VPS Cloud CPanel

Neste artigo faremos uma análise dos pontos fortes e dos pontos fracos da Revenda de Hospedagem Cpanel com relação a um servidor VPS Cloud CPanel.

O que é WHM CPanel?

É uma plataforma onde o usuário pode criar hospedagens de site através do WHM e gerenciar todos os recursos da hospedagem como bancos de dados, emails, usuarios FTP, subdomínios, arquivos, etc usando o CPanel.

Muito usado por agências digitais, freelancers e por empresas de hospedagem de site, é uma excelente solução para hospedar múltiplos sites e revender para seus clientes colocando uma margem de lucro.

O que é um Vps Cloud CPanel?

É um servidor exclusivo, onde quem o contrata pode hospedar ilimitados sites, emails, etc. É possível hospedar sites com pequenas, médias e grandes demandas e pode também revender hospedagem para seus clientes assim como na revenda de hospedagem cpanel tradicional.

Pontos fortes do VPS Cloud CPanel:

  • É possível hospedar pequenos, médios e grandes sites.
  • Você tem um servidor dedicado e exclusivo para seus sites e sistemas web.
  • Você tem total controle sobre as operações do seu servidor, tais como backup, SSH, root, etc.
  • Servidor VPS Cloud Server até 12.4 vezes mais rápido.
  • Não existe limite na quantidade de sites a ser hospedado no seu VPS Cloud Server.
  • Alta disponibilidade dos sites e sistemas hospedados.
  • Você pode aumentar/diminuir seu VPS Cloud Server e pagar apenas pelo que está consumindo.
  • Você pode ver os planos nessa página: https://absam.io/cloud-server/planos-e-precos

Pontos fracos do VPS Cloud CPanel:

  • Preço levemente mais caro que a revenda de hospedagem tradicional
  • Preço relativamente baixo

 

O que é uma revenda de hospedagem CPanel?

É um plano, geralmente vendido por pequenas empresas de hospedagem de site, para que quem o contrata consiga hospedar múltiplos sites e revender para seus clientes.

Pontos fracos da revenda de hospedagem tradicional:

  • Não é possível hospedar sites de médio e grande porte, apenas pequenos sites com baixo acesso.
  • Servidor compartilhado com várias outras revendas de hospedagem
  • Configurações do servidor totalmente limitadas pelo provedor de hospedagem.
  • Não tem acesso root/Administrador.
  • Não tem acesso a configurações de backup.
  • Quantidade máxima de sites limitada pelo provedor de hospedagem
  • Sites travando e caindo devido a ser um servidor compartilhado com vários clientes do provedor de hospedagem

Pontos fortes da revenda de hospedagem tradicional:

  • Não há necessidade de configurar servidor
  • Preço relativamente baixo

Docker

Docker nada mais é do que uma plataforma OpenSource usada para adicionar e simplificar o uso de containers, funciona quase como uma virtualização, mas graças a sua integração ao host, trabalha de um modo muito mais rápido e eficaz. Um dos segredos do Docker é o isolamento do Sistema Operacional Base e de todas as suas dependências como libs e servidores.

O Docker também oferece várias ferramentas de grandes benefícios para o gerenciamento de máquinas e sistemas, podendo ser virtual ou física. Um exemplo é o “Aufs”, um serviço de arquivos que implementa uma união para montar sistemas de arquivos Linux.

O Docker utiliza como base o LXC ( Linux Container ), que tem a função de rodar os sistemas de forma isolados e em um único host de controle. Cada ambiente virtual vai ter sua própria CPU, memória, rede, espaço e vários outros recursos independentes. Todo esse isolamento é graças aos Grupos de controles ( cgroups ) um dos recursos do Kernel.

Vale muito a pena pensar em migrar para o uso do Docker, além de sua velocidade que é superior a de uma virtualização, suas ferramentas vão fazer uma economia com vários recursos de forma simples e eficaz.

Instalando o painel VestaCP

Neste tutorial iremos ensinar como instalar e configurar o painel VestaCP. O painel VestaCP possuí muitos recursos que permitem que você hospede e gerencie seus sites com facilidade em seu Cloud Server. Sendo funcional em RedHat, CentOS e Ubuntu, mas no tutorial de hoje iremos mostrar-lhe como instalar e configura-lo no CentOS.  Então vamos para o tutorial:

Primeiro passo – Faça o login em seu servidor, como root.

Segundo passo – Utilize o comando “curl” para fazer o download do script de instalação do painel.

# curl -O http://vestacp.com/pub/vst-install.sh

Terceiro passo – Assim que completar o download, execute os seguintes comandos.

# chmod +x vst-install.sh

# bash vst-install.sh

Quarto passo – O instalador irá pedir para confirmar a desativação do SELinux e do Iptables, aperte Y e confirme. O instalador também irá pedir um endereço de email válido, onde enviarão as informações de acesso, digite o endereço de email e confirme.

Quinto passo – Após a finalização da instalação, aparecerá os dados de acesso do painel VestaCP.

Também é possível visualizar os mesmos dados em sua Caixa de Entrada.

Sexto passo – Para acessar ao VestaCP, basta abrir o seu navegador de preferência e inserir o URL recebido, o login e a senha.

E pronto, seu painel VestaCP foi instalado com sucesso! Agora é só adicionar os seus sites!

Sair da versão mobile