Pular para o conteúdo principal

Deploy GCP Compute Engine

Este guia cobre o deploy do edgeProxy como um nó POP (Point of Presence) no Google Cloud Platform na Ásia (região Hong Kong).

Por que Hong Kong?

O GCP não tem data centers na China continental. Hong Kong (asia-east2) é a região mais próxima e oferece excelente latência para China, Sudeste Asiático e toda região APAC.

Pré-requisitos

# Instalar gcloud CLI
# https://cloud.google.com/sdk/docs/install

# Autenticar
gcloud auth login

# Definir projeto
gcloud config set project SEU_PROJECT_ID

# Habilitar Compute Engine API
gcloud services enable compute.googleapis.com

# Verificar
gcloud config list

Visão Geral da Infraestrutura

Infraestrutura GCP


Criação da Instância VM

Usando Taskfile

version: '3'

vars:
GCP_PROJECT: seu-projeto-id
GCP_REGION: asia-east2 # Hong Kong
GCP_ZONE: asia-east2-a
MACHINE_TYPE: e2-micro # Elegível para free tier
IMAGE_FAMILY: ubuntu-2204-lts
IMAGE_PROJECT: ubuntu-os-cloud
INSTANCE_NAME: edgeproxy-pop-hkg

tasks:
gcp:check:
desc: Verificar credenciais GCP
cmds:
- gcloud config list

gcp:firewall:create:
desc: Criar regras de firewall para edgeProxy
cmds:
- |
gcloud compute firewall-rules create edgeproxy-allow-ssh \
--allow tcp:22 \
--source-ranges 0.0.0.0/0 \
--target-tags edgeproxy \
--description "Permitir SSH ao edgeProxy"

gcloud compute firewall-rules create edgeproxy-allow-proxy \
--allow tcp:8080 \
--source-ranges 0.0.0.0/0 \
--target-tags edgeproxy \
--description "Permitir tráfego TCP edgeProxy"

gcloud compute firewall-rules create edgeproxy-allow-wireguard \
--allow udp:51820 \
--source-ranges 0.0.0.0/0 \
--target-tags edgeproxy \
--description "Permitir WireGuard VPN"

gcp:vm:create:
desc: Criar instância VM para edgeProxy POP
cmds:
- |
gcloud compute instances create {{.INSTANCE_NAME}} \
--zone={{.GCP_ZONE}} \
--machine-type={{.MACHINE_TYPE}} \
--image-family={{.IMAGE_FAMILY}} \
--image-project={{.IMAGE_PROJECT}} \
--boot-disk-size=20GB \
--boot-disk-type=pd-standard \
--tags=edgeproxy \
--metadata-from-file=startup-script=startup.sh

echo "Instância criada. Obtendo IP externo..."
gcloud compute instances describe {{.INSTANCE_NAME}} \
--zone={{.GCP_ZONE}} \
--format='get(networkInterfaces[0].accessConfigs[0].natIP)'

gcp:vm:ssh:
desc: SSH na VM
cmds:
- gcloud compute ssh {{.INSTANCE_NAME}} --zone={{.GCP_ZONE}}

gcp:vm:delete:
desc: Deletar instância VM
cmds:
- gcloud compute instances delete {{.INSTANCE_NAME}} --zone={{.GCP_ZONE}} --quiet

Criação Passo a Passo

# 1. Verificar credenciais GCP
task gcp:check

# 2. Criar regras de firewall
task gcp:firewall:create

# 3. Criar instância VM
task gcp:vm:create

# Output:
# Created [https://www.googleapis.com/compute/v1/projects/.../zones/asia-east2-a/instances/edgeproxy-pop-hkg]
# IP Externo: 34.92.xxx.xxx

Compilação e Deploy do edgeProxy

Cross-Compile para Linux (a partir de macOS/Linux)

Compile o binário localmente usando Docker para deploy mais rápido:

# Build para Linux amd64 usando Docker
docker run --rm --platform linux/amd64 \
-v "$(pwd)":/app -w /app \
rust:latest \
bash -c "apt-get update && apt-get install -y pkg-config libssl-dev && cargo build --release"

# O binário estará em target/release/edge-proxy (~16MB)
ls -la target/release/edge-proxy

Deploy para VM GCP

# Copiar binário e banco de dados de roteamento para a VM
gcloud compute scp target/release/edge-proxy edgeproxy-pop-hkg:/tmp/ --zone=asia-east2-a
gcloud compute scp routing.db edgeproxy-pop-hkg:/tmp/ --zone=asia-east2-a

# SSH e configuração na VM
gcloud compute ssh edgeproxy-pop-hkg --zone=asia-east2-a --command="
sudo mkdir -p /opt/edgeproxy
sudo mv /tmp/edge-proxy /opt/edgeproxy/
sudo mv /tmp/routing.db /opt/edgeproxy/
sudo chmod +x /opt/edgeproxy/edge-proxy
"

Criar Serviço systemd

gcloud compute ssh edgeproxy-pop-hkg --zone=asia-east2-a --command="
cat | sudo tee /etc/systemd/system/edgeproxy.service << 'EOF'
[Unit]
Description=edgeProxy TCP Proxy
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/edgeproxy
Environment=EDGEPROXY_REGION=ap
Environment=EDGEPROXY_LISTEN_ADDR=0.0.0.0:8080
Environment=EDGEPROXY_DB_PATH=/opt/edgeproxy/routing.db
ExecStart=/opt/edgeproxy/edge-proxy
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable edgeproxy
sudo systemctl start edgeproxy
sudo systemctl status edgeproxy
"

