Hospede o Map Blueprint em um servidor na nuvem

Coloque sua instância em um servidor sempre ligado, um computador que roda em um data center 24 horas por dia, para que colegas remotos possam acessá-la de qualquer lugar, com o seu próprio endereço web e HTTPS gratuito (o cadeado que criptografa a conexão). Este guia usa o nível Always-Free da Oracle Cloud, que pode rodar o Map Blueprint sem custo mensal, mas os mesmos passos funcionam em qualquer servidor em nuvem Ubuntu.

Com o que você vai terminar: um pequeno servidor Linux rodando o Map Blueprint o tempo todo, acessível em algo como https://maps.yourdomain.com, protegido pela senha da sua equipe e se reiniciando automaticamente após reinicializações. Reserve cerca de 20–30 minutos. Onde quer que você veja YOUR_… abaixo, substitua pelo seu próprio valor.

Prefere só rodar no seu próprio notebook? Veja o guia de hospedagem local.

Algumas palavras que você vai encontrar: um servidor é um computador que roda o tempo todo para que outros possam se conectar; SSH é um jeito seguro de digitar comandos nesse computador remoto a partir do seu; um domínio é o seu endereço web (como yourdomain.com); DNS é a lista de endereços da internet que aponta um domínio para um servidor; HTTPS é a versão criptografada, com cadeado, de um endereço web; um proxy reverso e um túnel são dois jeitos de colocar o HTTPS na frente do app. Não se preocupe, cada passo abaixo diz exatamente o que fazer.

Passo 1, Crie um servidor gratuito

  1. Cadastre-se no Oracle Cloud Free Tier e entre no console (o site da Oracle para gerenciar seus servidores).
  2. Vá em Compute → Instances → Create instance. Uma "instance" é simplesmente a palavra da Oracle para servidor.
  3. Escolha um formato elegível ao Always-Free (o tamanho do servidor, "shape" é a palavra da Oracle para isso). Qualquer um serve: VM.Standard.E2.1.Micro ou um formato Arm Ampere (que tem mais memória). Mantenha a imagem Ubuntu padrão, Ubuntu é a versão de Linux que este guia usa.
  4. Em Add SSH keys, escolha Generate a key pair for me e baixe a chave privada, esse pequeno arquivo é o que prova que é você ao entrar, então guarde-o em um lugar seguro. (Já tem sua própria chave? Cole a metade pública dela.)
  5. Clique em Create. Quando o servidor estiver rodando, copie o endereço IP público dele (o número do servidor na internet), este guia o chama de YOUR_SERVER_IP.

Passo 2, Abra o firewall

Um firewall bloqueia conexões de rede inesperadas. A Oracle bloqueia o tráfego web de entrada por padrão, então você precisa liberá-lo nas duas portas web padrão, 80 (web simples) e 443 (web segura):

  1. Abra sua instância → clique na Virtual Cloud Network / sub-rede dela → Security Lists → a lista padrão. (Esse é o firewall da Oracle.)
  2. Adicione Ingress Rules ("ingress" significa só entrada) que permitam TCP de 0.0.0.0/0 (que significa "de qualquer lugar") para as portas 80 e 443.
O Ubuntu na Oracle também tem seu próprio firewall local. Depois de conectar no Passo 3, libere as mesmas duas portas colando estas três linhas (cada linha é um comando; a terceira salva a regra para que ela sobreviva às reinicializações):
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
Se você usar a opção Cloudflare Tunnel no Passo 5, pode pular totalmente a abertura das portas 80/443.

Passo 3, Conecte-se ao servidor

Agora você vai entrar no servidor e digitar comandos nele a partir do seu próprio computador, usando SSH. Abra um terminal (no Windows, use o PowerShell, ele já inclui o ssh) e rode isto, apontando o -i para o arquivo de chave privada que você baixou:

ssh -i /path/to/YOUR_PRIVATE_KEY ubuntu@YOUR_SERVER_IP

