VPS Digital Ocean: primeiros passos com hospedagem Linux
By Fernando Mariano
- 15 minutes read - 2991 wordsSe você está procurando uma VPS (Virtual Private Server), como as VMs oferecidas pela Digital Ocean, pode ser por algumas razões:
- o provedor compartilhado de webhosting não atende mais a demanda de seu blog/site;
- sua aplicação requer a instalação de uma dependência, bibliotecas ou acesso root do sistema operacional;
- você gostaria de ter o controle dos dados e poder se aventurar na linha de comando para configurar seu próprio ambiente.
Independente de qual for o motivo é preciso ter a consciência de que você terá que realizar a configuração de diversos aplicativos e serviços para que a aplicação tenha as seguintes características:
- seja segura com as últimas atualização do sistema operacional, aplicações, banco de dados, módulos, bibliotecas;
- possua ou utilize um servidor de email próprio, de terceiros e/ou em nuvem;
- segurança de rede com a proteção de um firewall;
- acessível remotamente, por exemplo, via SSH. Assim será possível realizar a manutenção do sistema;
- recuperável em caso de falha ou perda de dados, com backup automatizado e armazenado remotamente, ou seja, fora da máquina virtual;
- acessível com o endereço do domínio através de um DNS instalado localmente ou então com serviços de resolução nomes em nuvem;
- com alta disponibilidade para garantir que o serviço esteja disponível mesmo que aconteça algum problema com a VPS principal ou com o datacenter que sua VM esteja hospedada;
Aplicação dos conceitos apresentados
As dicas presentes no artigo são baseadas na minha experiência com a Digital Ocean com uma VPS Ubuntu Server para servir a Enter Concursos e minha experiência profissional como analista de sistemas. Os conceitos apresentados também podem ser úteis para outros provedores como a RAMNode e qualquer outro provedor de cloud computing como Rackspace. Porém provedores como Rackspace e Amazon AWS implementam muitos serviços apresentados em sua infraestrutura em nuvem, como por exemplo banco de dados, email, alta disponibilidade, cache, firewall. Portanto, a utilização de um VPS na Amazon AWS são teoricamente mais simples de serem mantidos e consequentemente mais caros.
Primeiros passos na Digital Ocean
Para configurar uma máquina virtual na Digital Ocean é preciso ter alguns conhecimentos prévios em administração de sistemas Linux e redes de computadores. Seguem abaixo alguns deles:
- administração do servidor via linha de comando/console Linux;
- instalação de aplicativos via apt-get, aptitude, yum ou outro gerenciador de pacotes utilizados pela sua distribuição;
- conhecimentos em gerenciamento de processos;
- conceitos de redes como endereços IP, resolução de nomes com servidores DNS, básico de firewall;
- leitura e interpretação de arquivos de logs de aplicações e sistema operacional;
- conhecimento em como realizar o backup e restore de sua aplicação.
Este artigo não pretende ser um guia completo de como adquirir todos os conhecimentos elencados acima, porém sempre que possível irei indicar boas referências para que você consiga o conhecimento necessário com autoestudo.
Review de provedores de computação em nuvem
Por que a Digital Ocean como provedora de VPS? Em Outubro de 2013 meu website www.enterconcursos.com.br apresentava uma lentidão excessiva para as consultas dos usuários em uma VM de baixo custo na Amazon EC2. Com isso tentei realizar tunning de aplicação e banco de dados, porém sem sucesso. Consegui uma boa melhora de desempenho com a migração para a Digital Ocean que oferece preços baixos com boa performance. Para saber mais sobre como foi realizada a migração e análise de outros provedores de computação em nuvem, leia o artigo: Performance de hardware de VPS: Digital Ocean, Amazon EC2 e Rackspace.
E por que não optei pela Amazon AWS/EC2? Com certeza, a Amazon é um dos melhores provedores de cloud computing oferecendo diversos serviços em nuvem com alta disponibilidade e baixa latência com hospedagens em datacenters no Brasil. Porém, caso você não tenha muitos recursos financeiros para seu projeto pessoal, a Digital Ocean pode lhe oferecer um bom custo benefício, caso você queira colocar um pouco a mão na massa e aprender um pouco sobre Linux e redes de computadores.
O interesse medido pelo Google Trends pela keyword “Digital Ocean” tem aumentado ao longo do tempo, veja:
Como testar de graça a Digital Ocean e Amazon EC2
Para realizar alguns testes você pode tentar utilizar alguns códigos promocionais que oferecem de 5 a 10 dólares na Digital Ocean. Basta realizar uma procurar rápida no Google ou até mesmo ficar atento nas propagandas do Facebook. Depois de aplicar o código você já irá conseguir iniciar uma máquina virtual.
Caso considere este artigo útil você pode usar o meu link de indicação, onde você ganhará 100 dólares de créditos para gastar em 60 dias e eu 25 dólares :).
Já a Amazon EC2 oferece a instância de menor capacidade por 1 ano gratuitamente.
Sistemas operacionais disponíveis na Digital Ocean
A Digital Ocean não executa sistemas operacionais proprietários como o Microsoft Windows, somente de código aberto. As lista segue abaixo:
- Ubuntu Server
- Fedora
- Debian
- CentOS
- Arch Linux
- CoreOS
Como criar a primeira máquina virtual na Digital Ocean
A criação de uma VM na DO é bem fácil e rápida, leva em torno de 60 segundos para a instância menor ser ligada após o setup dos parâmetros básicos. Praticamente, após o registro do usuário é preciso especificar o sistema operacional, algumas configurações de rede/backup, escolher o datacenter onde a máquina virtual será hospedada e setar a configurações de chaves de acesso via ssh (opcional).
Há um vídeo produzido pela própria Digital Ocean com legendas em português. O tutorial é bem curto, tem aproximadamente 5 minutos e caso você tenha usado o link de registro que mencionei acima não será necessário informar o número do cartão de crédito para a criação da VPS.
Conhecimentos básicos necessários
Para manter as VMs na Digital Ocean ou outro provedor de computação nuvem que forneçam VPS (máquinas virtuais), você vai precisar de um pouco de conhecimento em Linux e redes de computadores. Abaixo ótimas referências de onde você consegue obter esses conhecimentos:
Linux
- Linux, Guia Prático - do Carlos Morimoto do hardware.com.br
- Guia Foca - guia de referência utilizado inclusive para a certificação LPI
- Artigos e how to’s do Viva o Linux
- Vídeoulas completas sobre Linux
Redes de computadores
- Redes, Guia Prático do Carlos Morimoto do hardware.com.br
- Material introdutório e de fácil compreensão sobre Redes de Computadores
- Playlist completa sobre Redes de Computadores no YouTube da Boson Treinamentos
Os sites acima possuem materiais completos sobre Linux e Redes, porém em caso de dúvidas pontuais o melhor recurso é com certeza uma rápida pesquisa no Google.
Acesso remoto via SSH e console web na VPS na Digital Ocean
Após criar a VM você receberá por email a senha do usuário root com as instruções de acesso. No Linux, apenas digite o comando abaixo e você já estará logado e pronto para iniciar a configuração do ambiente:
ssh -l root endereço_IP
Caso você esteja utilizando Windows em sua estação de trabalho utilize o Putty ou SuperPutty para acessar o console remoto da VM.
Na Digital Ocean, ainda existe a possibilidade de acessar a VM via navegador Chrome/Firefox sem a necessidade de instalação de nenhum plugin e utilização de clientes SSH. Bastar criar a VM, ir em Droplets, clique sobre o nome da VM, vá em Access e depois em Console Access.
Configurações adicionais no servidor SSH para aumentar a segurança da VPS
Apesar do acesso via SSH estar habilitado é recomendado adicionar algumas configurações de segurança:
- trocar a senha do usuário root com o comando: passwd root
- criar um novo usuário sem privilégios de administrador: adduser myuser
- definir uma senha para o novo usuário: passwd myuser
- desabilitar o login pelo usuário root no arquivo de configuração /etc/ssh/sshd_config com a diretiva:
- PermitRootLogin no
- troca de porta do servidor ssh em /etc/ssh/sshd_config na diretiva Port;
- permitir a conexão no ssh server somente de usuários sem privilégios de root no arquivo /etc/ssh/sshd_config com a diretiva:
- AllowUsers myuser
Após as configurações recomendadas acima, reinicie o serviço SSH:
service ssh restart
Resolução de nomes com DNS
A resolução de nomes de DNS permite que nós seres humanos não precisarmos decorar endereços IP. Endereços IP é um conjunto de números que torna única a identificação de um computador ou servidor na internet, essa tecnologia que permite a comunicação entre o seu computador e os servidores do Google ou Facebook.
Por exemplo, para acessar o Google você geralmente digita no navegador google.com.br, mas também é possível acessá-lo pelo endereço https://201.82.108.113. Decorar o endereço de cada site seria humanamente impossível e para isso existe a resolução de nomes para endereços IP, o que permite que acessamos sites com nomes mais familiares para nós seres humanos.
Provavelmente, você possui seu site em um provedor de hospedagem que realizou toda a configuração de DNS no momento que contratou o serviço, porém para migrar seu serviço para a Digital Ocean você vai precisar ao menos realizar algumas alterações no DNS.
A maneira mais fácil é ir até a empresa que você comprou seu domínio de internet e realizar a alteração no painel de administração de DNS para os novos endereços IP da Digital Ocean. Porém, é preciso ter cuidado. Essa é a última ação que você deve tomar, antes certifique-se que o seu site está totalmente configurado e testado na VPS, caso contrário seu site poderá enfrentar problemas.
Ainda existe a opção de utilizar o DNS da própria Digital Ocean, Amazon Route 53 ou então instalar e configurar o bind em sua VPS. Entretando, a configuração do bind é a mais avançada e menos recomendado. Opte pelo DNS da própria Digital Ocean ou então a Amazon Route 53.
Para entender melhor o funcionamento de toda a estrutura do serviço de DNS recomendo a leitura do tutorial do Julio Battisti sobre TCP/IP na seção específica sobre “uma introdução ao DNS”.
Se você prefere aprender por vídeos, o NIC.br possui um ótimo material no YouTube com a explicação sobre o que é o DNS, como funciona a resolução de nomes e também os tipos de registros de um domínio. Alguns conceitos mais avançados de resolução de nomes são explorados, portanto recomendo que leia anteriormente o tutorial do Julio Battisti.
Após os conceitos teóricos sobre protocolo DNS e como funciona a resolução de nomes, chegou a hora e comprar o domínio para sua empresa/site e configurá-lo para apontar na sua VM/aplicação na Digital Ocean. O segundo vídeo indicado da DO, explica como criar uma máquina virtual, comprar um domínio, utilizar o serviço da DO para resolução de nomes e apontar um registro do tipo A (www.dominio.com.br) para sua máquina virtual (endereço IP X.X.X.X). Não há legenda em português por enquanto, mas é possível entender bem os passos necessários para realizar as configurações apenas assistindo o vídeo.
Ative uma segurança básica com a configuração de um Firewall
O firewall faz a proteção básica contra acessos indesejados e protege os serviços que são executados na máquina virtual e não precisam ficar acessíveis para a internet.
Por exemplo, geralmente o banco de dados é executado na interface de loopback (127.0.0.1) e esta configuração é definida por padrão em muitos sistemas operacionais. Por alguns motivos a configuração pode estar atrelada na interface de rede local que na Digital Ocean vai deixar o serviço exposto para a Internet. Para que ninguém consiga acesso direto ao banco de dados você vai precisar de um firewall para proteger esse e outros serviços. Claro se você não precisa que seu banco de dados seja executado na interface exposta na internet, reconfigure-a para a interface de loopback.
No Ubuntu existem diversas opções de firewall, uma delas é configurar o iptables do zero o que requer conhecimentos mais avançados sobre redes e segurança. Como o foco deste artigo é lhe fornecer alguns conceitos e dicas para migrar um site de um provedor de hospedagem para uma VPS, esses conhecimentos não serão abordados neste post.
Conteúdo adicional para entender os conceitos básicos de um firewall, veja este trecho do livro do Carlos Morimoto.
Exemplos de configuração de firewall:
A configuração do iptables não é trivial e para um iniciante pode ser a forma mais dolorosa de configuração de um firewall. Mas talvez a melhor forma de aprendizado dos conceitos de um firewall seja pelo iptables.
No caso do Ubuntu existem duas opções de firewall que facilitam a configuração e já fazem um setup básico de segurança contra ataques já conhecidos como ping flood e outras formas já bem difundidas. O UFW e o apf-firewall.
O UFW que é o padrão e já vem ativado por padrão no Ubuntu. É fácil de utilizar e é possível configurá-lo através de uma interface gráfica chamada gufw. Um tutorial inicial pode ser visto em https://wiki.ubuntu-br.org/UFW.
Outro firewall de fácil utilização e disponível nos repositórios do Ubuntu é o apf-firewall. A configuração mais básica poderia ser realizada da seguinte forma:
- Instalação: aptitude install apf-firewall
- Habilitar firewall em /etc/default/apf-firewall com RUN=”yes”)
- Desabilitar o modo de desenvolvimento e liberar portas com a diretiva IG_TCP_CPORTS em /etc/apf-firewall/conf.apf
DEVEL_MODE="0"
IG_TCP_CPORTS="22,80,443"
Se você encontrar o erro abaixo, pode tentar o workaround sugerido em bugs.lauchpad.net:
_apf(1628): {glob} kernel version not equal to 2.4.x or 2.6.x, aborting._
Lembre-se o procedimento descrito no lauchpad é uma solução paliativa, ou seja, utilize por sua conta e risco.
Após a configuração do firewall e o bloqueio a praticamente todas as portas com exceção dos serviços http (80), https (443) e ssh (22) você não conseguirá acessar o banco de dados via mysqlclient (MySQL) ou o pgsql (PosgreSQL) para dar manutenção do database. A alternativa é utilizar túneis SSH para acessar esses e outros serviços.
Imagine o túnel ssh como um meio de transporte da conexão com o banco de dados. Sua requisição de conexão chegará até a VPS via porta 22, mas ao chegar na máquina virtual remota o SSH se encarrega de encaminhar as requisições para a porta do serviço desejado, por exemplo o seu banco de dados na porta 3306 do MySQL.
Para ver alguns exemplos de como utilizar o recurso de túneis no SSH para acessar os serviços de sua VPS de forma segura, sem que seja necessário abrir portas no firewall, recomendo a leitura do artigo do blog IBM DevelopersWorks.
Servidor de email
A configuração de um servidor de email também não é nada trivial e provavelmente seu website utiliza alguma forma de comunicação via email, por exemplo, a confirmação de cadastro de usuário, notificação de novos post/artigo do blog, notificação de novo comentários.
A alternativa neste caso é utilizar um servidor de email em nuvem, por exemplo, a Amazon SES que permite o envio de até 2.000 emails para clientes da Amazon EC2 ou caso você esteja fora da rede Amazon, apenas $0.10 dólares para cada 1.000 emails. Se você utiliza um blog como o WordPress existem plugins para a utilização deste serviço.
Outra opção para usuários do Google Apps é a utilização do GNU Anubis para realizar um “proxy” local entre os servidores de email do Google e sua aplicação (WordPress, Joomla ou Drupal). Na prática, o Anubis vai comunicar com os algoritmos de criptografia do Gmail e do lado de sua aplicação irá disponibilizar um SMTP simples e sem autenticação para usa aplicação. A restrição em utilizar uma conta do gmail você fica limitado no envio para uma grande quantidade a uma série de regras imposta pela Google, porém seu uso pode ser interessante para notificações de backup ou alertas de rotinas/scripts de manutenção da aplicaçã. Contudo deve ser evitado caso o volume de envio de email seja alto demais.
A última opção e talvez menos recomendada por conta do trabalho na administração do serviço é a configuração de aplicações open source de serviço de email como sendmail ou postfix.
Backup, restore e recuperação de desastres
A Digital Ocean e outros provedores de VPS como RAMnode não possuem grandes infraestrutura contra falhas (comparado à Amazon e Google Cloud Computing), apesar de oferecer 99.99% de garantia de disponibilidade. De qualquer forma é importante garantir o backup de sua aplicação e banco de dados.
Caso você utilize o WordPress, veja este artigo onde explico como realizar o backup e restore no WP. O post mostra quando o blog é hospedado em um provedor de hospedagem compartilhada, mas pode ser adaptado com poucas modificações para o backup de um blog hospedado em uma máquina virtual.
Ao iniciar a configuração e instalação do website na VPS não se esqueça de documentar tudo o que é realizado para configurar os diversos sistemas. Além de lhe ajudar a fixar o conhecimento, lhe ajudará quando precisar replicar o ambiente, criar um cluster para suportar um número maior de requisições ou recuperar-se de um erro.
Alta disponibilidade com a Digital Ocean
A Digital Ocean oferece alta disponibilidade para suas VPS o que torna ideal para projetos iniciais e que precisam manter um baixo custo. Porém, caso queira garantir uma disponibilidade ainda maior é preciso pensar uma solução de HA e assim não ficar dependente um único datacenter. Já ouvi relatos que a Digital Ocean hospeda as VMs dentro de servidores operando no modo standalone, ou seja, sem funcionalidades de migração automatizada em caso de falha de hosts. De qualquer forma os problemas de indisponibilidade são raros e para ser sincero, nunca tive problemas desde 2014.
Uma alternativa é utilizar ferramentas como HAProxy, HeartBeat, Watchdog e Nginx. Um tutorial para iniciar os estudos pode ser lido em blog.bobbyallen.me.
Apesar de que os problemas na Digital Ocean não são comuns, você pode conferir as histórias de indisponibilidades e manutenções programadas em https://status.digitalocean.com.
Onde encontrar mais informações sobre migração de uma hospedagem compartilhada para um VPS?
Este artigo não tem o propósito de ser um guia completo de como migrar seu website de uma hospedagem compartilhada para uma VPS, porém um guia rápido de quais são os recursos essenciais que são necessários para que você possa realizar a migração sozinho.
Claro que sempre existe a possibilidade de contratação de um especialista para realizar este trabalho, porém caso queira se aventurar pela linha de comando de servidores Linux e entender um pouco como toda essa infraestrutura funciona, pode ser uma boa escolha estudar um pouco e fazer você mesmo.