Como configurar um blog Ghost em uma VM Ubuntu

O objetivo deste artigo é descrever um passo a passo de como criar uma máquina virtual (VM) Linux Ubuntu na Azure, através do Portal do Azure, e configurar o CMS Ghost para criar um blog pessoal. Inclusive, o Ghost é o CMS usado neste blog 😁

O intuito aqui apresentar algumas funções básicas de criação uma máquina virtual em um provedor de serviços de computação em Nuvem, realizar o acesso à VM pelo SSH, configuração do webserver Nginx e outras ferramentas, e a instalação e configuração do CMS Ghost.

Vamos lá?

O que é o Ghost?

O Ghost é um CMS - Content Management System (Sistema de Gerenciamento de Conteúdo) que fornece ferramentas para publicar conteúdo, compartilhar e fomentar o seu negócio através de websites. Trata-se de uma alternativa open source ao Wordpress, que é o CMS mais famoso e mais utilizado atualmente.

O Ghost possui uma interface intuitiva e fácil de usar, permitindo publicar um site em poucos cliques. Baseado em NodeJS, é rápido, seguro, SEO friendly, responsivo e permite diversas integrações com várias APIs.

Para quem busca desempenho, segurança e economia, o Ghost é uma excelente opção. Há a versão paga, onde você pode hospedá-lo em uma plataforma gerenciada pelo Ghost (assim como o Wordpress), ou auto-hospedar em um servidor próprio, como em um VPS, por exemplo.

Se você é outsider e gosta de usar ferramentas "diferentonas", o Ghost é uma boa ideia. 😅

Especificações do Ghost

De acordo com a documentação do Ghost, esses são os requisitos mínimos para a instalação do CMS:

  • Sistema operacional: Ubuntu 16.04, Ubuntu 18.04, Ubuntu 20.04 ou Ubuntu 22.04
  • Nginx (mínimo versão 1.9.5 para SSL)
  • Versão suportada do Node.js (a recomendada é a v16)
  • MySQL 8
  • Systemd
  • Um servidor com no mínimo 1GB de memória RAM
  • Um domínio registrado

Passo a passo

1) Criar uma conta no Portal Azure

Caso você já tenha uma conta criada no Azure, pule essa etapa. Caso você não tenha uma conta, será necessário criá-la no Portal do Azure.

No Azure, ao criar uma conta nova você vai receber um crédito de $200 para usar e testar os serviços por 30 dias. Além disso, após os 30 dias você pode utilizar serviços populares por 12 meses gratuitamente, tais como:

  • VMs Linux: 750 horas de máquinas virtuais com capacidade de intermitência B1s;
  • Banco de dados SQL: 250 GB de instância S0 com dez unidades de transação de banco de dados;
  • Armazenamento de Blobs do Azure;
  • Azure Functions: 1 milhão de solicitações;
  • Entre outros serviços.

Você pode conferir os serviços gratuitos clicando aqui.

No meu caso, eu já utilizo uma conta de estudante da Microsoft vinculada ao Azure, que disponibiliza $100 em créditos para uso.

2) Criar uma VM na Azure

Após ter criado a sua conta no Azure, você vai criar a máquina virtual (VM). No portal do Azure, clique em “Criar um recurso”, conforme imagem:

Há também a opção “Máquina virtual” que vai seguir o mesmo caminho.

3) Configurar a VM

Em seguida, vamos configurar a nossa máquina virtual para atender as especificações do Ghost.

Primeiramente: No Azure, nada se cria se você não tiver um grupo de recursos na sua assinatura. Dessa forma, caso você não tenha um Grupo de recursos, clique em “Criar novo” e forneça um nome para o seu grupo.

Na opção Detalhes da instância, são solicitados alguns dados de configuração da máquina virtual. Eu optei pelas seguintes configurações:

  • Nome da máquina virtual: vm-ghost (fique livre para escolher o nome da vm)
  • Região: (US) East US
  • Opções de disponibilidade: Zona 1
  • Tipo de Segurança: Padrão
  • Imagem: Ubuntu Server 20.04 LTS
  • Tamanho: Standard B1ms (1 vcpus, 2 GiB de memória)
🚨
Optei por uma instância com 2GiB de memória. Até poderia usar a padrão B1 com 1GiB, mas pode ocorrer um gargalo durante a instalação do Ghost, alegando falta de memória. Há como contornar isso, mas fica para outro post. 

Vamos seguir com o passo a passo:

Conta de administrador