No Mac ou Linux, se você receber um erro de "permissions are too open" sobre a chave, rode chmod 600 /path/to/YOUR_PRIVATE_KEY primeiro, isso restringe o arquivo para que só você possa lê-lo, o que o SSH exige.

Assim que estiver conectado (o seu prompt de comando agora mostra o servidor), instale as atualizações de sistema mais recentes:

sudo apt update && sudo apt upgrade -y

sudo significa "rode isto como administrador"; apt é o instalador de apps embutido do Ubuntu.

Passo 4, Envie e inicie o Map Blueprint

Não há nada para instalar no servidor, sem Docker, sem Node, sem .env. É um único programa autônomo. A partir do seu próprio computador (uma nova janela de terminal, não a sessão SSH), rode isto na pasta onde você descompactou o download para copiar o programa Linux para o servidor. scp é "cópia segura", ele envia um arquivo pela mesma conexão SSH segura:

scp -i /path/to/YOUR_PRIVATE_KEY ./map-blueprint-linux ubuntu@YOUR_SERVER_IP:~/

De volta à sessão SSH, torne o programa executável e inicie-o. HOST=0.0.0.0 diz a ele para aceitar conexões de fora, para que o passo de HTTPS a seguir consiga acessá-lo:

chmod +x ~/map-blueprint-linux
HOST=0.0.0.0 ~/map-blueprint-linux

Ele agora está escutando na porta 8080. Você vai definir a senha da sua equipe pelo navegador assim que o HTTPS estiver no lugar (próximo passo). Por enquanto, pressione Ctrl-C para pará-lo, o Passo 6 o transforma em um serviço que roda 24 horas por dia.

config.json e seus mapas em data/ são criados bem ao lado do programa na sua pasta pessoal (~/). Todas as configurações ficam na página de Configurações dentro do app, não há arquivos para editar.

Passo 5, Adicione seu domínio e o HTTPS gratuito

O app fala HTTP simples e foi feito para ficar atrás de algo que adiciona HTTPS (o cadeado criptografado). Escolha uma destas duas abordagens, a Opção A é a mais fácil de proteger.

Opção A, Cloudflare Tunnel (sem portas abertas, mais fácil de proteger)

Um túnel conecta o seu servidor à Cloudflare, de modo que os visitantes acessam o app através da Cloudflare sem nenhuma porta aberta no seu servidor.

  1. Adicione seu domínio a uma conta Cloudflare gratuita.
  2. No servidor, instale o cloudflared (a ferramenta de túnel da Cloudflare) e faça login:
    curl -fsSL https://pkg.cloudflare.com/install.sh | sudo bash
    sudo apt install -y cloudflared
    cloudflared tunnel login
  3. Crie um túnel e aponte o endereço web escolhido para a porta local do app:
    cloudflared tunnel create mapblueprint
    cloudflared tunnel route dns mapblueprint maps.YOURDOMAIN.com
  4. Diga ao túnel para enviar o tráfego para http://localhost:8080 na configuração dele, depois instale-o como um serviço em segundo plano para que ele sempre rode:
    sudo cloudflared service install

A Cloudflare cria e renova o certificado HTTPS para você automaticamente, e nada no seu servidor fica exposto diretamente, você pode deixar as portas 80/443 fechadas.

Opção B, Proxy reverso Caddy (certificado automático)

Caddy é um pequeno servidor web que fica na frente do app, adiciona HTTPS e encaminha os visitantes para ele, é isso que um proxy reverso faz.

  1. Aponte um registro A de DNS para maps.YOURDOMAIN.com em YOUR_SERVER_IP. (Um "registro A" é a entrada DNS que mapeia um nome para o IP de um servidor, defina-o no seu registrador de domínio ou provedor de DNS.)
  2. Instale o Caddy no servidor.
  3. Coloque isto no arquivo /etc/caddy/Caddyfile (ele diz ao Caddy: sirva este endereço e encaminhe os visitantes para o app na porta 8080):
    maps.YOURDOMAIN.com {
        reverse_proxy localhost:8080
    }
  4. Recarregue o Caddy para que ele aplique a mudança:
    sudo systemctl reload caddy