Verificar Deploy

# Verificar status do serviço
gcloud compute ssh edgeproxy-pop-hkg --zone=asia-east2-a --command="sudo systemctl status edgeproxy"

# Verificar logs
gcloud compute ssh edgeproxy-pop-hkg --zone=asia-east2-a --command="sudo journalctl -u edgeproxy -n 20"

# Testar conectividade (da máquina local)
nc -zv <IP_EXTERNO> 8080

Configuração WireGuard

Gerar Chaves para POP HKG

# Gerar chaves para GCP Hong Kong
wg genkey > wireguard/hkg-private.key
cat wireguard/hkg-private.key | wg pubkey > wireguard/hkg-public.key

# Exibir chaves
echo "Private: $(cat wireguard/hkg-private.key)"
echo "Public: $(cat wireguard/hkg-public.key)"

Config do Servidor GCP (Modo Cliente)

A instância GCP conecta ao servidor central EC2:

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <hkg-private-key>
Address = 10.50.5.1/24

[Peer]
# EC2 Irlanda (Servidor Central)
PublicKey = <ec2-public-key>
Endpoint = 54.171.48.207:51820
AllowedIPs = 10.50.0.0/16
PersistentKeepalive = 25

Atualizar Servidor Central EC2

Adicionar o peer HKG na config WireGuard do EC2:

# Adicionar ao /etc/wireguard/wg0.conf no EC2

# HKG - Hong Kong (Ásia)
[Peer]
PublicKey = <hkg-public-key>
AllowedIPs = 10.50.5.1/32

Depois recarregar:

# No EC2
sudo wg syncconf wg0 <(wg-quick strip wg0)

# Verificar
sudo wg show

Topologia de Rede

Alocação de IPs Atualizada

RegiãoCódigoIP WireGuardLocalizaçãoProvedor
CentralEC210.50.0.1IrlandaAWS
América do SulGRU10.50.1.1São PauloFly.io
América do NorteIAD10.50.2.1VirginiaFly.io
EuropaLHR10.50.3.1LondresFly.io
Ásia PacíficoNRT10.50.4.1TóquioFly.io
Ásia PacíficoSIN10.50.4.2SingapuraFly.io
Ásia (Novo)HKG10.50.5.1Hong KongGCP

Testando Geo-Routing da China

Usando VPN para Simular Localização na China

# Conectar a um servidor VPN na China (ex: Shenzhen, Shanghai, Beijing)

# Testar geo-routing
curl -s http://34.92.xxx.xxx:8080/api/info | jq .

# Resposta esperada:
{
"region": "hkg",
"region_name": "Hong Kong",
"backend": "hkg-node-1",
"client_country": "CN",
"latency_ms": 15
}

Teste de Latência

# Teste rápido de latência via VPN China
for i in {1..10}; do
curl -w "%{time_total}s\n" -o /dev/null -s http://34.92.xxx.xxx:8080/api/latency
done

Performance Esperada

Localização do ClienteBackend EsperadoLatência Esperada
China (Shenzhen)HKG10-30ms
China (Beijing)HKG30-50ms
Japão (Tóquio)NRT ou HKG40-60ms
SingapuraSIN ou HKG30-50ms

Regras de Firewall

Nome da RegraPortaProtocoloOrigemDescrição
edgeproxy-allow-ssh22TCPSeu IPAcesso SSH
edgeproxy-allow-proxy8080TCP0.0.0.0/0edgeProxy TCP
edgeproxy-allow-wireguard51820UDP0.0.0.0/0WireGuard

Restringindo SSH

# Obter seu IP
MY_IP=$(curl -s ifconfig.me)

# Atualizar regra de firewall
gcloud compute firewall-rules update edgeproxy-allow-ssh \
--source-ranges ${MY_IP}/32

Monitoramento

Verificar Status do WireGuard

# SSH na VM
gcloud compute ssh edgeproxy-pop-hkg --zone=asia-east2-a

# Mostrar status do WireGuard
sudo wg show

# Verificar handshakes
sudo wg show wg0 latest-handshakes

Verificar edgeProxy

# Status do serviço
sudo systemctl status edgeproxy

# Logs
sudo journalctl -u edgeproxy -f

# Testar conexão
curl http://localhost:8080/api/info

Estimativa de Custos

RecursoEspecificaçãoCusto Mensal (USD)
Instância VMe2-micro (2 vCPU, 1GB)~$6.11
Disco de Boot20GB Standard~$0.80
Egress de Rede10GB/mês~$1.20
Total~$8/mês
Free Tier

O GCP oferece 1 instância e2-micro gratuita por mês em us-west1, us-central1 e us-east1. Hong Kong não está no free tier, mas os custos são mínimos.


Troubleshooting

WireGuard Não Conecta

# Verificar interface
ip addr show wg0

# Verificar se a porta está aberta
sudo netstat -ulnp | grep 51820

# Testar conectividade com EC2
ping 10.50.0.1

VM Não Acessível

# Verificar regras de firewall
gcloud compute firewall-rules list --filter="name~edgeproxy"

# Verificar status da VM
gcloud compute instances describe edgeproxy-pop-hkg --zone=asia-east2-a

# Verificar saída do console serial
gcloud compute instances get-serial-port-output edgeproxy-pop-hkg --zone=asia-east2-a

Próximos Passos