Aqui vamos escolher gerar um par de chaves SSH para acessar a máquina virtual. As configurações foram:

  • Tipo de autenticação: Chave pública de SSH
  • Nome de usuário: azureuser (fique livre para escolher o nome)
  • Origem de chave SSH pública: Gerar um novo par de chaves
  • Nome do par de chaves: myKey (fique livre para escolher o nome das chaves)

Regras de portas de entrada

  • Portas de entrada públicas: Permitir portas selecionadas
  • Selecione as portas de entrada: SSH (22), HTTP (80) e HTTPS (443)

Na aba DISCOS, optei pelo Tipo de Disco de SO como SSD Standard com redundância local. A partir daí, você pode avançar com as opções até chegar em “Revisar + criar”.

4) Gere a chave privada

Após clicar em “criar” para criar a sua VM, será exibido na tela um aviso para gerar um par de chaves SSH. Clique em “Baixar chave privada e criar recurso”. Será baixado um arquivo em formato .pem.

E voilá! A VM foi criada!

Clique em “Ir para o recurso” para visualizar as informações da sua VM.

5) Conectar à VM

Depois de acessar as informações da VM, você vai copiar o endereço de IP público da máquina:

Caso você esteja no Linux ou MacOs, você deve alterar a permissão do arquivo de chave .pem para 400, com o comando:

## Alterar permissões da chave .pem
chmod 400 nome_da_chave.pem 

Para se conectar à VM, use o comando:

ssh -i nome_da_chave.pem nome-do-usuário@ip-publico-da-VM

Caso esteja no Windows, abra um terminal - pode ser o CMD ou o PowerShell. Você vai usar o seguinte comando - lembrando de substituir o caminho para onde está localizada a sua chave .pem e o IP para o IP público da sua VM:

ssh -i ~/Downloads/myKey.pem azureuser@ip-publico-da-VM

Caso você tenha feito o acesso com sucesso, você receberá uma mensagem similar da imagem abaixo:

6) Crie um novo usuário

Após se conectar à VM, entre no usuário root e crie um novo usuário, que será nosso user padrão para configurar as intalações e gerenciar o Ghost:

## Acessar usuário root
sudo su

## Criar um novo usuário
adduser nome_do_usuário

Agora, dê privilégios de superuser para o novo usuário criado, e alterne seu acesso para o usuário:

## Privilégios de superuser
usermod -aG sudo nome_do_usuário

## Alternar para o user criado
su - nome_do_usuário

7) Instalar o Nginx

Agora, faça um update e um upgrade dos pacotes no Linux:

sudo apt-get update && sudo apt-get upgrade -y

Em seguida, instale o Nginx com os comandos:

sudo apt-get install nginx -y

## Opcional
sudo ufw allow 'Nginx Full'

Se tudo ocorreu bem com a instalação do Nginx, ao acessar o IP público da VM no seu navegador você vai ver a mensagem:

8) Instalar o MySQL

Agora, entre com o seguinte comando no terminal para instalar o MySQL:

sudo apt-get install mysql-server -y

9) Instalar o Node.Js

Em sequência, vamos instalar o Node.Js com os comandos:

# Fazer curl na versão recomendada do node
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash

# Instalando o node
sudo apt-get install nodejs -y

10) Abrir as portas do webserver

O Iptables é um firewall importante no Linux e, muitas vezes, por definição o acesso à determinadas portas não é permitido. Portanto, use os comandos a seguir para abrir as portas 80 e 443, caso seja necessário:

sudo apt-get install iptables-persistent

# HTTP :80
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS : 443
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# Salve as configurações
sudo netfilter-persistent save

11) Instalando o Ghost

Agora, vamos criar um usuário no MySQL para o Ghost.

# Inicializar o MySQL
sudo mysql

# Criar um DB user com senha
create user 'ghost'@'localhost' identified by 'Senha1234';

# Dar todos os privilégios para o usuário
grant all privileges on *.* to 'ghost'@'localhost';

# Criar uma DB para o Ghost
create database ghost;

# Atualizar as permissões
flush privileges;

# Sair do MySql
exit

Instale o Ghost-CLI

#Instalar CLI
sudo npm install ghost-cli@latest -g

Crie um novo diretório com o comando mkdir:

# Criar um diretorio para o ghost
sudo mkdir -p /var/www/ghost

# Setar o usuário dono do diretório
sudo chown nome_de_usuario:nome_de_usuario /var/www/ghost

# Alterar as permissões
sudo chmod 775 /var/www/ghost

# Navegar até o diretório criado
cd /var/www/ghost

# Iniciar a instalação do ghost
ghost install