O Caddy obtém e renova um certificado Let's Encrypt gratuito para você automaticamente. Esta opção precisa das portas 80 e 443 abertas (Passo 2).

O Map Blueprint marca automaticamente o cookie de login como Secure assim que as requisições chegam por HTTPS (ele lê o cabeçalho X-Forwarded-Proto que ambas as opções acima definem), então os logins ficam protegidos sem configuração extra.

Acesse https://maps.YOURDOMAIN.com, você deve ver a página de login. Entre e compartilhe esse link com sua equipe.


Opcional, proteja com o Cloudflare Zero Trust

Quer uma segunda trava, mais forte? O "Access" do Cloudflare Zero Trust coloca uma tela de login na frente do seu app, de modo que estranhos nunca chegam ao Map Blueprint, a Cloudflare verifica quem você é primeiro. Funciona melhor com a Opção A (o Cloudflare Tunnel) acima, e permite conceder acesso pessoa a pessoa por e-mail em vez de compartilhar uma única senha. É gratuito para equipes pequenas.

  1. No painel da Cloudflare, abra Zero Trust (configure o plano gratuito se for sua primeira vez).
  2. Vá em Access → Applications → Add an application → Self-hosted.
  3. Defina o domínio da aplicação como o mesmo endereço web que o túnel serve (maps.YOURDOMAIN.com).
  4. Adicione uma Access policy que permita apenas os endereços de e-mail dos seus colegas (ou um domínio de e-mail inteiro, como @yourstudio.com), depois salve.
  5. Agora, ao visitar o site, aparece um login da Cloudflare que envia um código PIN de uso único por e-mail (ou usa login com Google / GitHub). Só as pessoas aprovadas chegam ao app.

É o mesmo tipo de portão de identidade que os criadores do Map Blueprint usam no próprio mapa interno. Mesmo que alguém descubra a sua URL, não consegue carregar o app sem passar pela verificação de identidade, ideal para um mapa privado de estúdio.


Passo 6, Mantenha-o rodando após reinicializações

Por fim, transforme o app em um serviço para que ele inicie no boot e se reinicie sozinho caso pare. (Um "serviço" é um programa que o Linux cuida em segundo plano.) Salve o texto abaixo como o arquivo /etc/systemd/system/map-blueprint.service:

[Unit]
Description=Map Blueprint
After=network.target

[Service]
WorkingDirectory=/home/ubuntu
Environment=HOST=0.0.0.0
ExecStart=/home/ubuntu/map-blueprint-linux
Restart=always
User=ubuntu

[Install]
WantedBy=multi-user.target

Depois ligue-o, recarregue a lista de serviços, habilite e inicie, e confira que está rodando:

sudo systemctl daemon-reload
sudo systemctl enable --now map-blueprint.service
sudo systemctl status map-blueprint.service

WorkingDirectory=/home/ubuntu mantém config.json e seus mapas em data/ na pasta pessoal, ao lado do programa. Agora abra https://maps.YOURDOMAIN.com, conclua a tela de Configuração da primeira execução e defina a senha da sua equipe imediatamente. (Prefere defini-la com antecedência? Adicione Environment=APP_PASSWORD=YOUR_PASSWORD ao arquivo do serviço.)


Lista de verificação de segurança

Atualizando para uma nova versão

Quando você receber um programa atualizado, pare o serviço, substitua o arquivo do programa e inicie-o de novo, seu config.json e seus mapas em data/ ficam intactos. Envie o novo map-blueprint-linux do seu computador (com scp, como no Passo 4) e depois, no servidor, rode:

sudo systemctl stop map-blueprint.service
chmod +x ~/map-blueprint-linux
sudo systemctl start map-blueprint.service