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