Aguarde até que o Ghost termine de ser instalado.

12) Configurações da instalação

Após a instalação, o sistema vai pedir algumas configurações:

  • Blog URL: caso você possua um domínio registrado, pode inseri-lo nesse campo. Se não tiver, deixe o IP da sua máquina virtual mesmo. No meu caso, usei o endereço https://ludsilva.tech - sim, com https mesmo! Não precisa se preocupar com o certificado SSL, pois ele será configurado posteriormente.
  • MySQL hostname: hostname - por padrão, é o hostname
  • MySQL username / password: use o usuário e senha criados anteriormente para o MySQL
  • Ghost database name: ghost - use o nome do banco de dados criado no MySQL
  • Set up a ghost MySQL user? ghost - utilize o nome do user criado no MySQL
  • Set up NGINX? Selecione "Y"
  • Set up SSL? Selecione "Y"
  • Enter your email - forneça um e-mail para o certificado SSL
  • Set up systemd? - Selecione "Y"

Ao final do processo, se tudo ocorrer bem, você vai conseguir acessar o blog pelo pelo ip_da_vm/ghost

Se você utilizou um domínio já registrado, falta o último passo antes de acessar seu blog: configurar os apontamentos DNS.

13) Configurar o DNS (opcional)

Caso você possua um domínio registrado, é hora de configurar os apontamentos DNS para que quando você digite o endereço no navegador, você seja redirecionado para o seu blog Ghost.

💡
O domínio de testes que utilizei foi criado gratuitamente com o GitHub Student Developer Pack.

Para facilitar esse processo, vamos somente configurar o apontamento do tipo A, que vai utilizar o IP público da VM criada no Azure.

No meu caso, eu utilizo a Umbler como zona de DNS do meu domínio. Outra dica é deixar na CloudFlare. Por facilidade de uso, evito deixar no RegistroBr caso seja um domínio nacional (de extensão .br) ou em outros provedores. A interface da Umbler é bem amigável, e a da CloudFlare permite inserir apontamentos do tipo AAAA. Fica a sua critério escolher qual lhe atende melhor.

Como meu domínio já estava adicionado, só precisei logar no painel Umbler e clicar em "Domínio":

Em seguida, clicar em "Editor de DNS":

Depois, clicar no botão "+ Adicionar":

E criar um apontamento com os seguintes valores:

  • Tipo: A
  • Nome: deixar em branco ou colocar @
  • Dados: o IP da VM no Azure
  • TTL: 1 hora

Clique em "Salvar", e seu apontamento foi criado com sucesso.

Com o apontamento criado, é só esperar a propagação - que pode levar até 48 horas (é uma média, vai depender da extensão do seu domínio).

14) Acessando o site

Ao acessar o seu site (pelo domínio ou pelo IP), será apresentada essa página aqui:

15) Criando seu login

O próximo passo é criar o seu login. Por isso acesse seudominio.com/ghost ou ip_da_vm/ghost

No primeiro acesso, o sistema vai pedir para você criar um usuário e algums informações iniciais para o seu blog:

  • Site title: você vai escolher o título do seu site
  • Full name: o seu nome
  • Email address: o seu endereço de e-mail para realizar o login no Ghost
  • Password: a sua senha

16) Agora, é só aproveitar

Após o login, você será redirecionado para o Dashboard do Ghost. Fique à vontade para experimentar as funcionalidades e configurar o seu blog da forma que desejar.

Aproveite para explorar a documentação do Ghost (que está linkada no final deste post).

💡
Lembre-se que você está no período de testes do Azure (caso tenha criado uma nova conta). Então, não se esqueça de encerrar a sua instância para são ser cobrado!

Caso queira usar uma VM 100% gratuita, recomendo dar uma olhada no Free Tier da Oracle Cloud.

Extra: troubleshooting para alguns problemas comuns

Em alguns casos, na instalação do Ghost podem ocorrer alguns problemas. O primeiro deles é alegar "falta de memória" - principalmente se você estiver usando uma máquina virtual com 1GB de RAM.

Para contornar esse entrave, no momento de instalar o Ghost use o comando:

## Caso apresente erro de memória
ghost install --no-check-mem

É comum também ocorrer bugs durante a configuração do certificado SSL ou até mesmo problemas de causas desconhecidas. Para contornar, siga o passo a passo:

## Desinstale o Ghost 
ghost uninstal

## Remova a pasta criada
sudo rm -R /ghost

E siga novamente os passos para criar uma nova pasta a partir do item 11 deste tutorial.

Por fim, bons estudos!


Referências